SIG 指南:目的

CentOS 的特别兴趣小组(SIG)是 CentOS 社区内的一些小组,以特定的 CentOS Linux 主题作为开发焦点,或增加对那些问题的关注。本指南是为有兴趣开创、管理、或参与 CentOS SIG 的人而设。以下是整个程序中每个步骤的范本及最佳做法。

CentOS 属性

accounts.centos.org

连结: http://accounts.centos.org

描述: ACO 是申请访问社群建设系统(CBS)的地方。暂时这些帐户只适用于 CBS

科技: accounts.centos.org 是 FAS2 的一个实例

联络人: CentOS 结构小组(freenode 上的 #centos-devel)或 centos-devel 邮件列表。

备注:

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 邮件列表

备注:

cbs.centos.org

连结: http://cbs.centos.org

描述: 社群建设系统让(Community Buildsystem)特别兴趣小组(SIG)能创建及管理他们的组件,放入专用的软件库内

科技: CBS 是 Koji 建设系统 的一个实例

联络人: CentOS 结构小组(Freenode 上的 #centos-devel)或 centos-devel 邮件列表。

备注:

  • 有别于 Fedora 计划下的 Koji,现时 cbs.centos.org 上的临时建设会被保留及不会过期
  • 现时所有映像必须以临时建设的形式进行

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 运作的一些指引及提示。

推荐

新 SIG 的成立必须有一位 CentOS 管理委员会 成员参与,而每个 SIG 都须要乎合某些条件:

条件

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

推荐程序

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

接纳

赞助的管理委员会成员将会在委员会的例会推出推荐。如何推荐获接纳,委员会将会容许 SIG 开始运作。

SIG 的创办人应该在这个过程中与赞助人保持紧密联络,以便排除从推荐所衍生的任何问题。

设置帐户

社群建设系统(CBS)

先决条件

我们在 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

第一步:注册帐户
  1. 拜访 帐户系统

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

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

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

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

第三步:创建你的用户凭证

你的用户凭证包含三个文件:

文件名

用途

~/.centos.cert

含有你的 X509 客端凭证的 PEM 档

~/.centos-ca.cert

来自 FAS 的签证机构凭证

~/.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
    FAS Password: <这里输入口令>

请注意 centos-cert -u tuser -n 将会申请一张新的凭证,因此你过往所拥有的其它凭证将会自动失效。如果你需要在多台机器上使用 cbs/koji,你只需把上述档案复制至其它电脑便可以了。

第三・一步:更新你的凭证

/!\ 你的用户凭证的有效期为六个月。假若你在凭证过期四个月后仍未将它更新,你的 accounts.centos.org 帐户将会被停用

更新凭证的步骤:

    [tuser@myworkstation]$ centos-cert -u tuser -n
    FAS Password: <输入口令>

ci.centos.org

Devcloud

申请资源

签署内容用的金钥

邮件列表

IRC 频道

bugs.centos.org 内的错误「项目」

SIG 推荐人(委员会成员)在 https://bugs.centos.org 内处理 SIG 项目的申请。「项目」是可配置给 SIG 成员的错误类型。

配置类型的一些基本策略:

  • 按主题: 譬如说,Atomic SIG 可能会以 docker, rpm-ostree 及 kubernetes 为独立类型,并有个别代理人

  • 按发行组件: 譬如说,一个 SIG 可能会视 http://mirror.centos.org 内的每个发行软件库为独立类型

每个 SIG 应设在例会中取得共识,继而联络推荐人。

CBS 上的 SIG Bot 帐户

有些 SIG 可能会利用 bot 帐户通过 CICO 或其它架构在 CBS 进行自动化建设。

条件
  1. 帐户名称是该特别兴趣小组的缩写(cloud、configmanagement、cloudinstance)等
  2. 帐户的电邮 必须 寄给一位能在生产环境下更改凭证的用户

帐户的批核程序沿用一般的赞助模式。请通知一位 ACO 管理员,他们便会在相关的群组中赞助该帐户。

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 的评语表示认同还是否决新的标签。

日常运作(会议)

Translation of revision 15

管理内容

输入至版本管理系统

提交至 git.centos.org 的组件源都采用已解压的 SRPM 格式。这意味著组件的工作目录最少要有 SPECS/ 子目录。

新的组件(来自源代码)

若要从上游的源代码创建一个仍未提交至 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

新的组件(来自现有的 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

在 CBS 下进行建设

现时向 CBS 提交建设要求的流程,是在开发者的工作目录内置立一个源码 RPM,然后提交给建设系统。开发者必须拥有一个有效的 CBS 帐户,并在他们的工作台上安装了客端工具(见 zh/SIGGuide#CBSAccount)。

创建源码 RPM

[bstinson@localhost new-package]$ rpmbuild --define "%_topdir `pwd`" -bs SPECS/new-package.spec

绕道描述标签及目标

利用 CBS 进行建设时,我们应该知道往那里提交源码,及在那里可找到新建的组件。

定义
  • 建设目标: 指定被提交的组件的建设根目录及目的地。这要加进 /usr/bin/cbs 命令行,以便能将组件指向正确的位置

  • 标签: 一个把组件集合起来的位置。新建的组件可以自动被标签起来(即刚被创建后),或利用 /usr/bin/cbstag-build 指令手动增添标签

建设目标

建设目标是根据 CentOS 版本、SIG、项目、项目版本及发行标签而命名的。以 cloud7-openstack-kilo-el7 为例:

SIG

cloud

CentOS 版本

7

项目

openstack

版本

kilo

发行标签

el7

每当有新的标签申请,建设目标便会获配置,而现有的目标已收录于 http://cbs.centos.org/koji/buildtargets

标签

当 SIG 的主席申请新一系列的建设标签时,我们推荐兴趣小组采纳缺省的流程:

[建设] -> cloud7-openstack-kilo-candidate -> cloud7-openstack-kilo-testing -> cloud7-openstack-kilo-release

新组件的建设根目录包括以下软件库:

  • CentOS Linux 的基本操作系统
  • 候选标签内所有组件的最新版本。

这样开发者便能依赖基本操作系统的内容来满足组件的要求,或确保所需的版本加上 -candidate 标签(随相关的建设目标获创建,或执行 tag-build 指令来囊括现有的组件)。

进行建设!

新组件:

要是你的组件从未被建设过,请在你的目标标签的组件清单内加上它:

[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,你必须采用该组件,或创建另一个版本

常见错误消息
  • FAILED: BuildError: package new-package not in list for tag cloud7-openstack-kilo-candidate

    • 请确保你已将组件加进清单内:见「进行建设」下的 新组件 部份

发行至镜站网络

整个过程中,有两个阶段可以让组件获更广泛的应用。测试内容可以发放到 buildlogs.centos.org 分发网络供开发者及 CI 系统应用。已适合发行的内容可以通过 mirror.centos.org 上的 SIG 专用目录供用户应用。

首先,决定软件库在 mirror.centos.org 上的最终发行位置。你可以在 buildlogs.centos.org 上采用同一路径。

推送测试内容至 Buildlogs

请利用以下格式提交数据:

<tag>|<destination path>|<dir to run createrepo in>|<destination on buildlogs>

Example:
sclo7-rh-nodejs4-rh-testing/|7/sclo/x86_64/rh/rh-nodejs4/|7/sclo/x86_64/rh/|7/sclo/x86_64/rh/
sclo7-rh-mongodb32-rh-testing/|7/sclo/x86_64/rh/rh-mongodb32/|7/sclo/x86_64/rh/|7/sclo/x86_64/rh/
sclo7-rh-mongodb30upg-rh-testing/|7/sclo/x86_64/rh/rh-mongodb30upg/|7/sclo/x86_64/rh/|7/sclo/x86_64/rh/
sclo7-rh-python35-rh-testing/|7/sclo/x86_64/rh/rh-python35/|7/sclo/x86_64/rh/|7/sclo/x86_64/rh/
sclo7-rh-ruby23-rh-testing/|7/sclo/x86_64/rh/rh-ruby23/|7/sclo/x86_64/rh/|7/sclo/x86_64/rh/
sclo7-rh-ror42-rh-testing/|7/sclo/x86_64/rh/rh-ror42/|7/sclo/x86_64/rh/|7/sclo/x86_64/rh/

  • 设置完成后,该 CBS 标签每 2 小时便会被检查是否有新的内容,要是有的话,它们便会被推进 buildlogs.centos.org 内的目的地软件库。除了将所需的 rpm 加入 -testing 软件库的标签外,此过程无须手动干预。

请留意 CentOS 管理员最少要标签一个建设版本为 -testing,才能全面设置 buildlogs.centos.org,这是由于内部的 sync 脚本基于安全理由不会发行空置的软件库。要是你的 -testing 标签不包含任何建设版本,请将最少一个建设版本标签为 -testing,然后才创建 buildlogs.centos.org 的错误报告。

请留意此设置与 mirror.centos.org 的设置是完全独立的。此设置命令 buildlogs.centos.org 服务器收藏被标签为 -testing 的内容。你必须递交另一个申请才能将被标签为 -release 的内容收藏于 mirror.centos.org。

在 mirror.centos.org 发行内容

在镜像网络上申请空间的步骤

  1. https://bugs.centos.org 为 Buildsys 计划的 Community Build Service 组件创建一个错误报告

  2. 包含以下数据:
    • SIG 名称
    • 最终软件库内要整合的 CBS 发行标签
    • 在 mirror.centos.org 内的最终目录位置

采用与测试(buildlogs)相同的格式,举个例说:

<标签>|<目的地路径>|<在哪个目录执行 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 的推送时间)

centos-release 组件

若要放送 SIG 组件给用户,yum 的 repo 档必须收录在一个名为 centos-release-<组件> 的组件内。此 centos-release-<组件> 组件将会在 CentOS Extras 软件库内发行。

举例说,云端 SIG 利用 centos-release-openstack-rocky 内的软件库定义档来发行 OpenStack Rocky。

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

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

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

  8. 准备就绪后,为建设加上 release 标签
    [bstinson@localhost centos-release-openstack-rocky]$ cbs tag-build core7-extras-common-release centos-release-mycomponent-0.0.1-1
    

有关 centos-release-* 组件的一些指引
  • centos-release-* 组件应该被创建为 noarch RPM

与其它 SIG 合作

Translation of revision 4

zh/SIGGuide (last edited 2016-05-05 11:51:16 by TimothyLee)