Re: [PATCH 2/7] release/combined: Compress installation image

Alyssa Ross
2025-10-29T11:50:51Z

[-- Attachment #1: Type: text/plain, Size: 3216 bytes --]

Demi Marie Obenour <demiobenour@gmail.com> writes:

> This will be needed once the B partitions are added. Otherwise,
> tar2ext4's size limit is exceeded.
>
> The timeout is increased to account for the very slow compression
> process.
>
> Signed-off-by: Demi Marie Obenour <demiobenour@gmail.com>
> ---
> release/checks/integration/meson.build | 2 +-
> release/combined/eosimages.nix | 14 +++++++++-----
> 2 files changed, 10 insertions(+), 6 deletions(-)

I haven't built this yet, so maybe I'm wrong somehow, but doesn't this
break "Try Spectrum"? GRUB isn't going to be able to loopback mount a
compressed image, I assume. That's why I keep asking what GNOME OS
does. We currently produce an image that lets you install Spectrum, or
try it out in a live image. Do they do that too? If so, how do they
make it so that live image is bootable without being huge? Does their
installer resize partitions, perhaps?

(I reviewed the rest of the patch anyway, but I think we're going to
need a different approach here.)

> diff --git a/release/checks/integration/meson.build b/release/checks/integration/meson.build
> index 7bf8f51e4c762d2279ed6064ae1a87cb9b07494c..eb2860c6871b1067891c07ff7f4ac634cb4af458 100644
> --- a/release/checks/integration/meson.build
> +++ b/release/checks/integration/meson.build
> @@ -13,6 +13,6 @@ lib = static_library('spectrum-integration-test', 'lib.c')
>
> foreach test : ['appimage', 'late-serial', 'networking', 'portal']
> test(test, executable(test, test + '.c', link_with : lib),
> - timeout : 400,
> + timeout : 800,

Did you measure this, and find that it was actually roughly twice as
long? I'd like to keep the timeouts grounded in measurement, so this
should be increased by an actual measured factor.

> args : [run_qemu])
> endforeach
> diff --git a/release/combined/eosimages.nix b/release/combined/eosimages.nix
> index 0ac4c48374e7098a2b91f61fc07cebb2042ffbdc..ba44d9cd82d55d491293ed36cc0402db8ebd3ffe 100644
> --- a/release/combined/eosimages.nix
> +++ b/release/combined/eosimages.nix
> @@ -12,11 +12,15 @@ runCommand "eosimages.img" {
> unsafeDiscardReferences = { out = true; };
> dontFixup = true;
> } ''
> + set -o pipefail

This is set by stdenv.

> mkdir dir
> cd dir
> - ln -s $image $imageName
> - sha256sum $imageName > $imageName.sha256
> - tar -chf $NIX_BUILD_TOP/eosimages.tar *
> - tar2ext4 -i $NIX_BUILD_TOP/eosimages.tar -o $out
> - e2label $out eosimages
> + ln -s -- "$image" "$imageName"
> + sha256sum -- "$imageName" > "$imageName.sha256" &

What's this used for? The eos-installer README indicates that it looks
at the hash of the compressed image.

> + pid=$!
> + gzip -9 < "$image" > "$imageName.gz"
> + sha256sum -- "$imageName.gz" > "$imageName.gz.sha256"
> + wait "$pid"
> + tar -ch -- "$imageName.gz" "$imageName.gz.sha256" "$imageName.sha256" | tar2ext4 -o "$out"
> + e2label "$out" eosimages
> '') (_: {})

Please separate quoting/escaping changes to keep functional diffs easier
to identify, and check if they're actually necessary. They never are
for store paths because Nixpkgs assumes that.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 227 bytes --]