Debian-maint-guide/6

来自Ubuntu中文
跳到导航跳到搜索

Debian新维护人员手册

第 6 章 - 构建软件包

现在我们已经为构建软件包做好了准备。

6.1 完整的rebuild

进入程序的主目录然后运行如下命令:

      dpkg-buildpackage -rfakeroot

这将为你做好每件事情。它会:

  • 清理源代码目录树(debian/rules clean),需要使用fakeroot
  • 构建源代码软件包(dpkg-source -b)
  • 构建程序(debian/rules build)
  • 构建二进制软件包(debian/rules binary),需要使用fakeroot
  • 用文件.dsc给源代码签名,需要使用gnupg
  • 创建上传文件.changes并给它签名,需要使用 dpkg-genchanges和gnupg

唯一需要你输入的是你的GPG密钥的密码,两次。

当完成所有这些,你会在上一层目录(~/gentoo/)中看到下面的文件:

  • gentoo_0.9.12.orig.tar.gz

     这是原来的源程序的压缩包,为了遵守Debian的标准,修改了它的文件名。注意它是我们通过在开始时运行带有“-f”参数的dh_make命令创建的。

  • gentoo_0.9.12-1.dsc

     这时对源代码的一个总结。这个程序是利用你的“control”文件创建的,并且在用dpkg-source(1)命令解包源代码时将会用到。这个文件已经有了GPG签名,这样人们就可以确认他是你发布的。

  • gentoo_0.9.12-1.diff.gz

     这个文件中包含了每一个你对原始源代码所做的每一个修改,它的格式是“unified diff”。他是由dpkg-source(1)程序创建的,而且这个程序还要使用它。警告:如果你没有把原始的源代码压缩包的名字改成packagename_version.orig.tar.gz,dpkg-source将不能正确地创建这个.diff.gz文件。

     如果其它人希望重头重新构造你的软件包,它们可以用上面的三个文件很容易地做到。解包的过程很简单:只要把这三个文件复制到一个别的什么地方,然后运行dpkg-source -x gentoo_0.9.12-1.dsc.

  • gentoo_0.9.12-1_i386.deb

     这是你的完整的二进制软件包。你可以象对待其它软件包一样用dpkg命令安装和删除它。

  • gentoo_0.9.12-1_i386.changes

     这个文件描述了描述了所有对当前版本的修订版所作的改动,Debian FTP文档维护程序在安装二进制版本软件包和源代码版本的软件包时将会使用到它。它的一部分是通过“changelog”文件和.dsc文件创建的。这个文件已经有了GPG签名,这样人们可以确信它确实是你的。

     因为你会继续花精力在这个软件包上,它的行为可能会改变,还有可能会增加一些新的功能。下载了你的软件包的人们可以通过阅读这个文件从而快速的了解到什么东西发生了变化。Debian的文档维护程序也会把这个文件的内容发送到debian-devel-changes邮件列表上。

.dsc和.changes文件中的长数字字符串是上面提到的文件的MD5校验码。下载了你的文件的人可以用md5sum(1)来检查这些数字是否相同,这样它们就可以知道文件是不是损坏了,或者是否被窜改了。

6.2 快速rebuild

对于一个很大的软件包,你可能不希望在你调整了debian/rules文件的一些细节后都从头来构建它。为了测试,你可以只制作一个.deb文件而不重新构造上游源代码,具体的作法如下所示:

      fakeroot debian/rules binary

一旦你完成了调整,记得要根据上面的内容从头以正确的顺序重新构建软件包。如果你想上传一个以这种方式制作的.deb文件时可能会遇到错误。

6.3 debuild命令

使用debuild命令你可以让后面的构造软件包的过程自动完成。参考debuild(1)。

对debuild命令的地址可以通过修改/etc/devscripts.conf或者~/.devscripts完成。我建议至少修改以下内容:

      DEBSIGN_KEYID="Your_GPG_keyID"
      DEBUILD_DPKG_BUILDPACKAGE_OPTS="-i -ICVS -I.svn"

使用这个配置,你就可以总是使用你的GPG密钥来构造软件包并避免不希望的部件。(这对于发起人也是很好的。)譬如,使用一个用户帐号清空源码并重新构造软件包会非常简单:

      debuild clean
      debuild

6.4 dpatch系统

简单地使用dh_make和dpkg-buildpackage命令会创建一个大的diff.gz文件,这个文件中会包含debian/目录中的文件和源码补丁。当日后要检查和理解每一处对源码的修改时,这样的包会难以处理。这样总不是很好。 [1]

目前已经有多种管理多个补丁的方法用于Debian中。dpatch系统是其中最一简单的一个,此外还有dbs、cdbs等。

一个用dpatch系统打包的软件包,其软件包的修改记录在debian/patches/目录下的一个文档清晰的补丁集中。debian/目录之外的源码树并没有被修改。如果你需要其它人来帮你上传软件包,通过上述方法将你所做的修改清晰地分离出来并加上文档是非常重要的,它可以方便别人检查。dpatch程序的用法在dpatch(1)中解释清楚了。

此后如果当某人(包括你自己)为你提供了一个源码补丁,在dpatch下修改源码包是非常容易的:

  • 修改补丁,使其成为对源码树的-p1补丁。
  • 用dpatch patch-template命令加入文件头。
  • 将其放入debian/patches目录
  • 将此dpatch文件放入debian/patches/00list文件中

此外dpatch还可以通过使用CPP宏让补丁对体系结构无关。

6.5 在上传时包含orig.tar.gz

当你第一次上传了软件包时,你需要包含原始的orig.tar.gz源码包。如果包的Debian修正版本号不是-0或-1,你在使用dpkg-buildpackage命令需要加上“-sa”选项。换句话说,“-sd”选项将会除去orig.tar.gz文件。