at 25.11-pre 1.1 kB view raw
1{ pkgs, lib, ... }: 2 3{ 4 config = lib.mkIf (lib.meta.availableOn pkgs.stdenv.hostPlatform pkgs.kexec-tools) { 5 environment.systemPackages = [ pkgs.kexec-tools ]; 6 7 systemd.services.prepare-kexec = { 8 description = "Preparation for kexec"; 9 wantedBy = [ "kexec.target" ]; 10 before = [ "systemd-kexec.service" ]; 11 unitConfig.DefaultDependencies = false; 12 serviceConfig.Type = "oneshot"; 13 path = [ pkgs.kexec-tools ]; 14 script = '' 15 # Don't load the current system profile if we already have a kernel loaded 16 if [[ 1 = "$(</sys/kernel/kexec_loaded)" ]] ; then 17 echo "kexec kernel has already been loaded, prepare-kexec skipped" 18 exit 0 19 fi 20 21 p=$(readlink -f /nix/var/nix/profiles/system) 22 if ! [[ -d $p ]]; then 23 echo "Could not find system profile for prepare-kexec" 24 exit 1 25 fi 26 echo "Loading NixOS system via kexec." 27 exec kexec --load "$p/kernel" --initrd="$p/initrd" --append="$(cat "$p/kernel-params") init=$p/init" 28 ''; 29 }; 30 }; 31}