Unverified Commit 4710721d authored by Philip Taron's avatar Philip Taron Committed by GitHub
Browse files

nixos: Support fileSystems.<name>.depends with fstab-generator (#233707)

parents 4fedd7f9 c653608d
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
{ 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
        )
      )
    ];

  };
+28 −13
Original line number Diff line number Diff line
@@ -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: [
      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);
+0 −1
Original line number Diff line number Diff line
@@ -26,7 +26,6 @@ in

  nodes.machine = { config, pkgs, ... }: {
    boot.initrd.systemd.enable = true;
    boot.initrd.availableKernelModules = [ "overlay" ];

    virtualisation.fileSystems = {
      "/initrd-overlay" = {