Arch 打包准则 - Arch Linux 中文维基

Arch 打包准则**

在为 Arch Linux 构建软件包时,您应该遵循以下的 软件包指导原则 ,尤其是当打算贡献新软件包至 Arch Linux 时。同时需要阅读 PKGBUILD(5)makepkg(8) man 手册

本页中列出的重要项将不再于其它软件包指导页中指出,这些指导页将作为以下准则的附加内容。

提交到 Arch 用户软件仓库 (AUR) 的软件包需要额外遵守 AUR 提交准则

可在 /usr/share/pacman/ 目录 下的 .proto 文件中查看更多 PKGBUILD 示例。

打包规则

optdepends=('cups: printing support'
            'sane: scanners support'
            'libgphoto2: digital cameras support'
            'alsa-lib: sound support'
            'giflib: GIF images support'
            'libjpeg: JPEG images support'
            'libpng: PNG images support')

例子取自 wine 软件包。这些信息在安装和升级时会自动打印,所以 不要 将这些信息加入.install 文件。

软件包命名

软件包版本号

软件包依赖

软件包关联

软件源

_tag=1234567890123456789012345678901234567890 # git rev-parse "v$pkgver"
source=(git+https://$url.git?signed#tag=$_tag)

pkgver() {
    cd "$pkgname"
    git describe
}

具体案例可参考 gitea 包。该操作的原因是,标签可以被强制推送改变指向到的提交,从而导致构建出的包产生变化。强制推送会改变标签的哈希值,从而使用标签的对象哈希值可以确保源的完整性。使用 pkgver() 函数可避免在没有更新 _tag 的情况下不小心修改掉 pkgver 。关于 VCS 源格式的更多信息请参考 VCS 软件打包准则#VCS 源

与上游协作

It is considered best-practice to work closely with upstream wherever possible. This entails reporting problems about building and testing a package.

It is recommended to track upstream with tools such as nvchecker , nvrs AUR or urlwatch to be informed about new stable releases.

目录

/etc 系统关键 配置文件
/usr/bin 二进制文件
/usr/lib
/usr/include 头文件
/usr/lib/*pkg* 模块,插件等
/usr/share/doc/*pkg* 应用程序文档
/usr/share/info GNU Info 系统文件
/usr/share/licenses/*pkg* Application licenses
/usr/share/man 手册
/usr/share/*pkg* 程序数据
/var/lib/*pkg* 应用持久数据
/etc/*pkg* pkg 应用的配置文件
/opt/*pkg* 大的独立程序,例如 Java

Makepkg 的任务

当您使用 makepkg 构建软件包时,makepkg 会自动执行如下功能:

架构

如果该软件包是针对特定架构编译的,那么 arch 数组应该包含 'x86_64' ,否则使用 'any' 生成架构无关的包。

授权协议

请参考 PKGBUILD#license

可复现构建

Arch 正努力使所有软件包具有 可复现性 。打包人员可通过 devtools makerepropkgarchlinux-repro repro 来检查包是否有可复现性:

$ makerepropkg $pkgname-1-1-any.pkg.tar.zst

$ repro -f $pkgname-1-1-any.pkg.tar.zst

如果在构建时需要使用时间戳,可以使用 SOURCE_DATE_EPOCH 环境变量,具体格式可参考 上游文档