Loading nixos/modules/tasks/filesystems.nix +13 −2 Original line number Diff line number Diff line { config, lib, pkgs, utils, ... }: { config, lib, pkgs, utils, ... }@moduleArgs: with lib; with utils; Loading Loading @@ -136,10 +136,21 @@ let }; config.options = mkMerge [ config.options = let inInitrd = utils.fsNeededForBoot config; in mkMerge [ (mkIf config.autoResize [ "x-systemd.growfs" ]) (mkIf config.autoFormat [ "x-systemd.makefs" ]) (mkIf (utils.fsNeededForBoot config) [ "x-initrd.mount" ]) (mkIf # With scripted stage 1, depends is implemented by sorting 'config.system.build.fileSystems' (lib.length config.depends > 0 && (inInitrd -> moduleArgs.config.boot.initrd.systemd.enable)) ( map ( x: "x-systemd.requires-mounts-for=${optionalString inInitrd "/sysroot"}${x}" ) config.depends ) ) ]; }; Loading nixos/modules/tasks/filesystems/overlayfs.nix +28 −13 Original line number Diff line number Diff line Loading @@ -82,6 +82,10 @@ let config = lib.mkIf (config.overlay.lowerdir != null) { fsType = "overlay"; device = lib.mkDefault "overlay"; depends = map (x: "${x}") (config.overlay.lowerdir ++ lib.optionals (config.overlay.upperdir != null) [ config.overlay.upperdir config.overlay.workdir ]); options = let Loading @@ -96,7 +100,7 @@ let ] ++ lib.optionals (config.overlay.upperdir != null) [ "upperdir=${upperdir}" "workdir=${workdir}" ] ++ (map (s: "x-systemd.requires-mounts-for=${s}") lowerdir); ]; }; }; Loading @@ -123,18 +127,29 @@ in boot.initrd.availableKernelModules = lib.mkIf (initrdFileSystems != { }) [ "overlay" ]; assertions = lib.concatLists (lib.mapAttrsToList (_name: fs: [ assertions = lib.concatLists ( lib.mapAttrsToList (_name: fs: [ { assertion = (fs.overlay.upperdir == null) == (fs.overlay.workdir == null); message = "You cannot define a `lowerdir` without a `workdir` and vice versa for mount point: ${fs.mountPoint}"; } { assertion = (fs.overlay.lowerdir != null && fs.overlay.upperdir == null) -> (lib.length fs.overlay.lowerdir) >= 2; assertion = (fs.overlay.lowerdir != null && fs.overlay.upperdir == null) -> (lib.length fs.overlay.lowerdir) >= 2; message = "A read-only overlay (without an `upperdir`) requires at least 2 `lowerdir`s: ${fs.mountPoint}"; } ]) config.fileSystems); ]) overlayFileSystems ) ++ lib.mapAttrsToList (_: fs: { assertion = fs.overlay.upperdir == null -> config.boot.initrd.systemd.enable; message = '' Stage 1 overlay file system ${fs.mountPoint} has no upperdir, which is not supported with scripted initrd. Please enable 'boot.initrd.systemd.enable'. ''; }) initrdFileSystems; boot.initrd.systemd.services = lib.mkMerge (lib.mapAttrsToList preMountService initrdFileSystems); systemd.services = lib.mkMerge (lib.mapAttrsToList preMountService userspaceFileSystems); Loading nixos/tests/filesystems-overlayfs.nix +0 −1 Original line number Diff line number Diff line Loading @@ -26,7 +26,6 @@ in nodes.machine = { config, pkgs, ... }: { boot.initrd.systemd.enable = true; boot.initrd.availableKernelModules = [ "overlay" ]; virtualisation.fileSystems = { "/initrd-overlay" = { Loading Loading
nixos/modules/tasks/filesystems.nix +13 −2 Original line number Diff line number Diff line { config, lib, pkgs, utils, ... }: { config, lib, pkgs, utils, ... }@moduleArgs: with lib; with utils; Loading Loading @@ -136,10 +136,21 @@ let }; config.options = mkMerge [ config.options = let inInitrd = utils.fsNeededForBoot config; in mkMerge [ (mkIf config.autoResize [ "x-systemd.growfs" ]) (mkIf config.autoFormat [ "x-systemd.makefs" ]) (mkIf (utils.fsNeededForBoot config) [ "x-initrd.mount" ]) (mkIf # With scripted stage 1, depends is implemented by sorting 'config.system.build.fileSystems' (lib.length config.depends > 0 && (inInitrd -> moduleArgs.config.boot.initrd.systemd.enable)) ( map ( x: "x-systemd.requires-mounts-for=${optionalString inInitrd "/sysroot"}${x}" ) config.depends ) ) ]; }; Loading
nixos/modules/tasks/filesystems/overlayfs.nix +28 −13 Original line number Diff line number Diff line Loading @@ -82,6 +82,10 @@ let config = lib.mkIf (config.overlay.lowerdir != null) { fsType = "overlay"; device = lib.mkDefault "overlay"; depends = map (x: "${x}") (config.overlay.lowerdir ++ lib.optionals (config.overlay.upperdir != null) [ config.overlay.upperdir config.overlay.workdir ]); options = let Loading @@ -96,7 +100,7 @@ let ] ++ lib.optionals (config.overlay.upperdir != null) [ "upperdir=${upperdir}" "workdir=${workdir}" ] ++ (map (s: "x-systemd.requires-mounts-for=${s}") lowerdir); ]; }; }; Loading @@ -123,18 +127,29 @@ in boot.initrd.availableKernelModules = lib.mkIf (initrdFileSystems != { }) [ "overlay" ]; assertions = lib.concatLists (lib.mapAttrsToList (_name: fs: [ assertions = lib.concatLists ( lib.mapAttrsToList (_name: fs: [ { assertion = (fs.overlay.upperdir == null) == (fs.overlay.workdir == null); message = "You cannot define a `lowerdir` without a `workdir` and vice versa for mount point: ${fs.mountPoint}"; } { assertion = (fs.overlay.lowerdir != null && fs.overlay.upperdir == null) -> (lib.length fs.overlay.lowerdir) >= 2; assertion = (fs.overlay.lowerdir != null && fs.overlay.upperdir == null) -> (lib.length fs.overlay.lowerdir) >= 2; message = "A read-only overlay (without an `upperdir`) requires at least 2 `lowerdir`s: ${fs.mountPoint}"; } ]) config.fileSystems); ]) overlayFileSystems ) ++ lib.mapAttrsToList (_: fs: { assertion = fs.overlay.upperdir == null -> config.boot.initrd.systemd.enable; message = '' Stage 1 overlay file system ${fs.mountPoint} has no upperdir, which is not supported with scripted initrd. Please enable 'boot.initrd.systemd.enable'. ''; }) initrdFileSystems; boot.initrd.systemd.services = lib.mkMerge (lib.mapAttrsToList preMountService initrdFileSystems); systemd.services = lib.mkMerge (lib.mapAttrsToList preMountService userspaceFileSystems); Loading
nixos/tests/filesystems-overlayfs.nix +0 −1 Original line number Diff line number Diff line Loading @@ -26,7 +26,6 @@ in nodes.machine = { config, pkgs, ... }: { boot.initrd.systemd.enable = true; boot.initrd.availableKernelModules = [ "overlay" ]; virtualisation.fileSystems = { "/initrd-overlay" = { Loading