NixOSの沼に片足を突っ込んだ

NixOSとは
Linuxディストリビューションの一つであり、純粋関数型言語Nixを用いた設定の記述やNixパッケージ管理システムによるパッケージ管理を特徴とする。
特に注目すべき点は、システム全体の設定やパッケージを宣言的に管理できる事である。例えば、NixOSではシステムの設定が/etc/nixos/configuration.nixや他の.nixファイルに記述され、このファイルを運用する事でシステムの構成を簡単に再現・復元・管理等が出来る。
 
当記事は、NixOSをVirtualBoxにインストールするところから、初期設定(SSHログイン、ホスト名の設定、IPアドレスの割り当て)までの手順の備忘録である。
2025/4/6追記 NixOSネタの記事の一覧は、当記事内最下部の「NixOS関連の記事」欄内を参照。
2025/4/29追記 CLIでNixOSをVirtualBoxにインストールする手順に関しては、以下の記事を参照。
https://debslink.hatenadiary.jp/entry/20250428/1745795434 NixOSをCLIでインストールした



NixOSの主な特徴
簡潔に述べると以下の3点が挙げられる。
① 不変のシステム構成:NixOSはシステムの設定やパッケージに一貫性が有り、システムの状態を「バージョン管理」するかのように管理する。これにより、システムのアップデートや変更が他の部分に影響を与えることが少なく、システムが壊れるリスクを減らす事が出来る。
② パッケージ管理の分離:他のLinuxディストリビューションとは異なり、パッケージ間の依存関係を完全に分離する。これにより異なるバージョンのソフトウェアがお互いに干渉する事無く共存させる事が出来る。
③ 再現性:宣言的な設定ファイルを使用する事で、他のマシンでも同じ環境を簡単に再現する事が出来る為、設定やアップデートの際に問題が生じても、簡単に以前の安定した状態にロールバックする事が出来る。



NixOSを使うメリット
開発環境や本番環境を問わず、システムの再現や再構成を簡単かつ安全に実行できる点が特徴として挙げられる。
前述のとおり、NixOSは非常に個性的なLinuxディストリビューションである為に習得すべき事が多く、初学者にとっては取っつきにくいと感じられるかもしれない。しかし、システム管理の柔軟性と強力さを兼ね備えており、カスタマイズを好むユーザ達の間では高い人気を誇る。



当方の環境
ホスト機:macOS 15.3.1 / MacBook Pro 2020 / RAM: 16GB / CPU: Intel Core i5 2.0GHz
仮想化環境:Oracle VirtualBox 7.1.4 r165100
ゲストOS:NixOS 24.11 (Vicuna)
VirtualBox 7.1.4と6.1.50の両方で、NixOSのインストールから初期設定まで動作確認済みである。
 


NixOSのisoファイルのダウンロード
下記のURLにアクセスし、NixOSの.isoファイルをダウンロードする。
Intel/AMDアーキテクチャ向けとARMアーキテクチャ向けのisoファイルが用意されている。
バージョン24.05までは.ovaファイルが公開されていたが、当記事の公開時点で最新版であるバージョン24.11では.ovaファイルは公開されていない。
また、32bit版のインストーラはバージョン24.05以降は公開されていない。
当記事ではGUIの操作でNixOSをインストールする為、下記のURLの中の「Graphical ISO image」の欄にある「Download (GNOME,64-bit Intel/AMD)」をクリックし、NixOSのインストーラのisoファイルをダウンロードした。
https://nixos.org/download/# Download | Nix & NixOS
 


VirtualBoxの設定
VirtualBox環境での注意事項は以下の2点。
① [Display]のGraphics Controllerの設定は VMSVGA を指定する。他を指定するとNixOSの起動が「Stopped Virtual Console Setup.」で停止する事がある。
② 仮想HDDの容量は大きければ大きい程よい。下記のURL内の「Installing in a VirtualBox guest」にて、VirtualBox側で必要な設定に関する記載が有る。
要件として「3. New Hard Disk of 8 GB or higher.」の記載が有るが、NixOSのインストール直後の段階で4GBを超える。リビルドを繰り返していくとあっという間に10GBを超えるので要注意。
https://nixos.org/manual/nixos/stable/#sec-installation Installing NixOS
 
[General]
Name:
Operating System:Other Linux (64-bit)

[System]
Base Memory:4096MB
Processors:2
Boot Order:Hard Disk
EFI:Enabled
Acceleration:VT-x/AMD-V, Nested Paging, PAE/NX,KVM, Paravirtualization

