mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-26 00:43:20 +00:00
nixos/systemd-initrd: pull the logic to find the nixos closure into a separate service
This commit is contained in:
parent
adf2c349d7
commit
763dc50b08
@ -507,12 +507,19 @@ in {
|
||||
in nameValuePair "${n}.automount" (automountToUnit v)) cfg.automounts);
|
||||
|
||||
|
||||
services.initrd-nixos-activation = {
|
||||
after = [ "initrd-fs.target" ];
|
||||
requiredBy = [ "initrd.target" ];
|
||||
unitConfig.AssertPathExists = "/etc/initrd-release";
|
||||
serviceConfig.Type = "oneshot";
|
||||
description = "NixOS Activation";
|
||||
services.initrd-find-nixos-closure = {
|
||||
description = "Find NixOS closure";
|
||||
|
||||
unitConfig = {
|
||||
RequiresMountsFor = "/sysroot/nix/store";
|
||||
DefaultDependencies = false;
|
||||
};
|
||||
before = [ "shutdown.target" ];
|
||||
conflicts = [ "shutdown.target" ];
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
RemainAfterExit = true;
|
||||
};
|
||||
|
||||
script = /* bash */ ''
|
||||
set -uo pipefail
|
||||
@ -542,6 +549,8 @@ in {
|
||||
# Assume the directory containing the init script is the closure.
|
||||
closure="$(dirname "$closure")"
|
||||
|
||||
ln --symbolic "$closure" /nixos-closure
|
||||
|
||||
# If we are not booting a NixOS closure (e.g. init=/bin/sh),
|
||||
# we don't know what root to prepare so we don't do anything
|
||||
if ! [ -x "/sysroot$(readlink "/sysroot$closure/prepare-root" || echo "$closure/prepare-root")" ]; then
|
||||
@ -550,12 +559,43 @@ in {
|
||||
exit 0
|
||||
fi
|
||||
echo 'NEW_INIT=' > /etc/switch-root.conf
|
||||
|
||||
'';
|
||||
};
|
||||
|
||||
# We need to propagate /run for things like /run/booted-system
|
||||
# and /run/current-system.
|
||||
mkdir -p /sysroot/run
|
||||
mount --bind /run /sysroot/run
|
||||
mounts = [
|
||||
{
|
||||
where = "/sysroot/run";
|
||||
what = "/run";
|
||||
options = "bind";
|
||||
unitConfig = {
|
||||
# See the comment on the mount unit for /run/etc-metadata
|
||||
DefaultDependencies = false;
|
||||
};
|
||||
requiredBy = [ "initrd-fs.target" ];
|
||||
before = [ "initrd-fs.target" ];
|
||||
}
|
||||
];
|
||||
|
||||
services.initrd-nixos-activation = {
|
||||
wants = [
|
||||
config.boot.initrd.systemd.services.initrd-find-nixos-closure.name
|
||||
];
|
||||
after = [
|
||||
"initrd-fs.target"
|
||||
config.boot.initrd.systemd.services.initrd-find-nixos-closure.name
|
||||
];
|
||||
requiredBy = [ "initrd.target" ];
|
||||
unitConfig.AssertPathExists = "/etc/initrd-release";
|
||||
serviceConfig.Type = "oneshot";
|
||||
description = "NixOS Activation";
|
||||
|
||||
script = /* bash */ ''
|
||||
set -uo pipefail
|
||||
export PATH="/bin:${cfg.package.util-linux}/bin"
|
||||
|
||||
closure="$(realpath /nixos-closure)"
|
||||
|
||||
# Initialize the system
|
||||
export IN_NIXOS_SYSTEMD_STAGE1=true
|
||||
|
Loading…
Reference in New Issue
Block a user