From 111b011a6b0c514fb8912710fd132b3ff983c004 Mon Sep 17 00:00:00 2001 From: Gordon GECOS Date: Fri, 30 Oct 2020 23:03:17 -0400 Subject: it still works --- build-deps.control | 1 + src/parted-usb.sh | 58 ++++++++++++++++++++++++++++++++++++++++++++---------- 2 files changed, 49 insertions(+), 10 deletions(-) diff --git a/build-deps.control b/build-deps.control index d3205e8..a30f93f 100644 --- a/build-deps.control +++ b/build-deps.control @@ -3,6 +3,7 @@ Build-Depends: bridge-utils, build-essential, cryptsetup, devscripts, + dosfstools, eatmydata, equivs, kpartx, diff --git a/src/parted-usb.sh b/src/parted-usb.sh index 3bf95be..05b776c 100755 --- a/src/parted-usb.sh +++ b/src/parted-usb.sh @@ -1,4 +1,5 @@ #!/bin/bash +USE_EFI= die() { printf 'Error: %s\n' "$*" >&2 @@ -51,8 +52,10 @@ partition_target() parted "$target" -sm -a optimal \ unit MiB \ mklabel gpt \ - mkpart samizdat-grub 1 8 \ - set 1 bios_grub on \ + mkpart samizdat-efi 1 8 \ + set 1 esp on \ + mkpart samizdat-grub 8 64 \ + set 2 bios_grub on \ mkpart samizdat-keys btrfs ${start_keys} ${end_keys} if [ -b "$target" ] then @@ -76,23 +79,57 @@ sex() make_target_bootable() { - mkfs.btrfs -f --mixed "$part"2 + mkfs.btrfs -f --mixed "$part"3 mkdir -p "$mnt" - mount "$part"2 "$mnt" + mount "$part"3 "$mnt" mkdir -p "$mnt"/boot/grub cp -avL "$GRUB_CONFIG" "$mnt"/boot/grub + mkdir -p "$mnt"/boot/efi + mkfs.vfat "$part"1 + if [ "$USE_EFI" ] + then + efi_dir="$mnt".efi + mkdir -p "$efi_dir" + mount "$part"1 "$mnt".efi + mkdir "$efi_dir"/boot + boot_dir=$efi_dir/boot + else + boot_dir=$mnt/boot + fi + + # https://wiki.archlinux.org/index.php/Multiboot_USB_drive#Hybrid_UEFI_GPT_+_BIOS_GPT/MBR_boot + # grub-install --target=x86_64-efi --removable --boot-directory=/mnt/boot --efi-directory=/mnt + GRUB_LOGFILE=$(mktemp) || exit - set -- eatmydata -- grub-install -v --boot-directory "$mnt"/boot "$dev" + set -- eatmydata -- \ + grub-install ${VERBOSE:+ -v} \ + ${USE_EFI:+ --target=i386-efi} \ + ${USE_EFI:+ --recheck} \ + ${USE_EFI:+ --removable} \ + ${USE_EFI:+ --efi-directory "$efi_dir"} \ + --boot-directory "$boot_dir" \ + "$dev" echo "running: $* >$GRUB_LOGFILE 2>&1" >&2 if "$@" >"$GRUB_LOGFILE" 2>&1 then - rm "$GRUB_LOGFILE" + fail= else + fail=y + fi + if [ "$USE_EFI" ] + then + umount -l "$mnt"/boot/efi || : + fi + umount -l "$mnt" || : + if [ "$fail" ] + then set -x tail -n5 "$GRUB_LOGFILE" exit 1 + else + rm "$GRUB_LOGFILE" fi sync } @@ -103,15 +140,15 @@ copy_rootfs() then return fi - [ -e "$ROOTFS" -a -b "$part"3 ] + [ -e "$ROOTFS" -a -b "$part"4 ] get_rootfs_size - part_size=$(blockdev --getsize64 "$part"3) + part_size=$(blockdev --getsize64 "$part"4) [ "$rootfs_size" -le "$part_size" ] || die "rootfs_size=$rootfs_size > part_size=$part_size" ( set -x - dd if="$ROOTFS" of="$part"3 - # dd if=rootfs/samizdat.patch.seed.btrfs of="$part"4 + dd if="$ROOTFS" of="$part"4 + # dd if=rootfs/samizdat.patch.seed.btrfs of="$part"5 ) } @@ -224,6 +261,7 @@ boot_vm() find_mac 52-54-00-12-34-56 qemu-system-x86_64 \ -enable-kvm \ + ${USE_EFI:+ -bios /usr/share/OVMF/OVMF_CODE.fd} \ -smp 2 \ -m 512 \ -k en-us \ -- cgit v1.2.3