Open1
NixのFetchersを使ってみる
Fetchersとは?
前提
- Nixはパッケージのビルドを純粋関数に見立てて行う
- 副作用は許されない
- ビルド結果は冪等でなければならない
- パッケージのインストールは必ずNix式の評価を介する
- つまり、常にNixによってビルドされる
- ただし、バイナリキャッシュの仕組みがある
- つまり、常にNixによってビルドされる
-
パッケージはネットワークのないサンドボックスでビルドされる
- ローカルのリソースしか利用できない
- リソース(e.g. 画像)をインターネット越しにダウンロードしたい場合はどうするのか?
- バイナリ配布のパッケージはどうやってインストールするのか?
- ローカルのリソースしか利用できない
Fetchers
- nixpkgsに含まれるダウンロード用の関数群
- GitHubリポジトリの/pkgs/build-supportに含まれる
- ビルド用のユーティリティが置かれている
- 名前がfetch*
-
fetchurl
やfetchgit
など色々ある
-
- GitHubリポジトリの/pkgs/build-supportに含まれる
仕組み
どのfetcherも必ず引数にハッシュを指定する必要がある。
fetchurl関数の場合
fetchurl {
url = "http://www.example.org/hello-1.0.tar.gz";
hash = "sha256-lTeyxzJNQeMdu1IVdovNMtgn77jRIhSybLdMbTkf2Ww=";
};
fetcherはファイルをダウンロードすると、ファイルをハッシュ化してそれを引数のhash
と比較し、もし異なればビルドを失敗させる。こうすることで、Nixはビルドの冪等性を保ちながらインターネットからリソースをダウンロードすることができる。