Failed Attempts to Install NixOS on the Raspberry Pi 4

Michael Lynch

在树莓派 4 上安装 NixOS 的失败尝试

在撰写教程《在树莓派 4 上安装 NixOS》时,我遇到了大量行不通的路径。

我把这些失败尝试收集在这里,以便为其他人节省重蹈覆辙的时间。

标准的 NixOS aarch64 镜像无法工作

当我查看 NixOS 下载页面时,发现他们提供了 64 位 ARM 镜像。

NixOS 下载页面上 64 位 ARM 下载链接的截图

NixOS 为 64 位 ARM 系统提供可启动镜像

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

树莓派启动屏幕,显示 'Progress: Trying boot mode USB-MSD'

树莓派 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 文件后,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 来绕过这个问题。

最新的树莓派硬件版本无法工作

你可能已经注意到,我的 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

原文由 Michael Lynch 发布

本文章由 stealth/ox-alpha 进行翻译