From dc47371b7329aeda490142d8a42e0cc183f81ed6 Mon Sep 17 00:00:00 2001 From: Andrew Cady Date: Sat, 10 Oct 2020 22:02:09 -0400 Subject: i think it works --- .gitignore | 2 + src/parted-usb.sh | 111 +++++++++++++++++++++++------------------------------- 2 files changed, 50 insertions(+), 63 deletions(-) diff --git a/.gitignore b/.gitignore index 8649537..c04983b 100644 --- a/.gitignore +++ b/.gitignore @@ -55,3 +55,5 @@ apt-get-update-stamp *.btrfs.verity.log.asc *.btrfs.verity.log.sig /rootfs/*.btrfs.tmp.* +*.img +*.tmp diff --git a/src/parted-usb.sh b/src/parted-usb.sh index 8c3c048..c7040c8 100755 --- a/src/parted-usb.sh +++ b/src/parted-usb.sh @@ -51,21 +51,6 @@ partition_target() make_target_bootable() { - if [ -b "$target" ] - then - dev=$target - part=$target - mnt=/mnt/${target#/dev/} - else - losetup -f "$target" - dev=$(losetup -j "$target" -O NAME --noheadings) - - kpartx -vasas "$dev" - part=/dev/mapper/${dev##*/}p - - mnt=$target.mnt - fi - mkfs.btrfs -f --mixed "$part"2 mkdir -p "$mnt" mount "$part"2 "$mnt" @@ -77,39 +62,39 @@ make_target_bootable() sync } -release_target_kernel_resources() +acquire_target_block_devices() { - umount "$mnt" - case "$dev" in - /dev/loop*) - kpartx -d "$dev" - losetup -d "$dev" - ;; - esac -} - -with_target() -{ - local mnt dev target="$1" - shift if [ -b "$target" ] then + dev=$target + part=$target mnt=/mnt/${target#/dev/} - dev=${target}2 else - losetup -f "$target" -o $(MiB $start_keys) + trap release_target_block_devices EXIT + losetup -f "$target" dev=$(losetup -j "$target" -O NAME --noheadings) + + kpartx -vasas "$dev" + part=/dev/mapper/${dev##*/}p + mnt=$target.mnt fi +} - mkdir -p "$mnt" - mount "$dev" "$mnt" - "$@" - umount "$mnt" - - case "$dev" in - /dev/loop*) losetup -d "$dev" ;; - esac +release_target_block_devices() +{ + ( + set +e + [ -z "$mnt" ] || ! mountpoint "$mnt" || umount "$mnt" + case "$dev" in + /dev/loop*) + kpartx -d "$dev" + losetup -d "$dev" + ;; + esac + true + ) + unset mnt dev } add_keys() @@ -117,9 +102,9 @@ add_keys() rsync -a --info=STATS "$GPG_INPUT_DIR"/ "$mnt"/gnupghome/ } -initrd_suffix=.samizdat add_initrd() { + initrd_suffix=.samizdat mkdir -p "$mnt"/linux rsync -aL --info=STATS "${1}vmlinuz${2}" "$mnt"/linux/vmlinuz rsync -aL --info=STATS "${1}initrd.img${2}${initrd_suffix}" "$mnt"/linux/initrd.img @@ -133,6 +118,7 @@ add_grub_cfg() individualize() { + mountpoint "$mnt" || mount "$part"2 "$mnt" add_keys add_initrd "$samizdat_linux_dir"/ "${version_suffix}" add_grub_cfg @@ -140,14 +126,10 @@ individualize() globalize() { - : initialize initialize_target - : partition partition_target - : install-grub + acquire_target_block_devices make_target_bootable - : release - release_target_kernel_resources } sanity_checks() @@ -159,12 +141,6 @@ sanity_checks() done } -individualize_target_from() -{ - cp -T --reflink=always "$1" "$target" - with_target "$target" individualize -} - find_mac() { start_mac=$1 @@ -181,7 +157,9 @@ find_mac() boot_vm() { + boot_drive=$1 installer_target=samizdat.disk.img + if [ ! -e "$installer_target" ] then fallocate -l 15G "$installer_target" @@ -195,7 +173,7 @@ boot_vm() -k en-us \ -net nic,model=virtio,macaddr=$MAC \ -vga qxl \ - -drive file="$final",format=raw \ + -drive file="$boot_drive",format=raw \ -drive file="$installer_target",format=raw } @@ -206,31 +184,38 @@ samizdat_linux_dir=/boot start_keys=64 # megs end_keys=256 # megs -if [ "$1" ] +if [ "$KERNEL_VERSION" ] then - version_suffix=-$1 + version_suffix=-$KERNEL_VERSION fi sanity_checks set -e -if [ "$TARGET" ] +if [ "$1" ] then - target=$TARGET globalize - with_target "$TARGET" individualize - final=$TARGET - boot_vm + [ -b "$1" ] || die "Not a block device: $1" + target=$1 + globalize + individualize + release_target_block_devices else template=boot-disk.template.img - target=boot-disk.img.tmp - final=${target%.tmp} if [ ! -e "$template" ] then target="$template".tmp globalize + release_target_block_devices mv -T "$template".tmp "$template" fi + + target=boot-disk.img.tmp cp -T --reflink=always "$template" "$target" - with_target "$target" individualize + acquire_target_block_devices + individualize + release_target_block_devices + + final=${target%.tmp} mv -T "$target" "$final" - boot_vm + target=$final fi +boot_vm "$target" -- cgit v1.2.3