From 7a5e1836db1a5b06bc3d3647e12a9763f5114cef Mon Sep 17 00:00:00 2001 From: Andrew Cady Date: Tue, 19 Jan 2021 14:42:02 -0500 Subject: implement more of the discoverable partition specification --- src/partvi | 41 +++++++++++++++++++++++++++++++++-------- 1 file changed, 33 insertions(+), 8 deletions(-) (limited to 'src/partvi') diff --git a/src/partvi b/src/partvi index ab8d5c0..719b0d3 100755 --- a/src/partvi +++ b/src/partvi @@ -137,11 +137,13 @@ build_partition_image() boot|samizdat-keys) mkfs.btrfs -q "$tmp" || die "mkfs.btrfs failed" ;; dm-verity-data) partuuid=${root_hash:0:32} + set_var partuuid cp -f -T --reflink "$data_path" "$builddir"/"$partuuid" ln -sfT "$partuuid" "$tmp" ;; dm-verity-hashes) partuuid=${root_hash:32:32} + set_var partuuid cp -f -T --reflink "$data_path".verity "$builddir"/"$partuuid" ln -sfT "$partuuid" "$tmp" ;; @@ -181,9 +183,16 @@ set_var() eval "conf_${img}_${1}=\$${1}" } +format_guid() +{ + set -- "$(tr -dc 0-9a-fA-F <<< "$1")" + printf '%s\n' "${1:0:8}-${1:8:4}-${1:12:4}-${1:16:4}-${1:20:12}" +} + create_ptable_conf() { - #inquire_var start && inquire_var devsz || return + unset partuuid + inquire_var partuuid part=$builddir/${f%.conf} devsz=$(stat -L -c '%s' "$part") || return [ "$start" -a "$devsz" ] || return @@ -197,6 +206,15 @@ create_ptable_conf() case "$type" in partition-table) start=$((start + devsz)); return;; efi-system-partition) typecode=C12A7328-F81F-11D2-BA4B-00A0C93EC93B ;; + dm-verity-data|dm-verity-hashes) + case "$name" in + samizdat-rootfs|samizdat-root-patch) typecode=4f68bce3-e8cd-4db1-96e7-fbcaf984b709 ;; + samizdat-root-patch-verity) typecode=2c7357ed-ebd2-46d9-aec1-23d437ec2bf5 ;; + samizdat-root-seed) ;; # keep default + samizdat-root-seed-verity) ;; # keep default + esac + ;; + root) typecode=4f68bce3-e8cd-4db1-96e7-fbcaf984b709 ;; bios-grub) typecode=21686148-6449-6E6F-744E-656564454649 printf 'start=1, size=%d, type=ee\n' \ @@ -212,13 +230,20 @@ create_ptable_conf() ;; esac - printf '%d: start=%d, size=%d, type=%s, name="%s"\n' \ - "$i" \ - "$start_sectors" \ - "$size_sectors" \ - "$typecode" \ - "$name" \ - >> "$GPT_TABLE_FILE" + ( + exec >> "$GPT_TABLE_FILE" + printf '%d: start=%d, size=%d, type=%s, name="%s"' \ + "$i" \ + "$start_sectors" \ + "$size_sectors" \ + "$typecode" \ + "$name" + if [ "$partuuid" ] + then + printf ', uuid=%s' "$(format_guid "$partuuid")" + fi + echo + ) let ++i start=$((start + devsz)) } -- cgit v1.2.3