这篇早该和大家见面的文章今天终于在笔者的努力下和大家见面了。正如大家看到的题目一样,本文讲的是有关于 deb 包的制作。当然,笔者并不是一个 debian 开发者,也不是一个 ubuntu 开发者。本文的目的是给新手一个简单的,关于如何将一般安装步骤为 configure, make, make install 的软件打成一个 deb 包,以方便管理的一个指南。当然有的朋友会说,用 checkinstall 就可以了。不过关于 checkinstall,我听过好多人说这种方法过于 dirty,到底如何笔者没有试过,也不好评价。您可以选择使用 checkinstall,但我可以保证,看完本文,您将会发现其实用常规的方法制作一个 deb 包也是很简单的。
所需软件
要成功编译软件并打包,您需要 build-essential, dh-make, debhelper, devscripts 以及其他成功编译所需的开发包。
获取源码包
这个不用多说了。首先笔者需要从 gmlive 主页上下载 gmlive 的源码包。这里笔者下载的是 0.21.1 版本。
debian 化
简单地理解,debian 化就是将源代码解包后,在其下建立一个名为 debian 的目录,该目录里面包含一些特定的描述文件,以指导程序正确生成 deb 包。
在本文的例子里,解压后笔者得到一个名为 gmlive-0.21.1 的目录,那么它下面需要有一个 debian 目录。这里我们不会手工创建它,而是使用 dh_make 命令。这里笔者进入 gmlive-0.21.1 目录,然后在该目录下执行:
1 |
$ dh_make -e mail@dot.com -f ../gmlive-0.21.1.tar.gz |
mail@dot.com 为笔者的 email,您得用自己的 email 替换。命令执行后您会被问及一系列问题,比如问您是不是打一个单一的包,还是其他什么类型的。这里笔者选择单一的包。然后检查屏幕上的信息,一切 ok 输入回车。
编辑 debian 目录里的内容
如果您已经看过 debian 目录里的内容,那么您可能会被吓到,哇!这么多文件。其实不用怕,因为好多文件都不是必需的。在这个例子中,笔者只留下这 6 个文件:changelog, control, compat, copyright, rules, docs,甚至,连 docs 也可以不要,不过这里笔者还是将它保留了。下面需要做的是逐一打开查看并编辑这些文件。
changelog
这是更新日志,当然是指 deb 包的更新日志,而非软件本身的更新日志。笔者将它改成了这样:
1 |
gmlive (0.21.1-1) unstable; urgency=low |
因为不需要提交到官方软件仓库,所以不需要 close 什么 bug,笔者直接将后面的 close 字样去掉了。
control
这个文件记录软件的相关信息,例如其主页的软件包描述(就是 apt-cache show 时看到的东西)。需要改的地方是 Homepage 和 Description。比如笔者将它改成:
1 |
Source: gmlive |
注意哦,最后两行描述前面是要空一格的。
copyright
这个顾名思义,是版权声明文件,声明软件以及 deb 包的版权。我们需要用 gmlive 的真实作者名字和以及邮件地址来替换里面的相应字段,如果不只一个作者,那就每个作者写一行。笔者将其改成这样:
1 |
This package was debianized by: |
rules
这个文件是关键,能不能打包成功就看这个文件了。可以看到这个文件上面的注释说我们应该勇敢地按需修改这个文件。这里笔者作了很多修改,让这个文件尽量简短:
1 |
#!/usr/bin/make -f |
大家应该已经发现了,这里其实就是编译软件所需执行的一系列命令。首先,dh_testdir 检查当前的工作目录是不是源代码目录,然后再执行 ./configure –prefix=/usr。再往下看,它执行了 make,然后下面的一系列命令将之打成一个 deb 包。想了解下面的一系列 dh 开头的命令是什么意思,可以看看他们的 man 手册。
docs
顾名思义,是文档,如果希望源代码目录下的某个文档出现在 /usr/share/doc/gmlive/ 下,那就把它写进去。比如笔者希望源代码目录下的 AUTHORS, NEWS, README 文件能出现在 /usr/share/doc/gmlive 下,那 docs 文件就是这样:
1 |
AUTHORS |
制作 deb 包
好了,一切完毕,下面就可以生成 deb 包了。
1 |
$ dpkg-buildpackage |
如果一切顺利,该命令执行完毕后您就会得到一个 deb 包。对了,这个命令要在源代码目录下执行的,而不是 debian 目录下。如果之中出现什么依赖问题,那就该装什么装什么,多半是因为少了什么开发包的缘故。
有新版本了怎么办?
本来是没有这一节的,因为在一开始笔者也说了,这篇文章本该很早就和大家见面的,但是笔者一直拖到 gmlive 0.21.2 发布了才写出来,所以就加了这一节。
下载新的源代码包,并将其与旧的源代码放于同一目录下。然后在旧的源代码目录下执行:
1 |
$ uupdate ../gmlive-0.21.2.tar.bz2 |
一切 ok 后,cd 到新的源代码目录,再按上一节的方法生成新的 deb 包。
好了,本文到此为止,希望您已经打出自己第一个 deb 包了。您可以把您的成果和别人分享,如果您希望您打的包能进入官方软件仓库,那么您还有许多工作需要做,你会发现这样的包还远没有达到合格的标准。关于打包更详尽的细节,请您参考 debian 新维护员指南,那里可以给你全面的指导。你可以通过
1 |
# apt-get install maint-guide-zh |
命令来安装这个指南。如您所料,您将会在 /usr/share/doc/ 目录下找到它。祝您打包愉快!