#!/bin/bash -x GRUB_DIR=/usr/lib/grub/x86_64-efi set -e tmp=$(mktemp -d) trap "rm -rf $tmp" exit if echo "$1" | grep -q '.deb'; then mkdir $tmp/deb dpkg -x $1 $tmp/deb GRUB_DIR="$tmp/deb/$GRUB_DIR" shift fi if [ -z "$OVMF_VARS" ]; then OVMF_VARS=$tmp/OVMF_VARS.fd fi case "$1" in netboot|netboot-*) sudo cat /boot/vmlinuz > $tmp/vmlinuz cp /usr/lib/shim/shimx64.efi.signed $tmp/shimx64.efi cp ${GRUB_DIR}-signed/grubnetx64.efi.signed $tmp/grubx64.efi case "$1" in netboot-unsigned-grub) sbattach --remove $tmp/grubx64.efi ;; netboot-unsigned-shim) cp /usr/lib/shim/shimx64.efi $tmp/shimx64.efi ;; netboot-unsigned-kernel) sbattach --remove $tmp/vmlinuz ;; netboot-smbios) ;; netboot) ;; *) echo "Unknown netboot variant $1" >&2 exit 1 esac [ -e ${OVMF_VARS} ] || cp /usr/share/OVMF/OVMF_VARS.ms.fd ${OVMF_VARS} mkdir -p $tmp/initrd/{usr/,}{s,}bin $tmp/initrd/{proc,sys,dev} cp /bin/busybox $tmp/initrd/bin/busybox sudo chroot $tmp/initrd /bin/busybox --install echo "#!/bin/sh" > $tmp/initrd/init echo "mount -t devtmpfs devtmpfs /dev" >> $tmp/initrd/init echo "mount -t proc proc /proc" >> $tmp/initrd/init echo "mount -t sysfs sysfs /sys" >> $tmp/initrd/init echo "dmesg | grep -i lockdown | grep -v tracefs" >> $tmp/initrd/init echo "while true; do sh; done" >> $tmp/initrd/init echo "cut -f3 -d= /proc/cmdline | tr ':' '\n' > a" > $tmp/initrd/diff.sh echo "cat /sys/class/dmi/id/modalias | tr ':' '\n' > b" >> $tmp/initrd/diff.sh echo "diff a b" >> $tmp/initrd/diff.sh chmod 755 $tmp/initrd/init ( cd $tmp/initrd && find | cpio -H newc -o --file $tmp/initrd.img ) mkdir $tmp/grub case "$1" in netboot-smbios) cp -a ${GRUB_DIR} $tmp/grub/ cp -a ./obj/grub-efi-amd64/grub-core/smbios.mod $tmp/grub/x86_64-efi cp ./obj/monolithic/grub-efi-amd64/grubnetx64.efi $tmp/grubx64.efi echo "set pager=1" > $tmp/grub/grub.cfg cat ~/Projects/Ubuntu/grub/debian/dmi_modalias.cfg > $tmp/grub/grub.cfg ;; *) echo "linux /vmlinuz" > $tmp/grub/grub.cfg echo "initrd /initrd.img" >> $tmp/grub/grub.cfg echo "boot" >> $tmp/grub/grub.cfg ;; esac #-drive if=pflash,format=raw,file=${OVMF_VARS} qemu-system-x86_64 \ -drive if=pflash,format=raw,readonly,file=/usr/share/OVMF/OVMF_CODE.fd \ -drive if=pflash,format=raw,file=${OVMF_VARS} \ -device e1000,netdev=n1 -netdev user,id=n1,tftp=$tmp,bootfile=/shimx64.efi \ -M q35 \ -boot n,menu=on \ -m 2048 ;; *) echo "E: Iinvalid argument $1 - use one of" echo " - netboot" echo " - netboot-unsigned-grub" ;; esac