编辑: 紫甘兰 | 2019-07-06 |
Debian 和ubuntu 软件安装用的都是 deb 包. 但是很多人制作 deb 包时,都是从 rpm 转为 deb,或者使用 dpkg -b 进行转换.虽然这两种方法可 以制作出来 deb,但是显然很粗糙,今天介绍一下正规方法:使用 debhelper 制作 deb.今天用一个例子 来和大家一起做个包试试看. 我们的例子是 gwrite 这个软件,软件主页: http://code.google.com/p/gwrite/.您可以点击此处 下载源码.这个源码包在 Debian 项目里的术语叫做 upstream tarball,也就是上游发行的代码包. 源码下载完成后,我们在主目录里新建一个文件夹,例如叫 packaging,然后执行如下命令: mkdir ~/packaging cd ~/packaging 把刚才下载的 .tar.gz 文件放到这个文件夹里.然后用命令解压这个文件: tar zxf gwrite-0.5.0.tar.gz (不要使用图形化工具解压,因为会造成权限混乱),进入解压出来的目录: cd gwrite-0.5.0 然后大家要安装几个软件包,依次介绍一下.第一个要安装的是 debhelper: sudo aptitude install debhelper debhelper 软件包里是各种脚本,可以帮助我们接下来的打包工作.下一个要安装的是 dh-make: sudo aptitude install dh-make dh-make 包提供了我们需要用到的 dh_make 命令.这个命令用于根据上游 tarball 生成我们 deb 包 模板.现在我们已经 cd 到解压好的程序目录,现在的文件夹路径是 ~/packaging/gwrite-0.5.0 .然后我们执 行这个命令: dh_make -e "First Last " -f ../gwrite-0.5.0.tar.gz 其中 First Last 是姓名,比如我是 Aron Xu.里是你的 email 地址. -f 后面是上游 tarball 的 路径.如果上面那个命令报错,请使用这个: dh_make -e [email protected] -f ../gwrite-0.5.0.tar.gz (../ 的意思是当前目录的上层目录)接下来程序会提示: Type of package: single binary, indep binary, multiple binary, library, kernel module, kernel patch or cdbs? 我们输入 s,表示这个源代码包只生成一个 deb.输入 s,按回车.然后会显示一些信息,回车确认 这时候再看当前的目录,会多出一个 debian/ 文件夹.上级目录里,会出现 gwrite_0.5.0.orig.tar.gz 文件. 接下来下面进到 debian/ 目录,第一个文件是 changelog.Changelog 顾名思义,是说软件版本历 史的. gwrite (0.5.0-1) unstable;
urgency=low Initial release (Closes: #nnnn) -- Aron Xu Wed,
17 Nov
2010 20:21:24 +0800 文件里面的姓名和邮箱,是用来识别这个包制作者的,当然就是在动手的各位啦.(changelog 里没 有写中文的,都是英文.不知道 deb 包是否允许用中文.)changelog 是必须得是文件,没有这个文件接 下来的步骤会出错. 然后是 compat 文件,里面就一个数字,现在是 7.这个数字是 debhelper 的版本.不管它就可以. 下一个文件是 control 文件: Source: gwrite 表示源码包的名称;
Section: unknown 这行表示软件分类;
Priority: extra 代表优先级,一般可以写 optional 或者 extra.其中 optional 是普通包最常用的, extra 的优先级相比则还要再低一些;
Maintainer: Aron Xu 这行是软件包维护者,格式为: First Last ;
Build-Depends: debhelper (>= 7),这行是编译依赖关系,也就是说要安装哪些软件包才可以 编译这个程序.这个例子中,debhelper 是必须的.我们手里这个例子需要这些程序才能编译:Build- Depends: debhelper (>= 7), python, python-support, python-setuptools, python-distutils- extra.这些也是编译基本的 python 程序缩必须的包.( 依赖需要自己分析) Standards-Version: 3.8.3,这行是使用的 Debian Policy 版本,目前最新的是 3.9.1.所以我 们写成:Standards-Version: 3.9.1;