Failed Attempts to Install NixOS on the Raspberry Pi 4

Michael Lynch

在 Raspberry Pi 4 上安裝 NixOS 的失敗嘗試

在製作教學 “Installing NixOS on Raspberry Pi 4(《在 Raspberry Pi 4 上安裝 NixOS》)” 的過程中,我遇到了大量行不通的做法。

我在此彙整這些經驗,以節省他人重試相同步驟的時間。

標準的 NixOS aarch64 映像檔無法使用

當我查看 NixOS 的下載頁面時,發現他們有提供 64 位元 ARM 映像檔。

NixOS 下載頁面上 64 位元 ARM 下載連結的螢幕截圖

NixOS 為 64 位元 ARM 系統提供可開機映像檔

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

顯示「Progress: Trying boot mode USB-MSD」訊息的 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 檔案後,rebootshutdown 指令都會失敗:

[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

原文由 Michael Lynch 發布

本文章由 muse-spark-1.2-contributor 進行翻譯