在 Raspberry Pi 4 上安裝 NixOS 的失敗嘗試
原文由 Michael Lynch 于 發布,訂閱此部落格
在撰寫教學「在 Raspberry Pi 4 上安裝 NixOS」的過程中,我嘗試了許多行不通的方法。
我把這些失敗的嘗試整理在這裡,希望能幫大家省下重複嘗試相同步驟的時間。
標準的 NixOS aarch64 映像檔無法使用
當我查看 NixOS 的下載頁面時,看到他們有提供 64 位元 ARM 映像檔。

NixOS 為 64 位元 ARM 系統提供可開機映像檔
「太好了!」我心想,因為 Pi 4 搭載的是 64 位元 ARM 處理器。但接著 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 儲存庫中的一個 bug,但在撰寫本文時還沒有可用的修正。
我可以透過從 configuration.nix 檔案中刪除這一行來繞過這個 bug:
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 重新開機,它確實能成功開機進入新安裝的 NixOS,但沒有桌面圖形介面,只有終端機:
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"];我回報了這個 bug,而 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隨機一篇部落格
留言
登入後參與討論