Advertisement
Guest User

Untitled

a guest
May 20th, 2019
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.29 KB | None | 0 0
  1. #!/usr/bin/env bash
  2. # This script boots the first linux it finds in a grub config on any available mount point
  3. # using kexec
  4.  
  5. DEBIAN_FRONTEND=noninteractive sudo apt-get -q -y install kexec-tools
  6.  
  7. set -euvo pipefail
  8.  
  9. parts=$(sudo blkid | grep -v /dev/loop | sort | cut -d: -f 1)
  10. grub_paths="/boot/grub/grub.cfg /grub/grub.cfg /boot/grub.cfg"
  11. echo $parts
  12.  
  13. for device in $parts; do
  14. mntpnt="/bootmount/$device"
  15. sudo mkdir -p "$mntpnt"
  16. sudo mount -o ro "$device" "$mntpnt" || true
  17. for grub_path in $grub_paths; do
  18. path="${mntpnt}${grub_path}"
  19. if [ -f "$path" ]; then
  20. echo "Found grub cfg at $path"
  21. menu=$(grep '^\s*menuentry\s\s*["'\'']' < "$path" | head -n 1 | sed 's/^\s*//g' || true)
  22. linux=$(grep '^\s*linux' < "$path" | head -n 1 | sed 's/^\s*linux\s*//' | sed 's/\s*$//' || true)
  23. initrd=$(grep '^\s*initrd' < "$path" | head -n 1 | sed 's/^\s*initrd\s*//' | sed 's/\s*$//' || true)
  24.  
  25. kernel=$(echo "$linux" | awk -F '[\t ]' '{print $1}')
  26. command=$(echo "$linux" | awk -F '[\t ]' '{s = ""; for (i = 2; i <= NF; i++) s = s $i " "; print s}')
  27.  
  28. echo "config: $menu $linux"
  29. echo "kernel: $kernel"
  30. echo "kernel command: $command"
  31. echo "initrd: $initrd"
  32. sudo kexec -l "$mntpnt/$kernel" --initrd="$mntpnt/$initrd" --command-line="$command"
  33. sudo kexec -e
  34. exit 1
  35. fi
  36. done
  37. done
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement