GNU Guix
GNU Guix 是一个提供事务性、可复现性以及按用户管理的软件包管理器。
虽然 Guix 可以独立使用,并提供一个完整的 GNU 发行版以及内核,但你也可以将 Guix 软件包管理器安装在 Arch Linux 上,从而在使用更传统且成熟的类 Unix 系统作为基础的同时,让用户能够使用 Guix。
有关 Guix 提供的按用户管理的软件包命令的详细信息,请参阅 Guix 手册。
安装[编辑 | 编辑源代码]
在 Arch Linux 上,你可以使用 AUR 或按照《Guix Manual》中的说明手动安装 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 store)/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 安装中不是问题。 - 自 13.05.2018 起,如果 BUILDDIR 环境变量指向 tmpfs 挂载,则在 makepkg 编译过程中 guix-environment-container 测试会失败。
GNU Guix 可在 AUR 中以 guixAUR 的形式获取。如 PKGBUILD
所述,需要先添加 Guix 发行者的 PGP 密钥。
Guix 通过使用无特权的构建用户账户来运行构建过程,从而提高了构建的可重复性(reproducible)。因此,如果想同时编译 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
。
如果将 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 store /gnu
以及 /var/guix
和 /var/log/guix
。
删除 /usr/local/share/info
和 /usr/local/bin
中的过期符号链接。
同时删除 /etc/guix/acl
和 Guix 特有的 shell 完成文件。