ここの所、普段使いの NixOS の nixpkgs の channel を GitHub 上の master branch に切り替えていたのだけれども、 とりあえず、ある程度安定させるコトが出来たので、その辺りのコツとかを軽くまとめてみます。
1. nix-channel を unstable にする際は、 nixpkgs を編集可能にしておく
多分、一番重要なヤツ。
NixOS や Darwin 等で nixpkgs を master に追従させる
という事を行いたい場合には、
nixpkgs を編集できる様にしておく
と言う事が重要で、これが出来る様になっていないと、nixpkgs の定義が部分的に壊れてたりする場合に、
修正できなくなって詰みます。具体的には 、NixOS だと nixos-rebuild
等が出来なくなったりする等。
で、この nixpkgs を編集可能にしておく、というのは、割と簡単で、
- nixpkgs の master branch を 任意のパスに git clone する
- nix 系の toolchain で
nix-env -I nixpkgs=/path/to/nixpkgs
の様な感じの指定をする - 後は一々 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
に集約されているので、
その辺りのバックアップと、あと、失なっては困るデータのバックアップさえ怠らなければ、
システムが壊れて再インストール、となっても、多分、復旧には困らない、と僕は思います。
以上
ま、おおよそこんな感じかな、と言う所を書いてみました。
そして僕が思うに、
という組み合わせは、システムへのチャレンジングな変更を加える際に、 設定ファイルも書き戻せるし、またシステムも rollback 出来るし、で、 僕の様な、
に取っては、大変に有り難い構造なので、まあ今後も NixOS を使い続けると思います。はい。