Raspberry Pi 4にNixOSをインストールする
Nixは、ソフトウェア環境をコードで定義できるツールです。Nixにはいくつかの構成要素がありますが、なかでも私が特に興味を持ったのはNixOSです。Nixの仕組みを使って、OS全体の設定をプレーンテキストファイルで記述できます。
私自身、Nixを試し始めたのはごく最近で、学ぶべきことは山ほどあります。最初に挑戦したことのひとつが、Raspberry PiにNixOSをインストールすることでしたが、最初の何回かは失敗に終わりました。見つかるNixOS向けのPiチュートリアルは、どれも内容が不完全だったり古かったりしたのです。
そこで、Raspberry Pi 4にNixOSをインストールするための、完全で動作確認済みの手順をここで紹介します。私自身もNixOS初心者ですので、このガイドはNix初心者向けに書いています。ただし、Raspberry PiとLinuxの基本的な操作についてはご存じであることを前提としています。
必要なもの
このチュートリアルを進めるには、以下のものが必要です。
- メモリ2GB以上のRaspberry Pi 4
- 8GB以上のmicroSDカード
- microSDカードリーダー/ライター
- microSDカードに書き込むための別のコンピューター
NixOSのmicroSDイメージをダウンロードする
まずは、以下のリンクからNixOSのmicroSDイメージをダウンロードしてください。
より新しいイメージは、Nixのビルドサーバーで緑色のチェックマークが付いた最新のビルドから見つけることができます。
私は最近、より新しいビルド(2025年1月19日にビルドされたnixos-image-sd-card-25.05beta741800.78886a72ed11)でも同じ手順を試しましたが、インストールは失敗しました。その後のnixos-buildの段階で、Pi 4の2GBメモリを使い切ってしまったのです。
NixOSのmicroSDイメージを展開する
NixOSチームはmicroSDイメージをZstandardという圧縮形式で配布しています。これはFacebookが開発したオープンソースの圧縮フォーマットです。
イメージを展開するには、お使いの環境向けの最新版Zstandardツールをダウンロードしてください。
ZstandardツールとNixOSのmicroSDイメージの両方を用意できたら、次のコマンドで.img.zstファイルを展開します。
zstd --decompress 'nixos-sd-image-23.11pre515819.8ecc900b2f69-aarch64-linux.img.zst'展開が完了すると、nixos-sd-image-23.11pre515819.8ecc900b2f69-aarch64-linux.imgというファイルが生成されます。
microSDカードにイメージを書き込む
イメージを展開したら、お好みの書き込みツールを使ってmicroSDカードに書き込んでください。
書き込む際は、.img.zstファイルではなく.imgファイルを選択してください。多くの書き込みツールはZstandard形式に対応していません。
方法1: balenaEtcher
どの書き込みツールを使えばよいかわからない場合は、balenaEtcherがおすすめです。使いやすく、主要なOSすべてで動作します。

方法2: caligula
balenaEtcherはNixOSでは利用できません。NixOSをお使いの場合は、代わりにcaligulaが良い選択肢になります。
caligula burn \
nixos-sd-image-23.11pre515819.8ecc900b2f69-aarch64-linux.img.zstcaligulaはZstandard圧縮をネイティブにサポートしているため、事前にイメージを展開する必要はありません。

microSDカードをPiに挿入する
microSDカードへの書き込みが終わったら、Raspberry PiのmicroSDスロットに挿入します。

書き込み済みのmicroSDカードをPiのmicroSDスロットに挿入します。
ディスプレイとキーボードをPiに接続する
多くのRaspberry Pi用イメージでは、初回起動時にネットワーク経由でデバイスにアクセスできますが、NixOSではその方法が見つかりませんでした。そのため、起動時の様子を確認するには、一時的にキーボードとHDMIディスプレイをPiに接続する必要があります。

NixOSには完全にネットワーク経由でインストールする方法がないため、初期セットアップではキーボードとHDMIディスプレイを接続する必要があります。
このチュートリアルでは、TinyPilotを使ってPiを操作しています。これはまさにこうした状況のために私が作ったデバイスです。


