Lilac 常见问题

来自Arch Linux 中文社区 维护者 Wiki
跳转到导航 跳转到搜索

打包日志

tailf-lilac-log 输出截图
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 中有正则表达式,请使用引号将其包起来。

另见