So when I tried to use a binary cache, I kept finding that whenever I ran nix-channel --update
, it kept trying to reach out to cache.nixos.org
for https://cache.nixos.org/zh0yr18j8vr77is99mj01yxwmf2cy4xn.narinfo
instead of http://cache.example.com
, which is my binary cache which is hosted locally on my network, even when I pointed it to the right URL where I stored the nixexprs.tar.xz
accessible from within the network. It is a simple nginx reverse proxy like: FAQ/Private Cache Proxy - NixOS Wiki
I tried the following to stop it from doing that:
nix-channel --update --option substituters http://cache.example.com/
NIX_SUBSTITUTERS='http://cache.example.com/' nix-channel --update
nix-channel --update --option binary-caches http://cache.example.com/
The ONLY way to do it is to rebuild the system with the following enabled:
nix.settings.substituters = lib.mkForce [ "http://hub-prod-nixcache.hub.andrewcz.com/" ];
As shown here: With nix options changes, first substituter is always cache.nixos.org · Issue #158356 · NixOS/nixpkgs · GitHub
And then only after running nixos-rebuild --option substituters http://cache.example.com/ switch
would nix-channel --update
succeed. (FWIW, I already was able to host the nixexprs.tar.xz
needed to point to the right derivations. Since this was offline except for the cache servers, this was necessary to host on that same nginx server.)
It’s not ideal to rebuild the system (these are servers) before updating the list of packages, but as long as my base image isn’t too old, it works. (I’ll have to update from 23.11 soon haha)
EDIT: Looks like the fix for https://discourse.nixos.org/t/cache-nixos-org-is-unreachable/28770https://discourse.nixos.org/t/cache-nixos-org-is-unreachable/28770 too