openSUSE:Package maintenance
查找你需要修复的软件包
构建服务包含了很多不同版本的软件包。有些是官方发布的,另一些可能是在用户的私人仓库里进行开发的。最简单的查找方法是使用 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 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 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
手动获取维护软件包的列表
如果仍然存疑,请联系维护团队获取正确的列表。
做出修改
注意您已经有了该软件包的一个私人拷贝,您可以对其做出任何想做的更改。之后使用 osc add/remove 命令更新源文件列表。
一旦您完成了您的更改,使用 osc vc 添加一条修改日志到 .changes 文件。
- 简要描述问题,一行一个问题。
- 以 (bnc#12345) 的格式附加一个到问题编号的引用
- 如果可能的话,请为安全修复附加 CVE 编号(保密安全更新使用 CVE,不会泄密)
最后使用 osc commit 命令提交您的修改到您的分支中去。
提交修改
您的分支现在是一个独立的软件包并能在您的私人仓库中独立编译了。通常最好确保它能在编译系统的最严格限制中编译成功,提交前做出适当的测试。提交过程很简单的,所以别急。
在您捡出的项目目录中:
$ osc mr created request id 22864
Osc 会提示您输入提交请求的附言。通常使用 .changes 文件中说的就可以。