在树莓派 4 上安装 NixOS 的失败尝试
原文由 Michael Lynch 于 发布,订阅该博客
在编写教程《在树莓派 4 上安装 NixOS》的过程中,我尝试了大量行不通的方法。
我把它们整理在这里,以免其他人再浪费时间重复同样的步骤。
标准的 NixOS aarch64 镜像无法使用
查看 NixOS 下载页面时,我看到他们提供了 64 位 ARM 镜像。

NixOS 为 64 位 ARM 系统提供了可启动镜像
“太好了!”我心想,毕竟树莓派 4 搭载的是 64 位 ARM 处理器。但随后树莓派根本无法启动这个镜像。

树莓派 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 绕过了这个问题。
最新的 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随机一篇博客
评论
登录后参与讨论