构建自己的 AUR 软件包
最近在写装机脚本的时候,发现我以前在网上随便找的 SDDM 主题没有对应的 AUR 包,为了方便以后安装,干脆就打一个包好了,顺便把里面英文的提示改成中文的,也免去了手动装依赖的麻烦
前期准备
AUR 账号
注册 AUR 账号,注意,不同于 ArchWiki 的账号
必要环境安装
确保已安装完整的 base-devel
1 | paru -S --needed base-devel |
安装 PKGBUILD 检查工具 namcap (可选)
1 | paru -S namcap |
makepkg
pacman 提供了 makepkg 脚本来帮助自动化地构建 packages
makepkg 通过 /etc/makepkg.conf 进行配置,一般不需要进行配置
如果有需求可以参考 makepkg - ArchWiki
构建 AUR 包
总体上分为两步,编写 PKGBUILD 文件,然后使用 makepkg 来构建出 AUR 包
编写 PKGBUILD 文件
pacman 自带有几个 PKGBUILD 的例子
1 | /usr/share/pacman |
PKGBUILD 的语法和 bash 一致,同时内置了两个重要变量
[!NOTE] srcdir
This points to the directory where makepkg extracts or symlinks all files in the source array.
[!NOTE] pkgdir
This points to the directory where makepkg bundles the installed package, which becomes the root directory of your built package.
- srcdir 就是解压后的 source 所在的文件夹的绝对路径
- pkgdir 会被当作系统的根目录
官方的 PKGBUILD 示例写的非常详细,实际上我这种简单的需求是用不着那么多变量的,以下是我的 PKGBUILD
1 | pkgname=sddm-swish-zh #包名 |
除了必要的包信息,其中最重要的就是 source 变量和 package 函数了,source 变量的值就是源码的所在,一般是一个 HTTP 或 FTP 地址,可以通过在前面加 name::
的方式来重命名下载下来的压缩包
package 函数会在一切就绪后执行,在 package 函数之前还有 prepare、build、check 函数用于执行一些准备、编译构建、检查测试之类的工作,因为我的包不需要从源码编译,所以直接在 package 函数里进行简单的复制就好了
此外,可以在 depends 数组内指定依赖包,md5sums 是针对下载下来的 source 压缩包的,可以使用 md5sum 工具计算,也可以不写这个数组,或者用 ‘SKIP’ 来跳过某个数组元素的检查
编写完 PKGBUILD ,就可以在本地安装软件包了
测试软件包
在 PKGBUILD 所在文件夹尝试生成软件包,makepkg 会自动寻找当前文件夹下的 PKGBUILD
1 | makepkg |
之后会得到
1 | ./Swish |
可以看出 makepkg 生成的 AUR 包格式$pkgname-$pkgver.pkg.tar.gz.zst
看看这个包的信息是否符合你的预期,以我的包为例
1 | paru -Qlp swish-zh-sddm-theme-git-1.0-1-any.pkg.tar.zst |
尝试安装卸载 AUR 包
1 | paru -U swish-zh-sddm-theme-git-1.0-1-any.pkg.tar.zst |
检查包的逻辑性
1 | namcap PKGBUIL[]()D |
以上都没什么问题就可以上传至 AUR 了
上传至 AUR 仓库
- 将 SSH 公钥添加到 AUR 账户
- 在 PKGBUILD 所在文件夹初始化 Git 仓库(文件夹应尽量干净 ),并添加远程 AUR 仓库,仓库名是你的软件包名
1 | git init |
- 生成 .SRCINFO 文件并提交
1 | makepkg --printsrcinfo > .SRCINFO |
另外,本地的分支名一定要是 master ,而不能是其他的
1 | git branch -m <原分支名> master # 分支名改为 master |
一段时间后,就可以通过 paru -Ss
查找到打包的软件了
参考资料
构建自己的 AUR 软件包