[TOOLS] 5 分鐘閱讀OraCore 編輯部

Ubuntu Rust 套件更新產物清單

這篇教你把 Ubuntu 的 rustc 套件升到新的上游 Rust 版本,最後產出可上傳的版本化原始套件、補丁更新紀錄與可驗證的建置結果。

分享 LinkedIn
Ubuntu Rust 套件更新產物清單

這篇教你把 Ubuntu 的 rustc 套件升到新的上游 Rust 版本,最後產出可上傳的版本化原始套件、補丁更新紀錄與可驗證的建置結果。

這篇給 Ubuntu 工具鏈維護者看,特別是要把新的 Rust 發行版帶進 Ubuntu 套件庫的人,不是給本機安裝 rustup 的開發者。照著做完,你會拿到一份已同步上游、已刷新補丁、已清理 vendored 相依、並能送審上傳的 rustc 原始套件工作樹。

本文依據 Ubuntu Rust 更新指南Foundations rustc Git 儲存庫 的流程整理,目標是讓你一路照做到底,不必自己拼流程。

開始之前

訂閱 AI 趨勢週報

每週精選模型發布、工具應用與深度分析,直送信箱。不定期,不騷擾。

不會寄垃圾信,隨時可取消。

  • 一台已安裝 Git 的 Ubuntu 開發機
  • 可登入 Launchpad 的帳號,且具備 SSH 金鑰存取權
  • 可存取 Foundations rustc Git 儲存庫的權限
  • 目標上游 Rust 發行版 tarball,例如 1.85.1
  • 目前 Ubuntu 發行版對應的 rustc 套件分支
  • Debian 打包工具,包含 dpkg-dev 與 debhelper
  • 足夠的磁碟空間可放原始碼樹與兩份 orig tarball
  • 目標 Ubuntu 系列名稱,例如 noble
  • 若你的流程需要,準備好要填入的 bug 編號

Step 1: 複製 rustc 打包樹

目的:建立本機工作目錄,讓打包分支與產生的 tarball 放在同一層父目錄,符合 Ubuntu 維護 rustc 的目錄安排。

Ubuntu Rust 套件更新產物清單
mkdir -p ~/work/rustc
cd ~/work/rustc
git clone git+ssh://git.launchpad.net/~canonical-foundations/ubuntu/+source/rustc
cd rustc
git remote add personal git+ssh://git.launchpad.net/~YOUR_LAUNCHPAD_USERNAME/ubuntu/+source/rustc

驗收:你應該看到父目錄下有一個 rustc 原始碼目錄,且 git remote -v 會同時列出 Foundations 遠端與你的個人遠端。

Step 2: 下載新的上游版本

目的:把舊的上游來源換成新的 Rust 發行版,讓套件從正確的版本基礎開始。

Ubuntu Rust 套件更新產物清單

先下載新的上游 tarball,然後在打包樹中更新版本化來源檔案,暫時保留既有套件中繼資料不動。這一步的重點,是先把舊上游內容換成新版本,再進入補丁刷新與裁剪。

驗收:你應該在原始碼樹中看到新的 Rust 版本,頂層版本檔也要對上目標版本,例如 1.85.1,而不是 1.84.0。

Step 3: 刷新 Ubuntu 補丁

目的:讓既有的 Debian 與 Ubuntu 補丁能在新 Rust 原始碼上乾淨套用,同時維持套件意圖不變。

把補丁序列重新基底化或刷新,接著逐一檢查每個補丁是否因上游改動而衝突。需要時修正偏移、更新上下文行,若上游已經包含某個變更,就直接移除那個補丁。

驗收:你應該能無 fuzz、無 rejected hunks 地套用完整補丁堆疊,而且套用後的樹狀內容可以從刷新後的來源成功建置。

Step 4: 裁剪 vendored 相依

目的:移除 Ubuntu 最終原始套件不需要的 vendored 檔案,讓套件來源更小、更乾淨。

執行打包流程中的裁剪步驟,從原始碼樹中移除不必要的 vendored crates。Ubuntu 的流程還要求在裁剪後再抓一次來源,讓最後的 orig tarball 反映裁剪後的檔案清單。

驗收:你應該看到不需要的 vendored crates 被移除,而剩下的來源樹只保留建置套件真正需要的檔案。

Step 5: 重建 orig tarball

目的:產生可上傳的最終來源產物,包含主 orig tarball 與對應裁剪結果的 vendor tarball。

debian/rules get-orig-source

完成裁剪後,重新產生上游來源與 vendor tarball,讓套件精確記錄你要送進 archive 的內容。這一步會把工作樹轉成可上傳的原始套件產物。

驗收:你應該在父目錄看到新的 .orig.tar.xz.orig-vendor.tar.xz,而且內容要對上目標 Rust 版本與裁剪後的 vendor 集合。

Step 6: 建置並測試套件

目的:在送出上傳前,確認新版本化套件可以編譯,且打包中繼資料正確無誤。

先在本機或乾淨的 PPA 進行原始套件建置,再執行適用於你這個發行版的 rustc 套件測試。接著檢查 changelog、版本字串與相依中繼資料,確認版本化套件名稱已更新,例如 rustc-1.85。

驗收:你應該看到建置成功、套件測試通過,而且原始套件的版本化名稱與 changelog 都已反映新的上游版本。

常見錯誤

  • 把這份流程拿去更新本機 Rust 工具鏈。修法:開發者電腦請改用 rustup,這套流程只適用於 Ubuntu archive 打包。
  • 裁剪後忘了再重生一次來源。修法:重新執行 orig source 產生步驟,讓最終 tarball 與裁剪後的 vendor 清單一致。
  • 上游升版後還留著衝突補丁。修法:每個補丁都要對新版本刷新一次,已被上游吸收的就刪掉。

接下來可以看什麼

如果套件已經能乾淨建置,下一步就可以整理 changelog、把套件上傳到對應的 Ubuntu archive,並延伸閱讀 Ubuntu 的 Rust 回補與補丁維護文件。