[Display]
Video Memory:16MB
Graphics Controller:VMSVGA
Remote Desktop Server:Disabled
Recording:Disabled

[Storage]
Controller:IDE
IDE Secondary Device 0:nixos-gnome-24.11.715401.20755fa05115-x86_64-linux.iso
Controller:SATA
SATA Port 0:nixos-24.11.715401.20755fa05115-x86_64-linux.vmdk

[Audio]
Disabled

[Network]
Adapter 1:Paravirtualized Network (Brodge Adapter, en0 Wi-Fi)

[USB]
USB Controller:OHCI, EHCI



NixOSの仮想マシンの作成

当項目では、VirtualBoxでNixOSの仮想マシンの作成を行う。
Debian GNU/LinuxやRHEL系のLinuxディストリビューションの仮想マシンの作成より早く完了したという印象。

1. NixOSのインストーラの起動
上記の設定の後、VirtualBoxのスタートボタンをクリックしNixOSのインストーラを立ち上げる。
以下の画像内ではいくつか選択可能な項目が有るが、初めてのインストールという事で選択内容は変えずデフォルト状態のまま進める。
このまま放置すると、10秒ほど後に次の画面に遷移する。

ちなみに....
一番上:通常どおりに起動
nomodeset:グラフィックドライバーに問題がある場合に選択
copytoram:ISOをRAMにコピーしインストールメディアを削除出来るようにする
debug:ブートプロセスにデバッグメッセージを追加


 
2. インストーラの表示言語の設定
NixOSのインストーラが立ち上がり、インストーラの表示言語をここで設定する。
日本語で表示させたい場合は「American English」が表示されている箇所をクリックし日本語に設定する。
難しい内容の英語は表示されない為、当手順では言語を変えずそのまま進む。
Nextをクリックし次の手順に進む。


 
3. ロケーションの設定
RegionがAsia、ZoneがTokyoになっている事を確認する。別の場所になっている場合は表示されている世界地図の中の日本のどこかをクリックすると、RegionとZoneが自動で修正される。
The numbers and dates locate will be set to 日本語 (日本).になっている事を確認する。なっていない場合や別の表示に変えたい場合は「Change」をクリックし修正する。
確認および修正を終えたらNextをクリックし次の手順に進む。


 
4. キーボードの設定
使用しているキーボードをここで設定する。
設定および確認を終えたらNextをクリックし次の手順に進む。


 
5. アカウントとパスワードの設定
ログインするユーザおよびアカウント、パスワードをここで設定する。
続いてrootアカウントのパスワードもここで設定する。
設定および確認を終えたらNextをクリックし次の手順に進む。


 
6. GUI環境の設定
GNOMEやPlasmaやXfceなどNixOSで使用したいGUI環境をここで選択する。
GUI環境を使用しない場合は「No desktop」を選択する。
選択すると表示内容の例を確認する事が出来る。
選択および確認を終えたらNextをクリックし次の手順に進む。


 
7. Unfree Softwareの導入の有無
NixOSではUnfreeな(プロプライエタリな)パッケージの導入は事前に許可する必要が有る。
UnfreeなパッケージをNixOSにインストールする予定が有る場合は「Allow unfree software」にチェックを入れる。
設定を終えたらNextをクリックし次の手順に進む。


 
8. ストレージのパーティションの設定
Select storage device:にてNixOSをインストールするストレージを選択する。
続いて、選択したストレージのパーティションを設定する。
インストーラによる自動設定で良いなら「Erase disk」にチェックを入れる。
パーティションを自分で設定したい場合は「Manual partitioning」にチェックを入れる。
当手順ではVirtualBoxで設定したストレージ全体を自動でパーティション設定する為「Erase disk」を選択した。
選択を終えたらNextをクリックし次の手順に進む。


 
9. NixOSインストール設定の確認とインストールの開始
上記にて実施してきたインストール設定の内容が表示される。
表示内容に問題が無ければ「Install」をクリックしNixOSのインストールに進む。
修正したい場合は「Back」をクリックし設定内容を修正する。
画面が見切れていて「Back」「Install」「Cancel」の各ボタンが見えない場合は、ウインドウ内右上の真ん中のボタン(Xボタンの左)をクリックし表示させる。


 
10. NixOSのインストール
以下の画像が表示されNixOSのインストールが実行される。
「Installation complete」が表示されるまで、しばらくの間待つ。


 
11. NixOSのインストールの完了と再起動
NixOSのインストールが正常に完了すると、画面の上部に「Installation complete」、ウインドウ内に「All done.」が表示される。
NixOSにログインしたい場合は「Restart now」にチェックを入れ「Done」をクリックし、NixOSを再起動させる。


 
12. インストールしたNixOSの起動
NixOSの起動開始前に「NixOS」「Reboot Into Firmware Interface」の選択画面が表示される。
NixOSを起動させたい場合は「NixOS」が選択された状態でそのまま待つ。


 
13. お疲れ様でした!
NixOSの起動が完了するとログインプロンプトが表示される。
上記の5.にて設定したアカウントとパスワードを入力し、NixOSにログインする。


 

