Abuild 和助手

来自 Alpine Linux
(重定向自 Abuild

abuild 软件包提供了为 Alpine Linux 创建软件包 所需的脚本。它还实现了构建软件包的功能,以及用于软件包维护的附加命令和选项。对于软件包开发和维护,建议安装 alpine-sdk 元软件包,它除了其他相关工具外,还将安装 abuild 软件包。

apk add alpine-sdk

git 仓库 始终包含脚本、示例文件和 makefile 的最新版本。

设置构建环境

Abuild 需要为系统和用户进行配置。

根据需求编辑文件 /etc/abuild.conf。大多数默认设置可以保留不变,除非您正在为自定义平台开发,在这种情况下,文件中的注释应该会指导您。要编辑的一个字段是 PACKAGER,以便您可以因创建的软件包而获得荣誉(或责备)。

为了使用 abuild 命令,执行 abuild 的用户必须是 abuild 组的成员

# addgroup <yourusername> abuild

注意: 请记住注销并重新登录,以使组更改生效。

对于 abuild,需要公钥/私钥 rsa 密钥对。abuild 软件包中的 abuild-keygen 命令生成并配置安全密钥。

$ doas abuild-keygen -a -i

abuild-keygen 选项

  • -a 在 abuild.conf 中设置 PACKAGER_PRIVKEY=<生成的密钥>
  • -i 使用 sudo 将公钥安装到 /etc/apk/keys 中
  • -h 显示此帮助
  • -n 非交互式。使用默认值
  • -q 静默模式

构建软件包

基本用法

如果您只想从 APKBUILD 文件构建软件包,则只需要两个命令。这两个命令都在当前目录中的 APKBUILD 文件上操作,因此您应该在运行它们之前 cd 进入该目录。

  • abuild checksum:更新源文件的校验和。
  • abuild -r:构建软件包。

手册页 (可通过 man abuild 获取) 描述了 abuild 的所有选项和命令。

在 chroot 中构建

安装软件包 abuild-rootbld

apk add abuild-rootbld

您现在可以使用以下命令,在基于 bubblewrap 的非特权沙箱中从源代码构建软件包

abuild rootbld

rootbld 假定您的 APKBUILD 文件位于类似 aports 的目录结构中,或者您需要将环境变量 APORTSDIR 设置为当前目录。

如果构建过程需要网络访问,则必须在 APKBUILD 中设置 net 选项。

请注意,在 docker 容器内部使用 rootbld 需要 额外的配置

提升软件包版本

工具 abump 是一个实用程序,用于在软件包更新到较新的上游版本时提升 APKBUILD 文件中的 pkgver。 abump 将更新软件包的 pkgver,重建它,并创建一个包含结果更改的新提交。

手册页 (可通过 man abump 获取) 描述了 abump 的所有选项。

更新软件包发布

如果您想提升或重置 APKBUILD 的 pkgrel 值,或者测试您的 APKBUILD 文件,apkgrel可以帮助您。

apkgrel -a|-h|-s NUM|-t|-z [-f] FILE...

apkgrel 选项

  • -a 将当前 pkgrel 加 1
  • -f 强制,即使给定文件格式不正确
  • -h 显示此帮助
  • -s 将 pkgrel 设置为 NUM
  • -t 仅验证文件格式是否正确
  • -z 将 pkgrel 设置为 0

生成新的 APKBUILD

newapkbuild

newapkbuild 工具作为 abuild 软件包的一部分安装,可以生成一个新的 APKBUILD 模板作为起点。手册页 (可通过 man newapkbuild 获取) 描述了 newapkbuild 的所有选项。

如果您不确定您的软件包属于哪个仓库,您可以安全地使用 testing。在您的 aports/testing 目录中构建软件包不是强制性的,但是这样软件包就已经在正确的位置。

提示: 在选择 packagename 时,请遵循 软件包策略 中提到的软件包命名约定。

以下命令将创建一个以给定软件包名称命名的目录,在该目录中放置一个示例/模板 APKBUILD 文件,并在提供变量时填充一些变量。

newapkbuild packagename

如果您正在创建需要 initd 脚本的守护程序软件包,您可以添加 -c 选项,如下所示

newapkbuild -c packagename

这将复制示例 initdconfd 文件到构建目录。还将复制第三个文件 sample.install 文件(我们稍后将讨论这一点)。

apkbuild-cpan

Comprehensive Perl Archive Network (CPAN) 提供了大量的 perl 软件和文档。apkbuild-cpan有助于为来自 CPAN 的 perl 模块创建 APKBUILD。

apkbuild-cpan [create <Module::Name> | check | recreate | update | upgrade]

此命令由 apkbuild-cpan 软件包提供。

apkbuild-pypi

Python Package Index (PyPi) 是 Python 编程语言的软件和库的仓库。 apkbuild-pypi 命令有助于为 PyPI 托管的 python 软件包创建 APKBUILD。

apkbuild-pypi [create <package> | check | recreate | update | upgrade

此命令由 apkbuild-pypi 软件包提供。

签名软件包和索引

abuild-sign

abuild-sign用于签名索引。

abuild-sign [-hq] [-k PRIVKEY] [-p PUBKEY] INDEXFILE...

abuild-sign 选项

  • -h 显示此帮助
  • -k 用于签名的私钥
  • -p 公钥的名称。 apk add 将在 /etc/apk/keys/PUBKEY 中查找

abuild-tar

apkbuild-tar [--hash[=<algorithm>]] [--cut]

apkbuild-tar 选项

  • --hash[=sha1|md5] 从 stdin 读取 tar 存档,预先计算常规条目的哈希值,并在 stdout 上输出 tar 存档
  • --cut 删除文件末尾的 tar 记录

buildrepo

buildrepo 构建整个软件包仓库。

有关完整描述,请参阅 手册页

参见