メインコンテンツへスキップ

年末年始の宿題にNixOSでサーバーを構築した

category:

diary

Published: 2026/01/06

Updated: 2026/01/25

皆様、​年末年始は​いかが​お過ごしで​したでしょうか?

僕の​元旦は、​わたなれネクストシャインの​ニコ実コメントを​打つ​傍ら、​某 JP Slack にて rust-analyzer の​温もりを​感じつつ Rust で​おじさんを​降臨させる​内職を​していたら​落単しかけた​学生時代の​話を​擦ってたら​いつの​間に​か​過ぎ去っていました。

この​記事も​本当は​年始すぐに​書き始めたかったんですが、​いつの​間にか​休みが​終わってしまったので​日曜の​夜に​慌てて​書いてます。

大晦日に​わたなれネクストシャインを​地上波リアタイしたり、​最後の​日曜日に​わたなれ一挙ニコ生を​リアタイしてた​(してる)​せいなので、れな​子が​悪いって​事に​して​おきます。

さて、​この​年末年始に​アニメ見る​以外で​何を​していたかと​いう​話ですが、​ある​目的で​ずっと​組もうと​思っていた​サーバーを​ついに​組みました。
今回は​そのビルドに​ついて​ざっくり書いておこうと​思います。

ハード構成

  • M/B
    • ASUS TUF GAMING B760M-E D4
  • CPU
    • Intel Core i3-12100
  • Memory
    • 恐らく​前の​デスクトップで​使っていたであろう​ Team の​メモリ​(16GB * 2)
  • ストレージ
    • Silicon Power 256GB M.2 SSD
  • 拡張ボード
    • Mellanox ConnectX-3 EN
    • SPARKLE Intel Arc A310 ECO
  • 電源
    • SilverStone SST-TX500-G
  • ケース
    • SilverStone MILO 11

micro-ATX に​した​理由ですが、​元々​デプロイ先​(物理)の​候補が​メタルラックぐらいしかなく、​場所が​限られていたのでなるべく​小さく​したいと​いう​前提が​ありました。

なら​ mini-ITX で​ええやんと​なりますが、​どうしても​拡張ボードを​ 3 枚入れたくて​中途半端と​言われてしまいが​ちな​ micro-ATX に​したと​いう​経緯が​あります。

実は​今​使っている​ NAS は​ mini-ITX の​マザボを​使って​ M.2 から​ PCIe を​出すケーブルを​使って​強引に​拡張ボードを​ 2 枚挿してるんですが、​3 枚と​なると​そんな​力技でも​どうにも​なりませんしね……。
(しかも​ちょっと​斜めってる​せいで​ DAC ケーブルが​うまく​抜けない)

電源は​ツメを​引っかける​窪みが​なくて​ SilverStone の​ケースじゃないと​ダメみたいなのを​聞いていたんですよね。
なので​第一候補だった​ ANTEC の​ケースじゃなくて​こっちに​したんですが、​いざ現品が​届いたら​普通に​窪みが​あって​なんや​ねん!​ てなりました。

ConnectX-3 は​ヤフオクで​ 3 枚目を​落と​して​ 10GTek の​ DAC ケーブルを​挿してます。
これで​メインの​デスクトップと​ NAS、​この​サーバーの​間は​ 10G で​疎通できます。​(間には​ヤフオクで​落とした​ Allied Telesis x510 を​噛ましてます。​ヤフオク万歳!)

基本的には​見たまま​エンコード​(+色々やらせる)​サーバーです。​そのうち Amatsukaze Server も​動かせるように​したい。

デプロイ周り

こっちが本題。

と​言っても​ OS を​ NixOS に​したと​いうだけなんですが、​具体的に​どういう​方式で​デプロイしているかを​書いていきたいと​思います。

最初は​だいぶ探り​探りだったんですが、​とりあえず OS の​インストールは​ nixos-anywhere で​やりたいと​いう​漠然な​思いだけは​あったので、​まずは​ NixOS の​インストーラーを​ bootstrap する​ための​イメージ​作りから​始めました。

とは​いえこちらは​割と​簡単で、​sshd を​有効化した上で​自分の​ SSH 公開鍵を​焼けばいいだけなので​簡単でした。​大体↓を​読めば​分かると​思います。