14. 当項目は必須ではないのでお好みで...
① インストーラの.isoファイルを外す
EFI設定を一時的に無効にし、Boot OrderのOpticalのチェックを外し起動順位を下げる。
続いて、ストレージの設定にてNixOSのisoファイルを外す。最後に、EFI設定を元の設定に戻す。
② VirtualBoxのNixOSのアイコンを自作アイコンに変更する
自作アイコンの.pngファイルを(MacOSの場合)VirtualBox VMsディレクトリ直下に置き、ターミナル(Windows環境ではコマンドプロンプト)を立ち上げて以下のコマンドを叩く。
cdコマンドでVirtualBoxの仮想マシンが置かれているディレクトリに移動し、VBoxManage modifyvmコマンドでNixOSの仮想マシンのファイル(.vdiや.vmdkなど)が保存されているディレクトリ名(フォルダ名)と自作アイコンのファイル名を指定し、Enterキーを叩く。尚、当環境では自作アイコンのファイルをVirtualBox VMsディレクトリ直下に置いている。

cd "VirtualBox VMs"
VBoxManage modifyvm "nixos-24.11.715401.20755fa05115_x86-64" --iconfile nixos_7.1.png

上記のコマンドの実行後、当記事内の下部にある画像のようにNixOSのアイコンが自作アイコンに変わる。
 


NixOSの初期設定

当項目では、NixOSへの初回ログインからsshログイン許可の設定まで行う。
インストール直後の段階ではvimやemacsのみならず、edやviも使用出来ないという状況に驚く。
 
1. nix-shellを使用し初期設定用にvimをインストール
NixOSのインストール直後は、viやvimやemacs等のエディタが無い状態である。
nix-shellコマンドを利用しvimを使える状態にする事で、パッケージのインストールや設定が可能となる。
nix-shellとは、global環境を汚す事無く一時的にシェル環境を作る為のツールである。ログアウト後や再起動後はnix-shellで立てた環境は綺麗さっぱり無くなる。

NixOSにログインした後は以下のコマンドを叩き、vimが一時的に利用可能な状態にする。
nix-shellによってvimが使用可能な状態になると、プロンプトが[nix-shell:~]$ に変化する。

[user@nixos:~]$ nix-shell -p vim
this path will be fetched (8.46 MiB download, 41.65 MiB unpacked):
  /nix/store/1nd5npbp1jfwrwnfygfnxwc8d6a3kxpd-vim-9.1.1046
copying path '/nix/store/1nd5npbp1jfwrwnfygfnxwc8d6a3kxpd-vim-9.1.1046' from 'https://cache.nixos.org' ...

[nix-shell:~]$

 
2. /etc/nixos/ssh.nixファイルの作成
NixOSにsshログイン出来るようにする為、/etc/nixos/ssh.nixファイルを以下の内容で作成。
※/etc/nixos/configuration.nixファイル内に記載する事も可能。その場合は下記の「3. ssh.nixの適用とパッケージ導入の準備」にて./ssh.nixの記載は不要となる。

[nix-shell:~]$ sudo vi /etc/nixos/ssh.nix 
{
  services.openssh.enable = true;
}

 
3. ssh.nixの適用とパッケージ導入の準備
/etc/nixos/configuration.nixファイルのimportセクションに、上記のssh.nixを追加する。

[nix-shell:~]$ sudo vi /etc/nixos/configuration.nix
:
imports =
  [ # Include the results of the hardware scan.
    ./hardware-configuration.nix
    ./ssh.nix    ◻️◻️この行を追記
  ];
:
省略
:

 
併せて、NixOSの再起動後もvimを使用したい為にenvironment.systemPackages = with pkgs; の中に追記した。
他に、gitとwgetとcurlも追記した。
ここでgnomeやplasmaなどを記載すればデスクトップ環境の導入も可能である。

[nix-shell:~]$ sudo vi /etc/nixos/configuration.nix
:
# Allow unfree packages
nixpkgs.config.allowUnfree = true;

