GNU/Linux >> Belajar Linux >  >> Linux

Debugging Mengapa Nix Membuat Paket Tidak Perlu Ketika Seharusnya Di Cache Biner Nixpkgs?

Saya mengajukan pertanyaan ini di saluran IRC, tetapi saya pikir saya akan mendokumentasikannya di sini untuk referensi saya sendiri dan orang lain.

Saya memiliki file shell.nix yang membutuhkan waktu lama untuk dibuat, khususnya sepertinya sedang membangun HUnit paket.

File shell.nix saya terlihat seperti:

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

Dan sumbernya disematkan ke (dengan 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"
    }
}

Mengapa nix membangun sekumpulan paket, padahal saya menganggap paket tersebut seharusnya ada di cache biner nixpkg?

Misalnya output dari nix-shell meliputi:

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

Jawaban yang Diterima:

Kami dapat mencari paket HUnit di Hydra (untuk 19,03):

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

Sesuai dengan HUnit di atas dibangun dan akan berada di cache biner.

Kami menentukan jalur penyimpanan dari derivasi yang sedang dibangun dengan:

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

Kita bisa bandingkan di bawah ini dengan hydra:https://hydra.nixos.org/build/103222205#tabs-details

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

404 berarti jalur tersebut TIDAK ada dalam cache biner.

Jawabannya ternyata saya merujuk ke ghc menjadi ghc865 sementara hydra mungkin sedang membangun dengan ghc864 secara default (untuk 19,03).

Jawaban di atas berasal dari clever di #nixos Saluran IRC, terima kasih!


Linux
  1. Nix – Manajer Paket yang Kuat untuk Linux dan Unix

  2. Linux – Kapan Saya Tidak Harus Membunuh -9 Proses?

  3. Hapus /var/cache dengan Aman?

  1. Kapan Dan Mengapa Saya Harus Menggunakan Pembaruan Apt-get?

  2. Mengapa seseorang harus menggunakan sudo?

  3. Mengapa LXC ketika ada linux-vserver?

  1. Kapan Saya Harus Menggunakan Trailing Slash Pada Direktori??

  2. Mengapa Seseorang Dapat Menambahkan ~/.profile Ke ~/.bash_profile?

  3. Kapan saya tidak boleh membunuh -9 proses?