nixos: Support fileSystems.<name>.depends with fstab-generator (#233707)
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
{ config, lib, pkgs, utils, ... }:
|
||||
{ config, lib, pkgs, utils, ... }@moduleArgs:
|
||||
|
||||
with lib;
|
||||
with utils;
|
||||
@@ -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
|
||||
)
|
||||
)
|
||||
];
|
||||
|
||||
};
|
||||
|
||||
@@ -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
|
||||
@@ -96,7 +100,7 @@ let
|
||||
] ++ lib.optionals (config.overlay.upperdir != null) [
|
||||
"upperdir=${upperdir}"
|
||||
"workdir=${workdir}"
|
||||
] ++ (map (s: "x-systemd.requires-mounts-for=${s}") lowerdir);
|
||||
];
|
||||
};
|
||||
|
||||
};
|
||||
@@ -123,18 +127,29 @@ in
|
||||
|
||||
boot.initrd.availableKernelModules = lib.mkIf (initrdFileSystems != { }) [ "overlay" ];
|
||||
|
||||
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;
|
||||
message = "A read-only overlay (without an `upperdir`) requires at least 2 `lowerdir`s: ${fs.mountPoint}";
|
||||
}
|
||||
])
|
||||
config.fileSystems);
|
||||
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;
|
||||
message = "A read-only overlay (without an `upperdir`) requires at least 2 `lowerdir`s: ${fs.mountPoint}";
|
||||
}
|
||||
]) 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);
|
||||
|
||||
@@ -26,7 +26,6 @@ in
|
||||
|
||||
nodes.machine = { config, pkgs, ... }: {
|
||||
boot.initrd.systemd.enable = true;
|
||||
boot.initrd.availableKernelModules = [ "overlay" ];
|
||||
|
||||
virtualisation.fileSystems = {
|
||||
"/initrd-overlay" = {
|
||||
|
||||
Reference in New Issue
Block a user