GNU/Linux >> Tutoriales Linux >  >> Linux

Depuración ¿Por qué Nix está construyendo un paquete innecesariamente cuando debería estar en el caché binario de Nixpkgs?

Hice esta pregunta en el canal de IRC, pero pensé en documentarla aquí para mi propia referencia y la de otros.

Tengo un archivo shell.nix que está tardando mucho en compilarse, en particular, parece estar compilando un HUnit paquete.

Mi archivo shell.nix se ve así:

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

Y la fuente está fijada a (con 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"
    }
}

¿Por qué nix está construyendo un montón de paquetes, cuando asumo que deberían estar en el caché binario de nixpkg?

Por ejemplo, la salida de nix-shell incluye:

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

Respuesta aceptada:

Podemos buscar el paquete HUnit en Hydra (para 19.03):

https://hydra.nixos.org/eval/1552169?filter=HUnit&compare=1551557&full=#tabs-todavía-fallan

De acuerdo con el HUnit anterior está construido y estaría en el caché binario.

Determinamos la ruta de almacenamiento de la derivación que se estaba construyendo con:

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

Podemos comparar lo siguiente con hydra:https://hydra.nixos.org/build/103222205#tabs-details

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

404 significa que la ruta NO está en el caché binario.

La respuesta resultó ser que estaba haciendo referencia a ghc ser ghc865 mientras que Hydra probablemente se está construyendo con ghc864 por defecto (para 19.03).

Las respuestas anteriores fueron originalmente de clever en el #nixos Canal IRC, ¡gracias!


Linux
  1. Nix:un potente administrador de paquetes para Linux y Unix

  2. Linux:¿cuándo no debo matar -9 un proceso?

  3. ¿Quitar con seguridad /var/cache?

  4. ¿Cuándo debo usar una barra inclinada final en un directorio?

  5. ¿Por qué se podría agregar ~/.profile a ~/.bash_profile?

21 razones por las que creo que todo el mundo debería probar Linux

Por qué todos deberían intentar usar Linux

11 razones por las que deberías cambiarte a Linux

Cómo ejecutar un paquete .run o .bin en Linux

Primeros pasos con el administrador de paquetes de Nix

Las 20 razones principales por las que debería elegir un servidor Linux