[ 上一页 ] [ 目录 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 下一页 ]
一旦你发布了一个软件包,在之后的某个时间里就需要对它进行更新。
假设针对你的软件包报告的 Bug 号为 #54321,它描述了一个你可以解决的问题。要创建软件包的一个新 Debian 版本,你需要:
如果要将它记录于新的补丁中,这样做:
quilt new bugname.patch 设置补丁名称;
quilt add buggy-file 声明文件将被更改;
修正软件包代码中的上游 Bug;
quilt refresh 将修改记录到
bugname.patch
;
quilt header -e 添加对它的描述;
如果是更新一个已存在的补丁,这样做:
quilt pop foo.patch 重现已存在的
foo.patch
;
修正旧的 foo.patch
中的问题;
quilt refresh 更新 foo.patch
;
quilt header -e 更新对它的描述;
while quilt push; do quilt refresh; done 应用所有补丁以确保它们 边界清晰;
在 Debian changelog
文件的顶部添加一个条目。例如可以使用 dch -i
或用 dch -v version-revision
来指定版本,然后用你喜欢的编辑器插入信息。[53]
在 changlog 条目中简要描述 Bug 和相应的解决办法,并在后面添加 Closes: #54321。这样 Bug 报告会在你的软件包被 Debian 仓库接受的同时被仓库管理软件 自动关闭。
重复上述操作来修复更多的 Bug,并在需要的时候使用
dch 更新 Debian changelog
文件。
重复在 完整的(重)构建, 第 6.1 节、检查软件包中的错误, 第 7 章 和 上传软件包, 第 8 章 中进行的操作。惟一的区别是这次不需要再包含原始代码文件,因为它们没有变化且已经存在于 Debian 仓库中。
在为 Debian 仓库准备新上游版本的软件包前,你必须首先检查它。
检查工作应从阅读 changelog
、NEWS
以及所有随新版本一同发布的文档。
然后应按照以下步骤检查新旧版本之间的差别,看是否存在可疑的内容:
$ diff -urN foo-oldversion foo-newversion
对于 Autotools 自动生成的文件,例如
missing
、aclocal.m4
、config.guess
、config.h.in
、config.sub
、configure
、depcomp
、install-sh
、ltmain.sh
和 Makefile.in
是可以忽略的。你可以在运行
diff
进行代码检查前删除它们。
如果软件包 foo
是使用新的 3.0
(native) 或 3.0 (quilt)
格式打包的,制作新的上游版本时需要先把旧的
debian
目录移至新的源代码内。这可以通过在新解压的源代码目录里运行
tar xvzf
/path/to/foo_oldversion.debian.tar.gz
完成。[54]当然,你需要做几个很显然的杂事。
创建一份上游源代码的副本,命名为
foo_newversion.tar.gz
使用 dch -v newversion-1 更新 Debian
changelog
文件。
添加一个条目,内容为 New upstream release。
简明地介绍 在新上游版本中 上游修复和关闭的 Bug。
简明地介绍维护者 对此新上游版本 做出的修改,修复和关闭的 Bug。
运行 while quilt push; do quilt refresh; done 以应用全部补丁并使它们 边界清晰。
如果补丁没有干净地被应用,检查原因(线索在 .rej
文件里)。
如果你的补丁已经被上游接受:
使用 quilt delete 删除它。
如果你的补丁与上游代码中的变更有冲突:
使用 quilt push -f
应用旧补丁,未应用的部分会被保存为
baz.rej
。
手工编辑 baz
来在新的代码中实现
baz.rej
中应有的效果。
使用 quilt refresh 更新补丁。
再次运行 while quilt push; do quilt refresh; done。
这个过程可以通过使用 uupdate(1)
来更自动化地完成:
$ apt-get source foo ... dpkg-source: info: extracting foo in foo-oldversion dpkg-source: info: unpacking foo_oldversion.orig.tar.gz dpkg-source: info: applying foo_oldversion-1.debian.tar.gz $ ls -F foo-oldversion/ foo_oldversion-1.debian.tar.gz foo_oldversion-1.dsc foo_oldversion.orig.tar.gz $ wget http://example.org/foo/foo-newversion.tar.gz $ cd foo-oldversion $ uupdate -v newversion ../foo-newversion.tar.gz $ cd ../foo-newversion $ while quilt push; do quilt refresh; done $ dch ... document changes made
如果你按照 watch
文件, 第 5.20 节 的叙述设置了 debian/watch
文件,你可以跳过这个 wget
命令,转而在
foo-oldversion
目录中运行
uscan(1)
,且无需再执行 uupdate
命令。它会
自动 查找新的源代码、下载并运行 uupdate
命令。[55]
重复 完整的(重)构建, 第 6.1 节、检查软件包中的错误, 第 7 章 和 上传软件包, 第 8 章 中的操作,即可发布此更新的软件包。
更新打包风格不是更新软件包的必须步骤,但是这样可以使你的软件包得到对现代的
debhelper
系统和 3.0
源代码包格式完整的兼容性。[56]
如果你需要重新添加已删除的模板文件,可以在同一个 Debian
软件包源代码树中运行 dh_make
,并添加
--addmissing 选项。然后对模板进行相应的编辑。
如果软件包的 debian/rules
文件没有更新为使用
debhelper
V7 的 dh
语法,则更新它使用
dh
。在需要的时候更新 debian/control
文件。
如果你希望将使用 cdbs
的 Makefile
语法创建的 rules
文件更新为 dh
语法,参看 /usr/share/doc/cdbs/cdbs-doc.html
并理解各
DEB_* 配置变量。[57]
如果你有一个不带有 foo.diff.gz
文件的
1.0 格式的源代码包,你可以通过创建
debian/source/format
文件并在其中添加 3.0
(native) 来将其更新为新的 3.0 (native)
源代码包格式。debian
目录中的其他文件可以直接复制过来。
如果你有一个带有 foo.diff.gz
文件的
1.0 格式的源代码包,你可以通过创建
debian/source/format
文件并在其中添加 3.0
(quilt) 来将其更新为新的 3.0 (quilt)
源代码包格式。debian
目录中的其他文件可以直接复制过来。如果需要,把
filterdiff -z -x '*/debian/*' foo.diff.gz > big.diff
生成的 big.diff
文件导入到 quilt
系统。[58]
如果它使用了其他的补丁系统,例如
dpatch
、dbs
或 cdbs
,使用
-p0、-p1 或 -p2 级别,使用
http://bugs.debian.org/581186
的 deb3
命令将其转换到 quilt
系统。
如果它使用 dh
命令的 --with quilt
选项,或 dh_quilt_patch
和 dh_quilt_unpatch
命令,删除它们并使其使用新的 3.0 (native)
源代码包格式。
当然你还需要按照 新上游版本, 第 9.3 节 完成其他的步骤。
以下是对更新软件包的几点提示。
保留旧的 changelog
条目(看似显然,但是总有可能把
dch -i 输入为 dch)。
已存在的 Debian 修改需要被重新校验,去除上游已经接受的东西,除非有必要的原因,还要记录尚未被上游接受的部分。
如果对编译系统作出了修改(希望你已经在检查上游变更时了解了这些),那么要在必要时更新
debian/rules
和 debian/control
编译依赖关系。
检查 Debian Bug Tracking System
(BTS)
是否有人为某些仍然未修复的 Bug 提供了补丁。
检查 .changes
文件以确保你正要上传到正确的发行版、正确的列于
Closes 域的 Bug、Maintainer 和
Changed-By 域相匹配,且该文件已经使用 GPG
签署等。
[ 上一页 ] [ 目录 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 下一页 ]
Debian 新维护人员手册
版本 1.2.25, 2010-12-21 14:06:56 UTCjoy-mg@debian.org
happyaron.xu@gmail.com
lilingv@gmail.com
ycheng@slat.org