DEB打包
简介
我们希望能够为OpenStack创建DEB包,从而创建可用的deb包。这将允许我们与社区和DEB包维护者一起使用Ubuntu/Debian兼容的包,他们已经在做同样的工作,并将它们分开。
目标
该项目的目标是创建一个中心化的DEB包规范的地方,并进一步开发它。在这里我们将维护OpenStack的Linux包。这将允许将Linux包的维护者和各种类型的OpenStack项目的开发者都纳入开发过程。我们将一起做出更好的包。
如何贡献
从OpenStack QA页面选择任何一个包
https://qa.debian.org/developer.php?login=openstack-devel@lists.alioth.debian.org
假设你想编辑 oslo.cache,那么只需执行
git clone https://git.openstack.org/openstack/deb-python-oslo.cache
注意上面的“deb-”前缀,以及包名称与PKG OpenStack QA页面中的源包名称相匹配的事实。然后你应该选择打包分支。它总是会是 debian/foo,其中 foo 是 OpenStack 的发布版本。所以对于 Newton,将会是
cd deb-python-oslo.cache git checkout debian/newton
然后像往常一样进行打包更改,然后简单地执行
git commit -a -m "Some changes" git review
请注意,你不应该编辑 debian/changelog。这将由上传到Debian的人来完成:那个人将读取自上次打包新上游版本以来的git日志。此外,在构建完成后,你应该检查它是否出现在infra仓库中。例如,在这里: http://mirror.dfw.rax.openstack.org/debian-openstack/pool/main/p/python-oslo.cache/。如果它没有出现,那么请检查构建日志(你可以使用 git-os-job 来查找它)。如果构建失败是因为从 httpredir.debian.org 获取时哈希不匹配,那么只需进行一个简单的提交(例如,在 .gitreview 文件中添加一个空行)以触发重建,并 +2A CR。在这种情况下,请在 CR 中使用确切的标题“Dumb commit to rebuild”。当infra对Debian存档进行适当的镜像时,这个问题将会得到解决,但在此之前,我们必须处理这些问题。
发布新的上游版本包
project-config/gerrit/projects.yaml 具有 track-upstream 选项。这意味着 Gerrit 应该已经有了最新的上游标签,并且我们应该能够将上游的标签合并到打包分支。因此,这是流程:以 oslo.cache 为例,假设我们要为 Newton 打包最新的上游版本 1.14.0,如 requirements/upper-constrants.txt 所要求。
git clone https://git.openstack.org/openstack/deb-python-oslo.cache cd deb-python-oslo.cache git checkout debian/newton git merge -X theirs 1.14.0 dch --newversion 1.14.0-1 -m "New upstream release" # Edit debian/control to fix (build-)dependencies and do any other packaging change needed for the release git commit -a --amend git review
请注意,debian/changelog 和 debian/control 的修复应该与合并提交在同一个提交中完成,否则包将无法构建。
一旦包在 OpenStack infra 上所有支持的发行版中成功构建(截至撰写本文时,这仅是 Debian Jessie,但我们计划稍后添加更多),则要求核心审核者批准你的更改请求。如果你自己是核心审核者,如果 #openstack-pkg 频道中没有人可以为你执行此操作,你可以自行批准你的更改。
一旦 CR 合并到 OpenStack 上游 CI,也是时候将其上传到 Debian Experimental。
关于重新标记上游标签的说明
有些上游有不使用我们可以用于打包的标签的坏习惯。例如,有些上游在版本号前使用“v”,而 Alembic 上游作者使用 rel_0_8_8 而不是 0.8.8,或者 Nova 可能会发布 14.0.0.0b1,而我们需要 14.0.0_b1:打包脚本将 _(即下划线)转换为 ~(即波浪线),以便 14.0.0~b1 是低于 14.0.0 的版本。由于有如此多的标记方案,我们决定在脚本中解决所有这些问题不是解决方案。相反,我们只是在上游标签之上重新标记。以下是 Nova 的 14.0.0.0b1 上游标签的示例
git tag -s 14.0.0_b1 14.0.0.0b1 git push gerrit --tags
请注意,只有核心审核者才能将标签推送到 Gerrit,并且标签必须签名,否则 Gerrit 将拒绝它们。轻量级标签,在这种情况下会很合适,不幸的是不是一个选项。
标记Debian发布版本
只有核心 packaging-deb 组才能将标签推送到 gerrit(感谢 ACL)。我们还期望这个核心组也可以上传到 Debian。如果你想成为核心成员,我们强烈建议你成为新的维护者流程,至少成为 DM(即 Debian 维护者)。
一旦包上传到 Debian,你应该这样标记它
git tag -s debian/1.2.3-4 -m "Debian release 1.2.3-4"
然后你可以将标签推送到 gerrit
git push --tags gerrit
由于 OpenStack CI 在每次提交时都会增加 Debian 发布版本(例如,1.2.3-4+15,如果自 1.2.3-3 以来有 15 次提交),那么下一个更改请求必须编辑 debian/changelog 并至少增加 debian 发布号,这将变为 1.2.3-5。如果未这样做,那么合并后的 POST 作业将无法使用 reprepro 发布包。所以 dch -i 是你的朋友,下一个打包更改请求应该如下所示
dch -i -m "some packaging changes" git commit -a -m "some packaging changes" git review
另外,请记住*永远不要*标记一个 Gerrit 仓库,如果你知道该包将通过 FTP master NEW 队列。否则,可能会发生包被 FTP master 拒绝的情况。然后,如果我们需要新的提交来修复它,除非我们增加 Debian 发布号,或者删除标签,否则它们将不会发布到 OpenStack infra Debian 仓库。而这两种情况都不是可能的或理想的。所以请在标记 Debian 发布版本时小心!
联系方式
团队可以在 Freenode IRC 频道 #openstack-pkg 上找到。
Newton 周期的 PTL 是 Monty Taylor(IRC 昵称:mordred)