当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 5 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : [原创]How to build package(to be continued)
帖子发表于 : 2006-07-27 14:12 

注册: 2006-01-18 15:01
帖子: 1074
送出感谢: 0 次
接收感谢: 1
首先,panchoat这里不讨论checkinstall和alien的问题,panchoat这里仅仅讨论了如何从
源码开始一步一步修改源文件,添加debian/子目录,进而编译成自己定制的软件包的过程

第一件事
检查是否有人维护此软件包,既可以是debian的维护的,也可以是ubuntu、linspire等派生出来的发行版的;既可以是官方的,也可以是如debian.ustc.edu.cn一样的非官方的维护者。这样做首先是减少重复劳动,二方面是尽量减少各个发行版之间的差异(debian老大就曾经抱怨过ubuntu与debian的差异太大),在二进制方面不同的发行版,至少在源代码上尽量相同。
如果在其他发行版中找得到软件,例如说在debian中找到了eva,在ubuntu中却没有,要做
的只是移植它到ubuntu中即可,那么怎么办呢?
在/etc/apt/sources.list文件中添加该发行版的source源(deb-src)然后
sudo apt-get update
apt-get source eva
panchoat提醒:在apt-get中只有这个source是不需要管理员权限的,也不推荐使用管理员
权限。
这个命令会在当前目录下下载几个文件,直接以软件名命名的压缩文件是原始的源代码,后面跟了个diff的是patch的压缩文件,就是这些patch把源代码修改成了我们需要的debian化的包。还有一个以packagename-version命名的子目录。
我们首先进入这个子目录尝试:
sudo apt-get build-dep packagename
然后将要编译的程序进行配置
./configure
make
是否可以不出错运行?
如果可以,那么试试
dpkg-buildpackage -rfakeroot
这样应该在父目录下会生成所需的一个或多个软件包。
如果在dpkg-buildpackage -rfakeroot这一步出了错,那说明依赖关系错了,但由于实际上并没有缺乏库,怎样修改呢?
在程序源代码目录下有一个debian/子目录,这个目录中的文件是我们的主要修改位置。
其中
changlog文件定义了更新的信息,为了更好的跟踪bug并且方便你的修正,这里要写上你做
了什么修改,你的联系方式(email),修改日期(包括时区,可以用命令822-date或date
-R命令得到)。有一个术语叫作NMU,意思是non-maintainer uploaded的意思,自然,我
们都是NMU啦(NMU可以由维护者承认而成为正式的)。还有,发行号最好是由unstable改为dapper,这样好看些:)

control文件定义了软件描述和依赖关系,查看你所依赖的包需要的包在ubuntu中变成了什
么名字,替换掉对应的其他发行版的包的名字即可。如何知道某个包依赖哪些包呢?
dpkg-query -S /usr/share/the/file/you/need
将上面的文件该为你所需要的库文件的即可。
需要补充一点的是,control中的介绍每行的第一个字符都是空格,如果需要空行的话,在
空格后接一个英文句号即可。
怎样修正编译需求包依赖呢?
以下命令cs可以将软件所需的包都列出来,把它们列上即可。
(panchoat把自己常用的几个缩写命令打了包,放在下面,方便大家,cv是gbk转utf8,vc
是utf8转gbk,idv是mp3进行id3tag升级及转码成utf8的,wm是wma转mp3的命令。)
之后到源代码目录下,进行dpkg-buildpackage -rfakeroot即可。
怎么样简单吧?
下面讲没有可以引入的外部发行版时,怎样从只有源代码的状态制作软件包。
一般我们是使用dh_make的方法,然后少量修改changlog,control,rules,copyright等等文件和postrm等安装修饰脚本文件。但panchoat这里要推荐的是使用新的CDBS的方法来制作安装包。这种方法所需了解的知识较少,将绝大多数的操作都隐藏了起来,而且很方便。

怎样操作呢?
panchoat以一个例子来做个说明:stardict是属于universes中的包,现在已经更新到了2.4.8但确还是2.4.5-1.1的unstable,没有更新。由于源代码改动较多,例如说将stardict-tools单独独立了出来……所以原有的source中的patch已经大部分不能应用到新的版本里了,所以panchoat索性完全重新用CDBS制作了stardict的包。

关于changlog和control的写法已经在前面有介绍了,我们这里就不再赘述。
我们讲一讲rules的写法,这也是整个编译过程中最复杂的部分,同时也是CDBS的优势所在

首先看看panchoat写的rules的全文
#!/usr/bin/make -f
# debian/rules for stardict.
include /usr/share/cdbs/1/rules/debhelper.mk
include /usr/share/cdbs/1/class/autotools.mk
include /usr/share/cdbs/1/class/gnome.mk

binary-install/stardict::
dh_install --sourcedir=debian/tmp
binary-install/stardict-common::
dh_install --sourcedir=debian/tmp

第一行是固定用法,其实是说明这是一个什么脚本文件的magicword。
其余的用#打头的行都是注释。从第三行开始,正式开始脚本。
在cdbs目录下的1代表的是第一个版本的意思,因为作者计划到以后的不同的版本间会有不
兼容。后面的debconfig.mk autotools.mk gnome.mk等等是这个软件包的所属的类和使用的规则,其实简单的软件这样已经足够了,但由于stardict是多软件包的软件,所以加了一些修饰。单软件包的软件,会自动安装在debian/packagename目录下,debian/packagename就相当于系统的根目录。而多包软件则是安装在debian/tmp目录下,要自己进行移动。

进行移动可以象panchoat这样偷懒,只用mv就好了,但也可以并且最好是用debhelper的脚
本来实现。例如dh_installman来安装man文档,


(大家有补充,改正的回帖吧,我再整理一下(其实现在也没写完),做个适合点的教程) :oops:


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2006-09-06 11:11 

注册: 2005-11-12 14:28
帖子: 20
送出感谢: 0 次
接收感谢: 0 次
很好的文章,极具指导意义!

不过感觉还是很抽象,大概我是初学者的缘故 :(

建议楼主添加一些截图,再附上举例的修改文件,这样方便大家学习 :)


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2006-09-07 1:01 

注册: 2006-01-18 15:01
帖子: 1074
送出感谢: 0 次
接收感谢: 1
考试的事情有点忙,还有申请和选校,结果就成了个半调子了,不好意思~
其实后来发现台湾的ubuntu那有很好的教程,也就觉得自己的有点多余,不过写的时候是自己都做了一遍,也很有收获。如果大家需要的话就补充上去吧,不过最近真的很忙,今天是这一个月来第一次有闲了,可能不能保证何时能完工,有时间的话就写吧~ :D


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2006-09-12 10:55 

注册: 2006-08-28 23:21
帖子: 30
送出感谢: 0 次
接收感谢: 0 次
>>>>后来发现台湾的ubuntu那有很好的教程
地址能否给一个呢?


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2006-09-12 11:20 

注册: 2006-08-28 23:21
帖子: 30
送出感谢: 0 次
接收感谢: 0 次
http://wiki.ubuntu.org.tw/index.php/DebPackaging

看到了


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 5 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:Bing [Bot] 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译