# List packages installed in system profile. To search, run:
# $ nix search wget
environment.systemPackages = with pkgs; [
#  vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
    vim
    git
    wget
    curl
  ];
:
省略
:

 
4. NixOS環境のリビルド
上記の設定を反映させる為、nixos-rebuildコマンドでリビルドする。

[nix-shell:~]$ sudo nixos-rebuild switch
building Mix...
building the system configuration...
:
省略
:

 
5. NixOSの再起動
リビルドの実行後、NixOSを再起動させる。
NixOSの再起動後、NixOSにsshログインが可能である事と、nix-shellを使わなくてもvimが使える事を確認する。

[nix-shell:~]$ sudo reboot
:
省略
:

 


NixOSのネットワーク周りの設定

NixOSにsshログインが出来るようになったら、ホスト名とNIC周りの設定に進む。
この段階では、nix-shellコマンドを使用しなくてもvimの利用が可能になっている。

1. ホスト名の設定
NixOSでは、ホスト名も/etc/nixos/configuration.nixファイル内で設定する。
/etc/nixos/configuration.nixファイルを開き、networking.hostNameの項目でホスト名を記述する。

[user@nixos:~]$ vi /etc/nixos/configuration.nix
:
  # Bootloader.
  boot.loader.systemd-boot.enable = true;
  boot.loader.efi.canTouchEfiVariables = true;

  networking.hostName = "testsv99"; # Define your hostname.   ◻️◻️この行を修正
  # networking.wireless.enable = true;  # Enables wireless support via wpa_supplicant.
:
省略
:

 
2. IPアドレスの設定
NixOSでは、IPアドレスも/etc/nixos/configuration.nixファイル内で設定する。
/etc/nixos/configuration.nixファイル内のnetworking.hostNameの下あたりに以下を追記する。
当方の環境では、IPアドレスは192.168.3.247/24、デフォルトゲートウェイは192.168.3.1、DNSサーバは8.8.8.8で設定した。

[user@nixos:~]$ vi /etc/nixos/configuration.nix
:
  # networking.wireless.enable = true;  # Enables wireless support via wpa_supplicant.
  networking.interfaces.enp0s3.ipv4.addresses = [{   ◻️◻️この行を含め下6行を追記
    address = "192.168.3.247";
    prefixLength = 24;
  }];
  networking.defaultGateway = "192.168.3.1";
  networking.nameservers = [ "8.8.8.8" ];
:
省略
:

 
3. hostsの設定
ホスト名とIPアドレスの対応を記載。
/etc/hostsファイルを作成するのではなく、/etc/nixos/configuration.nixファイル内に記載する。

  networking.interfaces.enp0s3.ipv4.addresses = [{
    address = "192.168.3.247";
    prefixLength = 24;
  }];
  networking.defaultGateway = "192.168.3.1";
  networking.nameservers = [ "8.8.8.8" ];

  networking.hosts = {      ◻️◻️この行を含め下4行を追記
    "127.0.0.1" = [ "localhost" "localhost.localdomain" ]; 
    "192.168.3.247" = [ "testsv99" "testsv99.local" ]; 
  }; 
:
省略
:

 
4. NixOS環境のリビルド
上記の設定を反映させる為、nixos-rebuildコマンドでリビルドする。

[user@nixos:~]$ sudo nixos-rebuild switch
building Mix...
building the system configuration...
:
省略
:
[user@nixos:~]$

nixos-rebuildコマンドのswitchオプションについて。ビルドしてパスを通した後、更新された環境に入る(switchする)事を意味する。何かツールをインストールおよびビルドし、それを新しい環境で利用したいのであればnixos-rebuild switchコマンドを叩く。
ロールバックしたい場合はnixos-rebuild switch --rollbackコマンドを叩く、もしくはboot画面で古いbootオプションを選択しNixOSを起動させる。
ビルドした後もビルド前の環境に居残りしたい場合は、dry-buildオプションを付けてnixos-rebuildコマンドを叩く。
 
5. NixOSの再起動
リビルドの実行後、NixOSを再起動させる。
NixOSの再起動後、上記で設定したIPアドレスでNixOSにsshログインが可能である事と、ホスト名が設定した文字列になっている事を確認する。

[user@nixos:~]$ sudo reboot
Broadcast message from root@testsv99 on pts/1 (Mon 2025-03-10 22:58:22 JST):

The system will reboot now!
:
省略
:
[user@nixos:~]$

 

