GNU/Linux >> Tutoriels Linux >  >> Linux

Débogage Pourquoi Nix construit un paquet inutilement alors qu'il devrait être dans le cache binaire de Nixpkgs ?

J'ai posé cette question sur le canal IRC, mais j'ai pensé la documenter ici pour ma propre référence ainsi que celle des autres.

J'ai un fichier shell.nix qui prend beaucoup de temps à construire, en particulier il semble construire un HUnit paquet.

Mon fichier shell.nix ressemble à :

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

Et la source est épinglée à (avec 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"
    }
}

Pourquoi nix construit-il un tas de paquets, alors que je suppose qu'ils devraient être dans le cache binaire de nixpkg ?

Par exemple, la sortie de nix-shell inclut :

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

Réponse acceptée :

Nous pouvons rechercher le package HUnit à Hydra (pour 19.03):

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

Selon l'HUnit ci-dessus est construit et serait dans le cache binaire.

Nous déterminons le chemin d'accès au magasin de la dérivation en cours de construction avec :

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

Nous pouvons comparer ce qui suit avec hydra :https://hydra.nixos.org/build/103222205#tabs-details

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

404 signifie que le chemin n'est PAS dans le cache binaire.

La réponse s'est avérée être que je faisais référence à ghc être ghc865 alors que hydra est probablement en train de construire avec ghc864 par défaut (pour 19.03).

Les réponses ci-dessus provenaient à l'origine de clever dans le #nixos Canal IRC, merci !


Linux
  1. Redis comme cache :comment ça marche et pourquoi l'utiliser

  2. Débogage léger des fuites de mémoire sous Linux

  3. Pourquoi utiliser sudo ?

  4. Pourquoi LXC quand il y a Linux-vserver ?

  5. Quand ne dois-je pas tuer -9 un processus ?

21 raisons pour lesquelles je pense que tout le monde devrait essayer Linux

Pourquoi tout le monde devrait essayer d'utiliser Linux

11 raisons pour lesquelles vous devriez passer à Linux

Comment exécuter un package .run ou .bin sous Linux

Premiers pas avec le gestionnaire de paquets Nix

Les 20 principales raisons pour lesquelles vous devriez choisir un serveur Linux