在 CentOS 計劃我們以 Git 作為首選的版本控制軟件。假若你是新手,http://git-scm.com/ 收錄了很多好的資源,當中包括入門指南。
CentOS 發行版本預設已包含了 Git。
CentOS 計劃把源碼收錄於 https://git.centos.org ,而我們視該處為本計劃的權威性上游。不同的項目,作為計劃的一部份,也許會選擇把他們的內容映射到其他地方,例如 Github。然而所有發行的內容必須建立自 git.centos.org,並經由該處獲測試和受保管。
Contents
架構
1. Git 伺服器
https://git.centos.org 現時在 Pagure 上運行
下文解譯了你的 SIG 群組會藉如何讓你(通過你的 ACO 帳戶)自動獲授權存取某些分枝。
2. 驗證
git.centos.org 的 pagure 實例現在通過 ACO 授權給你去存取該伺服器上的 git 計劃。 言下之意就是你必須擁有一個 ACO 帳戶(要是你沒有 CentOS 帳戶的話,請在 ACO 網站 為自己建立帳戶)。
首次登入 https://git.centos.org ,你的 ACO 帳戶設定將會被同步:
- ssh 公鑰
- 電郵地址
- 登入名稱
- 群組會藉
用法
1. get_sources.sh 腳本
有意運用 git.centos.org 及對它作出貢獻的用戶必須先複製及設定 centos-common 源碼,它收錄於:https://git.centos.org/centos-git-common
複製它的 git 指令是:
[user@host ~]$ git clone https://git.centos.org/centos-git-common.git
在此 git 源碼庫所收錄的眾多內容,包括有 get_sources.sh 這個腳本。當你在一個從 git 檢出的 rpm 源碼庫下執行該腳本時,它會分析非文字來源檔的中繼檔,下載相關檔案,並建立 SOURCES/ 目錄。你可考慮在 ~/bin 建立一個連結到此腳本(見以下範例)。
假設我們要存取 CentOS 的內核源碼。
[user@host ~]$ git clone https://git.centos.org/rpms/kernel.git ; cd kernel # 讓我們存取 cenots7 內核 [user@host kernel]$ git checkout c7 # 下載二進制檔案 [user@host kernel]$ ~/bin/get_sources.sh # 切換到本地的目錄樹進行編輯 [user@host kernel]$ git checkout -b my-kernel # 更改 SPEC 檔、等 [user@host kernel]$ git commit -m'my local changes' -a # 確保我們能建立 srpm [user@host kernel]$ rpmbuild --nodeps --define "%_topdir `pwd`" -bs SPECS/kernel.spec # 要是成功的話 [user@host kernel]$ rpmbuild --define "%_topdir `pwd`" -ba SPECS/kernel.spec
|
提示: 如果你只是對特定一個分枝有興趣,你可以只複製/存取該分枝:git clone -b c7 --single-branch https://git.centos.org/rpms/kernel.git |
2. 最終用戶
要是你只想下載 git 源碼庫及/或源碼,你可以(以匿名的形式)採用上述的 get_sources.sh 方法。
3. 貢獻者/SIG 管理員
你已經擁有一個 ACO 帳戶,或者隸屬於一個 SIG 嗎? 那麼你已經有權限讀、寫、修改位於 /rpms/ 名稱空間下的每個 git 源碼庫。 SIG 擁有自動的存取權,它們預設為:
c*-<sig 名稱>*
c* 後的 '*' 代表 c6、c7 或將面世的 c8
最後的 '*' 是你的 SIG 所選用的名稱
例:要是你隸屬於雲端 SIG 小組,你自動擁有權限推送到以下分支:c7-sig-cloud-rdo-queens
非文字來源檔(又名為 '''旁看緩存''' 內容)
我們只將文字來源檔存放於 git 內。所有非文字來源檔皆會被抽起,計算散列碼(sha256sum)並上載至 https://git.centos.org/sources/ 的專用緩存區內。它們被編進對應 git 分支的組別,然後再以所屬的 git 源碼庫分組。因此這些非文字來源檔的完整路徑是 https://git.centos.org/sources/<git 源碼庫名稱>/<分支名稱>/
請留意零長度的檔案以特別形式處理,它們不會被提交給 git,也不會被推進緩存區。然而這些檔案同樣會被追蹤,並透過非文字來源檔的中繼檔獲得建立。
每個 git 源碼庫都擁有一個中繼檔,名為 .<git 源碼庫名稱>.metadata,並收錄在該 git 分支的根目錄裡。這個檔案對應 sha256sum 散列碼至他們的整全檔名,而 get_sources.sh 腳本便以它作為輸入。
1. 存取源碼
見上述有關 get_sources.sh 腳本的描述
2. 推送源碼
視乎你的群組會藉,你已經可以推送某些源碼。 假設你是雲端 SIG 的組員,你可以推送到 <git 源碼庫名稱>/<分支名稱>,例如 c7-sig-cloud-rdo-queens(此原理與你的會藉授權你讀、寫及修改的權限相同)
所有到 /sources/ 的上載都受制於你用於 CBS/Koji 的 x509/TLS 證書。
雖然有一個名為 centpkg 的新工具將會在將來被開發及應用,你已經可以採用名為 lookaside_upload,建基於 curl 的工具。 你可以在上述的 centos-git-common git 源碼庫找到此工具。
./lookaside_upload You need to call the script like this : ./lookaside_upload -arguments -f : filename/source to upload (required, default:none) -n : package name for that source (requred, default:none, example "httpd") -b : "branch" where to upload to (required, default:none, example "c7-sig-core") -h : display this help
來自 git.centos.org 的通知
1. 通訊中介(MQTT)
所有在 git.centos.org 的(公開)git 源碼庫內的活動都會獨發 mqtt 訊息(通訊內容)被發送到 mqtt.git.centos.org 上專屬的 MQTT 中介。
你如何能訂閱該 MQTT 中介呢(要是你想將某些流程自動化)? 唯一的要求就是你信任我們的 ACO(https://accounts.centos.org),並提供你那來自 ACO 的 TLS 證書。 所有步驟都是自動通過 centos-cert 完成的(來自 centos-packager,見 https://wiki.centos.org/HowTos/CentosPackager)
之後,你便能選用你偏好的 MQTT 客端(mosquitto 套件提供的 mosquitto_sub,或 python 的 python-paho-mqtt 客端,等),然後指向 mqtt.git.centos.org:8883
使用 mosquitto_sub 的簡單範例:
mosquitto_sub --cafile ~/.centos-server-ca.cert --cert ~/.centos.cert --key ~/.centos.cert -h mqtt.git.centos.org -p 8883 -t git.centos.org/# -v
訊息的內容是可供解讀的 json,而題目是由 pagure 推送 mqtt 通訊時自動建立的。
2. 電郵
現時不可能從 *所有* 源碼庫接受電郵通知,因此你無法接受 git 推送的電郵通知。 要是你仍有此意欲,請考慮採用 MQTT 中介的方法,又或者要是有足夠人作出要求,我們亦會建立一個橋接器發信到 https://lists.centos.org 上專屬的郵件列表(現時未有作討論或決定 —— 這只是一個主意)
Translation of revision 14