#pacman #arch-linux #pkgbuild #arch #manifest-file

bin+lib pacman-repo-builder

从一组 PKGBUILD 目录构建自定义 pacman 仓库

39 个版本

0.0.0-rc.652024 年 3 月 22 日
0.0.0-rc.642023 年 1 月 10 日
0.0.0-rc.632022 年 11 月 23 日
0.0.0-rc.622022 年 4 月 29 日
0.0.0-rc.472020 年 11 月 13 日

375命令行工具

Download history 4/week @ 2024-03-24 16/week @ 2024-03-31 2/week @ 2024-05-19 1/week @ 2024-06-30 86/week @ 2024-07-07

87 每月下载量

GPL-3.0 许可证

145KB
4K SLoC

PacMan Repo Builder

Test Crates.io Version

从一组 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-settingsmember 中的字段。如果 global-settingsmember 都包含一个字段,则 member 的字段将被优先考虑。

字段 类型 默认值
(global-settings)
描述
read-build-metadata 或者|srcinfo|pkgbuild 或者 读取构建元数据的位置
srcinfo:从 .SRCINFO 文件中。
pkgbuild:从 makepkg --printsrcinfo 的输出中。
either:如果存在 .SRCINFO 文件,则从该文件中读取,否则执行 makepkg --printsrcinfo
install-missing-dependencies 布尔值 false 在每次构建之前安装 dependsmakedepends 中找到的包。
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

实际应用

常见问题解答

这个程序做什么?

其主要目的是构建一个吃豆人代码库。当调用 build 命令时,它将读取所有源信息,无论是从 .SRCINFO 还是 PKGBUILD,然后按依赖关系排序,然后逐个构建。

为什么需要在容器内运行这个程序?

为了使这个程序正常工作,它必须对宿主系统进行一些修改,例如

  • /usr/bin/makepkg 替换为允许以 root 权限运行的一个版本,以便在 CI 环境中使用。
  • 安装所有构建的包,以防其他包依赖于它们。

一个简单的 shell 脚本就足够了

如果你的用例很简单,那很好,只需要使用 shell 脚本。如果你自信可以仅用 shell 脚本提供所有功能,那也很好,但我已经通过这个程序提供了它们,所以你不需要了。

为什么是 YAML?

它很棒。

许可证

GPLv3 © 黄文凯

依赖关系

~16MB
~378K SLoC