今回はここまで。
NixOSをVirtualBoxにインストールするところから、NixOSのネットワーク周りの簡単な設定までを実施した。
GUI環境でNixOSをVirtualBoxにインストールした。CentOSやRHELよりも簡易な手順で、インストールに要した時間はそれらより短かったと思う。
尚、当ブログでは/etc/nixos/ssh.nixや/etc/nixos/nvim.nixなどツール毎に設定ファイルを作成しているが、/etc/nixos/configuration.nixファイル1つにまとめて設定する事が可能である。
  


振り返り
NixOSに出会い、NixOSのインストールからNixOSへのsshログインが出来るようになるまで3日間も要したが、二度とこんなLinuxディストリビューションを使うものかという負の感情までには至らなかった。今はNixOSの沼にまだ片足を浅く突っ込んだ状態で、その片足を沼から引き抜いて後戻りしようと思えばいつでも後戻りする事は出来る。しかし、NixOSという沼の中に居心地の良さと似たような感覚を覚えてしまった。もう少しの間片足を突っ込んだままでいようと思う。
NixOSを運用するにあたり、Nixという言語やFlakes等といったツールの習得も必要なようだ。本家サイトだけでなく、ZennやQiitaやYoutube等で少しづつ学習を進めようと思う。
 

以下の画像は、当記事の内容を終えた段階で撮ったVirtualBoxの管理画面のスクリーンショット。
 

 
 

参照サイト
https://nixos.org/ Nix & NixOS Declarative builds and deployments
https://nixos.org/manual/nixos/stable/ NixOS Manual
https://nixos.org/learn/ Learn Nix | Nix & NixOS
https://nixos.org/download/# Download Nix & NixOS
https://releases.nixos.org/?prefix=nixos/ Download Nix & NixOS(ほぼ全バージョン)
https://search.nixos.org/packages NixOS Search - Packages
https://nixos-and-flakes.thiscute.world/ NixOS & Flakes Book
https://tech.dely.jp/entry/2018/12/03/110227 ぼくが普段使っているOS - NixOSの話
https://zenn.dev/asa1984/articles/nixos-is-the-best NixOSで最強のLinuxデスクトップを作ろう
https://qiita.com/feles-ao42/items/fcb507dab03db5de067d NIX OS入門
https://qiita.com/Sumi-Sumi/items/97b6f2c70869802ff942 Nixを触り始めて参考になったサイトまとめ
https://zenn.dev/summer_fb/articles/69fa09fae6b180 NixOSを使ってみる(インストール~SSHまで)
 


NixOS関連の記事
https://debslink.hatenadiary.jp/entry/20250311/1741649715 NixOSの沼に片足を突っ込んだ
https://debslink.hatenadiary.jp/entry/20250316/1742128054 NixOSにFlakeを導入した
https://debslink.hatenadiary.jp/entry/20250320/1742459549 NixOSの環境構築
https://debslink.hatenadiary.jp/entry/20250323/1742731080 NixOSでSFTPサーバの設定
https://debslink.hatenadiary.jp/entry/20250328/1743167901 NixOSでSambaによるファイルサーバの構築
https://debslink.hatenadiary.jp/entry/20250405/1743844940 NixOSでrsyslogの設定
https://debslink.hatenadiary.jp/entry/20250411/1744300480 NixOSでDNSサーバの構築
https://debslink.hatenadiary.jp/entry/20250413/1744551596 NixOSのシステムの再現性の検証
https://debslink.hatenadiary.jp/entry/20250418/1744924524 NixOSでPostfixとDovecotによるメールサーバの構築
https://debslink.hatenadiary.jp/entry/20250419/1745062553 NixOSでPostfixとDovecotによるメールサーバの構築 - SASL認証編
https://debslink.hatenadiary.jp/entry/20250421/1745236668 NixOSのパッケージやOSのアップデートに関するメモ
https://debslink.hatenadiary.jp/entry/20250428/1745795434 NixOSをCLIでインストールした
https://debslink.hatenadiary.jp/entry/20250503/1746235454 NixOSでnginxによるWebサーバの構築
https://debslink.hatenadiary.jp/entry/20250508/1746706416 NixOSでPrometheusとGrafanaによる監視基盤の構築
https://debslink.hatenadiary.jp/entry/20250510/1746884897 NixOSの導入にあたり参考になったサイト
https://debslink.hatenadiary.jp/entry/20250524/1748072722 NixOSを24.11から25.05にアップデートした
https://debslink.hatenadiary.jp/entry/20251214/1765688458 NixOSを25.05から25.11にアップデートした
https://debslink.hatenadiary.jp/entry/20260117/1768615582 Raspberry Pi 4BにNixOSを導入しファイルサーバを構築した