GNU Guix - Arch Linux 中文维基

跳转到内容

# GNU Guix

来自 Arch Linux 中文维基
翻译状态：

- 本文（或部分内容）译自 Guix，最近一次同步于 2025-01-16，若英文版本有所更改，则您可以帮助同步与翻译更改的内容。
- 您可以在 ArchWiki 的对应页面找到本文翻译的原始修订历史。
- 本文可能与英文原文存在出入。

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

## 参见

- 官方主页
- 中文社区及 Codeberg 主页
- 官方 Codeberg
- Hilton Chain 关于 Guix 的一些文章
- 视频 Linux 头脑风暴第十二期，GNU GuixLinux 探秘-哔哩哔哩

分类：​

- 函数式包管理器
- GNU

GNU Guix
添加话题