openSUSE:如何在Factory中贡献

跳转到:导航搜索


本文将从贡献者的角度介绍 openSUSE Factory,包括概念、要执行的命令、要联系的人等等。它旨在作为一个起点,不打算取代有关编程语言、编译器、打包开放构建服务等方面的深入文档。我们期望你已经了解这些内容。本文将展示对Factory的贡献既简单非常受欢迎

加入软件包维护者

欢迎您,我们很高兴您决定成为openSUSE项目的软件包维护者。本指南将引导您完成您的第一个软件包提交。它可以是全新的软件包,也可以是对现有软件包的更新。

设置账户

要开始为Factory贡献,您需要在 openSUSE上创建一个账户。openSUSE具有单点登录系统。

阅读指南

熟悉我们的 软件包管理 指南。您应该彻底熟悉这些要点,因为它们管理着所有软件包提交。如果您有任何问题,请发送电子邮件至 Packaging List

理解职责

包含在我们发行版中的软件组件需要积极维护,并且错误——尤其是安全问题——需要在及时的方式下修复。作为软件包维护者,您的主要责任是确保这一点。

如果不熟悉git,请执行以下操作

如果您尚未配置Git的用户名和电子邮件地址,请使用您的openSUSE软件包信息执行以下操作。

    git config --global user.name "John Doe"
    git config --global user.email johndoe@example.com

入门

检查哪些软件包需要维护者

关于需要帮助的不同软件包的持续信息正在 factory邮件列表上列出。频率各不相同,但浏览历史记录,您一定会找到需要维护者的软件包。

如何提交软件包的修复(无论是上游还是项目内部)

Factory贡献最简单、最方便的方法就是提交修复。如果您知道为什么软件包无法构建或 无法正常工作,为什么不提交修复呢?如果软件包的版本已过时,为什么不更新它呢?为了让每个人都能做到这一点,openSUSE开发者利用了开放构建服务的协作功能,用于Factory贡献。这意味着每个人都可以从openSUSE: Factory分支软件包,进行修改并提交回去;这就像跳棋一样简单。首先,您需要检查您想要修复的软件包的开发项目是什么。可以通过

osc dp openSUSE:Factory aaa_base

如果这不起作用,您也可以在 https://build.opensuse.orghttps://software.opensuse.net.cn 上搜索它,并记下openSUSE: Factory软件包是从哪个项目开发的。

然后您需要使用osc检出软件包。

osc branch -m 'Fix XY' develproj:Name aaa_base

如您所见,服务器从正确的开发项目复制了软件包,并将结果放置在您的主项目目录中。将其签出到您的本地机器上以进行任何更改。

osc checkout home:yourname:branches:Base:System/aaa_base

或者,您可以使用 `osc bco` 将分支+签出操作链接到一个命令中。

osc bco develproj:Name/aaa_base

在您更改了想要修复的内容后,您需要确保软件包构建并正常工作。要确保它构建正确,请运行

osc build

并确保它构建成功。如果它成功构建,那么检查是否有您想要处理的rpmlint错误或警告。有时可以忽略它们(例如,如果它们在您更改软件包之前就已经存在),有时应该处理它们。

请记住在changelog中添加条目,以便其他人可以轻松了解您的更改。

osc vc -m 'Added fix XY for problem Z'

运行 `osc diff` 来提醒您自己所做的更改也可能很有帮助。

然后,您可以签入您的更改到您的分支。

osc checkin -m 'Added fix XY for problem Z'

然后将其提交给软件包的开发者进行审核。

osc submitrequest -m 'Added fix XY for problem Z'

软件包的开发者将收到您的提交通知并对其进行审核。我们称之为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-factoryopensuse-releaseteam 邮件列表中请求将项目添加到 config 中的 devel-whitelist 空格分隔列表中。一旦项目被添加,提交请求将不会因为源项目而被拒绝。

任何新的开发项目也必须定义 factory-maintainers 作为维护者,以便发布团队能够完全处理任何卡住的提交和changedevel请求。

如果一个软件包已经存在于 Factory 中,只是被移动到一个新的位置,并且该新位置还不是 Factory 开发项目,可以通过向新位置发出 changedevelreq 来将其变成一个开发项目(在移动软件包之后)。如果该新位置还不是一个开发仓库,在接受 chgdev 后,它成为一个开发仓库,并且从此仓库的所有未来提交,包括那里的所有其他软件包,都将被接受。

如何成为 Factory 中软件包的维护者

如果你想提供帮助或接管责任,只需与当前的开发者沟通,并了解 Factory 维护者的职责和权利

你可以通过访问 build.opensuse.org 或使用以下命令来确定当前的维护者:

osc maintainer openSUSE:Factory aaa_base

要获取联系电子邮件地址,请使用:

osc maintainer -e openSUSE:Factory aaa_base

除了直接联系当前的维护者,还有另外两种选择:

  • osc requestmaintainership openSUSE:Factory aaa_base
  • 访问 build.opensuse.org,登录,然后搜索你感兴趣的软件包,然后选择“请求角色添加”。

如何合并开发项目中的软件包修复

Open Build Service 将通过电子邮件通知你新的请求。你也可以查询它以获取所有新的请求。

osc request -s new

合并更改就像接受请求一样简单。在接受之前检查更改是一个好主意。

osc request show -d 12345

如果你喜欢你所看到的内容,你可以接受它:

osc request accept 12345

如何将软件包提交到 openSUSE:Factory

一旦你对软件包在开发项目中的状态感到满意,只需将其提交到 openSUSE:Factory。

osc submitrequest devel:languages:python/python-cerealizer openSUSE:Factory

批量提交

如果你在短时间内提交大量相关的软件包,请准备好同样收到拒绝。经验表明,如果一个软件包中存在问题性的更改,则其他软件包中也可能存在相同的问题。因此,我们建议如果你计划进行批量提交,将其分成批次,并且第一批只包含大约 5–10 个软件包。批量提交的后续批次可以线性增加大小。

如何将软件包提交到已发布产品

如果你想修复已发布发行版中的软件包,例如 openSUSE 11.4,你必须执行一些额外的步骤。这些步骤在 软件包维护 指南中描述。

如何删除软件包

Icon-warning.png
警告: 如果你不是软件包的维护者,请在执行以下任何步骤之前与维护者沟通。
在删除任何软件包之前,请考虑我们的 Factory 删除策略。提前感谢。

假设我们要从 Factory 中删除 oldstuff 软件包,并且它的 开发项目devel:openSUSE:Factory。你应该首先检查 Factory 中是否有其他软件包依赖于 oldstuff

osc whatdependson openSUSE:Factory/vim standard i586

如果有一些软件包依赖于它,你有几种选择:

  1. 放弃并接受保留 oldstuff
  2. 先删除那些软件包
  3. 更改那些软件包以不再依赖 oldstuff

一旦你找到了解决方案,只需为 openSUSE:Factory 中的 oldstuff 提交删除请求,解释你想要删除该软件包的原因。

osc deleterequest -m "Dropping oldstuff because XXX" openSUSE:Factory oldstuff

当一个软件包从 Factory 中删除时,它不会自动从开发项目中删除。原因是该软件包仍然可以在 Factory 之外的开发项目中用于其他原因。因此,根据你的需要,你可能需要从开发项目中删除该软件包。

osc deleterequest -m "Dropping oldstuff because XXX" devel:openSUSE:Factory oldstuff

如何恢复已删除的软件包

待定 (TBA)

如何请求对 SLE 起源软件包的更改?

请参阅 Portal:Leap/SLEFeatureRequests 以获取更多指导。