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-tw/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-tw/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 發行內容
在鏡像網絡上申請空間的步驟
與 -testing 的步驟相同,唯獨現有的程序會接獲通知有套件被標籤為 -release,因此它們會被推送到 mirror.centos.org 網絡(及外部鏡站),並以適當的 SIG GPG 金鑰簽署。
此外 debuginfo 套件會被推送到 debuginfo.centos.org,而 src.rpm 套件被推送到 vault.centos.org
值得留意的是針對 CentOS 7,x86_64 會被推送到 mirror.centos.org/centos/$path,而其它架構如 ppc64le/ppc64/aarch64 會被推送到 mirror.centos.org/altarch/$path。你可以運用 $contentdir 這個 yum 變數在你的 .repo 檔內選擇分支(centos 或 altarch)。
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-tw/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