Guix

出自 ArchWiki


GNU Guix 是一个软件包管理器,提供事务性、可重现的、基于用户的软件包管理。

虽然 Guix 可以独立使用,并提供完整的 GNU 发行版和内核,但您可以将 Guix 软件包管理器安装在 Arch Linux 之上,以便在用户使用更传统和成熟的类 Unix 系统作为基础的同时,可以使用 Guix

请参阅 Guix 手册,了解有关 Guix 向用户提供的基于用户的软件包管理命令的信息。

注意: Guix 不是 Arch Linux 的官方软件包管理器。它也仍处于积极开发阶段。某些软件包可能无法构建。

安装

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