[PATCH v4 09/13] Add B partitions to installation images

Demi Marie Obenour
2025-11-26T19:37:27Z

systemd-sysupdate never writes to the running OS partition. Instead, it
requires a separate partition to write the update into. Create a
separate partition for that purpose.

systemd-sysupdate will fail if the OS image does not fit in the
partitions that the installer created. Therefor, make the partitions
very large so that there is plenty of room for the OS to grow. This
requires rewriting the code that calculates the partition sizes.

Signed-off-by: Demi Marie Obenour <demiobenour@gmail.com>
---
Changes since v4:
- Leave B partitions empty.
- Leave MiB unit implicit.
- Use fixed GUIDs for blank partitions.

Changes since v2:
- Make into a standalone commit
- Do not rely on separate script to generate the images.
- Use a smaller size for the verity partition.
---
Documentation/development/uuid-reference.adoc | 8 ++++++++
release/live/Makefile | 7 +++++--
2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/Documentation/development/uuid-reference.adoc b/Documentation/development/uuid-reference.adoc
index 146615896104d5ab20c2e9353e5ed8f7a3dc54a6..16279c8a7e690bbaafdc3e0194f3130ba65c281c 100644
--- a/Documentation/development/uuid-reference.adoc
+++ b/Documentation/development/uuid-reference.adoc
@@ -59,6 +59,14 @@ Spectrum combined live system / installer image.

The Spectrum installer system.

+=== `18f2ccff-92f1-4bb1-a80e-24f76ecda90c`
+
+The not-yet-used B verity partition.
+
+=== `ec0c5ff3-f6b1-4adf-82b4-61336c4d135f`
+
+The not-yet-used B root filesystem partition.
+
'''

== Finding Undocumented UUIDs
diff --git a/release/live/Makefile b/release/live/Makefile
index 46628bdaa5b4a02aca3dd15be4477c3b2c194993..12b13d6e730c494086d1e7f763495ffbd4bd4b88 100644
--- a/release/live/Makefile
+++ b/release/live/Makefile
@@ -10,12 +10,15 @@ DTBS ?= build/empty
dest = build/live.img

$(dest): ../../scripts/format-uuid.awk ../../scripts/make-gpt.sh ../../scripts/sfdisk-field.awk build/boot.fat $(ROOT_FS_IMAGES)
+# 162MiB was calculated by running `veritysetup format` on 20GiB from /dev/urandom
uuids=$$(awk -f ../../scripts/format-uuid.awk < $(ROOT_FS_VERITY_ROOTHASH)) && \
set -u -- $$uuids && \
bash ../../scripts/make-gpt.sh $@.tmp \
build/boot.fat:c12a7328-f81f-11d2-ba4b-00a0c93ec93b \
- $(ROOT_FS_VERITY):verity:$$2:Spectrum_'$(VERSION).verity' \
- $(ROOT_FS_IMAGE):root:$$1:Spectrum_'$(VERSION)'
+ $(ROOT_FS_VERITY):verity:$$2:Spectrum_'$(VERSION).verity:162' \
+ $(ROOT_FS_IMAGE):root:$$1:Spectrum_'$(VERSION):20000' \
+ /dev/null:verity:18f2ccff-92f1-4bb1-a80e-24f76ecda90c:_empty:162 \
+ /dev/null:root:ec0c5ff3-f6b1-4adf-82b4-61336c4d135f:_empty:20000
mv $@.tmp $@

build/empty:

--
2.52.0