Nix nixpkgs용 Hydra에 캐시된 패키지 버전을 확인하는 방법은 무엇입니까?

Nix nixpkgs용 Hydra에 캐시된 패키지 버전을 확인하는 방법은 무엇입니까?

나는 이전 nixpkgs 채널/분기( )를 사용하여 18.03이전 Haskell 프로젝트를 빌드하려고 합니다.

처음 빌드하려고 할 때 컴파일러 버전을 ghc843...로 지정하지만 빌드할 때 캐시에서 나올 것으로 예상하면 모든 외부 라이브러리를 빌드하는 것 같습니다.

다행히도 이전에 이런 문제가 발생한 적이 있다는 것을 기억했습니다.디버깅 nixpkgs 바이너리 캐시에 있어야 할 불필요한 패키지를 nix가 빌드하는 이유는 무엇입니까?

문제는 기본적으로 ghc의 "기본이 아닌" 버전을 사용하고 있다는 것입니다(Hydra는 빌드/캐시하지 않음).

이제 내 질문은 "기본" 컴파일러 버전 또는 Hydra 빌드/캐시 버전을 어떻게 찾을 수 있습니까?

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

우연히 나는 ghc823기본값인 것처럼 보이는 이것을 시도했습니다(또는 적어도 자산이 Hydra에 캐시되어 있습니다).


나는 nix repl을 사용하여 다음과 같이 사용 가능한 ghc 컴파일러 버전을 나열하는 방법을 알아냈습니다.

nix-repl> yolo = (import nix/sources.nix {}) 
nix-repl> yolo.blablaTestTabCompletion
nix-repl> yolo2 = (import yolo.nixpkgs {})
nix-repl> yolo2.haskell.packages.
yolo2.haskell.packages.ghc7103         yolo2.haskell.packages.ghc843
yolo2.haskell.packages.ghc7103Binary   yolo2.haskell.packages.ghcHEAD
yolo2.haskell.packages.ghc802          yolo2.haskell.packages.ghcjs
yolo2.haskell.packages.ghc821Binary    yolo2.haskell.packages.ghcjsHEAD
yolo2.haskell.packages.ghc822          yolo2.haskell.packages.integer-simple
yolo2.haskell.packages.ghc841

답변1

haskellPackages대신 사용하면 haskell.packages.ghc<version>항상 기본 버전을 얻게 됩니다.

또한 이 줄 haskellPackages = dontRecurseIntoAttrs haskell.packages.ghc883( ~/.nix-defexpr/channels/nixpkgs/pkgs/top-level/all-packages.nix또는 사용 중인 nixpkgs 채널의 경로)을 확인하여 채널의 기본 GHC 버전을 확인할 수도 있습니다.

해당 줄에 대한 링크는 다음과 같습니다 18.03.https://github.com/NixOS/nixpkgs/blob/18.03/pkgs/top-level/all-packages.nix#L6216:

haskellPackages = haskell.packages.ghc822.override {

그건 그렇고, 하스켈 프로젝트에 nixpkgs 버전을 고정하면 시스템의 나머지 부분을 업그레이드하더라도 안정적으로 다시 빌드할 수 있다는 것을 알 수 있습니다. 바라보다https://github.com/Gabriel439/haskell-nix/tree/master/project0#pinning-nixpkgs또는https://nixos.wiki/wiki/FAQ/Pinning_Nixpkgs이를 수행하는 방법에 대한 추가 정보.

관련 정보