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

连结: https://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

连结: http://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. 条件

  1. 主题必须关于 CentOS,或采用 CentOS
  2. CentOS 的社群必须有足够的监管及反馈
  3. 一般来说,所有关于 SIG 的通讯都应该是公开的,但亦理解某些事情需要私隐。遇有这情况,请与谘询赞助的管理委员会成员
  4. SIG 内产生的所有源代码必须兼容 CentOS 现时采用的免费开源软件(FOSS)授权
  5. SIG 内产生的所有文件必须兼容此 wiki 的授权
  6. SIG 应该注意管理委员会为 CentOS 定的大方向
  7. 其中一位 SIG 成员必须为管理委员会/开发小组的成员

0.1.2. 推荐程序

  1. 检查合作主题是否已被现有 SIG 所涵盖
  2. 在 centos-devel 邮件列表发送一个 RFC 的概述电邮并征求意见
  3. 找一位 CentOS 管理委员会成员参与在其中
  4. 该委员会成员将会:
    1. 申请创建起首所需要资源
    2. 在 wiki 的 SpecialInterestGroup 页列出新的 SIG

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)
  1. 拜访 帐户系统

  2. 选择 New Account
  3. 在表格内填上你的数据

0.3.1.3. 第二步:加入特别兴趣小组

你的 CBS 帐户必须在成为特别兴趣小组成员后才会启动

  1. 登入后 accounts.centos.org,选择 Group List 并寻找你有意加入的特别兴趣小组。(特别兴趣小组列于 s 下,例如:sig-cloud)
  2. 申请会籍
  3. 请你的特别兴趣小组主席批核你的申请

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: <这里输入口令>

ArtWork/WikiDesign/icon-admonition-idea.png

请注意 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. 创建错误报告
  1. 拜访 https://pagure.io/

  2. 在 centos-infra 跟踪器 https://pagure.io/centos-infra/issues/ 汇报问题

  3. 在你的报告内包含以下信息:
    • 你的名称
    • 你所牵涉的项目
    • 你选用的用户名称
    • 你的电邮地址
    • 你的 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. 条件
  1. 帐户名称是该特别兴趣小组的缩写(cloud、configmanagement、cloudinstance)等
  2. 帐户的电邮 必须 寄给一位能在生产环境下更改凭证的用户

帐户的批核程序沿用一般的赞助模式。请通知一位 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/cbstag-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 上采用同一路径。

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. 在镜像网络上申请空间的步骤

  1. 请于 https://git.centos.org/centos/cbs-content-control 创建一个 Pull Request

  2. 你需要以下数据:
    • SIG 名称
    • 最终软件库内要整合的 CBS 发行标签
    • 在 mirror.centos.org 内的最终目录位置
    • 预期的格式如下:

          <标签>|<目的地路径>|<执行 createrepo 的目录>|<mirror.centos.org 上的目的地>
  3. 以下是一个样例。你可以在提交日志查找其它例子。

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-* 组件
  1. 如果你是一个新的 SIG,但仍未被编配 SIG gpg 金钥(公钥应列于 https://www.centos.org/keys/#community-driven-project-keys),你必须在 https://pagure.io/centos-infra/issues/ 创建错误报告。

当你收到 gpg 公钥后,便可以开始建设 centos-release--* sig 组件。

  1. 为 centos-release-<SIG> 组件申请于 https://git.centos.org 上创建一个源码库(例如 https://git.centos.org/rpms/centos-release-openstack):请在 https://pagure.io/centos-infra/issues/ 提交申请

  2. 在 .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
  3. 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 上的内容每三个小时便会扫描一次,任何新的软件库会自动被加进镜站的搜查数据库。

  4. 如何你是首次创建组件,请将 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
  5. 在 CBS 内针对 Extras 标签创建组件
    [bstinson@localhost centos-release-openstack-mycomponent]$ cbs build core7-extras-common-el7.centos centos-release-mycomponent-0.0.1-1.rpm
  6. 创建一个错误报告,申请把内容同步至 mirror.centos.org(见 zh/SIGGuide#MirrorSpace

  7. 为建设加上 testing 标签
    [bstinson@localhost centos-release-openstack-mycomponent]$ cbs tag-build core7-extras-common-testing centos-release-mycomponent-0.0.1-1
  8. 利用 yum install 测试从新软件库安装组件

  9. 准备就绪后,为建设加上 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

zh/SIGGuide (last edited 2019-12-09 09:11:23 by anonymous)