[ 上一页 ] [ 目录 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 下一页 ]
让我们尝试创建一个自己的软件包(“收养”一个已存在的软件包则更好)。
可能你已经选好了要制作的软件包。第一件要做的事是使用
aptitude
检查它是否已经存在于发行版仓库中了。
你还可以通过 软件包搜索页面
和 Debian
Package Tracking System
(Debian
软件包跟踪系统,PTS)查询软件包信息。
如果软件包已经存在,直接安装就好了!:-) 如果它是被
抛弃(orphaned)
的——也就是说它的维护者被设置为 Debian QA
Group
,那么你可以尝试接手维护它(在 Debian Bug report logs: Bugs in package wnpp
in unstable
检查它的维护者信息)。你也可以“收养”维护者发出“Request
for Adoption”(RFA)请求的软件包。
有几种查看 RFA 软件包的方法:
仅作为一笔旁注,Debian 已经拥有了绝大多数类型软件的软件包,仓库中软件包的数量也远远超过了有上传权限的贡献者的数量。因此,为已经在仓库中的软件包贡献力量是非常受其他开发者欢迎的(且更容易获得 sponsorship)[3]。你可以通过非常多的方式来实现这一目的。
接手被抛弃而仍然被很多人使用的软件包。
加入 打包小组
。
为某些常用的软件包分类 Bug。
在需要时准备 QA
或 NMU 上传
。
如果你有能力“收养”那个软件包,下载(使用 apt-get source packagename 或其他类似的工具)并分析它的代码。这篇文档没有包含如何接手软件包的详细信息,但幸运的是因为接手软件包时起始的工作已经有人完成,接手的工作应比从头开始轻松得多。尽管如此,请继续阅读,下面给出的建议会对你很有帮助。
如果你要制作的软件包是全新的,并且希望它出现在 Debian 中,请按照以下的步骤进行:
首先,你必须知道这个软件能够工作,并且需要试用一段时间。
你必须在 正在被处理的软件包列表
上查看以确定没有其他人已经开始了工作。如果没有,则提交一份
ITP (Intent To Package) Bug 报告到 wnpp
pseudo
软件包(可以使用
reportbug
)。如果已经有人在处理,则在需要的情况下联系他或他们。如果不需要你的帮助,就寻找其他你感兴趣且没有人维护的软件包。
软件 必须有一个许可证。
对于 main 类的软件,其许可证 必须满足
Debian Free Software Guidelines (DFSG) 的全部条件 (参看
http://www.debian.org/social_contract#guidelines
)
以及 不能依赖于 main 之外的软件包
以满足 Debian Policy
中对于编译和运行的要求。正如我们所期望的,main
是容纳绝大多数自由软件的场所。
对于 contrib 类的软件,其许可证必须满足 DFSG 的全部条件,但可以依赖于 main 之外的软件包以完成编译或运行。
对于 non-free 类的软件,其许可证可以不满足 DFSG 中的一些条件,但至少需要是 可以分发的。
如果你不清楚你的软件应该分入哪一类,则把许可证文本发送到
debian-legal@lists.debian.org
请他人提出意见。
程序 不应该 setuid 到 root,甚至可以更好——不 setuid 或 setgid 到任何用户或组。
这个程序不应该是守护进程,也不应该安装文件到
*/sbin
目录或者以 root 打开任何端口。
程序应当最终以二进制可执行程序的形式呈现,库则较难处理。
程序应当有很好的文档,最好源代码也容易理解(比如不混乱)。
你应该与程序的作者取得联系问一下他是否认为程序应当被打包,以及他是否对 Debian 友好。能够询问作者关于程序的任何问题是非常重要的,不要尝试打包一个无人维护的软件。
当然,这些问题都只是为了安全,并试图让你不至于在比如
setuid 守护进程等问题上犯错误而激怒了用户...
当你在打包方面有了更多经验时,就可以处理这些软件包了。但即便是富有经验的开发人员在遇到疑惑时也会发邮件到
debian-mentors@lists.debian.org
邮件列表咨询,那里的人会很乐意提供帮助。
关于这些问题的更多帮助,查看 Debian Developer's
Reference
。
第一件要做的事就是找到并下载原始的源代码。我假定你已经从作者的主页上找到了它的源代码。Unix
下的自由软件源代码通常是以 tar
+gzip
格式(扩展名为 .tar.gz
)或
tar
+bzip2
格式(扩展名为
.tar.bz2
)的形式提供的。通常归档文件中包含了一个名为
programname-version
的子目录,里面包含了全部的源代码。
如果源代码的最新版需要通过诸如 Git、Subversion 或 CVS 这类
VCS (Version Control
System,版本控制系统)仓库获得,那么你需要使用“git
clone”“cvs co”或“svn
co”等命令获得代码后,再使用 tar
程序的
--exclude-vcs 选项将其重新打包为
tar
+gzip
格式。
如果你的程序源代码是以其他形式提供的(比如文件名以
.Z
或 .zip
结尾[4]),则使用合适的工具将其解包,再重新打包。
作为示例,我将使用一个名为 gentoo
的程序,它是一个 X GTK+ 文件管理器。[5]
在你的用户主目录下创建一个子目录,命名为
debian
或 deb
或任意你觉得合适的其他名字(本例中使用
~/gentoo
)。把下载好的归档文件放在其中并解包(使用
tar xzf gentoo-0.9.12.tar.gz
命令)。要确定解包过程中没有发生错误,即便是有一点
不恰当
也不行,因为在别人的系统上解包这些文件时,如果他们的工具并不忽略这些反常的现象就会出现问题。在你的终端屏幕上,应该看到如下的情形。
$ mkdir ~/gentoo ; cd ~/gentoo $ wget http://www.example.org/gentoo-0.9.12.tar.gz $ tar xvzf gentoo-0.9.12.tar.gz $ ls -F gentoo-0.9.12/ gentoo-0.9.12.tar.gz
现在又有了一个新的子目录,名为
gentoo-0.9.12
。进入该目录并 彻底
读完其中的文档。通常情况下这些文档被命名为
README*
、INSTALL*
、*.lsm
或
*.html
。你必须找到关于如何正确编译和安装程序的指导(最可能的是他们会默认你希望把程序安装到
/usr/local/bin
目录,但事实上你不能那样做,详细的内容稍后将在 把文件安装到目的位置, 第 3.3
节 中说明)。
带有 Makefile
文件的简单程序可以很容易地使用
make 来编译。其中的一些还支持 make
check,可以完成一系列自检。编译好后可以使用
make install 来将程序安装到目标目录。
现在尝试编译和运行你的程序,确保它工作正常,且在安装和运行时不会导致其他问题。
你还可以运行 make clean (或更好的 make distclean)来清理编译目录。有时还会带有 make uninstall 用以卸载已经安装了的文件。
非常多的自由软件是使用 C
和
C++
语言编写的。其中的有很多使用 Autotools 或 CMake
来使其可以在不同平台上移植。这些工具被用于生成
Makefile
和其他必须的源文件,然后这些程序可以使用正常的
make; make install 来编译和安装。
Autotools
是
GNU 编译系统工具,包括 Autoconf
、Automake
、Libtool
和 gettext
。你可以通过
configure.ac
、Makefile.am
和
Makefile.in
等文件来识别这种类型的源代码。[6]
使用 Autotools 的第一步是上游作者在代码中运行 autoreconf -i -f 并把生成的文件同源代码一起分发。
configure.ac-----+-> autoreconf -+-> configure Makefile.am -----+ | +-> Makefile.in src/Makefile.am -+ | +-> src/Makefile.in | +-> config.h.in automake aclocal aclocal.m4 autoheader
编辑 configure.ac
和 Makefile.am
等文件需要一些关于 autoconf
和 automake
的知识。参看 info autoconf 和 info automake。
使用 Autotools
的流程第二部是用户获得分发的源代码后在源代码中运行
./configure && make 并将其编译成为
binary
(二进制程序)。
Makefile.in -----+ +-> Makefile -----+-> make -> binary src/Makefile.in -+-> ./configure -+-> src/Makefile -+ config.h.in -----+ +-> config.h -----+ | config.status -+ config.guess --+
你可以通过命令选项来改变 Makefile
文件中的很多设置,比如默认的文件安装位置(使用
./configure --prefix=/usr
)。
尽管不是必须的,还可以使用 autoreconf -i -f 更新
configure
和其他相关文件,这样做可能提高源代码的兼容性。
CMake
是另一个可选的编译系统,可以通过 CMakeLists.txt
文件来识别它。
开始打包时源代码目录应当是绝对干净(原始)的,或者直接使用刚刚解包得到的源代码。
为了让软件包可以正确地编译和构建,如果程序原有的名字不是完全小写的则必须将其改成小写,并且应当把源代码以
packagename-version
的形式命名。
如果程序的名称超过一个单词,把它改成一个单词或缩写成合适的形式。例如,程序“John's
little editor for X”可以命名为 johnledx
或
jle4x
,或者随便你认为合适的其他名字。它需要符合一定的限制,比如长度不要超过
20 和字符。
还要检查程序的版本号,它将被包含到软件包版本内。如果手中的软件版本号不是
X.Y.Z
的形式,而是使用日期等形式。那么可以继续使用日期来作为版本号,只要新版本程序的版本号能变得比老板本大即可。最好能与上游使用相同的版本号,如果上游使用了诸如
09Oct23 的格式,那么最好将其转换为
YYYYMMDD 的格式,此例中为
20091023,以便保证 dpkg
程序在更新软件时能正确处理新旧版本。[7]
还有一些程序根本就没有版本号,这是你应该联系上游维护者,看他们是否使用了其他的版本跟踪方法。
首先我们设置两个 环境变量,$DEBEMAIL 和 $DEBFULLNAME,使多数 Debian 维护工具能够正确识别你用于维护软件包的姓名和电子邮件地址。[8]
$ cat >>~/.bashrc <<EOF DEBEMAIL=your.email.address@example.org DEBFULLNAME="Firstname Lastname" export DEBEMAIL DEBFULLNAME EOF
让我们按照以下方法使用 dh_make
来初始化 Debian
软件包。
$ . ~/.bashrc $ cd ~/gentoo/gentoo-0.9.12 $ dh_make -f ../gentoo-0.9.12.tar.gz
当然,使用你的原始源代码归档文件名替代示例中的文件名。[9]参看 dh_make(1)
以获得详细信息。
此时会出现一些提示信息。它会询问你要创建那种类型的软件包。Gentoo
是单个的二进制软件包——编译后仅生成一个二进制文件,也因此只需要一个
.deb
文件——所以我们使用 s
键选择第一个选项,检查屏幕上显示的信息,无误后按
ENTER 确认。[10]
执行 dh_make
后,上一级目录中自动创建了一份上游
tarball 的副本,名为
gentoo_0.9.12.orig.tar.gz
,这个文件和稍后介绍的
debian.tar.gz
在一起满足了 Debian
非本地源代码包的要求。
$ cd ~/gentoo ; ls -F gentoo-0.9.12/ gentoo-0.9.12.tar.gz gentoo_0.9.12.orig.tar.gz
请注意 gentoo_0.9.12.orig.tar.gz
这个文件名的两个关键特点:
软件包名称和版本是以下划线 _ 分隔的。
.tar.gz
扩展名前有 .orig
。
你应该可以注意到 debian
目录下有了许多模板文件。这些文件将在 debian
目录中的必须内容, 第 4
章 和 debian
目录下的其他文件, 第 5 章
一一解释。你还应该明白,打包不是一个自动的过程,你还需要按照
修改源代码, 第 3 章
中的方法来修改软件包。此后,你还要按照 构建软件包, 第 6 章
中叙述的合适的方法来编译 Debian 软件包、按照 检查软件包中的错误, 第 7 章
中的方法检查其中错误,最终依照 上传软件包, 第 8 章
的介绍将其上传。我将对所有的这些步骤进行解释。
再次强调,作为一个新维护人员,不推荐创建复杂的软件包,例如:
多个二进制包的软件包;
库软件包;
内核模块软件包;
内核补丁软件包;
源代码不是 tar.gz
也不是 tar.bz2
格式,或
源代码 tarball 中包含不可分发的内容。
它们并非特别难于掌握,但确实需要更多的知识,所以我们不在这里对所有情况进行描述。
如果你在修改过程中不小心删除或弄坏了某些模板文件,你可以使用
dh_make
加上 --addmissing 参数来将其还原。
更新一个已存在的软件包可能比较复杂,因为它可能使用旧的技术。请继续在这里学习最新的打包技术以便掌握必要的基本功。我们会在稍后的 更新软件包, 第 9 章 中回头讲解如何处理这种情况。
[ 上一页 ] [ 目录 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 下一页 ]
Debian 新维护人员手册
版本 1.2.25, 2010-12-22 12:44:34 UTCjoy-mg@debian.org
happyaron.xu@gmail.com
lilingv@gmail.com
ycheng@slat.org