Contents
SIG 指南:目的
CentOS 的特别兴趣小组(SIG)是 CentOS 社区内的一些小组,以特定的 CentOS Linux 主题作为开发焦点,或增加对那些问题的关注。本指南是为有兴趣开创、管理、或参与 CentOS SIG 的人而设。以下是整个程序中每个步骤的范本及最佳做法。
CentOS 属性
0.1. accounts.centos.org
连结: http://accounts.centos.org
描述: ACO 是申请访问社群建设系统(CBS)的地方。暂时这些帐户只适用于 CBS
科技: accounts.centos.org 是 FAS2 的一个实例
联络人: CentOS 结构小组(freenode 上的 #centos-devel)或 centos-devel 邮件列表。
备注:
0.2. git.centos.org
描述: git.c.o 是 CentOS Linux 7 源组件的权威性收藏库。git.c.o 亦包含 SIG 专用的收藏库及 CentOS 计划内不同部份的源码
科技: git.c.o 是 Pagure 的一个实例
联络人: CentOS 系统管理小组 —— (Freenode 上的 #centos-devel)或 centos-devel 邮件列表
备注:
0.3. cbs.centos.org
描述: 社群建设系统让(Community Buildsystem)特别兴趣小组(SIG)能创建及管理他们的组件,放入专用的软件库内
科技: CBS 是 Koji 建设系统 的一个实例
联络人: CentOS 结构小组(Freenode 上的 #centos-devel)或 centos-devel 邮件列表。
备注:
- 有别于 Fedora 计划下的 Koji,现时 cbs.centos.org 上的临时建设会被保留及不会过期
- 现时所有映像必须以临时建设的形式进行
0.4. mirror.centos.org
由特别兴趣小组(SIG)所出产的内容都收录在 mirror.centos.org。mirror.centos.org 是由分布世界各地的 50 多个服务器所组成,并利用 GeoIP 把用户指向最近的镜像。mirror.centos.org 机器及带宽是捐赠给 CentOS 的,它们是由 CentOS 结构小组管理。
这个做法听来十分干净利落(它的确是!),但发放文件给用户还有一个更佳的方法。mirror.centos.org 上的所有内容已通过 600 多个外置镜站所复制,它们比 mirror.centos.org 服务器提供还要好的地区性复盖。采用外置镜像能释出 mirror.centos.org 服务器的带宽,供这些镜站同步时使用。你只须在你的软件库配置文件内加入 mirrorlist 选项便能采用外置镜像。详情见「创建 centos-release-* 组件」分段。
SIG 程序
任何人皆可推荐及/或参与特别兴趣小组(SIG),以下是有关 SIG 运作的一些指引及提示。
0.1. 推荐
新 SIG 的成立必须有一位 CentOS 管理委员会 成员参与,而每个 SIG 都须要乎合某些条件:
0.1.1. 条件
- 主题必须关于 CentOS,或采用 CentOS
- CentOS 的社群必须有足够的监管及反馈
- 一般来说,所有关于 SIG 的通讯都应该是公开的,但亦理解某些事情需要私隐。遇有这情况,请与谘询赞助的管理委员会成员
- SIG 内产生的所有源代码必须兼容 CentOS 现时采用的免费开源软件(FOSS)授权
- SIG 内产生的所有文件必须兼容此 wiki 的授权
- SIG 应该注意管理委员会为 CentOS 定的大方向
- 其中一位 SIG 成员必须为管理委员会/开发小组的成员
0.1.2. 推荐程序
- 检查合作主题是否已被现有 SIG 所涵盖
- 在 centos-devel 邮件列表发送一个 RFC 的概述电邮并征求意见
- 找一位 CentOS 管理委员会成员参与在其中
- 该委员会成员将会:
- 申请创建起首所需要资源
在 wiki 的 SpecialInterestGroup 页列出新的 SIG
参考 SpecialInterestGroup/ProposalTemplate 页作为 SIG 的 wiki 页内应有内容的范本
0.2. 接纳
赞助的管理委员会成员将会在委员会的例会推出推荐。如何推荐获接纳,委员会将会容许 SIG 开始运作。
SIG 的创办人应该在这个过程中与赞助人保持紧密联络,以便排除从推荐所衍生的任何问题。
0.3. 设置帐户
0.3.1. 社群建设系统(CBS)
0.3.1.1. 先决条件
我们在 CentOS-Extras 软件库内提供了一套工具,可以利用社群建设系统(CBS)创建特别兴趣小组的组件。如果你开发用的工作台执行 CentOS 7:
yum install centos-packager
这些工具大部份将会成为 Centpkg 的组件([zh/HowTos/Centpkg])。
如果你的工作台是 Fedora(23/24/25),你可选用 Copr:
dnf copr enable bstinson/centos-packager dnf install centos-packager
0.3.1.2. 第一步:注册帐户(ACO)
拜访 帐户系统
- 选择 New Account
- 在表格内填上你的数据
0.3.1.3. 第二步:加入特别兴趣小组
你的 CBS 帐户必须在成为特别兴趣小组成员后才会启动
- 登入后 accounts.centos.org,选择 Group List 并寻找你有意加入的特别兴趣小组。(特别兴趣小组列于 s 下,例如:sig-cloud)
- 申请会籍
- 请你的特别兴趣小组主席批核你的申请
0.3.1.4. 第三步:创建你的用户凭证
你的用户凭证包含三个文件:
文件名 |
用途 |
~/.centos.cert |
含有你的 X509 客端凭证的 PEM 档 |
~/.centos-server-ca.cert |
来自 ACO 的签证机构凭证 |
~/.centos-upload-ca.cert |
lookaside 的签证机构凭证 |
要创建你的凭证,请采用 centos-packager 组件内的 centos-cert 工具:
Usage: centos-cert [OPTIONS] Options: -h, --help show this help message and exit -u USERNAME, --username=USERNAME ACO Username. -n, --new-cert Generate a new User Certificate. -f CERTFILE, --file=CERTFILE User Certificate. -v, --verify-cert Verify Certificate.
假如你注册的名称为 tuser,你可以这样建立新的凭证:
[tuser@myworkstation]$ centos-cert -u tuser -n ACO Password: <这里输入口令>
|
请注意 centos-cert -u tuser -n 将会申请一张新的凭证,因此你过往所拥有的其它凭证将会自动失效。如果你需要在多台机器上使用 cbs/koji,你只需把上述档案复制至其它电脑便可以了。 |
0.3.1.5. 第三・一步:更新你的凭证
你的用户凭证的有效期为六个月。假若你在凭证过期四个月后仍未将它更新,你的 accounts.centos.org 帐户将会被停用
更新凭证的步骤:
[tuser@myworkstation]$ centos-cert -u tuser -n ACO Password: <输入口令>
0.3.2. ci.centos.org
0.3.2.1. 创建错误报告
在 centos-infra 跟踪器 https://pagure.io/centos-infra/issues/ 汇报问题
- 在你的报告内包含以下信息:
- 你的名称
- 你所牵涉的项目
- 你选用的用户名称
- 你的电邮地址
- 你的 gpg 公钥(普遍已在 ACO 内)
0.3.2.2. 帐户批核
特别兴趣小组成员: 请联络你的 SIG 主席在报告内给予认可
上游计划: 我们会与你合作,安排负责人在 ci 内批核新的成员
Translation of revision 6
0.3.3. Devcloud
0.4. 申请资源
0.4.1. 签署内容用的金钥
0.4.2. 邮件列表
0.4.3. IRC 频道
0.4.4. 追纵器内的错误「项目」
SIG 推荐人(委员会成员)在 https://pagure.io/centos-infra/issues/ 内处理 SIG 项目的申请。
每个 SIG 应设在例会中取得共识,继而联络推荐人。
0.4.5. CBS 上的 SIG Bot 帐户
有些 SIG 可能会利用 bot 帐户通过 CICO 或其它架构在 CBS 进行自动化建设。
0.4.5.1. 条件
- 帐户名称是该特别兴趣小组的缩写(cloud、configmanagement、cloudinstance)等
帐户的电邮 必须 寄给一位能在生产环境下更改凭证的用户
帐户的批核程序沿用一般的赞助模式。请通知一位 ACO 管理员,他们便会在相关的群组中赞助该帐户。
0.4.6. CBS 标签
如要在 CBS 申请新的标签,请创建一个 错误报告 Project: Buildsys Category: community buildsys
务请包括以下数据:
- SIG 的名称
- SIG 项目
- 项目的发行编号(有的话)
CBS 的标签有以下格式: <SIG_名称><CentOS_版本>-<项目>-<发行编号>-{candidate,release,testing}
例:cloud7-openstack-kilo-testing
SIG: |
Cloud |
项目: |
Openstack |
发行编号: |
Kilo |
如果申请者不是 SIG 主席,主席本人应该在该错误报告内以 +1 或 -1 的评语表示认同还是否决新的标签。
0.5. 日常运作(会议)
Translation of revision 15
管理内容
0.1. 输入至版本管理系统
提交至 git.centos.org 的组件源都采用已解压的 SRPM 格式。这意味著组件的工作目录最少要有 SPECS/ 子目录。
0.1.0.1. 新的组件(来自源代码)
若要从上游的源代码创建一个仍未提交至 git.centos.org 的组件:
# 该我们通过创建 rpm 的结构来创建一个名叫 new-package 的组件 [bstinson@localhost]$ mkdir -p ~/src/rpms/new-package/{SOURCES,SPECS} [bstinson@localhost]$ cd ~/src/rpms/new-package/
# 编写你的 spec 档。你可由零开始,但 rpmdevtools 提供了一个骨干 [bstinson@localhost new-package]$ rpmdev-newspec -o SPECS/new-package.spec
0.1.0.2. 新的组件(来自现有的 SRPM)
若要从现有的 SRPM 创建一个仍未提交至 git.centos.org 的组件:
# 让我们输入 new-package-1.0.1-2.el7 的源代码 RPM 到新的工作空间 [bstinson@localhost new-package]$ rpm --define "%_topdir `pwd`" -Uvh ~/Downloads/new-package-1.0.1-2.el7.src.rpm
Translation of revision 3
0.2. 在 CBS 下进行建设
现时向 CBS 提交建设要求的流程,是在开发者的工作目录内置立一个源码 RPM,然后提交给建设系统。开发者必须拥有一个有效的 CBS 帐户,并在他们的工作台上安装了客端工具(见 zh/SIGGuide#CBSAccount)。
0.2.0.1. 创建源码 RPM
暂时仍支持并供 --scratch 建设之用,但利用 git.centos.org 进行建设才是正确做法
[bstinson@localhost new-package]$ rpmbuild --define "%_topdir `pwd`" -bs SPECS/new-package.spec
0.2.1. 绕道描述标签及目标
利用 CBS 进行建设时,我们应该知道往那里提交源码,及在那里可找到新建的组件。
0.2.1.1. 定义
建设目标: 指定被提交的组件的建设根目录及目的地。这要加进 /usr/bin/cbs 命令行,以便能将组件指向正确的位置
标签: 一个把组件集合起来的位置。新建的组件可以自动被标签起来(即刚被创建后),或利用 /usr/bin/cbs 的 tag-build 指令手动增添标签
0.2.1.2. 建设目标
建设目标是根据 CentOS 版本、SIG、项目、项目版本及发行标签而命名的。以 cloud7-openstack-kilo-el7 为例:
SIG |
cloud |
CentOS 版本 |
7 |
项目 |
openstack |
版本 |
kilo |
发行标签 |
el7 |
每当有新的标签申请,建设目标便会获配置,而现有的目标已收录于 http://cbs.centos.org/koji/buildtargets
0.2.1.3. 标签
当 SIG 的主席申请新一系列的建设标签时,我们推荐兴趣小组采纳缺省的流程:
[建设] -> cloud7-openstack-kilo-candidate -> cloud7-openstack-kilo-testing -> cloud7-openstack-kilo-release
新组件的建设根目录包括以下软件库:
- CentOS Linux 的基本操作系统
- 候选标签内所有组件的最新版本。
这样开发者便能依赖基本操作系统的内容来满足组件的要求,或确保所需的版本加上 -candidate 标签(随相关的建设目标获创建,或执行 tag-build 指令来囊括现有的组件)。
0.2.1.4. 进行建设!
新组件:
要是你的组件从未被建设过,请在你的目标标签的组件清单内加上它:
[bstinson@localhost new-package]$ cbs add-pkg --owner=bstinson cloud7-openstack-kilo-candidate new-package [bstinson@localhost new-package]$ cbs add-pkg --owner=bstinson cloud7-openstack-kilo-testing new-package [bstinson@localhost new-package]$ cbs add-pkg --owner=bstinson cloud7-openstack-kilo-release new-package
临时建设:
# 提交源码 RPM 作为临时建设 [bstinson@localhost new-package]$ cbs build --scratch cloud7-openstack-kilo-el7 SRPMS/new-package-1.0.1-2.el7.src.rpm
临时建设会出现在 CBS 的网页,而获创建的 RPM 可以从该处下载,但那些组件不会被加进任何 CBS 标签(或这些标签所创建的软件库)。临时建设有助于正式进行标签建设前先行测试。
已标签(正常)建设:
# 提交源码 RPM 作为建设目标 [bstinson@localhost new-package]$ cbs build cloud7-openstack-kilo-el7 SRPMS/new-package-1.0.1-2.el7.src.rpm
已标签的建设完成后,便会加进 -candidate 标签,并出现在建设根目录供依赖它的组件访问。
注:CBS 规定组件的 名称-版本-发行 必须是独一无二的。言下之意就是假如有人(甚至另一个 SIG)已创建了 new-package-1.0.1-2.el7,你必须采用该组件,或创建另一个版本
0.2.1.5. 从 git.centos.org 进行建设
与其创建本地的 .src.rpm 组件并上载至 CBS 进行建设,你也可提交指向 git.centos.org 的建设请求(见上文有关 lookaside 及 git push 的步骤)。
你只需调用 cbs build 并指向 git+https://git.centos.org/rpms/<组件名称>.git#<commit_散列>
要是沿用上述有关 centpkg-minimal 组件的样例,我们可以轻易地从 git 的历史取得我们刚推送到 git.centos.org 的 c7-sig-core 分支的 commit 散列:
git log|head -n 1 commit ca63b53c8bde1efc91d55548f194dbecbf457cad
因此当告诉 cbs 建设系统从 git.centos.org 自动访问所有数据时(.spec、修正档及 .<pkg_name>.metadata 内宣告的 lookaside 对象),我们可以如此调用它(根据我们的样例并以 infrastructure7-el7 作为 cbs 标签的目标,因此这视乎你的特别兴趣小组/标签):
cbs build infrastructure7-el7 git+https://git.centos.org/rpms/centpkg-minimal.git#ca63b53c8bde1efc91d55548f194dbecbf457cad
0.2.1.6. 常见错误消息
FAILED: BuildError: package new-package not in list for tag cloud7-openstack-kilo-candidate
请确保你已将组件加进清单内:见「进行建设」下的 新组件 部份
0.3. 发行至镜站网络
整个过程中,有两个阶段可以让组件获更广泛的应用。测试内容可以发放到 buildlogs.centos.org 分发网络供开发者及 CI 系统应用。已适合发行的内容可以通过 mirror.centos.org 上的 SIG 专用目录供用户应用。
首先,决定软件库在 mirror.centos.org 上的最终发行位置。你可以在 buildlogs.centos.org 上采用同一路径。
例子: CentOS 7 用的 OpenStack Rocky 收录于 http://mirror.centos.org/centos/7/cloud/x86_64/openstack-rocky/
0.3.1. 推送测试内容至 Buildlogs
由 2020 年 3 月 25 日起实施的新签署程序只须将组件标签进 -testing 软件库便足够了。
每当你把新建的组件标签为 -testing,便会触发 koji 上的 distRepo 任务并将它推进 buildlogs.centos.org 假设你的标签是 cloud7-openstack-train-testing,而你启用了三个结构(x86_64、ppc64le 及 aarch64),组件就会出现在
0.3.2. 在 mirror.centos.org 发行内容
0.3.2.1. 在镜像网络上申请空间的步骤
请于 https://git.centos.org/centos/cbs-content-control 创建一个 Pull Request
- 你需要以下数据:
- SIG 名称
- 最终软件库内要整合的 CBS 发行标签
- 在 mirror.centos.org 内的最终目录位置
预期的格式如下:
<标签>|<目的地路径>|<执行 createrepo 的目录>|<mirror.centos.org 上的目的地>
- 以下是一个样例。你可以在提交日志查找其它例子。
cloud7-openstack-rocky-release/|7/cloud/x86_64/openstack-rocky/|7/cloud/x86_64/openstack-rocky/|7/cloud/x86_64/openstack-rocky/ cloud7-openstack-rocky-release/|7/cloud/ppc64le/openstack-rocky/|7/cloud/ppc64le/openstack-rocky/|7/cloud/ppc64le/openstack-rocky/
值得留意的是针对 CentOS 7,x86_64 会被推送到 mirror.centos.org/centos/$path,而其它结构如 ppc64le/ppc64/aarch64 会被推送到 mirror.centos.org/altarch/$path。你可以运用 $contentdir 这个 yum 变量在你的 .repo 档内选择分支(centos 或 altarch)。
另外值得留意的是逢星期一至四,签署及推送往 mirror.centos.org 只会每日进行一次,时间是上午九时 UTC(处理完成后便是 altarch 的推送时间)
要是你在需要协助,请于 https://bugs.centos.org 针对 Buildsys 项目的 Community Build Service 组件创建一个错误报告。
0.3.3. centos-release 组件
若要放送 SIG 组件给用户,yum 的 repo 档必须收录在一个名为 centos-release-<组件> 的组件内。此 centos-release-<组件> 组件将会在 CentOS Extras 软件库内发行。该 .repo 档亦应包含 gpg 公钥,以便能验证从镜站点下载的资源。
举例说,云端 SIG 利用 centos-release-openstack-rocky 内的软件库定义档来发行 OpenStack Rocky。
0.3.3.1. 创建 centos-release-* 组件
如果你是一个新的 SIG,但仍未被编配 SIG gpg 金钥(公钥应列于 https://www.centos.org/keys/#community-driven-project-keys),你必须在 https://pagure.io/centos-infra/issues/ 创建错误报告。
当你收到 gpg 公钥后,便可以开始建设 centos-release--* sig 组件。
为 centos-release-<SIG> 组件申请于 https://git.centos.org 上创建一个源码库(例如 https://git.centos.org/rpms/centos-release-openstack):请在 https://pagure.io/centos-infra/issues/ 提交申请
- 在 .repo 档内设置你的内容。举个例说,centos-release-openstack-rocky 可以有下列的主软件库定义:
[centos-openstack-rocky] name=CentOS-7 - OpenStack rocky mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=cloud-openstack-rocky #baseurl=http://mirror.centos.org/$contentdir/$releasever/cloud/$basearch/openstack-rocky/ gpgcheck=1 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-Cloud
- repo 档内亦可以有其它软件库的定义,例如 testing、debuginfo 及 sources。参考其它 centos-release-* 作为例子。 以上例子利用 mirrorlist.centos.org 来选择最近的外置镜站。通过 mirrorlist.centos.org 来取得镜站是首选的方法,因为它提供最快的镜站给用户,并减低 mirror.centos.org 的负荷。作为后备方案,baseurl 指向由 CentOS 控制的 mirror.centos.org 并被诠释掉。留意 $contentdir 是用来选择 centos 或 altarch。
建设 mirrorlist.centos.org 软件库参数的方法是从路径删除结构,然后以破折号代替斜杠。譬如,cloud/x86_64/openstack-rocky 内的文件来自名为 cloud-openstack-rocky 的软件库,而 sclo/x86_64/rh/rh-python36 来自 sclo-rh-rh-python36。请确保你的 .repo 档含有正确的路径及软件库名称。mirror.centos.org 上的内容每三个小时便会扫描一次,任何新的软件库会自动被加进镜站的搜查数据库。
- 如何你是首次创建组件,请将 centos-release-mycomponent 加进 Extras 的标签内
[bstinson@localhost centos-release-mycomponent]$ cbs add-pkg --owner=bstinson core7-extras-common-candidate centos-release-mycomponent [bstinson@localhost centos-release-mycomponent]$ cbs add-pkg --owner=bstinson core7-extras-common-testing centos-release-mycomponent [bstinson@localhost centos-release-mycomponent]$ cbs add-pkg --owner=bstinson core7-extras-common-release centos-release-mycomponent
- 在 CBS 内针对 Extras 标签创建组件
[bstinson@localhost centos-release-openstack-mycomponent]$ cbs build core7-extras-common-el7.centos centos-release-mycomponent-0.0.1-1.rpm
创建一个错误报告,申请把内容同步至 mirror.centos.org(见 zh/SIGGuide#MirrorSpace)
- 为建设加上 testing 标签
[bstinson@localhost centos-release-openstack-mycomponent]$ cbs tag-build core7-extras-common-testing centos-release-mycomponent-0.0.1-1
利用 yum install 测试从新软件库安装组件
- 准备就绪后,为建设加上 release 标签
[bstinson@localhost centos-release-openstack-rocky]$ cbs tag-build core7-extras-common-release centos-release-mycomponent-0.0.1-1
0.3.3.2. 有关 centos-release-* 组件的一些指引
- centos-release-* 组件应该被创建为 noarch RPM
与其它 SIG 合作
Translation of revision 4