Lilac 常见问题
打包日志
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_prefix
,single_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.yaml 的 update_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。其次,请注意:
- 不要在刚开始打包的时候快速连续按多次 CTRL+C 快捷键取消。
- 网络不好的或者需要长时间保持 SSH 会话连接的请用 GNU screen 或者 tmux,避免因为网络断开出现问题。
- 不要打错命令,举例来说,下面这个命令可以正确打包同时把日志输出到文件和标准输出。如果不小心写成了:
extra-x86_64-build |& tee log.txt
就会出现错误,所以一定要写对命令啊。extra-x86_64-build |& log.txt
Q: lilac.yaml 老写不对怎么办?
对 YAML 语法不熟悉的可以先问问谷歌。另外,可以使用 yamllint进行检查。如果 lilac.yaml 中有正则表达式,请使用引号将其包起来。