Guix
GNU Guix 是一个软件包管理器,提供事务性、可重现的、基于用户的软件包管理。
虽然 Guix 可以独立使用,并提供完整的 GNU 发行版和内核,但您可以将 Guix 软件包管理器安装在 Arch Linux 之上,以便在用户使用更传统和成熟的类 Unix 系统作为基础的同时,可以使用 Guix。
请参阅 Guix 手册,了解有关 Guix 向用户提供的基于用户的软件包管理命令的信息。
安装
在 Arch Linux 上,您可以按照 Guix 手册中的描述,使用 AUR 或手动安装 Guix。使用 AUR 安装的优势在于 pacman 了解该软件包以及 /usr 文件树中的额外文件。但与其他 AUR 软件包相反,卸载该软件包不会解除整个 Guix 安装。由于 Guix 本身就是一个软件包管理器,并且它也可以自行更新,因此您仍然需要手动卸载通过 Guix 安装的文件(无论您安装的是 AUR 软件包还是手动安装)。因此,在 Guix 更新一次后,AUR 的优势实际上会变成劣势,因为 /usr 文件树中将存在许多不必要的文件,这些文件是 Guix AUR 软件包的一部分,但 Guix 不再使用它们。因此,请考虑使用手动安装。
手动安装
对于手动安装,请参阅 Guix 手册的“安装”章节。最简单的方法是使用其中链接的 shell 安装脚本。也可以从 AUR 安装安装程序,如 guix-installerAUR。
截至 2021 年 12 月,此脚本将文件安装到以下位置
/gnu/store,/var/guix(Guix 仓库)/usr/local/share/info,/usr/local/bin, (仅符号链接)/root/.config/guix(当前配置文件的符号链接)/etc/guix/acl, (用于替换服务器的密钥)/etc/profile.d/guix.sh, (设置环境变量以将当前 Guix 配置文件放在 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 官方替换服务器 下载和使用二进制软件包(“替换项”)
# 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。如果您作为 AUR 软件包安装了 Guix,请使用 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 补全文件。