Nix
イメージが掴めなくて理解できないことが多い
Fetcherは事前にダウンロード予定のコンテンツのハッシュ値を指定しておき、Fetcher実行時にハッシュの異なるコンテンツがダウンロードされた場合異常終了させる
ハッシュの異なるコンテンツがダウンロードされる場合がある?
どの環境でも完全再現が可能
Nix のサンドボックス環境はインターネットにアクセスできない
それは副作用であり純粋関数的でなくなってしまう
Fetcher は参照透過性がある
ダウンロード予定のリソースのハッシュ値を指定するから
Fetcherは1つだけではなく、GitHubからソースコードをダウンロードするFetcherなど用途ごとにFetcherがある
すべてのものはNixストアに格納される
グローバルインストールも、実体は /nix/store/ に入る
~/.nix-profile/bin/ にシンボリックリンクが貼られている
これはローカルストアの話
ハッシュ値で厳密に管理される
Nixからはバージョン(ハッシュ値)が違うものはすべて別物
暗黙的な依存関係は許されない
これも環境を完全再現できる要素
Profilesによる非破壊的パッケージ構成管理
世代機能
アップデートするのではなく新規にビルドする
ロールバックのときは前の世代にリンクし直せば良い
代替者
ローカルストアになかった場合ここのストアを参照することでビルドスキップができる
これを使った場合のビルド手順
1. ストアパス生成
2. ローカルストアにビルド済みストアオブジェクトが存在するか確認(存在すればビルドスキップ)
3. Substituterにビルド済みストアオブジェクトが存在するか確認(存在すればビルドをスキップし、Substituterのストアオブジェクトをローカルストアに取得
4. ローカルストアにもSubstituterにも存在しなかった場合はビルド実行
これも一意なストアパスがある
Standard Environment
gcc とか coreutils とか スタンダードなパッケージが複数ある
code:terminal
nix shell nixpkgs#hello
そのパッケージが入った一時的な環境が構築される
exit で nix shell を抜ける
もし恒久的にインストールしたいなら nix profile add nixpkgs#hello
zero to nix