#!/bin/bash set -eu PARTITION_LABEL_ESP="multibt-esp" PARTITION_LABEL_DATA="multiboot" MULTIBOOT_MNT="${MULTIBOOT_MNT:-/mnt/multiboot}" function cmd_format { if [ ! -b "${1:-}" ]; then echo "Usage: $0 format /dev/sdX" exit 1 fi set -x sudo -k DISK_DEVICE="$1" print_sfdisk_command | sudo sfdisk --wipe always --wipe-partitions always "$DISK_DEVICE" udevadm settle sudo mkfs.vfat -n "${PARTITION_LABEL_ESP}" "/dev/disk/by-partlabel/${PARTITION_LABEL_ESP}" sudo mkfs.ext4 -L "${PARTITION_LABEL_DATA}" -E "root_owner=$(id -u):$(id -g)" "/dev/disk/by-partlabel/${PARTITION_LABEL_DATA}" } function print_sfdisk_command { cat < "${MULTIBOOT_MNT}/grub/grub.cfg" else print_grub_cfg | sudo tee "${MULTIBOOT_MNT}/grub/grub.cfg" > /dev/null fi } function cmd_mount { set -x while sudo umount "/dev/disk/by-partlabel/${PARTITION_LABEL_ESP}" &> /dev/null; do true; done while sudo umount "/dev/disk/by-partlabel/${PARTITION_LABEL_DATA}" &> /dev/null; do true; done sudo mkdir -p "$MULTIBOOT_MNT" sudo mount "/dev/disk/by-partlabel/${PARTITION_LABEL_DATA}" "$MULTIBOOT_MNT" mkdir -p "${MULTIBOOT_MNT}/EFI" sudo mount "/dev/disk/by-partlabel/${PARTITION_LABEL_ESP}" "${MULTIBOOT_MNT}/EFI" } function cmd_umount { set -x sudo umount "${MULTIBOOT_MNT}/EFI" || true sudo umount "$MULTIBOOT_MNT" || true sudo rmdir "$MULTIBOOT_MNT" } function cmd_freedos { set -x local SYSLINUX_VERSION="6.03" local SYSLINUX_URL="https://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-${SYSLINUX_VERSION}.tar.gz" local FREEDOS_URL="https://www.ibiblio.org/pub/micro/pc-stuff/freedos/files/distributions/1.2/official/FD12LITE.zip" curl -fL "$SYSLINUX_URL" | \ tar xz --no-same-owner --strip-components=3 -C "$MULTIBOOT_MNT" \ "syslinux-${SYSLINUX_VERSION}/bios/memdisk/memdisk" curl -fL "$FREEDOS_URL" > "${MULTIBOOT_MNT}/FD12LITE.zip" } function cmd_memtest { curl -fL -o "${MULTIBOOT_MNT}/memtest.tmp.zip" "https://memtest.org/download/v6.20/mt86plus_6.20_64.grub.iso.zip" unzip -d "$MULTIBOOT_MNT" "${MULTIBOOT_MNT}/memtest.tmp.zip" rm "${MULTIBOOT_MNT}/memtest.tmp.zip" } function print_grub_cfg { cat <