From 334c9ea453567fcde5c0d046f03e38e040408e80 Mon Sep 17 00:00:00 2001 From: Andrew Cady Date: Fri, 9 Oct 2020 22:09:33 -0400 Subject: parted-usb.sh --- src/parted-usb.sh | 96 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100755 src/parted-usb.sh diff --git a/src/parted-usb.sh b/src/parted-usb.sh new file mode 100755 index 0000000..b19389d --- /dev/null +++ b/src/parted-usb.sh @@ -0,0 +1,96 @@ +#!/bin/bash +die() +{ + printf 'Error: %s\n' "$*" >&2 + exit 1 +} +KiB() +{ + printf %s $(("$1" * 1024)) +} +MiB() +{ + KiB $(KiB "$1") +} + +. samizdat-paths.sh || die 'samizdat-paths.sh not found' +: ${GPG_INPUT_DIR:=/cdrom/gnupghome} + +if [[ $UID != 0 ]] +then + exit 1 +fi + +for d in "$samizdat_linux_dir" "$GPG_INPUT_DIR" +do + if ! test -d "$d" + then + exit 1 + fi +done + +end_keys=256 # megs + +target=fallacy.img.tmp + +initialize_target() +{ + rm -f "$target" + fallocate -l $(($(KiB 17) + $(MiB $end_keys))) "$target" +} + +partition_target() +{ + parted "$target" -sm -a optimal \ + unit B \ + mklabel gpt \ + mkpart samizdat-grub 1MiB 8MiB \ + set 1 bios_grub on \ + mkpart samizdat-keys btrfs 64MiB ${end_keys}MiB +} + +make_target_bootable() +{ + losetup -f "$target" + dev=$(losetup -j "$target" -O NAME --noheadings) + + kpartx -vasas "$dev" + kdev=/dev/mapper/${dev##*/} + + mnt=$target.mnt + + mkfs.btrfs --mixed "$kdev"p2 + mkdir -p "$mnt" + mount "$kdev"p2 "$mnt" + rsync -a --info=STATS "$GPG_INPUT_DIR"/ "$mnt"/gnupghome/ + rsync -a --info=STATS "$samizdat_linux_dir"/ "$mnt"/linux/ + + boot_dir=$mnt/boot + mkdir -p "$boot_dir"/grub + cp -a grub.cfg "$boot_dir"/grub + + # grub-install -v -d "$samizdat_grub_efi_dir"/grub/i386-pc --boot-directory "$mnt"/boot "$dev" + grub-install -v --boot-directory "$boot_dir" "$dev" +} + +release_target() +{ + umount "$mnt" + kpartx -d "$dev" + losetup -d "$dev" +} + +set -e + +if [ ! -e "$target" ] +then + initialize_target + partition_target + make_target_bootable + release_target +fi + +qemu-system-x86_64 -enable-kvm -drive file="$target",format=raw + +# rm -f "$target" + -- cgit v1.2.3