現時向 CBS 提交建設要求的流程,是在開發者的工作目錄內建立一個源碼 RPM,然後提交給建設系統。開發者必須擁有一個有效的 CBS 帳戶,並在他們的工作台上安裝了客端工具(見 zh-tw/SIGGuide#CBSAccount)。
建立源碼 RPM
暫時仍支援並供 --scratch 建設之用,但利用 git.centos.org 進行建設才是正確做法
[bstinson@localhost new-package]$ rpmbuild --define "%_topdir `pwd`" -bs SPECS/new-package.spec
繞道描述標籤及目標
利用 CBS 進行建設時,我們應該知道往那裡提交源碼,及在那裡可找到新建的套件。
定義
建設目標: 指定被提交的套件的建設根目錄及目的地。這要加進 /usr/bin/cbs 指令行,以便能將套件指向正確的位置
標籤: 一個把套件集合起來的位置。新建的套件可以自動被標籤起來(即剛被建立後),或利用 /usr/bin/cbs 的 tag-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,你必須採用該套件,或建立另一個版本
從 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
常見錯誤訊息
FAILED: BuildError: package new-package not in list for tag cloud7-openstack-kilo-candidate
請確保你已將套件加進清單內:見「進行建設」下的 新套件 部份