Guix
GNU Guix 是一个提供事务性、可重现且针对每个用户的软件包管理器。
虽然 Guix 可以独立使用并提供一个完整的 GNU 发行版和内核,但您也可以在 Arch Linux 之上安装 Guix 软件包管理器,从而在以更传统且成熟的类 Unix 系统为基础的同时,让用户可以使用 Guix。
请参阅 Guix 手册 以获取有关 Guix 为用户提供的个人软件包管理命令的信息。
安装
在 Arch Linux 上,您可以使用 AUR 或按照 Guix 手册中的说明手动安装 Guix。使用 AUR 安装的优点是 pacman 能感知到该软件包以及 /usr 文件树中的额外文件。但与其他 AUR 软件包不同,卸载该软件包不会撤销整个 Guix 安装。由于 Guix 本身就是一个软件包管理器且可以自行更新,您仍然需要手动卸载通过 Guix 安装的文件(无论您是通过 AUR 还是手动安装的)。因此,在更新一次 Guix 之后,AUR 的优势实际上变成了劣势,因为 /usr 文件树中会出现许多不必要的文件,它们属于 Guix AUR 软件包但已不再被 Guix 使用。因此,请考虑使用手动安装。
手动安装
关于手动安装,请参阅 Guix 手册的Installation 章节。最简单的方法是使用其中链接的 shell 安装脚本。该安装程序也可以通过 AUR 作为 guix-installerAUR 安装。
截至 2021 年 12 月,该脚本将文件安装到以下位置
/gnu/store,/var/guix(Guix 存储库)/usr/local/share/info,/usr/local/bin, (仅符号链接)/root/.config/guix(指向当前 profile 的符号链接)/etc/guix/acl, (用于替代服务器的密钥)/etc/profile.d/guix.sh, (设置环境变量以将当前的 Guix profile 置于 PATH 的最前)/etc/bash_completion.d/guix,/usr/share/zsh/site-functions/_guix,/usr/share/fish/vendor_completions.d/guix.fish(Bash, Zsh 和 Fish 的 shell 补全)
此外,它会安装并启用一个名为 guix-daemon.service 的 systemd 服务,并创建用户 guixbuilder01 ... guixbuilder10 以及一个组 guixbuild。
现在启动一个新的登录 shell(或者重启计算机),您就可以开始使用 Guix 了
$ guix install glibc-locales
AUR 软件包安装
- 如果
/bin/sh不是指向 bash 的链接,目前的构建检查会失败,但这在默认的 Arch 安装中不是问题。 - 截至 2018 年 5 月 13 日,如果 BUILDDIR 环境变量 指向 tmpfs 挂载点,guix-environment-container 测试在 makepkg 构建期间会失败。
GNU Guix 在 AUR 中作为 guixAUR 提供。正如 PKGBUILD 中所述,需要首先添加 Guix 分发者的 PGP 密钥。
Guix 通过使用非特权构建用户账户运行构建过程,使构建更具可重现性。因此,如果您希望能够同时构建 n 个软件包(例如为了同时为多个用户提供服务),您应该创建 n 个构建用户账户,以便 Guix 能够并发构建。以下命令按照 Guix 手册 中描述的方式执行此操作
# groupadd --system guixbuild
# uncomment and type e.g. 10 for n below --> have ten users
# for i in `seq -w 1 n`;
do
useradd -g guixbuild -G guixbuild \
-d /var/empty -s `which nologin` \
-c "Guix build user $i" --system \
guixbuilder$i;
done
启用/启动 guix-daemon.service。
您可能希望授权 Guix 从 Guix 官方替代服务器 下载并使用二进制软件包(“substitutes”)
# guix archive --authorize < /usr/share/guix/ci.guix.gnu.org.pub
在 /tmp 之外构建软件包
如果 /tmp 提供的空间不足,可能需要扩展单元文件以使用不同的 TMPDIR 进行构建(详见 Guix 手册)。若要使用 /tmpdir 代替 /tmp 进行构建,请编辑 guix-daemon.service 并添加以下行
[Service] Environment=TMPDIR=/tmpdir
卸载 Guix
停止并禁用 guix-daemon.service,必要时禁用 gnu-store.mount。如果您是将 Guix 作为 AUR 软件包安装的,请使用 pacman 移除 Guix。
如果存在,请移除 /etc/systemd/system/guix-daemon.service, /etc/systemd/system/guix-daemon.service.d, /etc/systemd/system/guix-daemon.service.wants 以及 /etc/profile.d/guix.sh。
现在移除所有 Guix 构建用户及其组
# for i in `seq -w 1 n`; do userdel guixbuilder$i; done # groupdel guixbuild
然后移除 Guix 存储库 /gnu 以及 /var/guix 和 /var/log/guix。移除 /usr/local/share/info 和 /usr/local/bin 中失效的符号链接。同时移除 /etc/guix/acl 和 Guix 特有的 shell 补全文件。