Use a systemd mount directly for the nix store

Allows the LazyUnmount option and avoids the stage1 hack with
/nix//store.
This commit is contained in:
Rodrigo Arias 2023-09-18 18:53:40 +02:00
parent 77b41a90e2
commit e4cbcab81c

View File

@ -38,37 +38,27 @@
# Mount an overlay in /nix/store using as lower layer the NFS store and upper # Mount an overlay in /nix/store using as lower layer the NFS store and upper
# layer the disk nix store. The destination is still the nix store in # layer the disk nix store. The destination is still the nix store in
# /nix/store (confusing). We need rw access, as the daemon need to write the # /nix/store (confusing). We need rw access, as the daemon need to write the
# lock files to build derivations locally. # lock files to build derivations locally. Use a systemd mount unit directly
# HACK: Use /nix//store to prevent the overlay to be mounted on boot, see: # so we can specify the LazyUmount option and we avoid having it mounted
# https://github.com/NixOS/nixpkgs/blob/17a46d09ac123d0da3a26855bf3af7db01f9c751/nixos/lib/utils.nix#L14 # in the stage1 before systemd.
fileSystems."/nix//store" = { systemd.mounts = [
device = "overlay"; {
fsType = "overlay"; what = "overlay";
options = [ type = "overlay";
where = "/nix/store";
# We need the local-fs.target to be ready, so the network interfaces can # We need the local-fs.target to be ready, so the network interfaces can
# be configured to the network.target is reached. So make this a netdev # be configured to the network.target is reached. So make this a netdev
# mount. # mount.
"_netdev" options = "_netdev,lowerdir=/mnt/hut-nix-store,upperdir=/nix/store,workdir=/mnt/nix-work";
"lowerdir=/mnt/hut-nix-store,upperdir=/nix/store,workdir=/mnt/nix-work" description = "Overlay /nix/store mount";
"x-systemd.requires-mounts-for=/nix/store" mountConfig = {
# We need to wait for the NFS mount LazyUnmount = true;
"x-systemd.requires-mounts-for=/mnt/hut-nix-store" };
]; unitConfig = {
depends = [ "/nix/store" "/mnt/hut-nix-store" "/mnt/nix-work" ]; # We need to wait for the NFS mount
RequiresMountsFor = "/nix/store /mnt/hut-nix-store";
Before = "remote-fs.target";
}; };
}
# Maybe we should move it to a systemd mount, so we avoid the /nix//store ];
# hack. Example (not tested):
# systemd.mounts = [
# {
# what = "overlay";
# type = "overlay";
# where = "/nix/store";
# options = "lowerdir=/mnt/hut-nix-store,upperdir=/nix/store,workdir=/mnt/nix-work";
# description = "Overlay nix store mount";
# requires = [ "hut-nix-store.mount" ];
# after = [ "mnt-hut\\x2dnix\\x2dstore.mount" ];
# before = [ "nix-daemon.service" ];
# }
# ];
} }