디버깅 nixpkgs 바이너리 캐시에 있어야 할 불필요한 패키지를 nix가 빌드하는 이유는 무엇입니까?

디버깅 nixpkgs 바이너리 캐시에 있어야 할 불필요한 패키지를 nix가 빌드하는 이유는 무엇입니까?

나는 IRC 채널에서 이 질문을 했지만 나와 다른 사람들이 참고할 수 있도록 여기에 문서화해야겠다고 생각했습니다.


빌드하는 데 시간이 오래 걸리는 shell.nix 파일이 있는데, 특히 패키지를 빌드하는 것 같습니다 HUnit.

내 shell.nix 파일은 다음과 같습니다.

{
 sources ? import ./nix/sources.nix
, compiler ? "ghc865" } :
let
  niv = import sources.nixpkgs {
    overlays = [
      (_ : _ : { niv = import sources.niv {}; })
    ] ;
    config = {};
  };
  pkgs = niv.pkgs;
  myHaskellPackages = pkgs.haskell.packages.${compiler}.override {
  };
in
myHaskellPackages.callCabal2nix "moscoviumorange" (./.) {}

소스는 다음 위치에 고정되어 있습니다(niv 사용).

{
    "niv": {
        "branch": "master",
        "description": "Easy dependency management for Nix projects",
        "homepage": "https://github.com/nmattia/niv",
        "owner": "nmattia",
        "repo": "niv",
        "rev": "88d6f20882b0422470acbcbf2d1b5f07e1d436f0",
        "sha256": "0wkvz4drnglmmdrz8q1i1yr2fqizpf96k1wq2rlhd8l8x1522izq",
        "type": "tarball",
        "url": "https://github.com/nmattia/niv/archive/88d6f20882b0422470acbcbf2d1b5f07e1d436f0.tar.gz",
        "url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
    },
    "nixpkgs": {
        "branch": "nixos-19.03",
        "description": "A read-only mirror of NixOS/nixpkgs tracking the released channels. Send issues and PRs to",
        "homepage": "https://github.com/NixOS/nixpkgs",
        "owner": "NixOS",
        "repo": "nixpkgs-channels",
        "rev": "775fb69ed73e7cf6b7d3dd9853a60f40e8efc340",
        "sha256": "1w068b0ydw4c26mcjiwlzdfqcdk3rrwmfx4hxzgfhfwcz2nmh3if",
        "type": "tarball",
        "url": "https://github.com/NixOS/nixpkgs-channels/archive/775fb69ed73e7cf6b7d3dd9853a60f40e8efc340.tar.gz",
        "url_template": "https://github.com/<owner>/<repo>/archive/<rev>.tar.gz"
    }
}

nixpkg의 바이너리 캐시에 있어야 한다고 가정하는데 nix가 여러 패키지를 빌드하는 이유는 무엇입니까?

예를 들어 nix-shell의 출력에는 다음이 포함됩니다.

building '/nix/store/7011izw8f2xyvhqadrhnmapddyz61f29-HUnit-1.6.0.0.drv'...

답변1

Hydra에서 HUnit 패키지(버전 19.03)를 검색할 수 있습니다.

https://Hydra.nixos.org/eval/1552169?filter=HUnit&compare=1551557&full=#tabs-still-fail

위와 같이 빌드 HUnit하고 바이너리 캐시에 넣습니다.


빌드 중인 파생물의 저장 경로를 결정합니다.

nix-store --query --binding out /nix/store/7011izw8f2xyvhqadrhnmapddyz61f29-HUnit-1.6.0.0.drv
/nix/store/ryr2qdms3n0qbj8d3l9pvs7ajz4dzav4-HUnit-1.6.0.0

적절한 Nixos 채널로 이동합니다(이 경우https://Hydra.nixos.org/jobset/nixos/release-19.03) 관련 패키지를 검색합니다.

그런 다음 다음을 Hydra와 비교할 수 있습니다.https://Hydra.nixos.org/build/103222205#tabs-details

curl https://cache.nixos.org/ryr2qdms3n0qbj8d3l9pvs7ajz4dzav4.narinfo
404

404는 경로가 바이너리 캐시에 없음을 의미합니다.


그 대답은 제가 인용한 것이고, ghcHydra ghc865는 아마도 ghc864기본적으로(19.03) 구축되어 있을 것입니다.

위의 답변은 cleverIRC #nixos채널에서 나온 것입니다. 감사합니다!

관련 정보