All checks were successful
Check Flake / check-flake (push) Successful in 17m43s
49 lines
1.6 KiB
Nix
49 lines
1.6 KiB
Nix
# From https://mdleom.com/blog/2021/03/09/nixos-oracle/#Build-a-kexec-tarball
|
|
# Builds a kexec img
|
|
|
|
{ config, pkgs, modulesPath, ... }:
|
|
{
|
|
imports = [
|
|
(modulesPath + "/installer/netboot/netboot.nix")
|
|
(modulesPath + "/profiles/qemu-guest.nix")
|
|
./minimal.nix
|
|
];
|
|
|
|
networking.hostName = "kexec";
|
|
|
|
# stripped down version of https://github.com/cleverca22/nix-tests/tree/master/kexec
|
|
system.build = rec {
|
|
image = pkgs.runCommand "image" { buildInputs = [ pkgs.nukeReferences ]; } ''
|
|
mkdir $out
|
|
if [ -f ${config.system.build.kernel}/bzImage ]; then
|
|
cp ${config.system.build.kernel}/bzImage $out/kernel
|
|
else
|
|
cp ${config.system.build.kernel}/Image $out/kernel
|
|
fi
|
|
cp ${config.system.build.netbootRamdisk}/initrd $out/initrd
|
|
nuke-refs $out/kernel
|
|
'';
|
|
kexec_script = pkgs.writeTextFile {
|
|
executable = true;
|
|
name = "kexec-nixos";
|
|
text = ''
|
|
#!${pkgs.stdenv.shell}
|
|
set -e
|
|
${pkgs.kexec-tools}/bin/kexec -l ${image}/kernel --initrd=${image}/initrd --append="init=${builtins.unsafeDiscardStringContext config.system.build.toplevel}/init ${toString config.boot.kernelParams}"
|
|
sync
|
|
echo "executing kernel, filesystems will be improperly umounted"
|
|
${pkgs.kexec-tools}/bin/kexec -e
|
|
'';
|
|
};
|
|
kexec_tarball = pkgs.callPackage (modulesPath + "/../lib/make-system-tarball.nix") {
|
|
storeContents = [
|
|
{
|
|
object = config.system.build.kexec_script;
|
|
symlink = "/kexec_nixos";
|
|
}
|
|
];
|
|
contents = [ ];
|
|
};
|
|
};
|
|
}
|