diff options
Diffstat (limited to 'src')
-rwxr-xr-x | src/partvi | 48 |
1 files changed, 44 insertions, 4 deletions
@@ -124,7 +124,7 @@ iterate_partitions() | |||
124 | notice "Processing $f" | 124 | notice "Processing $f" |
125 | img=${f%.conf} | 125 | img=${f%.conf} |
126 | 126 | ||
127 | read_config_file "$img" || warn "Received error return from command: read_config_file $img" | 127 | read_config_file || warn "Received error return from command: read_config_file $img" |
128 | require_var name | 128 | require_var name |
129 | 129 | ||
130 | require_var type | 130 | require_var type |
@@ -141,6 +141,11 @@ iterate_partitions() | |||
141 | done | 141 | done |
142 | } | 142 | } |
143 | 143 | ||
144 | set_var() | ||
145 | { | ||
146 | eval "conf_${img}_${1}=\$${1}" | ||
147 | } | ||
148 | |||
144 | create_dmsetup_map() | 149 | create_dmsetup_map() |
145 | { | 150 | { |
146 | part=$builddir/${f%.conf} | 151 | part=$builddir/${f%.conf} |
@@ -159,6 +164,9 @@ create_dmsetup_map() | |||
159 | alignment_error=$((devsz % 2048)) | 164 | alignment_error=$((devsz % 2048)) |
160 | 165 | ||
161 | printf '%d %d linear %s 0\n' $start $devsz "$dev" >> "$map" | 166 | printf '%d %d linear %s 0\n' $start $devsz "$dev" >> "$map" |
167 | |||
168 | set_var start | ||
169 | set_var devsz | ||
162 | start=$((start + devsz)) | 170 | start=$((start + devsz)) |
163 | 171 | ||
164 | if [ $alignment_error -gt 0 ] | 172 | if [ $alignment_error -gt 0 ] |
@@ -169,6 +177,29 @@ create_dmsetup_map() | |||
169 | fi | 177 | fi |
170 | } | 178 | } |
171 | 179 | ||
180 | create_ptable_conf() | ||
181 | { | ||
182 | inquire_var start && inquire_var devsz || return 0 | ||
183 | [ "$start" -a "$devsz" ] || return 0 | ||
184 | |||
185 | case "$type" in | ||
186 | partition-table) return;; | ||
187 | efi-system-partition) typecode=ef00 ;; | ||
188 | bios-grub) typecode=ef02 ;; | ||
189 | samizdat-*) typecode=8e00 ;; | ||
190 | dm-verity-hashes|dm-verity-data) typecode=8e00 ;; | ||
191 | esac | ||
192 | |||
193 | set -- --new "$i:$start:$((start + devsz - 1))" --change-name "$i:$name" | ||
194 | if [ "$typecode" ] | ||
195 | then | ||
196 | set -- "$@" --typecode "$i:$typecode" | ||
197 | fi | ||
198 | |||
199 | printf '%s\0' "$@" >> $ptable | ||
200 | let ++i | ||
201 | } | ||
202 | |||
172 | set -e | 203 | set -e |
173 | 204 | ||
174 | builddir=_build | 205 | builddir=_build |
@@ -188,14 +219,23 @@ quietly $sudo kpartx -dv /dev/mapper/"$map_name" | |||
188 | quietly $sudo dmsetup remove "$map_name" | 219 | quietly $sudo dmsetup remove "$map_name" |
189 | quietly $sudo losetup -D | 220 | quietly $sudo losetup -D |
190 | 221 | ||
191 | start=0 | ||
192 | map=$builddir/dmsetup.map | 222 | map=$builddir/dmsetup.map |
193 | : > "$map" | 223 | : > "$map" |
194 | 224 | start=0 | |
195 | iterate_partitions create_dmsetup_map | 225 | iterate_partitions create_dmsetup_map |
196 | |||
197 | $sudo dmsetup -v create "$map_name" "$map" | 226 | $sudo dmsetup -v create "$map_name" "$map" |
198 | 227 | ||
228 | ptable=$builddir/ptable.bin | ||
229 | : > "$ptable" | ||
230 | i=1 | ||
231 | iterate_partitions create_ptable_conf | ||
232 | dev=/dev/mapper/$map_name | ||
233 | printf '%s\0' '-h1' '-p' "$dev" >> "$ptable" | ||
234 | xargs -0 -x $sudo sgdisk -o < "$ptable" >&2 | ||
235 | $sudo sfdisk --dump "$dev" | ||
236 | $sudo sfdisk -Y MBR --dump "$dev" | ||
237 | exit | ||
238 | |||
199 | dev=/dev/mapper/$map_name | 239 | dev=/dev/mapper/$map_name |
200 | ( | 240 | ( |
201 | set -- | 241 | set -- |