Merge pull request #227633 from ElvishJerricco/systemd-stage-1-fix-initrd-commands
Systemd stage 1 assert initrd commands are empty
This commit is contained in:
commit
7bc18b63da
9 changed files with 45 additions and 22 deletions
|
@ -350,7 +350,7 @@ in
|
|||
|
||||
boot.kernelParams = mkIf (!config.networking.usePredictableInterfaceNames) [ "net.ifnames=0" ];
|
||||
|
||||
boot.initrd.extraUdevRulesCommands = optionalString (!config.boot.initrd.systemd.enable && config.boot.initrd.services.udev.rules != "")
|
||||
boot.initrd.extraUdevRulesCommands = mkIf (!config.boot.initrd.systemd.enable && config.boot.initrd.services.udev.rules != "")
|
||||
''
|
||||
cat <<'EOF' > $out/99-local.rules
|
||||
${config.boot.initrd.services.udev.rules}
|
||||
|
|
|
@ -546,8 +546,9 @@ in {
|
|||
# We do not have systemd in stage-1 boot so must invoke `multipathd`
|
||||
# with the `-1` argument which disables systemd calls. Invoke `multipath`
|
||||
# to display the multipath mappings in the output of `journalctl -b`.
|
||||
# TODO: Implement for systemd stage 1
|
||||
boot.initrd.kernelModules = [ "dm-multipath" "dm-service-time" ];
|
||||
boot.initrd.postDeviceCommands = ''
|
||||
boot.initrd.postDeviceCommands = mkIf (!config.boot.initrd.systemd.enable) ''
|
||||
modprobe -a dm-multipath dm-service-time
|
||||
multipathd -s
|
||||
(set -x && sleep 1 && multipath -ll)
|
||||
|
|
|
@ -116,11 +116,11 @@ in
|
|||
|
||||
boot.initrd.kernelModules = [ "af_packet" ];
|
||||
|
||||
boot.initrd.extraUtilsCommands = ''
|
||||
boot.initrd.extraUtilsCommands = mkIf (!config.boot.initrd.systemd.enable) ''
|
||||
copy_bin_and_libs ${pkgs.klibc}/lib/klibc/bin.static/ipconfig
|
||||
'';
|
||||
|
||||
boot.initrd.preLVMCommands = mkBefore (
|
||||
boot.initrd.preLVMCommands = mkIf (!config.boot.initrd.systemd.enable) (mkBefore (
|
||||
# Search for interface definitions in command line.
|
||||
''
|
||||
ifaces=""
|
||||
|
@ -148,9 +148,9 @@ in
|
|||
done
|
||||
''
|
||||
|
||||
+ cfg.postCommands);
|
||||
+ cfg.postCommands));
|
||||
|
||||
boot.initrd.postMountCommands = mkIf cfg.flushBeforeStage2 ''
|
||||
boot.initrd.postMountCommands = mkIf (cfg.flushBeforeStage2 && !config.boot.initrd.systemd.enable) ''
|
||||
for iface in $ifaces; do
|
||||
ip address flush dev "$iface"
|
||||
ip link set dev "$iface" down
|
||||
|
|
|
@ -348,6 +348,27 @@ in {
|
|||
};
|
||||
|
||||
config = mkIf (config.boot.initrd.enable && cfg.enable) {
|
||||
assertions = map (name: {
|
||||
assertion = lib.attrByPath name (throw "impossible") config.boot.initrd == "";
|
||||
message = ''
|
||||
systemd stage 1 does not support 'boot.initrd.${lib.concatStringsSep "." name}'. Please
|
||||
convert it to analogous systemd units in 'boot.initrd.systemd'.
|
||||
|
||||
Definitions:
|
||||
${lib.concatMapStringsSep "\n" ({ file, ... }: " - ${file}") (lib.attrByPath name (throw "impossible") options.boot.initrd).definitionsWithLocations}
|
||||
'';
|
||||
}) [
|
||||
[ "preFailCommands" ]
|
||||
[ "preDeviceCommands" ]
|
||||
[ "preLVMCommands" ]
|
||||
[ "postDeviceCommands" ]
|
||||
[ "postMountCommands" ]
|
||||
[ "extraUdevRulesCommands" ]
|
||||
[ "extraUtilsCommands" ]
|
||||
[ "extraUtilsCommandsTest" ]
|
||||
[ "network" "postCommands" ]
|
||||
];
|
||||
|
||||
system.build = { inherit initialRamdisk; };
|
||||
|
||||
boot.initrd.availableKernelModules = [
|
||||
|
|
|
@ -110,10 +110,11 @@ in
|
|||
}) earlyEncDevs);
|
||||
forceLuksSupportInInitrd = true;
|
||||
};
|
||||
postMountCommands =
|
||||
concatMapStrings (dev:
|
||||
# TODO: systemd stage 1
|
||||
postMountCommands = lib.mkIf (!config.boot.initrd.systemd.enable)
|
||||
(concatMapStrings (dev:
|
||||
"cryptsetup luksOpen --key-file ${dev.encrypted.keyFile} ${dev.encrypted.blkDev} ${dev.encrypted.label};\n"
|
||||
) lateEncDevs;
|
||||
) lateEncDevs);
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
|
@ -102,11 +102,11 @@ in
|
|||
copy_bin_and_libs ${pkgs.bcachefs-tools}/bin/bcachefs
|
||||
copy_bin_and_libs ${mountCommand}/bin/mount.bcachefs
|
||||
'';
|
||||
boot.initrd.extraUtilsCommandsTest = ''
|
||||
boot.initrd.extraUtilsCommandsTest = lib.mkIf (!config.boot.initrd.systemd.enable) ''
|
||||
$out/bin/bcachefs version
|
||||
'';
|
||||
|
||||
boot.initrd.postDeviceCommands = commonFunctions + concatStrings (mapAttrsToList openCommand bootFs);
|
||||
boot.initrd.postDeviceCommands = lib.mkIf (!config.boot.initrd.systemd.enable) (commonFunctions + concatStrings (mapAttrsToList openCommand bootFs));
|
||||
|
||||
boot.initrd.systemd.services = lib.mapAttrs' (mkUnits "/sysroot") bootFs;
|
||||
})
|
||||
|
|
|
@ -584,17 +584,17 @@ in
|
|||
boot.initrd = mkIf inInitrd {
|
||||
kernelModules = [ "zfs" ] ++ optional (!cfgZfs.enableUnstable) "spl";
|
||||
extraUtilsCommands =
|
||||
''
|
||||
mkIf (!config.boot.initrd.systemd.enable) ''
|
||||
copy_bin_and_libs ${cfgZfs.package}/sbin/zfs
|
||||
copy_bin_and_libs ${cfgZfs.package}/sbin/zdb
|
||||
copy_bin_and_libs ${cfgZfs.package}/sbin/zpool
|
||||
'';
|
||||
extraUtilsCommandsTest = mkIf inInitrd
|
||||
''
|
||||
extraUtilsCommandsTest =
|
||||
mkIf (!config.boot.initrd.systemd.enable) ''
|
||||
$out/bin/zfs --help >/dev/null 2>&1
|
||||
$out/bin/zpool --help >/dev/null 2>&1
|
||||
'';
|
||||
postDeviceCommands = concatStringsSep "\n" ([''
|
||||
postDeviceCommands = mkIf (!config.boot.initrd.systemd.enable) (concatStringsSep "\n" ([''
|
||||
ZFS_FORCE="${optionalString cfgZfs.forceImportRoot "-f"}"
|
||||
''] ++ [(importLib {
|
||||
# See comments at importLib definition.
|
||||
|
@ -623,10 +623,10 @@ in
|
|||
else concatMapStrings (fs: ''
|
||||
zfs load-key -- ${escapeShellArg fs}
|
||||
'') (filter (x: datasetToPool x == pool) cfgZfs.requestEncryptionCredentials)}
|
||||
'') rootPools));
|
||||
'') rootPools)));
|
||||
|
||||
# Systemd in stage 1
|
||||
systemd = {
|
||||
systemd = mkIf config.boot.initrd.systemd.enable {
|
||||
packages = [cfgZfs.package];
|
||||
services = listToAttrs (map (pool: createImportService {
|
||||
inherit pool;
|
||||
|
|
|
@ -62,13 +62,13 @@ in {
|
|||
cp -v ${pkgs.mdadm}/lib/udev/rules.d/*.rules $out/
|
||||
'';
|
||||
|
||||
extraUtilsCommands = ''
|
||||
extraUtilsCommands = lib.mkIf (!config.boot.initrd.systemd.enable) ''
|
||||
# Add RAID mdadm tool.
|
||||
copy_bin_and_libs ${pkgs.mdadm}/sbin/mdadm
|
||||
copy_bin_and_libs ${pkgs.mdadm}/sbin/mdmon
|
||||
'';
|
||||
|
||||
extraUtilsCommandsTest = ''
|
||||
extraUtilsCommandsTest = lib.mkIf (!config.boot.initrd.systemd.enable) ''
|
||||
$out/bin/mdadm --version
|
||||
'';
|
||||
|
||||
|
|
|
@ -5,19 +5,19 @@
|
|||
# `virtualisation.fileSystems."/".autoFormat = true;`
|
||||
# instead.
|
||||
|
||||
{ config, pkgs, ... }:
|
||||
{ lib, config, pkgs, ... }:
|
||||
|
||||
let
|
||||
rootDevice = config.virtualisation.rootDevice;
|
||||
in
|
||||
{
|
||||
|
||||
boot.initrd.extraUtilsCommands = ''
|
||||
boot.initrd.extraUtilsCommands = lib.mkIf (!config.boot.initrd.systemd.enable) ''
|
||||
# We need mke2fs in the initrd.
|
||||
copy_bin_and_libs ${pkgs.e2fsprogs}/bin/mke2fs
|
||||
'';
|
||||
|
||||
boot.initrd.postDeviceCommands = ''
|
||||
boot.initrd.postDeviceCommands = lib.mkIf (!config.boot.initrd.systemd.enable) ''
|
||||
# If the disk image appears to be empty, run mke2fs to
|
||||
# initialise.
|
||||
FSTYPE=$(blkid -o value -s TYPE ${rootDevice} || true)
|
||||
|
|
Loading…
Reference in a new issue