Advertisement
Guest User

Untitled

a guest
Apr 11th, 2020
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.58 KB | None | 0 0
  1. { pkgs, config, ... }:
  2.  
  3. {
  4. system.build = rec {
  5. image = pkgs.runCommand "image" { buildInputs = [ pkgs.nukeReferences ]; } ''
  6. mkdir $out
  7. cp ${config.system.build.kernel}/bzImage $out/kernel
  8. cp ${config.system.build.netbootRamdisk}/initrd $out/initrd
  9. echo "init=${builtins.unsafeDiscardStringContext config.system.build.toplevel}/init ${toString config.boot.kernelParams}" > $out/cmdline
  10. nuke-refs $out/kernel
  11. '';
  12. kexec_script = pkgs.writeTextFile {
  13. executable = true;
  14. name = "kexec-nixos";
  15. text = ''
  16. #!${pkgs.stdenv.shell}
  17. export PATH=${pkgs.kexectools}/bin:${pkgs.cpio}/bin:$PATH
  18. set -x
  19. set -e
  20. cd $(mktemp -d)
  21. pwd
  22. mkdir initrd
  23. pushd initrd
  24. if [ -e /ssh_pubkey ]; then
  25. cat /ssh_pubkey >> authorized_keys
  26. fi
  27. find -type f | cpio -o -H newc | gzip -9 > ../extra.gz
  28. popd
  29. cat ${image}/initrd extra.gz > final.gz
  30.  
  31. kexec -l ${image}/kernel --initrd=final.gz --append="init=${builtins.unsafeDiscardStringContext config.system.build.toplevel}/init ${toString config.boot.kernelParams}"
  32. sync
  33. systemctl kexec
  34. '';
  35. };
  36. };
  37. boot.initrd.postMountCommands = ''
  38. mkdir -p /mnt-root/root/.ssh/
  39. cp /authorized_keys /mnt-root/root/.ssh/
  40. '';
  41. system.build.kexec_tarball = pkgs.callPackage <nixpkgs/nixos/lib/make-system-tarball.nix> {
  42. storeContents = [
  43. { object = config.system.build.kexec_script; symlink = "/kexec_nixos"; }
  44. ];
  45. contents = [];
  46. };
  47. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement