打包

来自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 参数执行删除。

另见

外部文章