本文是一个不太一样的视角。
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

这样的好处是啥呢?
  1. 在安装时不会提权,安全
  1. 即使安装中断,中间的文件都在 $pkgdir $srcdir 这两个 fakeroot 里面放着,不会影响到系统的运行。

本文由双拼打成,非常轻松。
Loading...
Steven Lynn
Steven Lynn
喂马、劈柴、周游世界
最新发布
我与 Dify 的半年
2025-3-9
我的2022年终小结
2024-11-9
记录雅思考试经历与一点学习心得
2024-11-9
Hackergame 2024 思路小结
2024-11-9
黑客松、日本、入职:我的2024下半年的总结
2024-11-9
NotionNext:基于Notion和NextJS的开源博客
2024-11-9