カラクリサイクル

『輝かしい青春』なんて失かった人の雑記

NixOS で 常に nixpkgs の master branch を追いかける際のコツ

ここの所、普段使いの NixOS の nixpkgs の channel を GitHub 上の master branch に切り替えていたのだけれども、 とりあえず、ある程度安定させるコトが出来たので、その辺りのコツとかを軽くまとめてみます。

1. nix-channel を unstable にする際は、 nixpkgs を編集可能にしておく

多分、一番重要なヤツ。

NixOS や Darwin 等で nixpkgs を master に追従させる

という事を行いたい場合には、

nixpkgs を編集できる様にしておく

と言う事が重要で、これが出来る様になっていないと、nixpkgs の定義が部分的に壊れてたりする場合に、 修正できなくなって詰みます。具体的には 、NixOS だと nixos-rebuild 等が出来なくなったりする等。

で、この nixpkgs を編集可能にしておく、というのは、割と簡単で、

  1. nixpkgs の master branch を 任意のパスに git clone する
  2. nix系の toolchain で nix-env -I nixpkgs=/path/to/nixpkgs の様な感じの指定をする
  3. 後は一々 nixpkgs で -I オプションを指定しなくても良い様に、shell で alias などをする

という感じで出来ます。なお、僕は nixpkgs の repository を /etc/nixpkgs に置いています。

2. 壊れてたら直せる様になっておく

まあ、 master branch とか unstable の nixpkgs を追いかけていると、パッケージ定義やらが部分的に壊れている、 とか、割とを普通ですし、あと修正も日進月歩で行なわれているので、多少パッケージ定義が壊れていても、 それをサクっと修正出来る……という位のコトは出来る様になっておいた方が良いです。

というか、それが出来ないのであれば、 unstable とか master を追いかけるのは止めておいた方が良いです。 Archlinux みたく、パッケージが常に最新でも、パッケージ定義は壊れてない、とかあまり無いんで。

また、僕はそこまでには至っていませんが、仮にも master を追いかけるつもりが有るなら、 master に contribution する位の勢いで環境構築した方が良いかもしれません。

というか、 master を動く様に直すコードって、貢献すれば、恐らく問題なければ取り込まれるハズだし、 master が直れば、みんなハッピーになれるので。

3. 動かなくてもめげない

で、最後。動かなくてもめげないコト。

NixOS の場合、重大なバグを踏ん付けない限り、仮に最新の master が動いてなくても、 過去の generations に rollback 出来るし、また、unstable を止める時も nix-channel 辺りで stable を使う様にして、 システムを nixos-rebuild すれば安定バージョンの NixOS が使えるので、システムに破壊的な変更を加えても、 それが nixpkgs 下に有れば、割となんとかなります。

ただ、それでもシステムが壊れる時は壊れるのし、またシステムが壊れた原因が nixpkgs 外に有る場合、 なかなか復旧しづらい面も有るので、、そういった時は、NixOS の Live USB 辺りを作っておくと、割と安心材料になるかと思います。

そして、基本的には NixOS は、システムの状態定義が /etc/nixos/configuration.nix に集約されているので、 その辺りのバックアップと、あと、失なっては困るデータのバックアップさえ怠らなければ、 システムが壊れて再インストール、となっても、多分、復旧には困らない、と僕は思います。

以上

ま、おおよそこんな感じかな、と言う所を書いてみました。

そして僕が思うに、

NixOS + /etc/nixos の Git での管理

という組み合わせは、システムへのチャレンジングな変更を加える際に、 設定ファイルも書き戻せるし、またシステムも rollback 出来るし、で、 僕の様な、

システムを色々変更したいマン

に取っては、大変に有り難い構造なので、まあ今後も NixOS を使い続けると思います。はい。