TinyPilotデバイスを使ってRaspberry PiにNixOSをインストールしました。キーボードを行き来する手間が省けて便利でした。
このチュートリアルでTinyPilotは必須ではありません。通常のキーボードとHDMIディスプレイでも同じように進められます。
NixOSを起動する
いよいよ本番です。Raspberry Piの電源を入れてください。
すべてがうまくいけば、次のような起動シーケンスが表示されます。
Raspberry Pi 4でNixOSのmicroSDイメージが正常に起動した様子。
次のNixOSのコマンドプロンプトが表示されれば、起動は完了です。
[nixos@nixos~:]$起動に失敗した場合は、Piのブートローダーを最新のバージョンに更新してから、再度お試しください。
SSHアクセスを有効にする(任意)
Raspberry Piを扱う際は、別のキーボードで入力するよりもSSHの方がはるかに便利だと感じています。
インストール直後のNixOSでSSHアクセスを有効にする方法は2つあります。
方法1: パスワードを設定する
NixOS上で次のコマンドを実行すると、デフォルトのnixosユーザーにパスワードを設定できます。
passwdパスワードを設定したら、通常どおりSSHで接続できます。
ssh [email protected]方法2: SSH鍵を追加する
お手持ちのSSH公開鍵を、システムのauthorized keyとして追加する方法もあります。
GitHubでSSH鍵を使って認証している場合は、GitHubが提供する便利な方法で、どのデバイスにも公開鍵をダウンロードできます。
GITHUB_USERNAME='your-github-username' # Replace this.
mkdir -p ~/.ssh && \
curl "https://github.com/${GITHUB_USERNAME}.keys" > ~/.ssh/authorized_keyscertificate is not valid yetというエラーが表示された場合は、Piがまだシステム時刻を同期中であることを意味します。60秒ほど待ってから、再度コマンドを実行してください。
公開鍵をNixOSシステムに追加できたら、通常どおりSSHで接続できます。
ssh [email protected]NixOSの設定ファイルを書き込む
これでNixOSの中に入りました!
まだ最小構成のNixOS環境で何もインストールされていないため、できることは限られています。
NixOSをもっと楽しく使うために、デスクトップGUIといくつかのアプリケーションをインストールしてみましょう。まずは、私のNixOS設定ファイルのサンプルをダウンロードしてください。
curl \
--show-error \
--fail \
https://mtlynch.io/nixos-pi4/configuration.nix \
| sudo tee /etc/nixos/configuration.nixこの時点でnanoやvimを使って/etc/nixos/configuration.nixを編集できます。ファイル冒頭のhostnameやuser、passwordの値を変更しておくとよいでしょう。
sudo nano /etc/nixos/configuration.nixまだ設定ファイルを完璧に仕上げる必要はありません。NixOSでは、どの設定もいつでも気が変われば変更でき、変更を反映させるのも設定ファイルを編集し直すだけです。
configuration.nixファイルに満足できたら、次のコマンドで設定をシステムに適用し、再起動します。
sudo nixos-rebuild boot && \
echo "install complete, rebooting..." && \
sudo poweroff --reboot再起動が完了すると、次のような画面が表示されるはずです。

これでPiはGnomeデスクトップ環境でNixOSが動作している状態になりました!
上記のデフォルトのconfiguration.nixファイルを使った場合、ユーザー名はtempuser、パスワードはsomepassです。
NixOSでいろいろ試してみる
これでNixOSシステムが起動し、使える状態になりました。
あとは自由にNixOSを探索していただけますが、ここでは新しいシステムで試せる初心者向けの実験を2つ紹介します。
実験1: デスクトップ環境を変更する
上記のconfiguration.nixファイルではGnomeデスクトップ環境を使う前提になっていますが、別の環境を使いたい場合もあるでしょう。Microsoft Windowsにデザインが似たPlasmaというデスクトップ環境もあります。
NixOSシステムでGnomeではなくPlasmaを使うように変更するには、テキストエディターでconfiguration.nixファイルを開きます。
sudo nano /etc/nixos/configuration.nixファイル内で次の行を探してください。
displayManager.gdm.enable = true;
desktopManager.gnome.enable = true;これらの行を次のように置き換えます。
displayManager.sddm.enable = true;
desktopManager.plasma5.enable = true;変更を適用するには、ファイルを保存してnanoを終了し、次のコマンドを実行します。
sudo nixos-rebuild boot && sudo reboot再起動すると、次のようなデスクトップが表示されるはずです。


