Debian-maint-guide/1

来自Ubuntu中文
Oneleaf留言 | 贡献2008年10月12日 (日) 20:33的版本 (新页面: = Debian新维护人员手册 = == 第 1 章 - 从一条正确的路开始 == 这篇文章为普通的Debian用户和希望能够对Debian安装包有所了解的开发人员讲述了...)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航跳到搜索

Debian新维护人员手册

第 1 章 - 从一条正确的路开始

这篇文章为普通的Debian用户和希望能够对Debian安装包有所了解的开发人员讲述了制作Debian安装包的方法。它使用了非常通用的语言,并且通过一个可以工作的例子进行了演示。有一句古老的罗马谚语说的好:Longum iter est per preaecepta, breve et efficax per exempla!(通过理论要讲述很久的问题,可以很快地用例子说明白。)

Debian能够成为一个高质量的Linux发行版的重要原因之一就是它的安装包系统。尽管已经存在相当大量的用Debian格式打包的软件,有时你还是需要安装一些不是这一格式的软件。可能你会为如何制作自己的安装包而彷徨,而且也许你会认为这是一个非常困难的任务。是的,如果你是一个 Linux初学者,那么这的确很难,不过如果你真的是一个新手,现在你也就不会来读这个文档了。:-) 你的确需要对Unix的编程有所了解,但你并不需要是这方面的天才。

有一件事情是非常明确的:如果你希望创建并维护一个Debian的安装包,那将花费你数个小时的时间。作为一个维护人员,为了能够不犯错误,让我们的系统很好地工作,必须有良好的技术基础且非常勤奋。

这篇文档将会讲述每一个细节(开始时也许给人感觉毫不相关)的步骤,并且帮助你创建第一个安装包,从而让你学习到可以帮助你制作它的下一个版本或者其它安装包的经验。

这个文档的更新版本可以在http://www.debian.org/doc/maint-guide/和“maint-guide”安装包中找到。这个文档的中文翻译版本也可以在“maint-guide-xy”安装包中找到。

1.1 开发时需要的软件

在开始之前,你需要确认你是否已经正确安装了一些附加的在开发时需要的安装包。注意这里列出的软件都没有标记为“essential”或者是“required”——我们希望你能够安装好这些软件。

这个文档的当前版本已经为Debian 2.2(“potato”)和3.0(“Woody”)更新过了。

下面列出的这些软件在Debian的标准安装中已经有了,因此它们在你的机器上应当已经安装好了(也包括它们依赖的其它软件包)。然而,你还是应该 用“dpkg -s <package>”来检查一下。

  • dpkg-dev - 这个软件包包括了在解开、制作、上传Debian源文件包时需要用到的工具。(参考dpkg-source(1))
  • file - 这个小程序可以检测文件的类型。(参考 file(1))
  • gcc - GNU C语言编译器,如果你的程序是和其它很多程序一样用C语言编写,那么就需要这个软件包。(参考 gcc(1))这 个软件包还会“pull in”其它几个软件包,比如包括汇编(assemble)和链接(link)目标文件的程序的软件包binutils(参考binutils-doc软件包中的“info binutils”)和C预处理器(preprocessor)cpp(参考cpp(1))。
  • g++ - GNU C++语言编译器,如果你的程序是用C++语言写的那就需要它。(参考g++(1))
  • libc6-dev - gcc需要的用于链接和创建目标文件的C函数库和头文件。(参考glibc-doc软件包中的“info libc”)
  • make - 通常创建一个程序的过程需要经过好几步,为了能够不把同样的命令一遍又一遍的输入,你可以用这个程序通过创建“Makefile”来使这个过程自动化。(参考“info make”)
  • patch - 这是一个非常有用的工具,它可以把(用diff程序生成的)包含有一个差别清单的文件应用到原先的文件上去,从而生成一个补丁版本。(参考patch(1))
  • perl - Perl是在当今的Unix类系统上应用得非常广泛的解释型脚本语言之一,它通常被称作“Unix的瑞士军刀”。(参考 perl(1))

