跳至內容

为避免本站因各种原因无法访问,建议用户安装 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 完成文件。