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