GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Debugging Warum baut Nix unnötigerweise ein Paket, wenn es sich im Binärcache von Nixpkg befinden sollte?

Ich habe diese Frage im IRC-Kanal gestellt, dachte aber, ich dokumentiere sie hier für mich und andere als Referenz.

Ich habe eine Shell.nix-Datei, deren Erstellung sehr lange dauert, insbesondere scheint sie eine HUnit zu erstellen Paket.

Meine Shell.nix-Datei sieht so aus:

{
 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" (./.) {}

Und die Quelle ist angeheftet an (mit 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"
    }
}

Warum baut nix einen Haufen Pakete, wenn ich annehme, dass sie im Binär-Cache von nixpkg sein sollten?

Zum Beispiel enthält die Ausgabe von nix-shell:

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

Akzeptierte Antwort:

Wir können in Hydra (für 19.03) nach dem HUnit-Paket suchen:

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

Gemäß obigem HUnit gebaut und würde sich im Binärcache befinden.

Wir ermitteln den Speicherpfad der zu erstellenden Ableitung mit:

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

Wir können das Folgende mit Hydra vergleichen:https://hydra.nixos.org/build/103222205#tabs-details

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

404 bedeutet, dass der Pfad NICHT im Binärcache ist.

Die Antwort stellte sich heraus, dass ich mich auf ghc bezog um ghc865 zu sein während Hydra wahrscheinlich mit ghc864 baut standardmäßig (für 19.03).

Die obigen Antworten stammen ursprünglich von clever im #nixos IRC-Kanal, danke!


Linux
  1. Nix – Ein leistungsstarker Paketmanager für Linux und Unix

  2. Linux – Wann sollte ich keinen -9 A-Prozess beenden?

  3. Wann sollte ich einen abschließenden Schrägstrich in einem Verzeichnis verwenden?

  4. Warum könnte man ~/.profile zu ~/.bash_profile hinzufügen?

  5. Wann und warum sollte ich Apt-get Update verwenden?

21 Gründe, warum meiner Meinung nach jeder Linux ausprobieren sollte

Warum jeder versuchen sollte, Linux zu verwenden

11 Gründe, warum Sie zu Linux wechseln sollten

So führen Sie ein .run- oder .bin-Paket unter Linux aus

Erste Schritte mit Nix Package Manager

Die 20 wichtigsten Gründe, warum Sie sich für einen Linux-Server entscheiden sollten