From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from atuin.qyliss.net (localhost [IPv6:::1]) by atuin.qyliss.net (Postfix) with ESMTP id B13F11B68D; Wed, 19 Nov 2025 08:21:30 +0000 (UTC) Received: by atuin.qyliss.net (Postfix, from userid 993) id 488961B5B6; Wed, 19 Nov 2025 08:21:24 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on atuin.qyliss.net X-Spam-Level: X-Spam-Status: No, score=-0.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,DMARC_PASS,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=4.0.1 Received: from mail-yw1-x1134.google.com (mail-yw1-x1134.google.com [IPv6:2607:f8b0:4864:20::1134]) by atuin.qyliss.net (Postfix) with ESMTPS id D1B8E1B544 for ; Wed, 19 Nov 2025 08:21:16 +0000 (UTC) Received: by mail-yw1-x1134.google.com with SMTP id 00721157ae682-78677ff31c2so55534297b3.2 for ; Wed, 19 Nov 2025 00:21:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1763540475; x=1764145275; darn=spectrum-os.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=WQ6KczQmkfTVd4zBZLevhGJ2zz9HPBjIG5Q3iYOQVNM=; b=h7K0hpoEFYCxK/X9ALtgodrM4ZAw1lJI+d05VHMQYC04q66WDw5DwuQN3rpszrJv5Y 7t7uOkR/uKMrRZYhS6eyJu4yUbfic8zk38XJIeKKBC1wL1k9BDBSFvs0h2Pzcp2UdLPf FZpuzFUmttOJa2+9ZbmjDji7QTY26P3Nu4Bf74/7926GeOx3cfmqE36eVWFuoZ4DkE9I suczSd5zU1jaF0cc+IbJRJQTElImPl5ra7voFLL4b/gJG2r2shn399qS6cnWHOpVy3J+ 0jtD88EhMy7IjPLi1kUDxG30HryhOBSNMYsRPZDzXzpaxcDHkhaqBCZfICSIcqL6if69 bAaA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763540475; x=1764145275; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=WQ6KczQmkfTVd4zBZLevhGJ2zz9HPBjIG5Q3iYOQVNM=; b=D4HzbHcHWN6UJ0Y7m08nVl4fTRO3VsFVQ77nD8v8bT7xQ2QaQdAErqy84s2SNRAzcs bhjAjjOWUeJ/7UUnMgxmBe9FzxWZFTnpT6b186iOOY0bTW/1mAJWZU3BskBL5iIfYEqi VbsOwn/syW9IF6zISVlccOfUgDh2vqSfqMC2NVc7xsZ3ez1I0ERFX3jxAPNLk4virR+J b8Zr/unVpJTTrIpZ30jZFsd46g7gMezJTfSgvrXoOGRKs356AxZrqsRokMcOCfy2VBY5 d/xfCn4fDBxMQ7iZEGgL+VSCP9VAPxvLLxekUFRzr4ILiL0DXcZVg6qxvoxUAO7csydf ajjA== X-Gm-Message-State: AOJu0YyiRBb/zNDyUHcNUZ14Ggc7yCnrGLhGA42L2TcanRWQgP0/IkNS L+6h8e45dKqL8XoGVBvMjWv6rLrBho4s0vzihrdr0y6Q3Vx3PRs/6VMdo4KAdQ== X-Gm-Gg: ASbGncvIHZi44U4TIlm5MmbU//+WBLrWMex1WJLtek/ekA8UnmKvyJhOyFMADCJ0D/M /e08cdabVEdiCThSpljEiarhKKjhIQIU0Od0L0EVxwPiamRYAZ4PGxLh+AGOMDI7bUlz+Gkk1lZ bmuUv3sxO6SgJBZjm/FDj/3Y4Y9bvFSh2ohMTt3Nwa4kFSyqQDstZk5Zhqg7SRa+QpRrs+VefV6 Da25GriNTHLPfRhtkpU/GGW+560C+XjK5IJC9yyN133zkc4kmIMUBLPAi9Nb6A+ZP2qtnVgW8jG oDmLG451f5gG4yADOaog4255PQO+QFOpkBumh8ITz5eCnGXDJfQfpt9Br5Q/NJQSPxJQ71Nn+En /eHH+nQP8bhNF+6w5FfHKN27yr3xa3Ya5EsimYV1BxWf7Bu2TKw4B6ZK+GZ8WHRXkWdCstKjvo+ TDWVPbiCgFHXBBndNrUax3Ztw97pU9442P0cM3IV0xPQhsTzzHhdXj0pSamAVHIeF0uwN/OoS3N z8a8czc8GPAhx4/Eb3uvnInsZjFyFpnQgiAg4Syzdn43Q== X-Google-Smtp-Source: AGHT+IER4X7azJw4hQ4A6SilMhBYvI8LxGQhB0LCCcvLH3GfHS6BApZ6dgJTDKLTdd/yK3+qSmBILw== X-Received: by 2002:a05:690e:190b:b0:640:a958:f599 with SMTP id 956f58d0204a3-642ed176e12mr1498688d50.46.1763540474756; Wed, 19 Nov 2025 00:21:14 -0800 (PST) Received: from localhost.localdomain (h96-60-249-169.cncrtn.broadband.dynamic.tds.net. [96.60.249.169]) by smtp.gmail.com with UTF8SMTPSA id 00721157ae682-78a6eee96aasm3348457b3.23.2025.11.19.00.21.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 19 Nov 2025 00:21:14 -0800 (PST) From: Demi Marie Obenour Date: Wed, 19 Nov 2025 03:18:29 -0500 Subject: [PATCH v3 06/14] Support generating multiple partition UUIDs MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20251119-updates-v3-6-b88a99915509@gmail.com> References: <20251119-updates-v3-0-b88a99915509@gmail.com> In-Reply-To: <20251119-updates-v3-0-b88a99915509@gmail.com> To: Spectrum OS Development X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1763540303; l=6132; i=demiobenour@gmail.com; s=20250729; h=from:subject:message-id; bh=XWYN+vK5gaFFAnN1+Sx/3YpHWJAPkxclRLIgme9LXtY=; b=P+oBVKAp5skjOtONTgP/6V9ngK2zE6Oxc8ouyfDS4v4V5ag0EhDxDtl7lgt5A/KZGqsDKYH9T YTQxi3BwFPXCgD1A4X0+JuctGlltPxf+XiMw4LJUaTDfXD/8+omgfgU X-Developer-Key: i=demiobenour@gmail.com; a=ed25519; pk=X57Q4/YQDj9t4SBeKaDwvXYKB6quZJVx/DE2Ly2out0= Message-ID-Hash: KXT5LRSZE36SQVOQ6VGD76FT6G55JEMR X-Message-ID-Hash: KXT5LRSZE36SQVOQ6VGD76FT6G55JEMR X-MailFrom: demiobenour@gmail.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-devel.spectrum-os.org-0; header-match-devel.spectrum-os.org-1; header-match-devel.spectrum-os.org-2; header-match-devel.spectrum-os.org-3; header-match-devel.spectrum-os.org-4; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Demi Marie Obenour , Alyssa Ross X-Mailman-Version: 3.3.9 Precedence: list List-Id: Patches and low-level development discussion Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Generate 4 partition UUIDs instead of just 2. Port scripts/format-uuid.sh to awk to make this much easier. Signed-off-by: Demi Marie Obenour --- Changes since v2: - Split into separate commit. --- host/initramfs/Makefile | 8 +++++--- host/rootfs/Makefile | 6 ++++-- release/live/Makefile | 8 +++++--- release/live/default.nix | 2 +- scripts/format-uuid.awk | 35 +++++++++++++++++++++++++++++++++++ scripts/format-uuid.sh | 19 ------------------- 6 files changed, 50 insertions(+), 28 deletions(-) diff --git a/host/initramfs/Makefile b/host/initramfs/Makefile index fd8cbb6c3e775ed27d0a524bf167cb4d3940d799..27a26b46a8110d35ee02a63b12931d6b9c2742e5 100644 --- a/host/initramfs/Makefile +++ b/host/initramfs/Makefile @@ -35,10 +35,12 @@ build/mountpoints: cd build/mountpoints && mkdir -p $(MOUNTPOINTS) find build/mountpoints -mindepth 1 -exec touch -d @0 {} ';' -build/live.img: ../../scripts/format-uuid.sh ../../scripts/make-gpt.sh ../../scripts/sfdisk-field.awk $(ROOT_FS_IMAGES) +build/live.img: ../../scripts/format-uuid.awk ../../scripts/make-gpt.sh ../../scripts/sfdisk-field.awk build/boot.fat $(ROOT_FS_IMAGES) + uuids=$$(awk -f ../../scripts/format-uuid.awk < $(ROOT_FS_VERITY_ROOTHASH)) && \ + set -euo pipefail -- $$uuids && \ bash ../../scripts/make-gpt.sh $@.tmp \ - $(ROOT_FS_VERITY):verity:$$(../../scripts/format-uuid.sh "$$(dd if=$(ROOT_FS_VERITY_ROOTHASH) bs=32 skip=1 count=1 status=none)") \ - $(ROOT_FS):root:$$(../../scripts/format-uuid.sh "$$(head -c 32 $(ROOT_FS_VERITY_ROOTHASH))") + $(ROOT_FS_VERITY):verity:$$3 \ + $(ROOT_FS):root:$$1 mv $@.tmp $@ build/loop.tar: build/live.img diff --git a/host/rootfs/Makefile b/host/rootfs/Makefile index 533471c58591d305f386157e04e9e48da7259fd5..1945afde0c1d804f9d14e9177aa812cbdc71234c 100644 --- a/host/rootfs/Makefile +++ b/host/rootfs/Makefile @@ -96,9 +96,11 @@ clean: .PHONY: clean build/live.img: ../../scripts/format-uuid.sh ../../scripts/make-gpt.sh ../../scripts/sfdisk-field.awk $(ROOT_FS_DIR)/verity-timestamp $(ROOT_FS) + uuids=$$(awk -f ../../scripts/format-uuid.awk < $(ROOT_FS_VERITY_ROOTHASH)) && \ + set -euo pipefail -- $$uuids && \ bash ../../scripts/make-gpt.sh $@.tmp \ - $(ROOT_FS)/rootfs.verity.superblock:verity:$$(../../scripts/format-uuid.sh "$$(dd if=$(ROOT_FS_VERITY_ROOTHASH) bs=32 skip=1 count=1 status=none)") \ - $(ROOT_FS)/rootfs:root:$$(../../scripts/format-uuid.sh "$$(head -c 32 $(ROOT_FS_VERITY_ROOTHASH)") + $(ROOT_FS_VERITY):verity:$$3 \ + $(ROOT_FS):root:$$1 mv $@.tmp $@ debug: diff --git a/release/live/Makefile b/release/live/Makefile index 4dbac28a90dc6f64a253961c33c597220d0e85cf..78361a48512a37514ba0e57e0cc8b0ec3a71664b 100644 --- a/release/live/Makefile +++ b/release/live/Makefile @@ -9,11 +9,13 @@ DTBS ?= build/empty dest = build/live.img -$(dest): ../../scripts/format-uuid.sh ../../scripts/make-gpt.bash ../../scripts/make-gpt.sh ../../scripts/sfdisk-field.awk build/boot.fat $(ROOT_FS_IMAGES) +$(dest): ../../scripts/format-uuid.awk ../../scripts/make-gpt.sh ../../scripts/sfdisk-field.awk build/boot.fat $(ROOT_FS_IMAGES) + uuids=$$(awk -f ../../scripts/format-uuid.awk < $(ROOT_FS_VERITY_ROOTHASH)) && \ + set -euo pipefail -- $$uuids && \ bash ../../scripts/make-gpt.sh $@.tmp \ build/boot.fat:c12a7328-f81f-11d2-ba4b-00a0c93ec93b \ - $(ROOT_FS_VERITY):verity:$$(../../scripts/format-uuid.sh "$$(dd if=$(ROOT_FS_VERITY_ROOTHASH) bs=32 skip=1 count=1 status=none)") \ - $(ROOT_FS):root:$$(../../scripts/format-uuid.sh "$$(head -c 32 $(ROOT_FS_VERITY_ROOTHASH))") + $(ROOT_FS_VERITY):verity:$$3 \ + $(ROOT_FS):root:$$1 mv $@.tmp $@ build/empty: diff --git a/release/live/default.nix b/release/live/default.nix index ac2d7a55fd4fe0c02108309ecea20e368000af0d..98cb4862e239e3ad9ddbd7b5ace5716f57df683b 100644 --- a/release/live/default.nix +++ b/release/live/default.nix @@ -29,7 +29,7 @@ stdenv.mkDerivation { fileset = lib.fileset.intersection src (lib.fileset.unions [ ./. ../../lib/common.mk - ../../scripts/format-uuid.sh + ../../scripts/format-uuid.awk ../../scripts/make-gpt.sh ../../scripts/sfdisk-field.awk ]); diff --git a/scripts/format-uuid.awk b/scripts/format-uuid.awk new file mode 100644 index 0000000000000000000000000000000000000000..a5349d68a4d29be5f750650236420c9b5a7257eb --- /dev/null +++ b/scripts/format-uuid.awk @@ -0,0 +1,35 @@ +# SPDX-License-Identifier: EUPL-1.2+ +# SPDX-FileCopyrightText: 2025 Demi Marie Obenour +function format_uuid(arg) { + if (arg in found_so_far) { + fail("Duplicate UUID, try changing the image (by even 1 bit)"); + } + found_so_far[arg] = 1; + print (substr(arg, 1, 8) "-" \ + substr(arg, 9, 4) "-" \ + substr(arg, 13, 4) "-" \ + substr(arg, 17, 4) "-" \ + substr(arg, 21, 12)); +} + +function fail(msg) { + print msg > "/dev/stderr"; + exit 1; +} + +BEGIN { + FS = ""; + RS = "\n"; + if ((getline) != 1) + fail("Empty input file"); + roothash = $0; + if (roothash !~ /^[a-f0-9]{64}$/) + fail("Invalid root hash"); + if (getline) + fail("Junk after root hash"); + found_so_far[""] = ""; + for (i = 1; i != 49; i += 16) { + format_uuid(substr($0, i, 32)); + } + format_uuid(substr($0, 49, 16) substr($0, 1, 16)); +} diff --git a/scripts/format-uuid.sh b/scripts/format-uuid.sh deleted file mode 100755 index 3b38278aef640b2cd540d6606b05dd62018e48a6..0000000000000000000000000000000000000000 --- a/scripts/format-uuid.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/sh -eu -# -# SPDX-FileCopyrightText: 2021-2022 Alyssa Ross -# SPDX-FileCopyrightText: 2022 Unikie -# SPDX-License-Identifier: EUPL-1.2+ - -substr() { - str=$1 - beg=$2 - end=$3 - echo "$str" | cut -c "$beg-$end" -} - -u1=$(substr "$1" 1 8) -u2=$(substr "$1" 9 12) -u3=$(substr "$1" 13 16) -u4=$(substr "$1" 17 20) -u5=$(substr "$1" 21 32) -printf "%s\n" "$u1-$u2-$u3-$u4-$u5" -- 2.52.0