在 Raspberry Pi 4 上安裝 NixOS 的失敗嘗試
在製作教學 “Installing NixOS on Raspberry Pi 4(《在 Raspberry Pi 4 上安裝 NixOS》)” 的過程中,我遇到了大量行不通的做法。
我在此彙整這些經驗,以節省他人重試相同步驟的時間。
標準的 NixOS aarch64 映像檔無法使用
當我查看 NixOS 的下載頁面時,發現他們有提供 64 位元 ARM 映像檔。

NixOS 為 64 位元 ARM 系統提供可開機映像檔
「太棒了!」我心想,因為 Pi 4 配備了 64 位元 ARM CPU。但接著 Pi 卻完全無法用該映像檔開機。

Pi 4 無法使用標準的 NixOS ARM 映像檔開機
我後來才得知,NixOS 主要的預先建置 64 位元 ARM 映像檔需要系統支援 UEFI,而 Raspberry Pi 4 並不支援。
最新的 NixOS(23.05)microSD 在 Raspberry Pi 4 上無法使用
NixOS 仍有為 Raspberry Pi 這類單板電腦發布 microSD 映像檔。我嘗試將 nixos-sd-image-23.05.1123.aaef163eac7-aarch64-linux.img 燒錄到 microSD 卡上,但在嘗試套用我的 configuration.nix 時,出現了以下錯誤:
Applying overlay rpi4-vc4-fkms-v3d-overlay to bcm2711-rpi-cm4-io.dtb...
Failed to apply '/nix/store/22l342jmwsaazvnz1zd5qq5m3b3ppsbd-rpi4-vc4-fkms-v3d-overlay-dtbo': FDT_ERR_NOTFOUND
error: builder for '/nix/store/cgv9mmkhwy6gc4y48pfmxnjam46404kr-device-tree-overlays.drv' failed with exit code 1
error: 1 dependencies of derivation '/nix/store/w77gh3p4wzbildmmr2dh1c254qlm3nv4-nixos-system-pinix-23.05.1123.aaef163eac7.drv' failed to build這個錯誤讓我找到了 nixos-hardware 儲存庫中的一個錯誤,但在撰寫本文時尚未有可用的修正。
我可以透過從 configuration.nix 檔案中刪除這一行來避開這個錯誤:
hardware.raspberry-pi."4".fkms-3d.enable = true;但接著安裝過程在稍後仍會失敗:
installing the boot loader...
removing user ‘nixos’
setting up /etc...
removing obsolete symlink ‘/etc/hostid’...
removing obsolete symlink ‘/etc/systemd/pstore.conf’...
removing obsolete symlink ‘/etc/zfs/zpool.d’...
...
umount: ???: umount failed: No such file or directory.如果我在那個時間點將 Pi 重新開機(power cycle),它確實能成功開機進入新的 NixOS 系統,但沒有桌面 GUI,只有終端機:
NixOS 22.11 microSD 映像檔無法在 Raspberry Pi 4 上開機。
更新(2023-08-18):此問題現已修正。
NixOS 22.05 與 22.11 無法在 Pi 4 上開機
在使用 23.05 版 NixOS microSD 映像檔設定失敗後,我改用 nixos-sd-image-22.11.4604.fc95eb4fc3c-aarch64-linux.img 再次嘗試,但仍無法開機。我嘗試了好幾次,結果總是完全沒有訊號,或是顯示綠色畫面:
NixOS 22.11 microSD 映像檔無法在 Raspberry Pi 4 上開機。
我又用 nixos-sd-image-22.05.4694.380be19fbd2-aarch64-linux.img 再試一次,結果也相同。
reboot 指令無法使用
我發現,在使用 sudo nixos-rebuild boot 套用我最初的 configuration.nix 檔案後,reboot 和 shutdown 指令都會失敗:
[nixos@nixos:~]$ reboot
Failed to set wall message, ignoring: Transport endpoint is not connected
Failed to reboot system via logind: Transport endpoint is not connected
Failed to talk to init daemon.
[nixos@nixos:~]$ shutdown -h now
Failed to set wall message, ignoring: Transport endpoint is not connected
Failed to power off system via logind: Transport endpoint is not connected
Failed to talk to init daemon.我透過執行 sudo poweroff --reboot 來避開這個問題。
最新的 Pi 硬體版本無法使用
你可能已經注意到,我的 configuration.nix 檔案依賴於 NixOS/nixos-hardware 儲存庫,但並非最新版本:
nixosHardwareVersion = "ad1114ee372a52aa0b4934f72835bd14a212a642";
...
imports = ["${fetchTarball "https://github.com/NixOS/nixos-hardware/archive/${nixosHardwareVersion}.tar.gz" }/raspberry-pi/4"];我回報了這個錯誤,而來自 NixOS 文件團隊的 Alex Groleau(艾力克斯·葛羅洛)告訴我,在現行版本的 NixOS 上,完全不需要 nixos-hardware 儲存庫。我還沒測試過 NixOS 21.11 是否能在沒有它的情況下安裝,所以目前先予以保留。
升級至新版 NixOS 失敗
儘管從 23.05 NixOS 磁碟映像檔安裝失敗,我仍想透過將 NixOS 從 21.11 就地升級到 23.05 來避開這個問題。不幸的是,這也失敗了。
我嘗試先透過上述流程安裝 21.11,然後使用以下指令重新建置為 23.05:
TARGET_RELEASE="23.05"
sudo nix-channel \
--add "https://nixos.org/channels/nixos-${TARGET_RELEASE}" nixos && \
sudo nix-channel --update && \
sudo nixos-rebuild --upgrade boot && \
sudo reboot該過程最終以與從 23.05 磁碟映像檔安裝時相同的錯誤失敗:
Failed to apply '/nix/store/22l342jmwsaazvnz1zd5qq5m3b3ppsbd-rpi4-vc4-fkms-v3d-overlay-dtbo': FDT_ERR_NOTFOUND
building '/nix/store/w052x98nzkbvmxcmb8wdgmfgqrf8vzv4-smb-dummy.conf.drv'...
error: builder for '/nix/store/cgv9mmkhwy6gc4y48pfmxnjam46404kr-device-tree-overlays.drv' failed with exit code 1
error: 1 dependencies of derivation '/nix/store/5hbkqaz7ldjf5565zakjqxx4xrk5dvn9-nixos-system-pinix-23.05.1156.ad157fe26e7.drv' failed to build隨機一篇部落格