nixos/stage-1: fix predictable interfaces names
This makes predictable interfaces names available as soon as possible with udev by adding the default network link units to initrd which are read by udev. Also adds some udev rules that are needed but which would normally loaded from the udev store path which is not included in the initrd.
This commit is contained in:
parent
cfd4d4557a
commit
44e289f93b
|
@ -210,6 +210,8 @@ done
|
||||||
# Create device nodes in /dev.
|
# Create device nodes in /dev.
|
||||||
@preDeviceCommands@
|
@preDeviceCommands@
|
||||||
echo "running udev..."
|
echo "running udev..."
|
||||||
|
mkdir -p /etc/systemd
|
||||||
|
ln -sfn @linkUnits@ /etc/systemd/network
|
||||||
mkdir -p /etc/udev
|
mkdir -p /etc/udev
|
||||||
ln -sfn @udevRules@ /etc/udev/rules.d
|
ln -sfn @udevRules@ /etc/udev/rules.d
|
||||||
mkdir -p /dev/.mdadm
|
mkdir -p /dev/.mdadm
|
||||||
|
@ -266,7 +268,7 @@ checkFS() {
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Device might be already mounted manually
|
# Device might be already mounted manually
|
||||||
# e.g. NBD-device or the host filesystem of the file which contains encrypted root fs
|
# e.g. NBD-device or the host filesystem of the file which contains encrypted root fs
|
||||||
if mount | grep -q "^$device on "; then
|
if mount | grep -q "^$device on "; then
|
||||||
echo "skip checking already mounted $device"
|
echo "skip checking already mounted $device"
|
||||||
|
@ -351,7 +353,7 @@ mountFS() {
|
||||||
elif [ "$fsType" = f2fs ]; then
|
elif [ "$fsType" = f2fs ]; then
|
||||||
echo "resizing $device..."
|
echo "resizing $device..."
|
||||||
fsck.f2fs -fp "$device"
|
fsck.f2fs -fp "$device"
|
||||||
resize.f2fs "$device"
|
resize.f2fs "$device"
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
|
@ -120,6 +120,7 @@ let
|
||||||
|
|
||||||
# Copy udev.
|
# Copy udev.
|
||||||
copy_bin_and_libs ${udev}/lib/systemd/systemd-udevd
|
copy_bin_and_libs ${udev}/lib/systemd/systemd-udevd
|
||||||
|
copy_bin_and_libs ${udev}/lib/systemd/systemd-sysctl
|
||||||
copy_bin_and_libs ${udev}/bin/udevadm
|
copy_bin_and_libs ${udev}/bin/udevadm
|
||||||
for BIN in ${udev}/lib/udev/*_id; do
|
for BIN in ${udev}/lib/udev/*_id; do
|
||||||
copy_bin_and_libs $BIN
|
copy_bin_and_libs $BIN
|
||||||
|
@ -198,6 +199,14 @@ let
|
||||||
''; # */
|
''; # */
|
||||||
|
|
||||||
|
|
||||||
|
linkUnits = pkgs.runCommand "link-units" {
|
||||||
|
allowedReferences = [ extraUtils ];
|
||||||
|
preferLocalBuild = true;
|
||||||
|
} ''
|
||||||
|
mkdir -p $out
|
||||||
|
cp -v ${udev}/lib/systemd/network/*.link $out/
|
||||||
|
'';
|
||||||
|
|
||||||
udevRules = pkgs.runCommand "udev-rules" {
|
udevRules = pkgs.runCommand "udev-rules" {
|
||||||
allowedReferences = [ extraUtils ];
|
allowedReferences = [ extraUtils ];
|
||||||
preferLocalBuild = true;
|
preferLocalBuild = true;
|
||||||
|
@ -208,7 +217,9 @@ let
|
||||||
|
|
||||||
cp -v ${udev}/lib/udev/rules.d/60-cdrom_id.rules $out/
|
cp -v ${udev}/lib/udev/rules.d/60-cdrom_id.rules $out/
|
||||||
cp -v ${udev}/lib/udev/rules.d/60-persistent-storage.rules $out/
|
cp -v ${udev}/lib/udev/rules.d/60-persistent-storage.rules $out/
|
||||||
|
cp -v ${udev}/lib/udev/rules.d/75-net-description.rules $out/
|
||||||
cp -v ${udev}/lib/udev/rules.d/80-drivers.rules $out/
|
cp -v ${udev}/lib/udev/rules.d/80-drivers.rules $out/
|
||||||
|
cp -v ${udev}/lib/udev/rules.d/80-net-setup-link.rules $out/
|
||||||
cp -v ${pkgs.lvm2}/lib/udev/rules.d/*.rules $out/
|
cp -v ${pkgs.lvm2}/lib/udev/rules.d/*.rules $out/
|
||||||
${config.boot.initrd.extraUdevRulesCommands}
|
${config.boot.initrd.extraUdevRulesCommands}
|
||||||
|
|
||||||
|
@ -222,7 +233,7 @@ let
|
||||||
--replace ${pkgs.lvm2}/sbin ${extraUtils}/bin \
|
--replace ${pkgs.lvm2}/sbin ${extraUtils}/bin \
|
||||||
--replace ${pkgs.mdadm}/sbin ${extraUtils}/sbin \
|
--replace ${pkgs.mdadm}/sbin ${extraUtils}/sbin \
|
||||||
--replace ${pkgs.bash}/bin/sh ${extraUtils}/bin/sh \
|
--replace ${pkgs.bash}/bin/sh ${extraUtils}/bin/sh \
|
||||||
--replace ${udev}/bin/udevadm ${extraUtils}/bin/udevadm
|
--replace ${udev} ${extraUtils}
|
||||||
done
|
done
|
||||||
|
|
||||||
# Work around a bug in QEMU, which doesn't implement the "READ
|
# Work around a bug in QEMU, which doesn't implement the "READ
|
||||||
|
@ -257,7 +268,7 @@ let
|
||||||
${pkgs.buildPackages.busybox}/bin/ash -n $target
|
${pkgs.buildPackages.busybox}/bin/ash -n $target
|
||||||
'';
|
'';
|
||||||
|
|
||||||
inherit udevRules extraUtils modulesClosure;
|
inherit linkUnits udevRules extraUtils modulesClosure;
|
||||||
|
|
||||||
inherit (config.boot) resumeDevice;
|
inherit (config.boot) resumeDevice;
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,12 @@ in pkgs.lib.listToAttrs (pkgs.lib.crossLists (predictable: withNetworkd: {
|
||||||
networking.useNetworkd = withNetworkd;
|
networking.useNetworkd = withNetworkd;
|
||||||
networking.dhcpcd.enable = !withNetworkd;
|
networking.dhcpcd.enable = !withNetworkd;
|
||||||
networking.useDHCP = !withNetworkd;
|
networking.useDHCP = !withNetworkd;
|
||||||
|
|
||||||
|
# Check if predictable interface names are working in stage-1
|
||||||
|
boot.initrd.postDeviceCommands = ''
|
||||||
|
ip link
|
||||||
|
ip link show eth0 ${if predictable then "&&" else "||"} exit 1
|
||||||
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
testScript = ''
|
testScript = ''
|
||||||
|
|
Loading…
Reference in a new issue