39 个版本
0.0.0-rc.65 | 2024 年 3 月 22 日 |
---|---|
0.0.0-rc.64 | 2023 年 1 月 10 日 |
0.0.0-rc.63 | 2022 年 11 月 23 日 |
0.0.0-rc.62 | 2022 年 4 月 29 日 |
0.0.0-rc.47 | 2020 年 11 月 13 日 |
375 在 命令行工具
87 每月下载量
145KB
4K SLoC
PacMan Repo Builder
从一组 PKGBUILD 目录构建自定义 pacman 仓库。
运行时依赖
- pacman
- makepkg
- libalpm.so.13
- libgit2.so
使用方法
⚠ 警告: 此程序旨在在 docker 容器中使用。
清单文件
清单文件始终命名为 build-pacman-repo.yaml
。它包含构建 pacman 仓库的指令。
示例清单文件
# build-pacman-repo.yaml
global-settings:
repository: repo/repo.db.tar.gz
container: container
read-build-metadata: either
record-failed-builds: failed-builds.yaml
install-missing-dependencies: false
clean-before-build: false
clean-after-build: false
force-rebuild: true
pacman: pacman
arch-filter: [x86_64]
check: inherit
packager: Bob <[email protected]>
allow-failure: true
dereference-database-symlinks: true
members:
- directory: foo
- directory: bar
read-build-metadata: pkgbuild
clean-before-build: false
force-rebuild: true
allow-failure: false
- directory: bar
install-missing-dependencies: true
clean-after-build: false
check: enabled
pacman: yay
- directory: baz
read-build-metadata: srcinfo
install-missing-dependencies: false
clean-before-build: true
clean-after-build: false
force-rebuild: true
check: disabled
pacman: yay
allow-failure: false
字段说明
顶层
字段 | 类型 | 描述 |
---|---|---|
global-settings |
对象 | 包含从其中继承所有成员的全局设置。 某些设置可以通过成员自定义属性覆盖。 |
member |
列表 | 列出所有成员。 |
global-settings
的自有字段
字段 | 类型 | 必需/可选 | 描述 |
---|---|---|---|
repository |
字符串 |
必需 | 仓库文件的路径(通常以 .db.tar.gz 结尾)。在每次构建后,它将被传递到 repo-add 命令。 |
container |
字符串 |
可选,默认 = . |
包含所有构建目录(即成员)的目录。 |
record-failed-builds |
字符串 |
可选 | 如果指定,则跳过旧的失败构建,并将新的失败构建添加到文件中。 |
arch-filter |
"任何" |字符串[] |
可选,默认 = any |
指定要构建的所有 CPU 架构。 可以是 any 或字符串数组(例如 [x86_64, i686] )。 |
packager |
字符串 |
可选,默认 = Unknown Packager |
生产包的个人的或实体的身份(即运行此程序的人)。 |
dereference-database-symlinks |
布尔值 |
可选,默认 = false |
如果 true ,所有 *.db 和 *.files 符号链接将被转换为真实文件。 |
member
的自身字段
字段 | 类型 | 必需/可选 | 描述 |
---|---|---|---|
目录 |
字符串 |
必需 | 每个成员构建目录的路径(相对于 global-settings.container )。 |
共享字段:存在于 global-settings
和 member
中的字段。如果 global-settings
和 member
都包含一个字段,则 member
的字段将被优先考虑。
字段 | 类型 | 默认值 ( global-settings ) |
描述 |
---|---|---|---|
read-build-metadata |
或者|srcinfo|pkgbuild |
或者 |
读取构建元数据的位置srcinfo :从 .SRCINFO 文件中。pkgbuild :从 makepkg --printsrcinfo 的输出中。either :如果存在 .SRCINFO 文件,则从该文件中读取,否则执行 makepkg --printsrcinfo 。 |
install-missing-dependencies |
布尔值 |
false |
在每次构建之前安装 depends 和 makedepends 中找到的包。 |
clean-before-build |
布尔值 |
false |
在每次构建之前清理 $srcdir 和 $pkgdir 。 |
clean-after-build |
布尔值 |
false |
在每次构建后进行清理。 |
force-rebuild |
布尔值 |
false |
即使目标包已存在,也强制构建。 |
check |
启用|禁用|继承 |
继承 |
是否向 makepkg 命令添加 --check 或 --nocheck 。 |
pacman |
字符串 |
pacman |
要使用的包管理器程序。 程序必须能够识别 pacman 的 CLI 参数和选项。 |
allow-failure |
布尔值 |
false |
如果 false ,则在构建失败时立即退出。如果 true ,则在发生构建失败时忽略。 |
生成清单文件
在清单文件中列出每个成员可能是一项繁琐的工作。因此,当没有带有自定义属性的成员时,您可以生成反映构建目录的清单文件
build-pacman-repo print-config \
--repository $repo_dir/$repo_name.db.tar.gz \
--container build-directories \
--require-pkgbuild \
--require-srcinfo \
--with-install-missing-dependencies true \
> build-pacman-repo.yaml
注意:将 $repo_dir
替换为您的仓库目录路径。此目录将包含所有构建的包。 注意:将 $repo_name
替换为您的仓库文件名称。此文件将由 pacman
获取以检查更新。
将 /usr/bin/makepkg
替换为允许以 root 运行的版本
正常的 makepkg
脚本不允许以 root 运行。虽然它在用户的机器上可能是有意义的,但它会给 Docker 容器带来不便。
build-pacman-repo patch-makepkg --replace
构建 pacman 仓库
build-pacman-repo build
注意:确保当前工作目录中存在 build-pacman-repo.yaml
文件。
打印帮助信息
build-pacman-repo help
build-pacman-repo --help
build-pacman-repo help $command
build-pacman-repo $command --help
GitHub Action
pacman-repo-builder/action 允许在 Arch Linux 容器上运行 build-pacman-repo
。
实际应用
- https://github.com/KSXGitHub/aur-packages-builder
- https://github.com/KSXGitHub/cargo-scripts-builder
- https://github.com/KSXGitHub/personal-pacman-packages
- https://github.com/KSXGitHub/personal-crates
常见问题解答
这个程序做什么?
其主要目的是构建一个吃豆人代码库。当调用 build
命令时,它将读取所有源信息,无论是从 .SRCINFO
还是 PKGBUILD
,然后按依赖关系排序,然后逐个构建。
为什么需要在容器内运行这个程序?
为了使这个程序正常工作,它必须对宿主系统进行一些修改,例如
- 将
/usr/bin/makepkg
替换为允许以 root 权限运行的一个版本,以便在 CI 环境中使用。 - 安装所有构建的包,以防其他包依赖于它们。
一个简单的 shell 脚本就足够了
如果你的用例很简单,那很好,只需要使用 shell 脚本。如果你自信可以仅用 shell 脚本提供所有功能,那也很好,但我已经通过这个程序提供了它们,所以你不需要了。
为什么是 YAML?
它很棒。
许可证
依赖关系
~16MB
~378K SLoC