Skip to content
Snippets Groups Projects
  • Eelco Dolstra's avatar
    ca580bec
    BinaryCacheStore: Support local caching of NARs · ca580bec
    Eelco Dolstra authored
    This speeds up commands like "nix cat-store". For example:
    
      $ time nix cat-store --store https://cache.nixos.org?local-nar-cache=/tmp/nar-cache /nix/store/i60yncmq6w9dyv37zd2k454g0fkl3arl-systemd-234/etc/udev/udev.conf
      real    0m4.336s
    
      $ time nix cat-store --store https://cache.nixos.org?local-nar-cache=/tmp/nar-cache /nix/store/i60yncmq6w9dyv37zd2k454g0fkl3arl-systemd-234/etc/udev/udev.conf
      real    0m0.045s
    
    The primary motivation is to allow hydra-server to serve files from S3
    binary caches. Previously Hydra had a hack to do "nix-store -r
    <path>", but that fetches the entire closure so is prohibitively
    expensive.
    
    There is no garbage collection of the NAR cache yet. Also, the entire
    NAR is read when accessing a single member file. We could generate the
    NAR listing to provide random access.
    
    Note: the NAR cache is indexed by the store path hash, not the content
    hash, so NAR caches should not be shared between binary caches, unless
    you're sure that all your builds are binary-reproducible.
    ca580bec
    History
    BinaryCacheStore: Support local caching of NARs
    Eelco Dolstra authored
    This speeds up commands like "nix cat-store". For example:
    
      $ time nix cat-store --store https://cache.nixos.org?local-nar-cache=/tmp/nar-cache /nix/store/i60yncmq6w9dyv37zd2k454g0fkl3arl-systemd-234/etc/udev/udev.conf
      real    0m4.336s
    
      $ time nix cat-store --store https://cache.nixos.org?local-nar-cache=/tmp/nar-cache /nix/store/i60yncmq6w9dyv37zd2k454g0fkl3arl-systemd-234/etc/udev/udev.conf
      real    0m0.045s
    
    The primary motivation is to allow hydra-server to serve files from S3
    binary caches. Previously Hydra had a hack to do "nix-store -r
    <path>", but that fetches the entire closure so is prohibitively
    expensive.
    
    There is no garbage collection of the NAR cache yet. Also, the entire
    NAR is read when accessing a single member file. We could generate the
    NAR listing to provide random access.
    
    Note: the NAR cache is indexed by the store path hash, not the content
    hash, so NAR caches should not be shared between binary caches, unless
    you're sure that all your builds are binary-reproducible.