From e59727d99fb2944c1d5df96441eea7c36df63fd1 Mon Sep 17 00:00:00 2001 From: Andrew Cady Date: Tue, 17 Nov 2020 19:47:46 -0500 Subject: partvi: refactor --- src/partvi | 107 ++++++++++++++++++++++++++++++++----------------------------- 1 file changed, 57 insertions(+), 50 deletions(-) (limited to 'src') diff --git a/src/partvi b/src/partvi index c26beee..862adc4 100755 --- a/src/partvi +++ b/src/partvi @@ -3,9 +3,11 @@ shopt -s nullglob PATH=/sbin:$PATH msg() { printf '%s: %s: %s\n' "$0" "$1" "$2" >&2; } -die() { msg Error "${*:-exiting on fatal error.}"; exit 1; } +die() { msg Error "${*:-Exiting on fatal error.}"; exit 1; } warn() { msg Warning "${*:-Something is wrong.}"; } notice() { msg Notice "$*"; } +quietly() { "$@" >/dev/null 2>&1 || true; } +loudly() { (set -x; "$@"); } validate_name() { @@ -62,34 +64,12 @@ require_exists() done } -set -e - -builddir=_build -mkdir -p "$builddir" - -for f in part*.conf -do - notice "Processing $f" - img=${f%.conf} - - read_config_file "$img" || warn "Received error return from command: read_config_file $img" - require_var name - - require_var type - case "$type" in - efi-system-partition|bios-grub|samizdat-*) ;; - dm-verity-hashes|dm-verity-data) require_var data_path ;; - partition-table) ;; - *) die "invalid type: $type" ;; - esac - - imgfile=$builddir/$img - +build_partition() +{ if inquire_var rebuild then case "$rebuild" in - always) ;; - never) ;; + always|never|default) ;; *) die "invalid value for field 'rebuild': $rebuild" ;; esac fi @@ -134,42 +114,44 @@ do mv -T "$tmp" "$imgfile" notice "Successfully wrote $imgfile" fi -done +} -if [ "$UID" = 0 ] -then sudo= -else sudo=sudo -fi +iterate_partitions() +{ + local f + for f in part*.conf + do + notice "Processing $f" + img=${f%.conf} -map_name=samline + read_config_file "$img" || warn "Received error return from command: read_config_file $img" + require_var name -quietly() -{ - "$@" >/dev/null 2>&1 || true -} -loudly() -{ - (set -x - "$@") -} + require_var type + case "$type" in + efi-system-partition|bios-grub|samizdat-*) ;; + dm-verity-hashes|dm-verity-data) require_var data_path ;; + partition-table) ;; + *) die "invalid type: $type" ;; + esac -quietly $sudo kpartx -dv /dev/mapper/"$map_name" -quietly $sudo dmsetup remove "$map_name" -quietly $sudo losetup -D + imgfile=$builddir/$img -start=0 -map=$builddir/dmsetup.map -: > "$map" + "$@" + done +} -for f in part*.conf -do +create_dmsetup_map() +{ part=$builddir/${f%.conf} + if [ -h "$part" ] then partuuid=$(readlink -e "$part") else partuuid= fi + $sudo losetup -L -f "$part" dev=$(losetup -j "$part" -O NAME --noheadings) devsz=$($sudo blockdev --getsz $dev) @@ -185,8 +167,33 @@ do printf '%d %d zero\n' $start $devsz >> "$map" start=$((start + devsz)) fi +} + +set -e + +builddir=_build +mkdir -p "$builddir" + +iterate_partitions build_partition + +if [ "$UID" = 0 ] +then sudo= +else sudo=sudo +fi + +map_name=samline + + +quietly $sudo kpartx -dv /dev/mapper/"$map_name" +quietly $sudo dmsetup remove "$map_name" +quietly $sudo losetup -D + +start=0 +map=$builddir/dmsetup.map +: > "$map" + +iterate_partitions create_dmsetup_map -done $sudo dmsetup -v create "$map_name" "$map" dev=/dev/mapper/$map_name -- cgit v1.2.3