summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Cady <d@cryptonomic.net>2020-11-17 19:47:46 -0500
committerAndrew Cady <d@cryptonomic.net>2020-11-17 19:47:46 -0500
commite59727d99fb2944c1d5df96441eea7c36df63fd1 (patch)
tree1df37d7d0f79a0a12151a5597aef52eec3f5ae39
parentc42a9c599ccf931b86acee050f95f396a72d3396 (diff)
partvi: refactor
-rwxr-xr-xsrc/partvi107
1 files changed, 57 insertions, 50 deletions
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
3PATH=/sbin:$PATH 3PATH=/sbin:$PATH
4 4
5msg() { printf '%s: %s: %s\n' "$0" "$1" "$2" >&2; } 5msg() { printf '%s: %s: %s\n' "$0" "$1" "$2" >&2; }
6die() { msg Error "${*:-exiting on fatal error.}"; exit 1; } 6die() { msg Error "${*:-Exiting on fatal error.}"; exit 1; }
7warn() { msg Warning "${*:-Something is wrong.}"; } 7warn() { msg Warning "${*:-Something is wrong.}"; }
8notice() { msg Notice "$*"; } 8notice() { msg Notice "$*"; }
9quietly() { "$@" >/dev/null 2>&1 || true; }
10loudly() { (set -x; "$@"); }
9 11
10validate_name() 12validate_name()
11{ 13{
@@ -62,34 +64,12 @@ require_exists()
62 done 64 done
63} 65}
64 66
65set -e 67build_partition()
66 68{
67builddir=_build
68mkdir -p "$builddir"
69
70for f in part*.conf
71do
72 notice "Processing $f"
73 img=${f%.conf}
74
75 read_config_file "$img" || warn "Received error return from command: read_config_file $img"
76 require_var name
77
78 require_var type
79 case "$type" in
80 efi-system-partition|bios-grub|samizdat-*) ;;
81 dm-verity-hashes|dm-verity-data) require_var data_path ;;
82 partition-table) ;;
83 *) die "invalid type: $type" ;;
84 esac
85
86 imgfile=$builddir/$img
87
88 if inquire_var rebuild 69 if inquire_var rebuild
89 then 70 then
90 case "$rebuild" in 71 case "$rebuild" in
91 always) ;; 72 always|never|default) ;;
92 never) ;;
93 *) die "invalid value for field 'rebuild': $rebuild" ;; 73 *) die "invalid value for field 'rebuild': $rebuild" ;;
94 esac 74 esac
95 fi 75 fi
@@ -134,42 +114,44 @@ do
134 mv -T "$tmp" "$imgfile" 114 mv -T "$tmp" "$imgfile"
135 notice "Successfully wrote $imgfile" 115 notice "Successfully wrote $imgfile"
136 fi 116 fi
137done 117}
138 118
139if [ "$UID" = 0 ] 119iterate_partitions()
140then sudo= 120{
141else sudo=sudo 121 local f
142fi 122 for f in part*.conf
123 do
124 notice "Processing $f"
125 img=${f%.conf}
143 126
144map_name=samline 127 read_config_file "$img" || warn "Received error return from command: read_config_file $img"
128 require_var name
145 129
146quietly() 130 require_var type
147{ 131 case "$type" in
148 "$@" >/dev/null 2>&1 || true 132 efi-system-partition|bios-grub|samizdat-*) ;;
149} 133 dm-verity-hashes|dm-verity-data) require_var data_path ;;
150loudly() 134 partition-table) ;;
151{ 135 *) die "invalid type: $type" ;;
152 (set -x 136 esac
153 "$@")
154}
155 137
156quietly $sudo kpartx -dv /dev/mapper/"$map_name" 138 imgfile=$builddir/$img
157quietly $sudo dmsetup remove "$map_name"
158quietly $sudo losetup -D
159 139
160start=0 140 "$@"
161map=$builddir/dmsetup.map 141 done
162: > "$map" 142}
163 143
164for f in part*.conf 144create_dmsetup_map()
165do 145{
166 part=$builddir/${f%.conf} 146 part=$builddir/${f%.conf}
147
167 if [ -h "$part" ] 148 if [ -h "$part" ]
168 then 149 then
169 partuuid=$(readlink -e "$part") 150 partuuid=$(readlink -e "$part")
170 else 151 else
171 partuuid= 152 partuuid=
172 fi 153 fi
154
173 $sudo losetup -L -f "$part" 155 $sudo losetup -L -f "$part"
174 dev=$(losetup -j "$part" -O NAME --noheadings) 156 dev=$(losetup -j "$part" -O NAME --noheadings)
175 devsz=$($sudo blockdev --getsz $dev) 157 devsz=$($sudo blockdev --getsz $dev)
@@ -185,8 +167,33 @@ do
185 printf '%d %d zero\n' $start $devsz >> "$map" 167 printf '%d %d zero\n' $start $devsz >> "$map"
186 start=$((start + devsz)) 168 start=$((start + devsz))
187 fi 169 fi
170}
171
172set -e
173
174builddir=_build
175mkdir -p "$builddir"
176
177iterate_partitions build_partition
178
179if [ "$UID" = 0 ]
180then sudo=
181else sudo=sudo
182fi
183
184map_name=samline
185
186
187quietly $sudo kpartx -dv /dev/mapper/"$map_name"
188quietly $sudo dmsetup remove "$map_name"
189quietly $sudo losetup -D
190
191start=0
192map=$builddir/dmsetup.map
193: > "$map"
194
195iterate_partitions create_dmsetup_map
188 196
189done
190$sudo dmsetup -v create "$map_name" "$map" 197$sudo dmsetup -v create "$map_name" "$map"
191 198
192dev=/dev/mapper/$map_name 199dev=/dev/mapper/$map_name