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
新增話題