当ブログでは、ファイルサーバやDNSサーバやメールサーバなど、NixOS環境においてさまざまなサーバの構築手順に関する記事を数多く投稿してきた。そしてでNixOSはお気に入りのLinuxディストリビューションの中の1つであることを述べてきた。
しかし、NixOSは他のLinuxディストリビューションとは思想が大きく異なるため、誰にでもおすすめできるかと言われると正直なところ微妙である。
今回はNixOSをサーバ用途として利用する際に注意すべき点を「薄っすらと」数点挙げていく。ここで伝えたいのは、導入で失敗しないことは勿論大事だが、その後の運用や保守も大事という点である。
なお、当ブログの著者はプログラミングの環境やデスクトップ環境としてNixOSを利用していないため、これらの環境としての利用については当記事では触れない。
NixOSで構築したサーバの運用でやってはいけないこと
RHELやUbuntu等のようなLinuxディストリビューションで建てられたサーバでも似たような事が言えるが、Config(.nixファイル)を頻繁に書き換えること、書き足すこと、削除すること、それらによりnixos-rebuild switchを頻繁に走らせることなどが挙げられる。運用フェーズに入ったサーバには頻繁にConfigを編集する機会は無いはずである。
NixOSは他のLinuxディストリビューションと比較してストレージの消費が非常に大きいという特徴がある。nixos-rebuild switchを実行すると、今の世代のシステム構成を自動で残すためである。RHELやUbuntu等ではsystemdで対象のサービスの再起動もしくはOSの再起動で済む事を、NixOSではnixos-rebuild switchの実行となる。よってConfigを頻繁に編集することを避ける事で、nixos-rebuild switchの実行を必要最低限に抑えるのである。
運用フェーズに入ったNixOSにてお試しでツールをインストールする事、機能を有効化・無効化する事も避けるべきである。
上で述べたとおり、ツールを1つインストールするだけでもnixos-rebuild switchを実行する事になりストレージを多く消費する。どうしても試したいツールがあるなら、別の環境を用意しその中で試用、またはNixOSのアップデートのテストの際に試用し、ツールの採用・不採用を決定する。これらはNixOSに限った話ではないが。
さらに、unstable版での運用も避けるべきである。特にサーバ用途においては、安定性を最優先に考える必要がある。
しかしRaspberry Pi版のNixOSのようにインストーラがunstable版しか提供されていないケースが存在する。その場合はまずunstable版で構築を行い、続いてリリース版へアップデートし、その後にSambaやnginxなどサーバのパッケージをインストールと設定、最終的なConfigを適用...という手順を取ることになる。
NixOSで構築したサーバの運用で覚悟すること
NixOSのサポート期間は非常に短く、約7ヶ月間程度である。新しいバージョンは半年ごとにリリースされ、旧バージョンは新バージョンのリリースから約1ヶ月後にサポートが終了する。EOL(End of Life)を超えると、NixOSの起動自体は可能だがOSやパッケージにて新たな脆弱性やバグが発見されても修正版はリリースされない。noteのNixOSの記事で見た「半年ごとに大規模なメンテナンスが発生する」は適切な表現である。
NixOSには長期サポート版というものは存在しない。自分は家庭内の環境での利用においてはこの短いサポート期間は許容範囲内なのだが、顧客は許容しないだろう。開発元であるNixOSのプロジェクトに延長サポートをお願いしたところで、特定のユーザや企業に向けた特別な対応はしない。
NixOSでサーバを建てたいというイカれた顧客はこの世に存在しないと思われるが、万が一どうしてもNixOSでやりたいと言ってきたら、導入事例や日本語で読めるドキュメントが充実したRHELやOracle Linuxを勧め、それでもNixOSというのであれば顧客とのやりとりを証跡として残し渋々NixOSで構築する。顧客による後々のちゃぶ台返しまでがセット。
セキュリティ関連のツールの選択肢は限定的である。ファイアウォールは多くのLinuxディストリビューションで採用されているfirewalldが利用可能である。システム監査ツールは多くのLinuxディストリビューションで採用されているauditdが利用可能である。
一方で、ウイルス検知ツールはClamAVが主な選択肢となり、ファイル改ざん検知ツールであるTripwire Enterpriseは未対応。外部からアクセスして監視を行うタイプのサービスについては利用できる可能性はあるが、自分は試したことがないため詳細は不明である。
NixOSを運用するにあたっては、自分自身で明確なルールを定めることが重要である。自分の場合、外部のリポジトリを利用しないこと、およびunstableなパッケージを導入しないこと、頻繁にConfigをいじらないことを基本方針としている。NixOSのunstable版はテスト済みのものが公開されていると言われているが、unstable版を名乗っている理由を考えれば、サーバとして利用しているシステムに導入しないのは当然だろう。
NixOSではバージョンが変わると、導入済みのパッケージの設定の構文やオプションに変更が生じることがある。そのため、アップデート時には画面に出力されるログを必ず確認し、ビルドが成功した場合でもエラーや警告の内容を精査する必要がある。多くの場合、これらは設定ファイル(.nixファイル)の構文や設定値の変更に起因するエラーや警告と思われるが、放置すべきではない。
では実際どうすりゃいいの?
自分はサーバ用途でNixOSを利用しているため、Flakeやhome-managerは導入していない。余計なパッケージのインストールを避けること、構成をシンプルに保つことを心がけているためである。
基本的な方針としては、本番環境とは別の環境にて導入したいサーバのConfigの最終版を作成し、そのConfigで構築および運用を行う。半年毎のNixOSのバージョンアップには素直に従う。
最終版のConfigが完成するまでは、試行錯誤しながらConfigの内容を調整する。そして、ある程度納得のいく内容になった段階でそのConfigを用いて1ヶ月程度運用を行う。この期間で問題が発生しなければ、そのConfigを最終版とし、NixOSをもう一度最初から構築する。新バージョンのリリース直後に構築を開始してもこの段階で既に1ヶ月を超え、4〜5ヶ月後には次のバージョンがリリースされる。私的な環境ならどこかのフェーズで手抜きができるが、顧客の環境なら阿鼻叫喚な世界になるかもしれない。
Linuxのセキュリティアドバイザリーを見て、NixOSのLatest Announcements / Security TopicsでNixOSへの影響と対処方法を確認し、対処する。
ここで認識しなければならない事は、被害を受けてもロールバックすれば大丈夫ではなく、修正版のパッケージが出たらさっさと適用させる事。ロールバックすれば被害を受ける前の状態に戻るものの、修正前の状態に戻るだけなので。
以下は自分の環境(Raspberry Pi 4B)で実際に使用しているConfigである。
NixOSとはNixで構成を管理するLinuxディストリビューションである事をあらためて認識させられる。
/etc/nixos/hardware-configuration.nix
/etc/nixos/configuration.nix
/etc/nixos/chrony.nix
/etc/nixos/nvim.nix
/etc/nixos/rsyslog.nix
/etc/nixos/smb.nix
/etc/nixos/ssh.nix
/etc/nixos/zsh.nix
以下の画像は、Raspberry Pi 4Bにて稼働しているNixOS。
2ヶ月に1回の頻度で、インストール済みのパッケージやOSのセキュリティアップデートのためにnixos-rebuild switchを実行している。
参照サイト
https://nixos.org/ Nix & NixOS Declarative builds and deployments
https://nixos.org/manual/nixos/stable/ NixOS Manual
https://discourse.nixos.org/c/announcements/security/ Latest Announcements/Security Topics
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を導入しファイルサーバを構築した
https://debslink.hatenadiary.jp/entry/20260503/1777775392 NixOSで構築したサーバの運用について
