本文是一个不太一样的视角。
pkgname, check,depends, optdepends 这些略过不表,都是不会写错的。
安装的本质,是把一个包(压缩包,etc)里的 lib, so, exe, dll, (定义域 A) 等放到指定的位置(值域 B)。
于是我们需要描述 A → B 的这种变换 f。就是 PKGBUILD
变换需要参考系。在 PKGBUILD 里,有 2 个参考系,
$pkgdir
和 $srcdir
. 变换的“函数”就是 install, mv, cp, mkdir 等这些内置 bin or 指令。$pkgdir 和 $srcdir 是两个虚拟出来的环境。
$pkgdir 是打的包原生的形状。比如打 deb 包时,
tar xpf dataxxxx
,包就分散到了各种地方。全是在 $srcdir
这个 fakeroot 下。当然也可以 -C $pkgdir 一步完成 extract && move.然后我可以对文件进行一系列微调,比如 sed, patch,chmod,
find xxx -type -f -exec chmod ...
等。然后执行一系列指令
$pkgdir/xxxx
to $srcdir/yyyy
描述文件的转移。比如我希望把 xx.so 在安装后放到 /usr/bin 里去。但是这个目录需要 root, 提权本身又很危险。那就在 PKGBUILD 里把 xx.so 放到 $srcdir/usr/bin 里,当一切尘埃落定后,
$srcdir/xxxx
映射到 /xxxx
。这样的好处是啥呢?
- 在安装时不会提权,安全
- 即使安装中断,中间的文件都在 $pkgdir $srcdir 这两个 fakeroot 里面放着,不会影响到系统的运行。
本文由双拼打成,非常轻松。