From acf089edefdf80abc6c5fb18937393a9e4519a62 Mon Sep 17 00:00:00 2001 From: Janne Heß Date: Mon, 4 Apr 2022 22:51:08 +0100 Subject: nixos/systemd-stage-1: Softcode bin tools... ...and other cleanups and fixes --- nixos/modules/system/boot/systemd/initrd.nix | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) (limited to 'nixos') diff --git a/nixos/modules/system/boot/systemd/initrd.nix b/nixos/modules/system/boot/systemd/initrd.nix index 36a14d7a82565..a3ea787303764 100644 --- a/nixos/modules/system/boot/systemd/initrd.nix +++ b/nixos/modules/system/boot/systemd/initrd.nix @@ -108,7 +108,7 @@ let fileSystems = filter utils.fsNeededForBoot config.system.build.fileSystems; - fstab = pkgs.writeText "fstab" (lib.concatMapStringsSep "\n" + fstab = pkgs.writeText "initrd-fstab" (lib.concatMapStringsSep "\n" ({ fsType, mountPoint, device, options, autoFormat, autoResize, ... }@fs: let opts = options ++ optional autoFormat "x-systemd.makefs" ++ optional autoResize "x-systemd.growfs"; in "${device} /sysroot${mountPoint} ${fsType} ${lib.concatStringsSep "," opts}") fileSystems); @@ -128,11 +128,7 @@ let name = "initrd-emergency-env"; paths = map getBin cfg.initrdBin; pathsToLink = ["/bin" "/sbin"]; - # Make recovery easier - postBuild = '' - ln -s ${cfg.package.util-linux}/bin/mount $out/bin/ - ln -s ${cfg.package.util-linux}/bin/umount $out/bin/ - ''; + postBuild = concatStringsSep "\n" (mapAttrsToList (n: v: "ln -s '${v}' $out/bin/'${n}'") cfg.extraBin); }; initialRamdisk = pkgs.makeInitrdNG { @@ -205,6 +201,19 @@ in { default = []; }; + extraBin = mkOption { + description = '' + Tools to add to /bin + ''; + example = literalExpression '' + { + umount = ''${pkgs.util-linux}/bin/umount; + } + ''; + type = types.attrsOf types.path; + default = {}; + }; + suppressedStorePaths = mkOption { description = '' Store paths specified in the storePaths option that @@ -342,8 +351,15 @@ in { config = mkIf (config.boot.initrd.enable && cfg.enable) { system.build = { inherit initialRamdisk; }; + + boot.initrd.availableKernelModules = [ "autofs4" ]; # systemd needs this for some features + boot.initrd.systemd = { initrdBin = [pkgs.bash pkgs.coreutils pkgs.kmod cfg.package] ++ config.system.fsPackages; + extraBin = { + mount = "${cfg.package.util-linux}/bin/mount"; + umount = "${cfg.package.util-linux}/bin/umount"; + }; contents = { "/init".source = "${cfg.package}/lib/systemd/systemd"; -- cgit 1.4.1