後は​ nix build .#nixosConfigurations.headlessIso.config.system.build.isoImageを​実行して​生成された​ ISO を​ dd で​ USB メモリに​焼いて​起動するだけです。

「だけ」と​言いつつ実の​ところ​何度か​インストールを​やり直しており、​その度に​キーボードと​モニターを​繋いで​ブートオーダーを​調整するのが​一番面倒だったので、​この​フェーズが​個人的に​一番の​難関でした。
IPMI でも​使えれば​楽だったんですが、​ASUS の​何故か​約 1677 万色で​光る​マザーボードに​そんな​小洒落た​機能が​ある​訳もなく……。​今から​でも​ JetKVM 買おうか​真剣に​悩んでます。
NAS は​ Supermicro の​マザーボードだから​管理しやすいんですけどね。

管理ツール

最終的に​以下の​組み合わせに​落ち着きました。

  • 設定ファイル
    • Nix​(NixOS サーバーの​ため)
  • 初期デプロイ​(OS インストール)
    • nixos-anywhere
  • 設定変更
    • deploy-rs
  • secret 管理
    • sops-nix

実際に​書いた​もの

そんな​こんなで​デプロイに​使った​ Nix 式の​一部​抜粋が​以下です。​本当は​もっと​サービスの​設定とか​書いてあるんですが、​とりあえず​最低限 Intel Arc の​ QSV エンコードが​使える​程度の​設定だけ残して​大幅に​削ってあります。

基本的には​各種ツールの​ドキュメントを​そのまま​な​ぞっただけなので、​コードその​ものの​説明は​しません。

Tips

ユーザーを​定義する​際に​ root ユーザーでも​鍵認証で​ログインできるように​しておくと、​以後​ deploy-rs を​実行する​時に​パスワードプロンプトが​出なくて​便利です。

users = {
mutableUsers = false;
users = {
root = {
openssh = {
authorizedKeys = {
keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBFRrDiS89ueVv8c6AR9O5Css16oW0Tx/ufz9juokqPb gamoutatsumi@tat-nixos-desktop"
];
};
};
};
gamoutatsumi = {
isNormalUser = true;
openssh = {
authorizedKeys = {
keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBFRrDiS89ueVv8c6AR9O5Css16oW0Tx/ufz9juokqPb gamoutatsumi@tat-nixos-desktop"
];
};
};
extraGroups = [
"wheel"
"video"
"render"
];
hashedPasswordFile = config.sops.secrets.hashedPassword.path;
};
};
};

hashedPasswordFileの​指定には​ sops-nix を​使っています。​最初 OpenSSL で​適当に​アルゴリズム指定せず​生成した​ハッシュを​使ったら​通らなくて、​何度か​インストールやり直しました。
いつの​間にかハッシュアルゴリズムの​制限でも​できてたんですかね。​マジで​覚えてないです。

最終的に​ Stackoverflow か​どっかで​見かけて​ SHA512 を​使うように​したら​通りました。​これで​一度は​諦めて​ mutableUsers = trueに​したんですよね。

sops-nix に​ついては​気が​向いたらなんか​書くかもしれないです。​とは​いえドキュメント通りで​基本は​いいはずです。​(ハッシュアルゴリズムの​罠とか​踏まなければ)

まとめ

NixOS 以前に​ /etc/shadowの​仕様に​引っかかったりと​だいぶいらん苦労を​した​部分が​多々​ありましたが、​最後には​ Nix で​ immutable な​サーバーを​組めて​非常に​満足してます。

この​サーバーで​実際に​動かしてる​サービスに​ついても​書けたら​なんか​書きます。

ちょく​ちょく​出てた NAS に​ついても​気が​向いたら​書きたいですね。​(もう​ 2, 3 年前に​組んだ​や​つなのでだいぶ忘れてますが)

と​いう​事で、​年末年始 9 連休は​こういう​事を​やってましたよと​いう​記事でした。​今年も​よろしく​お願いします。

今年の​抱負って​いう​程の​ものは​特に​ないですが、​今年は​年明けから​ 3 ヶ月連続で​ミクライブに​参戦するので、​体調には​気を​つけたいですね。​(去年は​マジミラ仙台→大阪を​敢行した​直後に​熱出して​咳だけ長引いたりと​散々だったので)