GNU Guix

来自 Arch Linux 中文维基
(重定向自Guix

GNU Guix 是一个提供事务性、可复现性以及按用户管理的软件包管理器。

虽然 Guix 可以独立使用,并提供一个完整的 GNU 发行版以及内核,但你也可以将 Guix 软件包管理器安装在 Arch Linux 上,从而在使用更传统且成熟的类 Unix 系统作为基础的同时,让用户能够使用 Guix

有关 Guix 提供的按用户管理的软件包命令的详细信息,请参阅 Guix 手册

注意: Guix 并不是 Arch Linux 的官方包管理器。此外,它仍处于快速开发阶段,部分软件包可能无法构建成功。

安装[编辑 | 编辑源代码]

在 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 完成文件。