NixOSでは、GnomeからPlasmaへのデスクトップ切り替えは2行の変更で完了します。
デスクトップ環境全体の切り替えが、たった2行の変更でできました。
実験2: 一時的なソフトウェア環境を作る
私が特に使いやすいと感じているNixのツールのひとつがnix-shellです。指定したソフトウェアパッケージを使って、その場でソフトウェア環境を作ることができます。
nix-shellはシステム上の他の設定に影響を与えないため、他の何かを壊す心配なく新しいツールを気軽に試せます。
私は数年前に書いたプロジェクトで、古いバージョンのNode.jsに依存しているものに時々出くわします。nvmのようなツールでNodeのバージョンを並行してインストールしようとしたこともありますが、結局nvmの使い方や正しい設定方法を思い出すのに20分かかってしまいます。
nix-shellは汎用的なパッケージインストールツールですが、nvmのような言語固有の開発ツールよりも便利だと感じています。
Node.js 18.xを使ったnix-shell環境を作る方法は次のとおりです。
$ nix-shell --packages nodejs-18_x
these paths will be fetched (11.25 MiB download, 52.36 MiB unpacked):
/nix/store/87kgx3ym4kgmqwaijckqvbfrkzm8ax75-nodejs-18.2.0
copying path '/nix/store/87kgx3ym4kgmqwaijckqvbfrkzm8ax75-nodejs-18.2.0' from 'https://cache.nixos.org'...
[nix-shell:~]$ node --version
v18.2.0
[nix-shell:~]$ npm --version
8.9.0環境を使い終わったら、Ctrl+Dを押すかexitと入力してください。
同じ要領で、Node.js 16.xの環境を作る方法は次のとおりです。
$ nix-shell --packages nodejs-16_x
these paths will be fetched (10.77 MiB download, 50.24 MiB unpacked):
/nix/store/1ba3sqw3rkadg2ksywqc85lq2hvx9fvk-nodejs-16.15.0
copying path '/nix/store/1ba3sqw3rkadg2ksywqc85lq2hvx9fvk-nodejs-16.15.0' from 'https://cache.nixos.org'...
[nix-shell:~]$ node --version
v16.15.0
[nix-shell:~]$ npm --version
8.5.5トラブルシューティング
Piのブートローダーを最新版に更新する
NixOSで起動時の問題が発生した場合は、PiのブートローダーとEEPROMを更新する必要があるかもしれません。
最新のRaspberry Pi OS(別名「Raspbian」)を起動し、次のコマンドで最新のブートローダーをインストールしてください。
sudo raspi-config nonint do_boot_rom E1 && \
sudo rebootEEPROMを更新するには、次のコマンドを実行します。
sudo apt update && \
sudo apt install --yes rpi-eeprom && \
sudo rpi-eeprom-update -a && \
sudo reboot私がテストしたPi 4では、NixOS 23.11のディスクイメージはそのまま問題なく起動したため、上記の手順は必要ありませんでした。
付録: 失敗した試み
このチュートリアルを作成する過程で、うまくいかなかった方法がたくさんありました。同じ手順を他の方が繰り返して時間を無駄にしないよう、ここにまとめておきます。
NixOSドキュメントチームのAlex Groleau氏に、このガイドへの協力と公式のNixOS Raspberry Piチュートリアルでの活動に感謝します。
記事をランダムに読む