Nixのパッケージ・derivationの探り方まとめ

Nixで、あるパッケージがどのパッケージに依存しているのかを調べたくなったのを発端に、パッケージやその依存関係の調べ方についていろいろ調べた。 要約 アプリ・ツールがどのパッケージに収録されているのかを知る NixOS Search や nix search コマンドを使う which や realpath コマンドから /nix/store 下のディレクトリがわかるのでそこからパッケージ名を知る nix-index、 nix-index-databaseを使う derivationの詳細を知る: nix derivation show [drv or output] output ⇔ derivation outputがどのderivationでビルドされたのかを知る: niq-store --query --deriver [output] derivationのoutputを知る: nix-store --query --outputs [drv] derivationについて build dependenciesを知る: nix-store --query --references [drv] 間接的なbuild dependenciesもすべて知る: nix-store --query --requisites [drv] outputについて runtime dependenciesを知る: nix-store --query --references [output] 間接的なruntime dependenciesもすべて知る: nix-store --query --requisites [output] 前置き 用語解説 いろいろとNix固有(?)の言葉が出てくるため、ここでまとめて解説しておく。 GlossaryとNix Pills Chapter9を参考にする。 パッケージ:ファイルやデータの集まり。 derivation:何らかのビルドタスクを行うための記述書。端的にはパッケージを作るための仕様書である。次の節で詳しく述べる output:derivationから生成されたもの store object:Nixによって管理されているあらゆるオブジェクトをさす。通常は/nix/store/に保管されているはず store path:store objectが置かれている場所。通常は/nix/store/にあるはず build depencencies:ビルドの時点で必要になる依存関係。ビルドに必要なソースコードや、derivationの中で参照されている別のderivationを指す。これはderivationに記載されている runtime dependencies:実行時に必要になる依存関係。動的ライブラリや、ほかのパッケージの実行ファイルなどを指す これを検出する方法は素朴で、生成したパッケージをNAR形式で固め、そこに埋め込まれているoutputのパスがruntime dependenciesと判定するだけである NAR (Nix Archive):tarのように複数ファイルを1つのファイルに固めた形式。ただし、同じアーカイブ対象であればまったく同じNARファイルができるように、tarに比べてシンプルなつくりになっている。例えば、tarだとアーカイブする度にタイムスタンプ(mtimeフィールド)が埋め込まれるが、NARにはそれがない(参考) NARが作られた背景について、edolstra氏のPh....

2024-04-04 · (updated 2024-09-17) · 6 min · 1098 words