Raspberry Pi 4へのNixOSインストール失敗記録
チュートリアル「Raspberry Pi 4にNixOSをインストールする」を作成する過程で、うまくいかない方法に何度もぶつかりました。
同じ手順を試して時間を無駄にする方が出ないよう、ここにまとめておきます。
標準のNixOS aarch64イメージは動作しない
NixOSのダウンロードページを見ると、64ビットARM向けのイメージが提供されていました。

NixOSは64ビットARMシステム向けのブータブルイメージを提供しています
「素晴らしい!」と思いました。Pi 4は64ビットARM CPUを搭載していますから。しかし、Piはそのイメージをまったく起動できませんでした。

Pi 4では標準のNixOS ARMイメージの起動に失敗します
後で知ったのですが、NixOSの主要なビルド済み64ビットARMイメージはUEFI対応のシステムを前提としており、Raspberry Pi 4はUEFIをサポートしていません。
最新の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ファイルから次の1行を削除することで回避できます。
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のインストール自体は正常に起動しますが、デスクトップ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コマンドが動作しない
初期のconfiguration.nixファイルをsudo nixos-rebuild bootで適用した後、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"];私はこのバグを報告しましたが、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記事をランダムに読む