From bb57e8ef3e5b76bf5ab68fcf1348ce51f0baa617 Mon Sep 17 00:00:00 2001 From: Andrew Cady Date: Tue, 2 Mar 2021 16:50:47 -0500 Subject: simplify samizdat-eject.sh --- src/initrd/samizdat-eject.sh | 102 +------------------------------------------ 1 file changed, 2 insertions(+), 100 deletions(-) diff --git a/src/initrd/samizdat-eject.sh b/src/initrd/samizdat-eject.sh index a950ec5..fcb808d 100755 --- a/src/initrd/samizdat-eject.sh +++ b/src/initrd/samizdat-eject.sh @@ -1,102 +1,4 @@ #!/bin/sh -die() -{ - printf '%s\n' "$*" >&2 - exit 1 -} +[ "$(id -u)" = 0 ] || exec sudo $0 "$@" -btrfs_subdevices() -{ - local mountpoint="$1" - btrfs filesystem show "$mountpoint" | sed -ne 's/^[ \t]*devid.* path //p' -} - -btrfs_subdevice_count() -{ - btrfs_subdevices "$1" | wc -l -} - -remove() -{ - for dev; do - (set -x; btrfs device remove "$dev" /) - dmsetup remove "$dev" 2>/dev/null - losetup -D - done -} - -dm_name() -{ - dmsetup info "$1" | sed -ne 's/^Name: *//p' -} - -md_ready() -{ - local mountpoint="$1" count dev - count=$(mdadm_subdevices /dev/md55|wc -l) - [ "$count" = 1 ] || return - dev=$(mdadm_subdevices /dev/md55) - [ "$(dm_name "$dev")" = samizdatiso ] -} - -copy() -{ - temp_target=$(mktemp --tmpdir=/outerfs) - mdadm_copy_eject_crypt /dev/md55 "$temp_target" -} - -. mdadm-dup.sh || exit 1 - -target=$1 - -if [ ! "$target" ] && mountpoint -q /srv && [ ! -e /srv/samizdat.iso ]; then - target=/srv/samizdat.iso -fi - -[ "$target" ] || die "Usage: $0 " -[ ! -e "$target" ] || die "Error: file exists: $target" - -if ! mountpoint -q /outerfs; then - die "Error: /outerfs is not a mountpoint. Please mount a safe filesystem to temporarily store the ISO on /outerfs" -fi - -devices=$(btrfs_subdevices /) || exit 1 - -set -- -seen= -for dev in $devices; do - [ -b "$dev" ] || exit 1 - case "$dev" in - /dev/mapper/loop*) set -- "$@" "$dev" ;; - /dev/mapper/samizdatcrypt) seen=y ;; - esac -done -[ "$seen" ] || set -- # avoid messing up someone's btrfs! - - - - - - -if ! md_ready; then - copy & -fi - -remove "$@" - -echo 'Waiting while boot medium is freed...' >&2 -wait - -notified= -while true; do - if [ "$(btrfs_subdevice_count /)" = 1 ] && md_ready; then - if [ -z "$notified" ]; then - echo 'Boot medium is free. It may be ejected now.' >&2 - notified=y - fi - mdadm_copy_eject /dev/md55 "$target".part && - mv "$target".part "$target" - exit - fi - sleep 5 -done +btrfs device remove 1 2 / -- cgit v1.2.3