Archlinux 打包规则

1. 创建pkgbuild

1
touch PKGBUILD 

2. 设置变量

先来看pacman中提供的模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# Maintainer: Your Name <youremail@domain.com>
pkgname=NAME
pkgver=VERSION
pkgrel=1
epoch=
pkgdesc=""
arch=()
url=""
license=('GPL')
groups=()
depends=()
makedepends=()
checkdepends=()
optdepends=()
provides=()
conflicts=()
replaces=()
backup=()
options=()
install=
changelog=
source=("$pkgname-$pkgver.tar.gz"
"$pkgname-$pkgver.patch")
noextract=()
md5sums=()
validpgpkeys=()

prepare() {
cd "$pkgname-$pkgver"
patch -p1 -i "$srcdir/$pkgname-$pkgver.patch"
}
build() {
cd "$pkgname-$pkgver"
./configure --prefix=/usr
make
}

check() {
cd "$pkgname-$pkgver"
make -k check
}

package() {
cd "$pkgname-$pkgver"
make DESTDIR="$pkgdir/" install
}
  • pkgname:你使用的包的名字
  • pkgver:软件版本
  • pkggrel:通常被设置为1,当pkgbuild进行更新时,会进行增加
  • epoch:默认为0, 用于比较和之前发行版之间的新旧程度,当你的发行版之间版本号像opensuse那样诡异(时很有用
  • arch:机器的架构,有X86, ARM, RISC-V, MIPS四种
  • url:包所在的地址
  • license :使用的协议, 著名的协议有MIT, GPL, BSD…
  • depends :相关依赖,安装后保留
  • makedepends :只在安装时需要使用,安装完成后进行删除
  • checkdepends:如果设置了check函数,其中的软件包是运行测试时所需要的
  • optdepends:可选的配置,安装后可以支持完成的体验
  • source:你的软件包归档
  • md5sums, sha1sums, sha224sums, sha256sums, sha384sums, sha512sums, b2sums (arrays) : 用于验证数据传输的完整性
  • build:使用build函数去构建软件包
  • package:将编译好的文件放置到pkd文件夹(fake root),例如$pkgdir/usr/bin会被映射到/usr/bin
  • check:用于执行make check和其他例行测试的地方

3. example

从aur里现抄的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# Maintainer: Ryan Farley <ryan.farley@gmx.com>

pkgname=waynergy
pkgver=0.0.13
pkgrel=1
pkgdesc="Synergy client for wayland compositors"
arch=(x86_64)
url="https://github.com/r-c-f/waynergy"
license=('MIT')
depends=('wayland' 'libxkbcommon' 'libretls')
makedepends=(git meson ninja)
optdepends=(
'wl-clipboard: Clipboard synchronization support'
'gnome-session: Idle inhibition for GNOME'
)
source=("https://github.com/r-c-f/waynergy/archive/refs/tags/v${pkgver}.tar.gz")
md5sums=('8b032d3ac9e33bbebdfafaadf39c5f07')

build() {
cd "$srcdir/${pkgname}-${pkgver}"
arch-meson build
cd build
ninja
}

package() {
cd "$srcdir/${pkgname}-${pkgver}/build"
DESTDIR="$pkgdir" ninja install
install -Dm644 ../LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE"
}

参考

archlinux 中文wiki