跳转至内容

Guix

来自 ArchWiki


GNU Guix 是一个提供事务性、可重现且针对每个用户的软件包管理器。

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

请参阅 Guix 手册 以获取有关 Guix 为用户提供的个人软件包管理命令的信息。

注意 Guix 不是 Arch Linux 的官方软件包管理器。它目前仍处于密集开发阶段。某些软件包可能会构建失败。

安装

在 Arch Linux 上,您可以使用 AUR 或按照 Guix 手册中的说明手动安装 Guix。使用 AUR 安装的优点是 pacman 能感知到该软件包以及 /usr 文件树中的额外文件。但与其他 AUR 软件包不同,卸载该软件包不会撤销整个 Guix 安装。由于 Guix 本身就是一个软件包管理器且可以自行更新,您仍然需要手动卸载通过 Guix 安装的文件(无论您是通过 AUR 还是手动安装的)。因此,在更新一次 Guix 之后,AUR 的优势实际上变成了劣势,因为 /usr 文件树中会出现许多不必要的文件,它们属于 Guix AUR 软件包但已不再被 Guix 使用。因此,请考虑使用手动安装。

手动安装

关于手动安装,请参阅 Guix 手册的Installation 章节。最简单的方法是使用其中链接的 shell 安装脚本。该安装程序也可以通过 AUR 作为 guix-installerAUR 安装。

截至 2021 年 12 月,该脚本将文件安装到以下位置

  • /gnu/store, /var/guix (Guix 存储库)
  • /usr/local/share/info, /usr/local/bin, (仅符号链接)
  • /root/.config/guix (指向当前 profile 的符号链接)
  • /etc/guix/acl, (用于替代服务器的密钥)
  • /etc/profile.d/guix.sh, (设置环境变量以将当前的 Guix profile 置于 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 官方替代服务器 下载并使用二进制软件包(“substitutes”)

# 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 存储库 /gnu 以及 /var/guix/var/log/guix。移除 /usr/local/share/info/usr/local/bin 中失效的符号链接。同时移除 /etc/guix/acl 和 Guix 特有的 shell 补全文件。

© . This site is unofficial and not affiliated with Arch Linux.

Content is available under GNU Free Documentation License 1.3 or later unless otherwise noted.