跳转到内容

为避免本站因各种原因无法访问,建议用户安装 arch-wiki-docs-zh-cnCNRepo 或者 arch-wiki-docs-zh-twCNRepo 离线文档包备用,也可尝试使用经由Cloudflare CDN的替代版本aw.lilydjwg.me

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.fishBashZshFish 的 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 完成文件。