Demi Marie Obenour writes: > On 11/28/25 08:22, Alyssa Ross wrote: >> We want non-minimally-sized partitions to leave space for updates. >> All such partitions will also be labelled, so we can just add another >> optional field at the end. >> >> Since we don't parse partition specifications in sh, we can't keep a >> running total any more, so instead we just go through the table at the >> end and add up all the sizes, taking advantage of our knowledge that >> the size will always be the last thing in each line in our tables. >> >> Signed-off-by: Alyssa Ross >> Message-ID: <20251127174054.2056835-2-hi@alyssa.is> >> --- >> v2: fix conflicts after applying Demi's optimization, and avoid awk >> to sum partition sizes, taking inspiration from the same. >> v1: https://spectrum-os.org/lists/archives/spectrum-devel/20251127174054.2056835-2-hi@alyssa.is/ >> >> scripts/make-gpt.sh | 30 ++++++++++++++++++------------ >> scripts/sfdisk-field.awk | 22 +++++++++++++++++----- >> 2 files changed, 35 insertions(+), 17 deletions(-) >> >> diff --git a/scripts/make-gpt.sh b/scripts/make-gpt.sh >> index 3cae441..cb19868 100755 >> --- a/scripts/make-gpt.sh >> +++ b/scripts/make-gpt.sh >> @@ -1,10 +1,10 @@ >> #!/bin/sh -eu >> # >> -# SPDX-FileCopyrightText: 2021-2023 Alyssa Ross >> +# SPDX-FileCopyrightText: 2021-2023, 2025 Alyssa Ross >> # SPDX-FileCopyrightText: 2022 Unikie >> # SPDX-License-Identifier: EUPL-1.2+ >> # >> -# usage: make-gpt.sh GPT_PATH PATH:PARTTYPE[:PARTUUID[:PARTLABEL]]... >> +# usage: make-gpt.sh GPT_PATH PATH:PARTTYPE[:PARTUUID[:PARTLABEL[:PARTMiB]]]... >> >> ONE_MiB=1048576 >> >> @@ -33,21 +33,27 @@ scriptsDir="$(dirname "$0")" >> out="$1" >> shift >> >> -nl=' >> -' >> -table="label: gpt" >> +table=$(for partition; do >> + awk -f "$scriptsDir/sfdisk-field.awk" \ >> + -v partition="$partition" \ >> + -v size="$(sizeMiB "${partition%%:*}")" >> +done) > > $(sizeMiB) should be moved into a separate command. Shellcheck can > catch this if you enable SC2312. Good catch, thanks. Feel free to suggest other optional shellcheck things we should enable. (Although I've just noticed release/checks/shellcheck.nix doesn't seem to be reading the .shellcheckrc file properly so don't use that for testing.) >> # Keep 1MiB free at the start, and 1MiB free at the end. >> -gptBytes=$((ONE_MiB * 2)) >> -for partition; do >> - sizeMiB="$(sizeMiB "${partition%%:*}")" >> - table="$table${nl}size=${sizeMiB}MiB,$(awk -f "$scriptsDir/sfdisk-field.awk" -v partition="$partition")" >> - gptBytes="$((gptBytes + sizeMiB * ONE_MiB))" >> -done >> +gptMiB=2 >> +while read -r partition; do >> + # Here we rely on sfdisk-field.awk always putting size last. >> + : $((gptMiB += ${partition##*=})) >> +done <> +$table >> +EOF > > Nit: should ${partition##*=} be in double quotes? I tried changing it, but it is apparently an "arithmetic syntax error" to use double quotes here.