打包

出自Arch Linux 中文社区 维护者 Wiki
跳至導覽 跳至搜尋

使用 lilac 自動更新包

使用 lilac 自動打包需要在與 PKGBUILD 同一目錄下建立 lilac.yaml(必要)與lilac.py(可選)等設定檔。一項設定值可以寫成 lilac.yaml 最上層的 key 或 lilac.py 的全域變數。需注意 YAML 和 Python 的格式略有不同。例如,讓 lilac 隨著同名的 AUR 包更新可以在 lilac.yaml 中寫

update_on:
  - source: aur

當相同的設定值在 lilac.py 與 lilac.yaml 都有出現時, lilac.yaml 中的值優先權較高。一般推薦將設定值寫在 lilac.yaml 中,除非有需要撰寫 Python 代碼。

lilac.yaml 文件寫法參照: https://archlinuxcn.github.io/lilac/

lilac 的運作細節,見 lilac 條目。update_on 中的寫法,請見 nvchecker

常見的 lilac.py 與 lilac.yaml 寫法

修正 AUR 的 PKGBUILD

如果一個包設定為跟隨 AUR,但需要對 PKGBUILD 修改(例如:依賴包更新導致打包失敗),有以下兩種途徑:

  • update_on 中取消跟隨 AUR,並直接修改 PKGBUILD
  • 在 pre_build() 中使用 edit_file() 修改 PKGBUILD

第二種方法適用於修改的部份不會太複雜,且需要長期存在的變更(例如:移除與官方 group 重複的項目)。

手動打包

使用 Arch Linux 官方打包工具 devtools 打包。如果依賴 cn 源中的包,可以使用帶有 cn 的 devtools-cn 工具,不過由於依賴可能並不是最新的,並不推薦。

在服務器上手動打包流程簡要說明如下:

  1. 登錄編譯機 (build.archlinuxcn.org),克隆 repo 倉庫到自己的主目錄中(或者也可以只上傳需要的 PKGBUILD 等文件)。可以使用 tmux/byobu 或者 mosh,以避免網絡突然中斷造成問題。使用 tmux 時,如果網絡中斷,您可以再次登錄並使用 tmux attach 來繼續工作。
  2. 在自己維護的包的打包目錄下,執行 extra-x86_64-build 來打包 64 位軟件包,multilib-build 來打包 lib32 的軟件包。如果是 any 的包,建議使用 extra-x86_64-build 命令來打包。如果包依賴位於 archlinuxcn 里的軟件包,可將命令中的 extra 替換為 archlinuxcn。但請注意,archlinuxcn 的包更新會有延遲,因此如果一個包依賴另一個剛打好的包,那麼可能會出問題。你也可以給打包命令傳遞 -- -I a.pkg.tar.xz -I b.pkg.tar.xz 這樣的參數來指定預先安裝本地的包文件。
  3. 打包完成後,打好的包文件在 PKGBUILD 所在目錄下,直接將包文件移動到 ~/repo 目錄(軟鏈接到 /home/repo; 如果不存在可以自行建立)下即可,無需分架構目錄。該包文件被推送到社區倉庫後將自動刪除。簽名文件也應當放到這個目錄。注意如果PKGBUILD有更新,需要先將本地的git倉庫push到github上,再將文件移動至 ~/repo。)
  4. 以上 archlinuxcn 打包腳本支持自動處理官方倉庫(不含 testing(archlinuxcn 中所包含的包的依賴. 如果維護的包依賴其他不在這些倉庫中的包,可以首先將依賴的包(例如64位依賴包名稱為 depends-package-0.1.1-1.x86_64.pkg.tar.xz)下載到本地,然後執行 extra-x86_64-build -- -I depends-package-0.1.1-1.x86_64.pkg.tar.xz 來打包。如果有對其它倉庫中的包或 testing/staging 中包的需求, 歡迎對 devtools-cn 提交 pull request.

如果是在本地打包,請將包文件上傳至編譯服務器自己主目錄下的臨時目錄 ,上傳完畢後移動到 /home/repo 目錄,以避免網絡中斷或者其它原因造成不完整的包被添加到源中。工作方式同第3條。

注意申請當維護者最後提到的一點:請務必將所打包的 PKGBUILD 加入 git 倉庫中(並 push 上來),否則該包可能會被自動清除。

在 push 之前,可以在本地倉庫配置一下 pre-commit hook,用於在提交前檢查問題。配置方法如下:

pacman -Syu --needed python-yaml python-jsonschema
ln -sr pre-commit .git/hooks/pre-commit

需要注意的地方

split package

一般而言,split package 不需要做額外處理,只需要將其 base 包放入倉庫即可。

不過需要注意的是,這假設該包的 PKGBUILD 中對各個包擁有相應的 package_xxx 函數。如果不是這種情況,則需要手動創建 package.list 文件並在其中每行一個列出各個包(參考 firefox-nightly)。

刪除包 lilac 打包產生的文件

有時候,由於 git 庫 URL 變更,或者源碼文件的一些變化,導致打包報錯,需要刪除已緩存的源碼文件,或者清理其它產生的文件,可在編譯機上執行 sudo cleanup-package-files <pkgname> 列出將要刪除的文件,再通過添加 --real 參數執行刪除。

另見

外部文章