GNU Guix
GNU Guix 是一個提供事務性、可復現性以及按用户管理的軟件包管理器。
雖然 Guix 可以獨立使用,並提供一個完整的 GNU 發行版以及內核,但你也可以將 Guix 軟件包管理器安裝在 Arch Linux 上,從而在使用更傳統且成熟的類 Unix 系統作為基礎的同時,讓用户能夠使用 Guix。
有關 Guix 提供的按用户管理的軟件包命令的詳細信息,請參閱 Guix 手冊。
安裝[編輯 | 編輯原始碼]
在 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 完成文件。