openSUSE:Package maintenance

跳转至: 导航, 搜索
本文档描述了打包者如何提交维护升级到已发布的 openSUSE 产品中,是维护过程的一部分。
注意: openSUSE 构建服务中的软件包都是公开可见的。因此构建服务不适合用来准备保密的安全更新。在这种情况下,打包者需要等到保密起过后在提交修复。
保密期就是安全漏洞还没有通告所有相关方的时间,一般是 72 小时。比如 SuSE 发布了一个普通人不知道的安全更新,同是 Linux 的 Fedora 没有同时发布该安全更新,那黑客就可以通过该安全更新逆向工程,之后攻击 Fedora。

查找你需要修复的软件包

构建服务包含了很多不同版本的软件包。有些是官方发布的,另一些可能是在用户的私人仓库里进行开发的。最简单的查找方法是使用 osc search 命令。--maintained 参数将会把输出限制在那些设定了特殊的表示它是 openSUSE 产品的维护包的软件包中。我们使用 nfs-utils 为例。

$ osc search --maintained nfs-utils
匹配 'nfs-utils' 的软件包:

# 项目   # 软件包
openSUSE:11.3  nfs-utils
openSUSE:11.4  nfs-utils
openSUSE:12.1  nfs-utils

注意: 这需要正确配置构建服务。如果您怀疑 osc search --maintained 返回的项目列表不正确时,请咨询维护团队。

创建分支

构建服务提供了一个既能修改软件包又不会不必要的污染原软件包的简单方法。它允许用户在私人仓库中捡出一份私有版本。任何提交给该私有版本的修改都会作为原软件包的修改缓存。稍后提交回原项目时就会很明显的列出您修改的内容。

从某单个项目创建一个单个软件包的过程是:

$ osc branch -M -c openSUSE:12.1 nfs-utils
[...]

在本例中 ufs-utils 之前已经发布了一个维护升级。更新的内容存放在一个不同的项目,openSUSE:12.1:Update 中。您无需知道太多细节。osc 会自动做出正确的选择,使用升级过的源码。因此只遵照先前的指示,并捡出您的该软件包的分支。

如果您已经有了该软件包的一个分支,您应该删除并重建。既然已经有了一个分支了,您可能会疑惑为什么还要重建。因此之所以您会有这样一个分支,可能是由于之前的提交没有被批准,因此没有自动触发删除。删除这样的一个分支可能会毁掉您之前的工作成果。

您的分支内容是您创建该分支的时间节点上原项目中的内容。如果其他的修复在之后推送进原项目,您的项目中就不会有。您可以使用 osc rdelete project package 命令来删除软件包,从而删除该项目。本例中应该是 osc rdelete home:jeff_mahoney:branches:openSUSE:12.1:Update:Test nfs-utils

一次性创建所有更新源的分支

有时您需要为所有的更新源提供维护升级,比如某个安全升级。上面描述的方法您需要创建分支并捡出同一个软件包多次,一个是 11.4 一个是 12.1。


osc mbranch 命令会方便该过程。它可以查询构建服务以找到那些将该软件包标记为维护的项目列表。

注意: 这需要正确配置构建服务。如果您怀疑 osc mbranch 获取的项目列表不正确请咨询维护团队。

osc mbranch 从所有的维护源中搜集该软件包的全部拷贝,然后在一个项目中创建这些软件包:

$ osc mbranch nfs-utils
Project home:jeff_mahoney:branches:OBS_Maintained:nfs-utils created.

$ osc co home:jeff_mahoney:branches:OBS_Maintained:nfs-utils
A    home:jeff_mahoney:branches:OBS_Maintained:nfs-utils
A    home:jeff_mahoney:branches:OBS_Maintained:nfs-utils/nfs-utils.openSUSE_11.3
[...]
A    home:jeff_mahoney:branches:OBS_Maintained:nfs-utils/nfs-utils.openSUSE_11.4
[...]
A    home:jeff_mahoney:branches:OBS_Maintained:nfs-utils/nfs-utils.openSUSE_12.1

注意: 如果您的软件包中有多个 spec 文件,请使用 osc ls home:username:branches:OBS_Maintained:packagename 命令复查以确保所有的 spec 文件都有对应的软件包创建出来。

手动获取维护软件包的列表

如果仍然存疑,请联系维护团队获取正确的列表。

做出修改

注意您已经有了该软件包的一个私人拷贝,您可以对其做出任何想做的更改。之后使用 osc add/remove 命令更新源文件列表。

一旦您完成了您的更改,使用 osc vc 添加一条修改日志到 .changes 文件。

  • 简要描述问题,一行一个问题。
  • 以 (bnc#12345) 的格式附加一个到问题编号的引用
  • 如果可能的话,请为安全修复附加 CVE 编号(保密安全更新使用 CVE,不会泄密)

最后使用 osc commit 命令提交您的修改到您的分支中去。

提交修改

您的分支现在是一个独立的软件包并能在您的私人仓库中独立编译了。通常最好确保它能在编译系统的最严格限制中编译成功,提交前做出适当的测试。提交过程很简单的,所以别急。

在您捡出的项目目录中:

$ osc mr 
created request id 22864

Osc 会提示您输入提交请求的附言。通常使用 .changes 文件中说的就可以。