openSUSE:如何在Factory中贡献
加入软件包维护者
欢迎您,我们很高兴您决定成为openSUSE项目的软件包维护者。本指南将引导您完成您的第一个软件包提交。它可以是全新的软件包,也可以是对现有软件包的更新。
设置账户
要开始为Factory贡献,您需要在 openSUSE上创建一个账户。openSUSE具有单点登录系统。
阅读指南
熟悉我们的 软件包管理 指南。您应该彻底熟悉这些要点,因为它们管理着所有软件包提交。如果您有任何问题,请发送电子邮件至 Packaging List。
理解职责
包含在我们发行版中的软件组件需要积极维护,并且错误——尤其是安全问题——需要在及时的方式下修复。作为软件包维护者,您的主要责任是确保这一点。
- 了解 Factory维护者职责。
- 熟悉 软件包维护者指南。
- 不要害怕在需要时通过 packaging邮件列表寻求社区的帮助。
如果不熟悉git,请执行以下操作
如果您尚未配置Git的用户名和电子邮件地址,请使用您的openSUSE软件包信息执行以下操作。
git config --global user.name "John Doe"
git config --global user.email johndoe@example.com
入门
检查哪些软件包需要维护者
关于需要帮助的不同软件包的持续信息正在 factory邮件列表上列出。频率各不相同,但浏览历史记录,您一定会找到需要维护者的软件包。
如何提交软件包的修复(无论是上游还是项目内部)
为Factory贡献最简单、最方便的方法就是提交修复。如果您知道为什么软件包无法构建或 无法正常工作,为什么不提交修复呢?如果软件包的版本已过时,为什么不更新它呢?为了让每个人都能做到这一点,openSUSE开发者利用了开放构建服务的协作功能,用于Factory贡献。这意味着每个人都可以从openSUSE: Factory分支软件包,进行修改并提交回去;这就像跳棋一样简单。首先,您需要检查您想要修复的软件包的开发项目是什么。可以通过
如果这不起作用,您也可以在 https://build.opensuse.org 或 https://software.opensuse.net.cn 上搜索它,并记下openSUSE: Factory软件包是从哪个项目开发的。
然后您需要使用osc检出软件包。
如您所见,服务器从正确的开发项目复制了软件包,并将结果放置在您的主项目目录中。将其签出到您的本地机器上以进行任何更改。
或者,您可以使用 `osc bco` 将分支+签出操作链接到一个命令中。
在您更改了想要修复的内容后,您需要确保软件包构建并正常工作。要确保它构建正确,请运行
并确保它构建成功。如果它成功构建,那么检查是否有您想要处理的rpmlint错误或警告。有时可以忽略它们(例如,如果它们在您更改软件包之前就已经存在),有时应该处理它们。
请记住在changelog中添加条目,以便其他人可以轻松了解您的更改。
运行 `osc diff` 来提醒您自己所做的更改也可能很有帮助。
然后,您可以签入您的更改到您的分支。
然后将其提交给软件包的开发者进行审核。
软件包的开发者将收到您的提交通知并对其进行审核。我们称之为BURPing。
- Branch,
- Update,
- Request,
- the Package
如何将新软件包添加到Factory
如果您以前从未创建过软件包,在开始将软件包提交到OBS之前,您可能需要访问 此教程。
该openSUSE:Factory项目要求每个软件包都位于所谓的开发项目(简称devel project)中,该项目充当向openSUSE:Factory的馈送项目。对于您的软件包,home命名空间不允许充当Factory软件包的develprj。
就像openSUSE:Factory一样,开发项目由各自的审核者/维护者监督,并且来自非维护者的新的软件包创建需要获得批准。即使提交请求可以创建一个软件包,`osc submitrequest` 命令更像是一个复制请求,因此始终需要源位置。要从头开始,必须使用 `osc mkpac` 命令。默认情况下,用户仅对其主命名空间具有写入权限,即home:yourname。如果您尚未制作主项目的本地副本,可以通过
osc checkout home:yourname
现在您已经有了本地副本,您可以运行此命令
osc mkpac home:yourname/packagename
在其中您可以根据需要进行修改,以创建一个空白软件包。请注意,为home:yourname设置的默认存储库指向发行版(Leap/Factory/等),而不是develprj——如果希望使用尚未存在于Factory中的软件包或功能,则可能需要编辑它(`osc meta prj -e home:yourname`)。
完成对软件包的编辑后,即填充.spec文件、源tarball或其他辅助文件,并验证构建已成功完成,则可以像以前一样提交软件包
osc submitrequest \ -m 'I want to maintain python-cerealizer in Factory and would like to use devel:languages:python as the devel/feeder project.' \ home:yourname/python-cerealizer devel:languages:python
可以在 此列表中找到当前开发项目的列表。在这里找到公开的 所有项目列表。如果您找不到相应的主题,则需要使用我们的通用项目 devel:openSUSE:Factory。如果您有一个完全新的软件包集合,可以形成自己的开发项目,请参阅 #如何请求新的开发项目。
当开发项目接受新软件包时,该软件包通常没有额外的权限,这意味着只有develprj维护者才能稍后编辑它。批准您的软件包创建/更新请求的维护者可以添加您为软件包维护者——OBS Web界面有一个复选框供他们使用。但是,默认情况下未启用此复选框,并且可能被忽略。基于python-cerealizer的示例,您可以通过以下方式检查分配的权限
osc meta pkg devel:languages:python/python-cerealizer
如果您在 `<person role="maintainer" ...>` 行中看到您的用户名,则一切都已设置。如果没有,您可以使用
osc reqms devel:languages:python/python-cerealizer
在您拥有软件包的编辑权限与否,您可以触发将软件包提交到openSUSE:Factory。该提交请求应包含有关软件包的说明。最好将软件包介绍给opensuse-factory列表,并在您的提交请求中指向该介绍。一个好的介绍包含有关上游项目状态和可维护性的信息,以及将软件包包含在发行版中的目的。
osc submitrequest -m 'New package see http://lists.opensuse.org/opensuse-factory/2011-05/msg00018.html ' devel:languages:python/python-cerealizer openSUSE:Factory
如何请求新的开发项目
场景:有一段软件不在Factory中,它在openSUSE构建服务(可能在home:空间中)中没有得到维护,并且您想将其引入Factory/Tumbleweed。
首先,您需要在OBS的某个地方(不在home:命名空间中)有一个项目。在大多数情况下,现有的开发项目将适合您的新软件包。只需将SR提交给适当的devel项目即可。
如果您需要一个新的开发项目,一种方法是联系现有顶级项目的维护者,并要求他们为您创建一个子项目。如果现有的命名空间都不合适,请向OBS维护者通过 打开bug或发送电子邮件至 admin@opensuse.org 创建一个新的项目空间。
如果软件包最终进入的是现有的开发项目,您现在可以将软件包提交到Factory。
然而,如果你需要为你的软件包创建一个新项目,那么需要做更多的工作。Factory/Tumbleweed 中的每个软件包都有一个关联的“开发包”。这些项目位于 openSUSE:Factory 项目页面 顶部的下拉菜单中,或者在 仪表板容器中列出。开发包的位置(即它所在的那个项目)决定了该软件包的开发项目是什么。在我们的例子中,软件包和项目都是新的:Factory 还不认识它们。如果你从不在列表中的项目提交,提交将会被自动拒绝。
这似乎陷入了一个两难境地。但是,可以通过在 Factory 提交验证机器人使用的 目标项目的 OSRT:Config 属性中将新项目列入白名单来解决这个问题。为此,请在 #openSUSE-factory 或 opensuse-releaseteam 邮件列表中请求将项目添加到 config 中的 devel-whitelist 空格分隔列表中。一旦项目被添加,提交请求将不会因为源项目而被拒绝。
任何新的开发项目也必须定义 factory-maintainers 作为维护者,以便发布团队能够完全处理任何卡住的提交和changedevel请求。
如果一个软件包已经存在于 Factory 中,只是被移动到一个新的位置,并且该新位置还不是 Factory 开发项目,可以通过向新位置发出 changedevelreq 来将其变成一个开发项目(在移动软件包之后)。如果该新位置还不是一个开发仓库,在接受 chgdev 后,它将成为一个开发仓库,并且从此仓库的所有未来提交,包括那里的所有其他软件包,都将被接受。
如何成为 Factory 中软件包的维护者
如果你想提供帮助或接管责任,只需与当前的开发者沟通,并了解 Factory 维护者的职责和权利。
你可以通过访问 build.opensuse.org 或使用以下命令来确定当前的维护者:
要获取联系电子邮件地址,请使用:
除了直接联系当前的维护者,还有另外两种选择:
- osc requestmaintainership openSUSE:Factory aaa_base
- 访问 build.opensuse.org,登录,然后搜索你感兴趣的软件包,然后选择“请求角色添加”。
如何合并开发项目中的软件包修复
Open Build Service 将通过电子邮件通知你新的请求。你也可以查询它以获取所有新的请求。
合并更改就像接受请求一样简单。在接受之前检查更改是一个好主意。
如果你喜欢你所看到的内容,你可以接受它:
如何将软件包提交到 openSUSE:Factory
一旦你对软件包在开发项目中的状态感到满意,只需将其提交到 openSUSE:Factory。
批量提交
如果你在短时间内提交大量相关的软件包,请准备好同样收到拒绝。经验表明,如果一个软件包中存在问题性的更改,则其他软件包中也可能存在相同的问题。因此,我们建议如果你计划进行批量提交,将其分成批次,并且第一批只包含大约 5–10 个软件包。批量提交的后续批次可以线性增加大小。
如何将软件包提交到已发布产品
如果你想修复已发布发行版中的软件包,例如 openSUSE 11.4,你必须执行一些额外的步骤。这些步骤在 软件包维护 指南中描述。
如何删除软件包
假设我们要从 Factory 中删除 oldstuff 软件包,并且它的 开发项目 是 devel:openSUSE:Factory。你应该首先检查 Factory 中是否有其他软件包依赖于 oldstuff。
如果有一些软件包依赖于它,你有几种选择:
- 放弃并接受保留 oldstuff
- 先删除那些软件包
- 更改那些软件包以不再依赖 oldstuff
一旦你找到了解决方案,只需为 openSUSE:Factory 中的 oldstuff 提交删除请求,解释你想要删除该软件包的原因。
当一个软件包从 Factory 中删除时,它不会自动从开发项目中删除。原因是该软件包仍然可以在 Factory 之外的开发项目中用于其他原因。因此,根据你的需要,你可能需要从开发项目中删除该软件包。
如何恢复已删除的软件包
待定 (TBA)
如何请求对 SLE 起源软件包的更改?
请参阅 Portal:Leap/SLEFeatureRequests 以获取更多指导。