你也很可能会想要安装下面的软件包:

  • autoconf和automake - 很多新的程序在这一类工具的帮助下来配置脚本文件并对Makefiles进行预处理。(参考“info autoconf”和“info automake”)
  • dh-make和debhelper - 在例子中创建我们的软件包时需要使用dh-make来创建它的骨架,并且要使用到一些debhelper软件包中的工具。他们对于创建软件包不是最基本的,但对于新的维护者则是强烈推荐使用的。它们使得整个过程的开始变得很容易且使后续的过程容易控制。(参考dh_make(1)、 debhelper(1)和/usr/share/doc/debhelper/README)
  • devscripts - 这个软件包中包括了一些非常好的且很有用的脚本程序,它们对于维护者是很有用的,但它们对创建软件包也不是必需的。(参考/usr/share/doc/devscripts/README.gz)
  • fakeroot - 这个工具使你可以模拟变成root用户,这在创建软件包的过程的一些部分是必要的。(参考fakeroot(1))
  • gnupg - 一个可以让你对你制作的软件包进行数字签名的工具。如果你希望把它发布给其他人,这个步骤是非常重要的,并且当你所做的工作被加入到Debian发行版中时就必需进行这一步。(参考gpg(1))
  • g77 - GNU Fortran 77语言编译器,如果你的程序是用Fortran语言编写的就需要它了。(参考g77(1))
  • gpc - GNU Pascal语言编译器,如果你的程序是用Pascal语言写的,就需要它了。这里值得一提的是软件包fp-compiler,自由Pascal编译器 (the Free Pascal Compiler),它也是一个完成这一任务的好选择。(参考gpc(1)和ppc386(1))
  • xutils - 一些程序,通常是为X11编写的程序,也使用这些程序通过一套宏来生成Makefile文件。(参考imake(1)和xmkmf(1))
  • lintian - 这是一个Debian软件包检查器,它可以在你创建软件包后为你找出一些常见的错误,并解释这些错误。(参考lintian(1)和/share/doc/lintian/lintian.html/index.html)
  • pbuilder - 这个软件包中包含了用于创建和维护chroot环境的程序。在此chroot环境中构建Debian可以检查构建软件包的依赖关系的正确性并防止FTBFS错误发生。(参考pbuilder(8)和pdebuild(1))

下面列出的这些文档都非常重要,你在阅读本文档时也应当阅读它们:

  • debian-policy - 政策(Policy)文件中包含了对很多内容的解释,比如Debian档案的结构及内容、几个关于操作系统设计的问题、文件系统层次标准(讲述了每个文件和目录应该存在的地方)等等。对你来说,最重要的是它描述了在加入每个软件包到发行版中时,它们必须满足的要求。(参考/usr/share/doc /debian-policy/policy.html/index.html)
  • developers-reference - 包含了全部的参考资料,其内容不只是打包软件的技术细节,比如文档的结果、如何改名、孤儿、选择软件包、如何做NMUs、如何管理bugs、最佳打包实践以及在什么时间将软件包上传到什么位置等等。(参考/usr/share/doc/developers-reference /index.en.html)

上面的简短描述只是对每一个软件包进行了一下简单的介绍。在继续后面的工作前,请完整的阅读每一个程序的文档,至少要了解基本的用法。现在看来也许是很繁重的任务,不过以后你会非常高兴的去阅读它们的。

注意: debmake软件包中包含了一些和dh-make作用相似的程序,但它的详细用法并没有包含在这份文档中,因为它已经不推荐使用了。要得到更多的信息,请参考the Debmake manual。

1.2 其它信息

你可以制作的软件包有两种,源文件版本和可执行版本。源文件版本的软件包包含了可以被编译成程序的源代码。可执行版本的软件包只包含编译好的文件。不要把程序源文件和程序的源文件版本软件包混在一起!如果你需要更详细的关于这些词汇的资料,请参考阅读其它的手册。

在Debian中,“维护者(maintainer)”一词指的是制作软件包的人,“上游作者(upstream author)”指的是编写程序的人,而“上游维护 者(upstream maintainer)”是指在Debian项目之外维护着程序的人。通常情况下作者和上游维护者是同一个人——有时维护者甚至也是同一个人。如果你编写了一个程序并且希望它被包含到Debian中,那么你可以提交你的程序从而成为一个维 护者。

在你创建了你的软件包(或则正在做这件事情),若你希望它能够被加入到下一个发行版中(如果你的程序非常有用,为什么不呢?),那么你必须成为一个正式的Debian维护者。这一过程在开发人员参考(Developer's Reference)中解释了。请阅读它。