/nix に落ちがちです。nix.conf(順序・鍵・max-jobs/cores)と lock 更新/ロールバック、リトライと水位を一枚にまとめます。ホーム・技術ブログ一覧・Registry 越境 pull 決定表・並列とディスク FAQ。
2026 シナリオ:入力ロックと substituter の律速
Flake は flake.lock で入力を固定しますが、越境 CI では substituter への HTTP と /nix の IO が律速になりやすく、max-jobs を上げすぎるとディスク競合が先に出ます。
早引き:多リージョンなら近接キャッシュを substituters 先頭へ。監査重視なら社内キャッシュ+trusted-public-keys の IaC 配布。
- untrusted substituter:
trusted-public-keysの欠落・タイプミスを runner 全体で潰す。 - HTTP 連鎖失敗:
max-jobsを一段下げ、バックオフ後に同一コマンドを再試行。 /nix枯渇:使用率 85% で新規大ビルドをキュー、90% 付近でnix-collect-garbage方針を発火。
nix.conf 雛形(substituters・鍵・max-jobs・cores)
/etc/nix/nix.conf を runner に配布し、flake の nixConfig だけに頼らない(鍵不一致は気づきにくい)。
| キー | 役割 | 越境 runner 初期目安 | 上げる/広げる条件 |
|---|---|---|---|
substituters | 左から問合せ | 近接を左へ | ログで順序調整 |
trusted-public-keys | 署名検証 | 公式+自前鍵 | キャッシュ追加時に必ず追加 |
max-jobs | 並列度 | 1〜2(共有機) | 専用・SSD 快調で段階的に増加 |
cores | 1 ジョブのスレッド | 0 または 50〜75% | 余熱・他テナントを見て調整 |
substituters = https://cache.nixos.org https://YOUR_CACHE.cachix.org https://nix-cache.internal.example.invalid
trusted-public-keys = cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= YOUR_CACHIX_PUBLIC_KEY_PLACEHOLDER YOUR_SELFHOSTED_CACHE_PUBLIC_KEY_PLACEHOLDER
max-jobs = 2
cores = 0
認証付きキャッシュは access-tokens/netrc をrunner 専用ユーザーに限定。
対照表:本機ストア vs 公開 substituter vs 自前キャッシュ
| 経路 | レイテンシ | 再現性 | 運用コスト | 向く条件(2026 実務) |
|---|---|---|---|---|
| 本機 store | 最短 | lock と整合 | 蓄積型 | warm-up 可 |
| 公開 substituter | 越境で遅い | 鍵で検証 | 低 | 標準依存中心 |
| 自前キャッシュ | 近接で安定 | 社内統制 | 高 | 多 runner・帯域課金 |
ログの from https:// 比率が高いほど越境律速。近接キャッシュを検討。
Flake lock の更新・ロールバックと失敗リトライ
lock 更新は専用コミットに分離し、git diff flake.lock を PR で必ず見る(2026は入力 URL 改ざん検知も同列がおすすめ)。
コマンド早見(コピー)
nix flake update
nix flake lock --update-input nixpkgs
git restore --source=HEAD^ flake.lock
for i in 1 2 3 4; do
NIX_MAX_JOBS="${NIX_MAX_JOBS:-2}" nix build ".#${FLAKE_ATTR_PLACEHOLDER}" --print-build-logs --accept-flake-config && break
case "$i" in 1) sleep "${B1:-4}";; 2) sleep "${B2:-12}";; 3) sleep "${B3:-30}";; *) sleep "${B4:-90}";; esac
export NIX_MAX_JOBS=$(( ${NIX_MAX_JOBS:-2} > 1 ? ${NIX_MAX_JOBS:-2} - 1 : 1 ))
done
HTTP 失敗は待機 4→12→30→90 秒(上限 120)を挟み、各段で max-jobs を一段下げるか substituters の順を見直す。
/nix ボリューム水位(パラメータ一覧)
| 指標 | 警告 | スロットル | 停止・GC |
|---|---|---|---|
/nix 使用率 | ≥ 78〜80% | ≥ 85% で大容量 drv のキュー | ≥ 90%:ジョブ延期+nix-collect-garbage -d 方針 |
| 空き容量(絶対) | < 25 GB | < 12 GB | < 6 GB:世代 LRU/共有キャッシュへ逃がす |
FAQ(substituter・lock・TLS)
Q. ignoring untrusted substituter と出る
A. trusted-public-keys にそのキャッシュの公開鍵を追加し、nix show-config で runner 実効設定を確認。flake の nixConfig だけ更新してもデーモンが読まないケースに注意。
Q. lock を上げたらビルドだけ壊れた
A. git diff flake.lock で入力 URL と rev を点検し、問題入力だけ nix flake lock --override-input でピン留め。緊急時は git restore でロールバック。
Q. 社内 TLS 検査で substituter が失敗
A. システム/Nix の信頼ストアに社内ルート CA を配布し、プロキシは HTTPS_PROXY と Nix の設定を二重に確認。越境直結が難しい場合は近接の自前キャッシュへ寄せる。
まとめと次の一手(購入・資料)
要点はlock レビュー・substituter+鍵・max-jobs/ディスク水位の三点。2026は近接キャッシュの価値が上がるため、本表を Runbook 1 枚に。