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 补全文件。