警告: 本文章可能会出现部分没说清楚的地方,欢迎补充。
准备工作
- 一个 alpine 容器
- 一双手
安装依赖
1 | $ sudo apk add abuild |
编写 APKBUILD
一个简单的 APKBUILD 示例:
1 | # Maintainer: username <username@mail.com> |
一些常见的选项解释:
- pkgname 软件包名称
- pkgver 软件包版本
- pkgrel 软件的附加版本,例如这里的
lzip (1.24.1-r0)
:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15user@localhost ~/a/s/frp (main)> sudo apk add abuild
fetch https://mirrors.bfsu.edu.cn/alpine/edge/main/aarch64/APKINDEX.tar.gz
fetch https://mirrors.bfsu.edu.cn/alpine/edge/community/aarch64/APKINDEX.tar.gz
(1/9) Installing attr (2.5.2-r0)
(2/9) Installing libcap-getcap (2.69-r1)
(3/9) Installing fakeroot (1.33-r0)
(4/9) Installing lzip (1.24.1-r0)
(5/9) Installing openssl (3.2.1-r0)
(6/9) Installing patch (2.7.6-r10)
(7/9) Installing pkgconf (2.1.1-r0)
(8/9) Installing abuild (3.12.0-r5)
Executing abuild-3.12.0-r5.pre-install
(9/9) Installing abuild-sudo (3.12.0-r5)
Executing busybox-1.36.1-r19.trigger
OK: 164 MiB in 103 packages - pkgdesc 软件包描述
- url 项目网址,可以贴github项目
- arch 目标架构,可以通过查看软件源得知
- license 软件许可
- makedepends 构建所需依赖
- source 软件源码获取,只支持.tar.gz格式,例如:
1
2source="
xxx.tar.gz::<源码下载url>" - builddir 编译软件包的目录,例如如果要在xxx文件夹下编译就写xxx
- prepare函数 可以填写在编译前的一些前置依赖构建,例如这样就可以在准备阶段下载go软件包
1
2
3prepare() {
go mod download
} - build函数 一般填写编译指令,例如 make
- install函数 一般填写安装指令,例如 make install
- sh512sums 使用 abuild checksum自动填充:
1
2
3
4
5
6
7user@localhost ~/a/s/frp (main)> abuild checksum
>>> frp: Fetching v0.56.0.tar.gz::https://github.com/fatedier/frp/archive/refs/tags/v0.56.0.tar.gz
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 1054k 0 1054k 0 0 467k 0 --:--:-- 0:00:02 --:--:-- 1291k
>>> frp: Updating the sha512sums in /home/user/alpine-software-repos/source/frp/APKBUILD...
当然也可以编写例如post-install脚本来在安装后进行一些初始化功能。
一些常见变量的解释
- $srcdir 一般为自动设定
- $pkgname APKBUILD 中设定的软件包名
- $pkgver APKBUILD 中设定的软件包版本
构建
执行
1 | abuild -r |
构建的软件包在用户文件夹下的package文件夹
下面是一个详细的构建流程,以构建frp为例:
1 | user@localhost ~/a/s/frp (main)> sudo abuild -r -f -F |
搭建软件源
创建文件夹
1 | $ mkdir -p /var/www/root/alpine |
初始化新的APK仓库
1 | apk index -o APKINDEX.tar.gz /var/www/root/alpine/*.apk |
开启nginx
1 | nginx -s reload |
-------------本文结束感谢您的阅读-------------