在树莓派 4 上安装 NixOS 的失败尝试
在撰写教程《在树莓派 4 上安装 NixOS》时,我遇到了大量行不通的路径。
我把这些失败尝试收集在这里,以便为其他人节省重蹈覆辙的时间。
标准的 NixOS aarch64 镜像无法工作
当我查看 NixOS 下载页面时,发现他们提供了 64 位 ARM 镜像。

NixOS 为 64 位 ARM 系统提供可启动镜像
“太好了!”我心想,因为树莓派 4 拥有 64 位 ARM CPU。但随后树莓派根本无法启动该镜像。

树莓派 4 无法启动标准的 NixOS ARM 镜像
我后来得知,NixOS 主要的预构建 64 位 ARM 镜像要求系统具备 UEFI,而树莓派 4 并不支持。
最新的 NixOS(23.05)microSD 镜像无法在树莓派 4 上工作
NixOS 仍然为树莓派等单板计算机发布 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.如果我在那时对树莓派进行断电重启,它可以成功启动进入新安装的 NixOS,但没有桌面图形界面,只有一个终端:
NixOS 22.11 microSD 镜像无法在树莓派 4 上启动。
更新(2023-08-18):这个问题现已修复。
NixOS 22.05 和 22.11 无法在树莓派 4 上启动
在使用 23.05 版本配置 NixOS 的 microSD 镜像失败后,我又用 nixos-sd-image-22.11.4604.fc95eb4fc3c-aarch64-linux.img 尝试了一次,但无法启动。我尝试了几次,它要么完全丢失信号,要么显示绿屏:
NixOS 22.11 microSD 镜像无法在树莓派 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 来绕过这个问题。
最新的树莓派硬件版本无法工作
你可能已经注意到,我的 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随机一篇博客