貢獻給 CentOS Stream
1. 在你開始寫程式之先……
……我們很多謝你樂意貢獻給 CentOS Stream。然而我們不能採納所有源碼 —— Red Hat 企業級 Linux 8 在同一個主發行版本內必須保持兼容性。你可以首先 在 bugzilla 建立一個錯誤報告,並與相關的 RHEL 套件維護者討論你的改動能否獲接納。一如任何開源計劃,最終都是由維護者決定接納及維獲甚麼改動,因此 Red Hat 的維護者有權基於任何原因拒絕你的貢獻。
與此同時,你也應該首先向相關的上游計劃及 Fedora Linux 提交你的改動 —— 任何向 CentOS Stream 提交的改動必須獲上游及 Fedora 接納,然後才會出現於 CentOS Stream。
最後,視乎 RHEL 次要發行版本身處的開發階段,你的改動或許會延期至下個循環 —— 當你的改動獲審查後,相關的維護者將會告訴你其後的步驟。
2. 帳戶
要是你有興趣貢獻給 CentOS Stream,你必須擁有一個 CentOS FAS 帳戶。
3. 存取程式庫
當你完成帳戶的設定後,你便可以在本地複製相關的程式庫。現有的程式庫收錄於兩個位置:
利用 source-git 貢獻的程序仍在改良中,因此事情如果與你的期望有別,請保持友善 —— 我們樂意收到你的回饋並作出改善。要是你有問題,請與 packit 小組 聯絡或在 centos-devel@centos.org 提出。
3.1. 分叉及複製
當你從網頁界面找到程式庫後,請將它分叉並進行複製。
dist-git:
$ git clone ssh://git@git.centos.org/forks/$user/rpms/rpm.git
source-git:
$ git clone ssh://git@git.stg.centos.org/forks/$user/source-git/rpm.git
請勿忘記為主程式庫設定 upstream 遠端程式庫(不是 上游計劃):
dist-git:
$ git remote add upstream ssh://git@git.centos.org/rpms/rpm.git
source-git:
$ git remote add upstream ssh://git@git.stg.centos.org/source-git/rpm.git
本地複製完成後,你應該切換到 c8s 分支。要是該分支不存在,請切換到 c8 —— 這意味著該套件沒有 CentOS Stream 的改動,而是追隨最新的 CentOS Linux 8 發行版本。
4. 建立改動
這是你能大展拳腳的地方!你可作出以下兩類改動:
1. 修改源碼
2. 修改套件(spec 檔,額外源碼如下游設定檔)
4.1. 提交 pull 請求
我們採用的是你或許熟識,源自上游程式庫的標準 git 工作流程:
- 新增本地 git 分支
- 提交改動(若是你反向移植上游的改動,請儘可能保留上游的提交訊息)
- 把分支推送到你的分叉
- 最後,利用 Pagure 網頁建立一個 pull 請求
4.2. Dist-git 對比 Source-git
如果你熟識 CentOS 及 Fedora 是如何包裝套件,你可能認識 dist-git:每個程式庫代表一個源程式 RPM 套件,並包含所有 RPM 源碼檔(RPM spec 檔,上游的 tarball 檢驗碼,還有修正檔及其它檔案)。然而程式庫本身並不包含源碼 —— 你必須執行 %prep 步驟才會出現。
至於 source-git,我們解壓源碼檔並加入上游的改動作為額外的改動。現時這些程式庫未包含上游的 git 日誌:我們只是解壓上游發行版本的相關壓縮檔作為首個 commit。如欲更詳細知道 source-git 程式庫的運作方式,請移玉步到 packit 的文檔。
你可選擇你首選的方式作出貢獻:dist-git 或 source-git 都同樣可行。
4.3. 在 source-git 程式庫提交改動
如果你想更新套件的檔案(收錄於 SPECS 目錄內),請直接進行修改 —— 它們不用特別處理。
4.3.1. 通過在 spec 檔內定義修正檔來更改源碼
在源碼內建立改動就須要多一點功夫。更改 CentOS Stream 套件的方法是建立修正檔並在 spec 檔內定義修正檔。套件在被建立時會於 %prep 階段套用修正檔。
要是你更新了源碼,並知道 spec 內要添加修正檔,請在 spec 檔內加入你所選用的修正檔名稱:
Patch123: my-special-change.patch
接著你必須在提交訊息內為改動加入以下註腳
We need this change in CentOS Stream patch_name: my-special-change.patch present_in_specfile: true Signed-off-by: Tomas Tomecek <ttomecek@redhat.com> --- src/code.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-)
當我們的自動化系統,packit,建立 SRPM 檔時,它會讀取該提交訊息,明白該修正檔已定義於 spec 檔內,然後把所提交的改動建成一個修正檔,檔名取自 "patch_name" 欄。
這是更改源碼的首選做法,因為你能操控整個程序。
4.3.2. 修正源碼:讓 packit 處理修正檔
要是 packit 在提交訊息內找不到上述的附屬資料:
- 它會在 spec 檔內加入新的 patch 項目
- 然後從所提交的改動建立新的修正檔
這是較方便,卻容易出錯。要是此方法行不通,請參照上述方法手動加入附屬資料。
4.4. 在 dist-git 程式庫提交改動
這裡的情況亦很相似:你可直接更改套件的包裝過程,這些檔案收錄於 SOURCES 及 SPECS 目錄。
要你你想更改源碼,程序上與 source-git 便大有分別:
- 改動必須以修正檔的形式出現
- 該修正檔必須放進 SOURCES 目錄內
- 並且正確定義於 spec 檔內(請確保它能乾淨利落地套用到源碼上)
4.4.1. 建立 pull 請求後
當你為 source-git 庫提交 pull 請求後,系統會自動抽出改動並建立它 —— 那些包含你的改動的 RPM 將會出現,好讓你能測試它們,或者確定套件能成功建立。
一旦你的改動獲接納,它將會被標籤為 accepted。我們的自動化系統將會建立相關的 bugzilla 並附上修正檔,然後便有待 RHEL 的維護者接手,在內部進行提交及建設,好讓它能納入 CentOS Stream —— 這個程序需時,所以請耐心等候。
5. 取得審閱
若然要把你的改動納入 RHEL 及 CentOS Stream,它必須獲相關元件的 RHEL 維護者審閱及認可。我們會在背後確保他們能看見你的改動。要是你未獲得回饋,請在 freenode 的 #centos-devel 頻道求助。
6. Rebase
隨著新的改動出現於 CentOS Stream,你或許需要 rebase 你的 pull 請求。
Translation of revision 16