2008年1月4日星期五

deb文件制作与修改初级

deb文件是Debian/Ubuntu系统的软件包分发格式,就象RedHat/Fedora的rpm。

首先我们来看一下deb包的结构。

随便找一个deb文件,比如说foo.deb:

dpkg -e ../foo.deb
dpkg -x ../foo.deb .
第1条命令在当前路径生成了有一个DEBIAN目录,它是deb包中的控制部分,目录中一般有这么几个文件
  1. control文件中记录了该deb包的元信息,如软件包名,版本,谁打的包,与哪些软件包冲突等等。
  2. md5sums文件中是该软件包要安装到系统中的文件的md5值。
  3. preinst文件是安装之前预处理的脚本。如安装新版本的Apache服务器时可能要先停止正在运行的服务。这个和以下的几个文件都是shell脚本。
  4. prerm文件用于安装前删除一些文件。
  5. postinst文件用于安装后的处理脚本。继续上面的例子,你可以在这里启动新版本的Apache服务。
  6. postrm文件用来在安装后删除一些文件。
第2条命令在当前目录解压了要安装到系统的数据文件,如果以当前目录为根目录,它们的路径就是被安装到系统的路径。

另外再介绍两个解压deb包的命令
ar p ../foo.deb control.tar.gz | tar zxvf -
ar p ../foo.deb data.tar.bz2 | tar jxvf -
这里第1条命令与上面略有不同,它直接将DEBIAN目录下的文件解压到当前目录,而不生成DEBIAN目录,如果你最后还要还原成deb包的话,这会有点不方便。第2条命令的效果则和先前的一样。

你可以按照你的要求,随意增加、删除、修改所有这些文件。如果你要为一个解压即可以运行的软件制作一个deb包,你要做的一般就是安排好目录,添加几个快捷方式。如果是用make;make install自己编译的,我的办法是先用checkinstall生成一个deb包,然后再解开来做一些修改,如果需要的话。

最后再将它们打包成deb文件
cd ..
dpkg -b 待打包目录 软件包名
如上所述,待打包目录形如foo/DEBIAN,foo/usr/bin/... ,这也是为什么上面讲解压时,命令中的deb包都放在上层目录的原因。

没有评论: