警告: 本文章可能会出现部分没说清楚的地方,欢迎补充。
准备工作
- 一个 alpine 容器
- 一双手
安装依赖
1 | $ sudo apk add abuild |
编写 APKBUILD
一个简单的 APKBUILD 示例:
1 | # Maintainer: username <username@mail.com> |
一些常见的选项解释:
- pkgname 软件包名称
- pkgver 软件包版本
- pkgrel 软件的附加版本,例如这里的
lzip (1.24.1-r0)
:
1 | user@localhost ~/a/s/frp (main)> sudo apk add abuild |
- pkgdesc 软件包描述
- url 项目网址,可以贴github项目
- arch 目标架构,可以通过查看软件源得知
- license 软件许可
- makedepends 构建所需依赖
- source 软件源码获取,只支持.tar.gz格式,例如:
1 | source=" |
- builddir 编译软件包的目录,例如如果要在xxx文件夹下编译就写xxx
- prepare函数 可以填写在编译前的一些前置依赖构建,例如
1 | prepare() { |
这样就可以在准备阶段下载go软件包
- build函数 一般填写编译指令,例如 make
- install函数 一般填写安装指令,例如 make install
- sh512sums 使用 abuild checksum自动填充:
1 | user@localhost ~/a/s/frp (main)> abuild checksum |
当然也可以编写例如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 |
-------------本文结束感谢您的阅读-------------