Raspberry Pi 4にNixOSをインストールする
原文は Michael Lynch により に公開されました。 このブログを購読する
Nixは、ソフトウェア環境をコードで定義できるツールです。Nixにはいくつかのコンポーネントがありますが、私にとって特に興味深いのはNixOSで、Nixのツールを使ってOS全体の設定をプレーンテキストファイルで定義できる点です。
私がNixを試し始めたのはごく最近のことで、学ぶべきことは山ほどあります。最初に試したことのひとつがRaspberry PiにNixOSをインストールすることでしたが、最初の数回は失敗に終わりました。見つかるNixOSのPi向けチュートリアルは、どれも不完全か古くなっていました。
そこで、Raspberry Pi 4にNixOSをインストールするための完全かつ動作確認済みのガイドをお届けします。私自身NixOS初心者なので、このガイドはNix初心者向けに書いていますが、Raspberry PiとLinuxに関する基本的な知識があることを前提としています。
必要なもの
このチュートリアルを進めるには、以下のものが必要です:
- 2GB以上のRAMを搭載したRaspberry Pi 4
- 8GB以上のmicroSDカード
- microSDカードリーダー
- microSDカードを書き込むための別のコンピューター
NixOS microSDイメージのダウンロード
まずは、以下のリンクからNixOSのmicroSDイメージをダウンロードしてください:
より新しいイメージは、Nixのビルドサーバーで緑色のチェックマークが付いた最新のビルドを確認することで見つけられます。
私は最近、より新しいビルド(nixos-image-sd-card-25.05beta741800.78886a72ed11、2025-01-19にビルド)でもこの手順を試しましたが、インストールは失敗しました。その後のnixos-buildステップで、手元のPi 4の2GBのRAMを使い切ってしまったのです。
NixOS microSDイメージの展開
NixOSチームはmicroSDイメージをZstandardという圧縮形式で圧縮しています。これはFacebookが開発したオープンソースの圧縮形式です。
NixOSイメージを展開するには、お使いのプラットフォーム向けの最新版Zstandardをダウンロードしてください:
ZstandardツールとNixOSのmicroSDイメージの両方を用意できたら、次のコマンドで.img.zstファイルを展開します:
zstd --decompress 'nixos-sd-image-23.11pre515819.8ecc900b2f69-aarch64-linux.img.zst'このZstandardファイルを展開すると、nixos-sd-image-23.11pre515819.8ecc900b2f69-aarch64-linux.imgというファイルが生成されるはずです。
NixOS microSDイメージの書き込み
イメージを展開したら、お好みのmicroSD書き込みツールを使ってmicroSDに書き込んでください。
microSDに書き込む際は、.img.zstファイルではなく.imgファイルを選択してください。ほとんどの書き込みツールはZstandard形式に対応していません。
方法1: balenaEtcher
どのmicroSD書き込みツールを使えばよいかわからない場合は、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パスワードを設定したら、通常通りNixOSシステムにSSH接続できます:
ssh [email protected]方法2: SSH鍵を追加する
システムにSSH公開鍵をauthorized keyとして追加する方法もあります。
GitHubでSSH鍵を使って認証している場合、GitHubを利用すると公開SSH鍵をどのデバイスにも簡単にダウンロードできます:
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接続できます:
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のディスクイメージはそのまま起動したため、上記の手順は必要ありませんでした。
付録: 失敗した試み
このチュートリアルを作成する過程で、うまくいかなかった方法が数多くありました。同じ手順を他の人が再試行して時間を無駄にしないよう、ここにまとめておきます。
Alex Groleau氏(NixOSドキュメントチーム)には、このガイドへのご協力とNixOS公式Raspberry Piチュートリアルでのご尽力に感謝します。
記事をランダムに読む
コメント
ログインしてコメントする