Home Wiki > openSUSE:Packaging Patches guidelines
Sign up | Login

openSUSE:Packaging Patches guidelines

tagline: 来自openSUSE

打包者要面对很多软件包,和这些软件包中的补丁。因此这些补丁需要在 .spec 文件中以通用的格式被引用以便于对它们使用一些自动化工具,方便生成报告、补丁计数和其他一些有趣的信息。因此它们也需要一个统一格式的命名。

补丁标记

为了方便使用自动化工具,和接手的打包者,我们约定使用如下的补丁类别:

  • Fixes: 这些是普通的修复,分成两类:
    • 针对 openSUSE 的修复,上游开发者对此不感兴趣。
    • 针对 SLES 企业版的修复,上游开发者对此不感兴趣,且不能被 openSUSE 使用。
    • 针对上游源码包的修复,这些补丁接着会被提交给上游。
  • Features: 添加给软件包的新特性,同样分成两类:
    • 针对 openSUSE 的新特性 (比如 AppArmor 整合),上游开发者对此不感兴趣。
    • 针对 SLES 企业版的新特性,上游不感兴趣,openSUSE 也得不到好处。
    • 应该提交给上游的新特性。当我们开发这样的特性时,应该和上游开发者互动。这样,我们就能开发出一些无需更改上游就能接受的特性。一旦一个特性没和上游开发者互动就做出来,那得重写好多东西才能让上游开发者满意。因此,最好先了解一下上游开发者期待什么特性。


为了使我们的补丁满足上述约定,我们发展出了一套 标准 来在 .spec 文件中标记它们,格式如下:

# PATCH-FIX-OPENSUSE fix-for-opensuse-specific-things.patch [bnc#123456]
Patch1: fix-for-opensuse-specific-things.patch
# PATCH-FIX-SLE fix-for-sle-specific-things.patch [bnc#123456]
Patch2: fix-for-sle-specific-things.patch
# PATCH-FIX-UPSTREAM fix-for-upstream-sources.patch [bnc#123456]
Patch3: fix-for-upstream-sources.patch
# PATCH-FEATURE-OPENSUSE feature-for-opensuse-specific-things.patch [bnc#123456]
Patch4: feature-for-opensuse-specific-things.patch
# PATCH-FEATURE-SLE feature-for-sle-specific-things.patch [bnc#123456]
Patch5: feature-for-sle-specific-things.patch
# PATCH-FEATURE-UPSTREAM feature-for-upstream.patch [bnc#123456]
Patch6: feature-for-upstream.patch

特别注意:我们经常临时的注释掉一些补丁因为它们不能应用到最新的源码上,也就是说这些补丁需要重写。不要注释掉补丁的声明,而是注释掉它的应用。当一个补丁需要重写时,最好在它前面加上 old- 前缀。

# PATCH-NEEDS-REBASE(补丁需重写) old-补丁名.patch [bnc#123456] -- 过时了。曾经是:PATCH-FEATURE-OPENSUSE
Patch7: old-补丁名.patch
[...]
# %patch7

最后我们要加入电邮以识别补丁作者,方便后续维护,在 "--" 之后随手写注释。

例如:

# PATCH-(FIX|FEATURE)-(OPENSUSE|SLE|UPSTREAM) 补丁名.patch bnc#[0-9]* 你的电邮@example.com -- 这个补丁做了点特流掰的事。

若是在 Novell 或其他的 bugzilla 有相关的 Bug,请添加它们,这能方便我们得到更准确的信息。如果有两个以上,那么最好都列出来。

你可以在文档底部找到目前的缩写列表。如果有必要我们未来也会定义更多的缩写。

有些补丁修复了别的地方没有记录的漏洞和错误。在这种情况下就取决于打包者的判断了,下面是一些参考:

  • 如果马上就要新版发布了,那么去提交臭虫报告。这通常是必须的,即使不必须,也是应该做的事。
  • 如果新版要等很长时间才发布,这个臭虫已经被上游除掉了,添加注释说已在 SVN (或其他) 里修复,本补丁下次升级将作废。

补丁命名

所有的新补丁都应该以 '.patch' 后缀结尾。

补丁的名字是否要以它补缀的软件包名开头仍存争论,这其实是个风格问题。当有疑问的时候,该软件包的其他补丁是怎么命名的你就怎么命名。

不要使用在 Patch: 标签里使用 %{version} 宏,手动指定版本号。使用该宏:

  • 会造成版本升级时你需要手动重命名那些补丁,因为补丁是硬编码名称的独立文件。
  • 不方便找出那些针对旧版本的不再适用的补丁。
  • 不方便知道补丁内容的最后修改日期,因为你不断的重命名了它。
  • 补丁出错时不方便排错。

一个特例是:修复编译器发现无用代码抛出的警告的补丁,通常命名为 'abuild.patch'。

推崇的补丁的路径忽略层级一般是 -p1,因为它使得使用诸如 quilt 这样的工具引入显得更直观。


目前可用的缩写

为了避免混淆和双倍负担,引用其他 Bugzilla 是允许的。下面是一些常用 Bugzilla 的缩写,可以放在 Bugzilla ID 的#号之前。注意#号前后都没有空格。

缩写 Bugzilla-URL 例子
Boost https://svn.boost.org/trac/boost/report (boost#123456)
CVE 条目 (请添加 ID,即使已经该条目下有多个 Bug) http://cve.mitre.org (CVE-2009-0067)
CPAN 公共臭虫跟踪 http://rt.cpan.org/Public/ (RT#123456)
Debian http://bugs.debian.org/ (deb#123456)
Fate (特性跟踪工具) https://features.opensuse.org/ (fate#123456)
freedesktop.org http://bugs.freedesktop.org/ (fdo#123456)
GCC http://gcc.gnu.org/bugzilla/ (GCC#123456)
GNOME http://bugzilla.gnome.org/ (bgo#123456)
ICCULUS http://bugzilla.icculus.org/ (bio#123456)
Jenkins CI https://issues.jenkins-ci.org (jenk#123456)
KDE http://bugs.kde.org/ (kde#123456)
Kernel or K http://bugzilla.kernel.org/ (bko#123456)
Launchpad (Ubuntu) https://bugs.launchpad.net/ (lp#123456)
Linux Foundation http://developerbugs.linux-foundation.org/ (lf#1234)
MeeGo http://bugs.meego.com (MeeGo#123456)
Mono http://bugzilla.ximian.com/ (Mono#123456)
Mozilla http://bugzilla.mozilla.org/ (bmo#123456)
Novell https://bugzilla.novell.com/ (bnc#123456)
OpenLDAP http://www.openldap.org/its/ (ITS#123456)
OpenOffice.org (Issuezilla) http://qa.openoffice.org/issues/ (i#123456)
OpenOffice.org Novell (过时的) https://bugzilla.novell.com/ (n#123456)
openSUSE-Education http://devzilla.novell.com/education/ (os-edu#123456)
RedHat https://bugzilla.redhat.com/ (rh#123456)
Samba https://bugzilla.samba.org/ (bso#123456)
Sourceforge http://sf.net/support/tracker.php?aid=1234567 (sf#1234567); number is in the "aid=" part in an URL
SourceWare http://sourceware.org/bugzilla/ (swo#1234567)
Ximian http://bugzilla.ximian.com/ (Ximian#4321)
XFCE https://bugzilla.xfce.org/ (bxo#123456)

其他的 Bugzilla ID,请在补丁头部使用 URL 全址。比如:

缩写的书签小工具

使用 bnc# 前缀搜索 bugzilla.novell.com 的书签小工具可以在 这里找到