フォークの作成にどのnixpkgが使用されているかを確認するには?

フォークの作成にどのnixpkgが使用されているかを確認するには?

理由を見つけようとしています。nix-build予期した出力を生成できません。。フォークを構築するために使用されたnixpkgsのバージョンを確認する方法はありますか?nix-build --verboseある時点で nixpkgs ハッシュを印刷するのと同じです。

ユースケースの場合は{pkgs ? import ./nixpkgs.nix}どうすればよいですか?知る~に関係なくpkgsこの派生のパラメータを提供しますか?現在のオペレーティングシステムにnixpkgsを使用してフォークを構築したら、パラメータを指定したものが必要ですpkgs。 nixpkgsが定義された状態でビルドされているnixpkgs.nix場合いいえもし。どのような場合かを手動で把握することは非常に退屈な作業です。

  1. nixpkgsから派生したすべての依存関係を見る
  2. 各依存関係について、nixpkgs.nixオペレーティングシステムとnixpkgsバージョンに異なるハッシュがあることを確認してください。
  3. ハッシュが異なる場合は、そのハッシュがどのnixpkgから来たかを確認し、nixpkgsが使用されたと結論付けます。
  4. ハッシュが同じ場合は続行

もちろん、すべての依存関係のハッシュが両方のnixpkgsバージョンで同じであれば、これは重要ではないかもしれませんが、少なくとも多くの手動操作なしでこの問題を解決できることをお勧めします。

外部詐欺

ベストアンサー1

nixpkgsどちらが使用されているかを尋ねることは、他の変数と同様に単なる変数であるため、明確に定義されていない可能性がありnix-buildますnixpkgs(URL、ローカルファイル、チャネル、単純な属性セットからその値を取得できます)。実際には、同じリポジトリに nixpkgs の複数のインスタンスを持つこともできます。さまざまな方法で nixpkgs バージョンを見つけることができます。

方法1:nixpkgsがどのチャンネルから来たのかを知っていて(例えば<nixpkgs>)、チャンネルが指すコミットを確認したい場合:

$ nix-instantiate --eval -E '(import <nixpkgs> {}).lib.version'
"22.11pre405560.2da64a81275"

(最後の数字はnixpkgsのコミットなので、nix eval代わりに使用できますが、nix-instantiateそのインターフェースは私が知っている限りそれほど安定していません。)

以下を使用してパスを取得することもできます。

$ nix-instantiate --eval -E '(import <nixpkgs> {}).path'
/nix/store/p5jayhh78vbq7kpw6p3m1s61g365zwam-nixos/nixos

方法2:定義された場所でさえ、不明なより複雑な派生の場合は、次のようにnixpkgs他の変数のようにデバッグできますbuildins.trace

より正確な例を得るために、ファイルが次のようになるとしましょう。

{
  pkgs ? import <nixpkgs> {}
}:
pkgs.hello

その後、次を使用してpkgs値を確認できます。

{
  pkgs ? import <nixpkgs> {}
}:
builtins.trace (pkgs.lib.version) pkgs.hello

コンパイルすると、次のような結果が得られます。 nixpkgsへのコミットは次のとおりです2da64a81275

$ nix-build a.nix
trace: 22.11pre405560.2da64a81275
/nix/store/y4mxrg8c6l09lb2szl69vwl4f6441i5k-hello-2.12.1

より多くのデバッグ機能については、以下を参照してください。ここ

PS:nixは怠惰な言語であり、必要なものだけを評価することを忘れないでください。したがって、変数が使用されない場合、その変数のトレースは呼び出されません。

$ cat a.nix
{
  pkgs ? import <nixpkgs> {}
}:
let
  x = builtins.trace (pkgs.lib.version) 2; # <-- never needed
in
pkgs.hello
$ nix-build a.nix
/nix/store/y4mxrg8c6l09lb2szl69vwl4f6441i5k-hello-2.12.1

方法3:フォークのすべての依存関係を知りたい場合、nixpkgsバージョンに気を付けない場合(すべてのフォークが内部的に与えられたものを呼び出してからnixpkgs入力を上書きすることができます):

$ nix show-derivation $(nix-instantiate default.nix) 
{
  "/nix/store/g6qkwa2xaq6i40cwl9bpjxi19m7q8121-hello-2.12.1.drv": {
    "outputs": {
      "out": {
        "path": "/nix/store/y4mxrg8c6l09lb2szl69vwl4f6441i5k-hello-2.12.1"
      }
    },
    "inputSrcs": [
      "/nix/store/9krlzvny65gdc8s7kpb6lkx8cd02c25b-default-builder.sh"
    ],
    "inputDrvs": {
      "/nix/store/0na7ivzsc073j4kpn9kqnvd2zvwb8g0a-hello-2.12.1.tar.gz.drv": [
        "out"
      ],
      "/nix/store/1av43alhcb8a894sz2cnnf9aldfdyb0h-stdenv-linux.drv": [
        "out"
      ],
      "/nix/store/6pj63b323pn53gpw3l5kdh1rly55aj15-bash-5.1-p16.drv": [
        "out"
      ]
    },
    "system": "x86_64-linux",
    "builder": "/nix/store/1b9p07z77phvv2hf6gm9f28syp39f1ag-bash-5.1-p16/bin/bash",
    "args": [
      "-e",
      "/nix/store/9krlzvny65gdc8s7kpb6lkx8cd02c25b-default-builder.sh"
    ],
    "env": {
      "buildInputs": "",
      "builder": "/nix/store/1b9p07z77phvv2hf6gm9f28syp39f1ag-bash-5.1-p16/bin/bash",
      "cmakeFlags": "",
      "configureFlags": "",
      "depsBuildBuild": "",
      "depsBuildBuildPropagated": "",
      "depsBuildTarget": "",
      "depsBuildTargetPropagated": "",
      "depsHostHost": "",
      "depsHostHostPropagated": "",
      "depsTargetTarget": "",
      "depsTargetTargetPropagated": "",
      "doCheck": "1",
      "doInstallCheck": "",
      "mesonFlags": "",
      "name": "hello-2.12.1",
      "nativeBuildInputs": "",
      "out": "/nix/store/y4mxrg8c6l09lb2szl69vwl4f6441i5k-hello-2.12.1",
      "outputs": "out",
      "patches": "",
      "pname": "hello",
      "propagatedBuildInputs": "",
      "propagatedNativeBuildInputs": "",
      "src": "/nix/store/pa10z4ngm0g83kx9mssrqzz30s84vq7k-hello-2.12.1.tar.gz",
      "stdenv": "/nix/store/bj5n3k01mq8bysw0rcdm7jxvhc620pd3-stdenv-linux",
      "strictDeps": "",
      "system": "x86_64-linux",
      "version": "2.12.1"
    }
  }
}

その他のデバッグツール デバッグするには、派生したソースコードを読んだり、nix-shell手順を手動で実行したり、次のようなさまざまなツールを使用する必要があるかもしれませんbuiltins.traceこの議論例えば)。

おすすめ記事