Lilac 常見問題

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

打包日誌

建立縮圖錯誤:檔案遺失
tailf-lilac-log 輸出截圖

Q: 如何能夠看到 lilac 打包的完整日誌?

在社區編譯機上 lilac 的日誌存放目錄為 /home/lilydjwg/.lilac。共有兩種日誌可以查看:

  • (舊)JSON 格式的 build-log.json(或者舊的build.log):全量的打包結果日誌,信息為某一個包打包是否成功,時間戳,以及打包用時。
  • 存於 PostgreSQL 數據庫的日誌:取代上邊的 JSON 格式日誌,包含打包時間、版本、觸發打包原因、結果、用時、CPU 與內存使用量等信息。數據庫定義見 dbsetup.sql。有用的 SQL 語句見 useful.sql。請向管理員申請訪問權限。使用 tailf-build-log腳本可以看到持續性、漂亮的終端輸出。
  • log/<TIMESTAMP>目錄: 每一次 lilac 運行的詳細打包日誌,有詳細的錯誤信息,dependency resolve 結果等。目錄名稱由時間戳表示 如:2018-11-10T09:13:01 會包含 UTC+8 2018-11-10 09:13:01 執行的打包任務的日誌信息。目錄下 lilac-main.log 包含全局的打包日誌,而個別包的日誌則是放在 <包名>.log 中。

https://build.archlinuxcn.org/~imlonghao/可以看到近期打包的成敗狀態、時間版本信息以及打包日誌。

自動重新打包

Q: 我的包打包失敗了,lilac 為什麼沒有自動重新打包?

因打包失敗的主要原因為 maintainer 的配置有誤, 而重新打包浪費編譯機資源且大多是無用功, 因而 lilac 目前在包沒有更新的時候, 即使該包上次打包失敗了, 也不會進行 repackage, 這時候需要 maintainer 對包進行更新, 如編輯 PKGBUILD, 修改 lilac.py 等操作後進行提交, lilac 就會在下一次打包作業運行時進行打包。如果覺得不需要修改任何東西,比如打包錯誤表明是由於臨時性網絡故障,可以參考下面的方式手動觸發 lilac 打包。

手動觸發 lilac 打包

可以在 lilac.yaml 的 update_on 字段增加一節 manual 的更新條件,並修改 manual 條件的參數。更新條件可以並列多條,manual 條件可列在其餘更新條件之下。

修改上游的 PKGBUILD

Q: 我想要在打包前對上游的(比如AUR) PKGBUILD 的內容進行修改,我應該如何編寫 lilac.py?

你需要編寫 pre_build 函數, 在 pre_build 里對 PKGBUILD 進行修改, 可以通過 sed 或者推薦使用 lilac 內置的 edit_file 功能.具體例子可以在 repo 內通過 git grep edit_file 來查看,通過使用 lines 對 PKGBUILD 按行讀入, 後通過 print 函數寫入 PKGBUILD, 詳見 archlinuxcn/repo 內。

限制打包頻率

Q: 跟蹤上游 git 倉庫的包打包太頻繁了怎麼辦?

可以在 lilac.yaml 的 update_on 對應項目中添加 lilac_throttle 選項,如:

update_on:
- source: github
  github: vim/vim
  lilac_throttle: 3d

選項值支持天、時、分、秒單位,格式為 AdBhCmDs。僅當上次成功打包距當前超過指定的時間時,此選項才能觸發打包(依舊會檢查更新,因此在 lilac.py 中可以訪問到最新版本信息)。

該選項僅對被添加的 nvchecker 項目生效,因此可以在上游更新頻繁時少打包,同時不影響因為庫更新、手動等原因觸發重新打包。

在本地運行

Q: 我想要在本地機運行 lilac 可以麼?

不建議在本機上運行全量的 lilac,可以在本機運行 lilac 對單個包進行調試,配置 lilac 的方式見 archlinuxcn/lilac。以下是一些注意事項:

  • single_main 不會讀取配置的 build_prefixsingle_main 默認的第一個參數是 makepkg, 如果想要使用其他如 extra-x86_64-build 則需要傳遞 build_prefix 參數給 single_main
  • single_main 不會做 dependency resolution, 因而如果要測試的包在 lilac.py / lilac.yaml 里指定了 dependency 的話是無法構建的。

清理緩存文件

Q: 本地 devtools 打包成功而 lilac 打包出錯,打包日誌顯示 source 中文件校驗不一致,如何讓 lilac 刪除緩存的 source 文件?

以打包者賬戶 ssh 到 build.archlinuxcn.org 上,可以 sudo cleanup-package-files <pkgbase> 方式確認 lilac 歷史打包過程中緩存着的文件,確認後可以 sudo cleanup-package-files --real <pkgbase> 方式刪除那些文件.

重新構建

Q: 我的包在某個官方包大版本升級時需要重新構建,要怎麼做呢?

可以在 lilac.yamlupdate_on 字段配置多項。詳見 nvchecker

禁用自動打包

Q: 我想要禁用 lilac 對我的包進行自動打包,要怎麼做呢?

可以在 lilac.yaml 中加入 managed: false 來禁用自動打包。

更新 AUR

Q: 在成功打包之後,怎麼更新到 AUR 呢?

首先,包在 AUR 上已經存在。添加lilac為共同維護者,然後在 post_build 函數裏調用 update_aur_repo() 函數即可。

注意:-git-hg 等追蹤 vcs 的包,如果僅有版本號變更,將不會同步到 AUR。

注意:請記得在丟棄 AUR 包之前,先把 lilac 從共同維護者移除!

通知郵件太多了怎麼辦?

Q: lilac 每次打包失敗都向我發送郵件,甚至在提交 orphaning issue 之後依舊如此。怎麼辦?

orphaning 流程的話,在包被移除之前會有14天的時間用於等待潛在的接手人。在此期間自動打包正常運作。

如要立即停止打包,請向 lilac.yaml 文件添加 managed: false 指示。或者通過 GitHub issues 或者管理員郵箱(admin@archlinuxcn.org)提交你的請求。請勿將通知郵件標識為垃圾郵件。

其他

Q: 在編譯機上打包出現了 lock 無法使用了,怎麼辦?

首先,請聯繫管理員刪除 lock。其次,請注意:

  1. 不要在剛開始打包的時候快速連續按多次 CTRL+C 快捷鍵取消。
  2. 網絡不好的或者需要長時間保持 SSH 會話連接的請用 GNU screen 或者 tmux,避免因為網絡斷開出現問題。
  3. 不要打錯命令,舉例來說,下面這個命令可以正確打包同時把日誌輸出到文件和標準輸出。
    extra-x86_64-build |& tee log.txt
    
    如果不小心寫成了:
    extra-x86_64-build |& log.txt
    
    就會出現錯誤,所以一定要寫對命令啊。

Q: lilac.yaml 老寫不對怎麼辦?

對 YAML 語法不熟悉的可以先問問谷歌。另外,可以使用 yamllint進行檢查。如果 lilac.yaml 中有正則表達式,請使用引號將其包起來。

另見