Skip to content

lilac 常见问题

Wenxuan edited this page Nov 3, 2020 · 6 revisions

lilac 打包常见问题

Q: 如何能够看到 lilac 打包的完整日志?

在社区编译机上 lilac 的日志存放目录为 /home/lilydjwg/.lilac. 共有两种日志可以查看:

  • build.log: 全量的打包结果日志, 信息为某一个包打包是否成功, 时间戳,以及打包用时.
  • log/<TIMESTAMP>: 每一次 lilac 运行的详细打包日志,有详细的错误信息, dependency resolve 结果等. 文件名由时间戳表示 如: 2018-11-10T09:13:01 表示 UTC+8 2018-11-10 09:13:01 执行的打包任务的日志信息

另外,你可以通过 Archlinuxcn Packages Dashboard 查看最近的打包状态和打包日志。

Q: 我的包打包失败了,lilac 为什么没有自动重新打包?

因打包失败的主要原因为 maintainer 的配置有误, 而重新打包浪费编译机资源且大多是无用功, 因而 lilac 目前在包没有更新的时候, 即使该包上次打包失败了, 也不会进行 repackage, 这时候需要 maintainer 对包进行更新, 如編輯 PKGBUILD, 修改 lilac.py 等操作后进行提交, lilac 就会在下一次打包作业运行时进行打包。如果觉得不需要修改任何东西,比如打包错误表明是由于临时性网络故障,可以参考下面的方式手动触发 lilac 打包。

Q: 如何手动触发 lilac 打包?

可以在 lilac.yaml 的 update_on 字段增加一节 manual 的更新条件,并修改 manual 条件的参数。更新条件可以并列多条,manual 条件可列在其余更新条件之下。

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: 我想要在本地机运行 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: 我的包在某个官方包大版本升级时需要重新构建,要怎么做呢?

很多包需要在 Python、Ruby、boost-libs、icu 等官方包升级之后重新构建。这时可以在 lilac.yaml 的 update_on 字段里添加项目,如:

- archpkg: python
  from_pattern: '^(\d+\.\d+)\..*'
  to_pattern: '\1'

考虑到很多包都会有类似的需求,此字段支持别名。比如上述配置可以使用名为 python 的别名:

- alias: python

当前已定义的别名可以看 lilac2/aliases.yaml

注意:别名是 lilac.yaml 在加载时被解释的。nvchecker 并不支持,在 lilac.py 中也读取不到。