From: "Johannes Süllner" <johannes.suellner@mailbox.org>
To: devel@spectrum-os.org
Cc: "Johannes Süllner" <johannes.suellner@mailbox.org>
Subject: [PATCH v2 0/5] Spectrum-installer
Date: Wed, 4 Feb 2026 18:55:20 +0100 [thread overview]
Message-ID: <20260204175543.22164-2-johannes.suellner@mailbox.org> (raw)
A custom graphical installer for Spectrum, written in Rust. It runs
within the live system and uses 'systemd-repart'. The user selects a
destination disk and confirms this selection. Then, 'systemd-repart'
first creates a partition table on the destination disk and then
copies the individual partitions of the live system to the destination
disk, what means they are kind of resized in the process. This allows
for having large A/B slots for Spectrum after the installation, while
keeping the live image at the minimum size.
The reason for writing a custom installer is that there are no
image-based distributions using an installer that does not require
an interpreter; something we want to avoid on the Spectrum host.
There is a promising new installer in development for Gnome OS
(https://gitlab.gnome.org/Teams/STF/setup), but it is still in an
early stage and the actual installation is not implemented yet.
Besides the boot partition and the A/B slots, the installer also
creates a Btrfs home partition, taking up the remaining disk space.
I included this for making it easier to test the update feature.
There are a few things I still want to add to the installer at some
future point. One thing is a check whether a possible destination
device is suitable for a Spectrum installation, or e.g. too small. I
currently plan to do so by running 'systemd-repart' in dry run mode on
all possible devices on launch of the installer, what would need to be
done asynchronously in a separate thread I think.
Also, running 'systemd-repart' in an embedded terminal, as it's done
right now, is something I'd like to change, as it feels somewhat hacky
to me.
v2:
• Updated to iced v0.14
• Replaced the error log on the 'completion' page with a QR code
containing the log.
• Added the full discuss mailing list address to the error help
message on the 'completion' page.
• Added '-o pipefail' to shell call for 'systemd-repart' invocation.
• Replaced 'lsblk' crate with 'blockdev' crate.
• Wrapped usage of 'drives' crate in 'DestinationDevice'.
• Replaced usage of 'libcosmicAppHook' in
tools/spectrum-installer/default.nix
• Updated tools/spectrum-installer/shell.nix
• Updated cargo dependencies.
• Removed fixed size of verity partition in release/live/Makefile
• Added commit reverting the addition of the partition size parameter
to make-gpt.sh
v1:
https://spectrum-os.org/lists/archives/spectrum-devel/20260104140102.106960-5-johannes.suellner@mailbox.org/
Signed-off-by: Johannes Süllner <johannes.suellner@mailbox.org>
---
Johannes Süllner (5):
tools: add spectrum-installer
host/rootfs: integrate spectrum-installer
release: drop combined and installer image
release/live: remove B slot from live image and reduce
Revert "scripts/make-gpt.sh: allow setting partition
Documentation/development/uuid-reference.adoc | 22 -
host/rootfs/default.nix | 4 +-
host/rootfs/file-list.mk | 3 +
.../spectrum-installer-as-root/notification-fd | 1 +
.../notification-fd.license | 2 +
.../service/spectrum-installer-as-root/run | 17 +
host/rootfs/image/etc/s6-rc/weston/run | 1 +
host/rootfs/image/etc/xdg/weston/weston.ini | 5 +
.../image/usr/bin/spectrum-installer-as-root | 5 +
pkgs/default.nix | 3 +
release/checks/default.nix | 2 -
release/checks/installer.nix | 16 -
release/combined/default.nix | 123 -
release/combined/eosimages.nix | 21 -
release/combined/grub.cfg.in | 22 -
release/combined/run-vm.nix | 31 -
...-disable-gpt-partition-attribute-55-check.patch | 37 -
...002-gpt-disable-partition-table-CRC-check.patch | 36 -
.../app/0003-install-remove-Endless-OS-ad.patch | 99 -
.../0004-finished-don-t-run-eos-diagnostics.patch | 44 -
...ed-promote-spectrum-not-the-Endless-forum.patch | 32 -
release/installer/app/default.nix | 26 -
release/installer/app/vendor-customer-support.ini | 5 -
release/installer/configuration.nix | 69 -
release/installer/default.nix | 22 -
release/installer/run-vm.nix | 47 -
release/installer/seat.rules | 9 -
release/live/Makefile | 6 +-
scripts/make-gpt.sh | 31 +-
scripts/sfdisk-field.awk | 22 +-
tools/spectrum-installer/Cargo.lock | 5182 ++++++++++++++++++++
tools/spectrum-installer/Cargo.lock.license | 2 +
tools/spectrum-installer/Cargo.toml | 14 +
tools/spectrum-installer/default.nix | 55 +
.../spectrum-installer/res/installer_logo_mesh.svg | 85 +
tools/spectrum-installer/res/repart.d/10-esp.conf | 8 +
.../res/repart.d/20-verity-A.conf | 9 +
.../res/repart.d/21-rootfs-A.conf | 9 +
.../res/repart.d/30-verity-B.conf | 8 +
.../res/repart.d/31-rootfs-B.conf | 8 +
tools/spectrum-installer/res/repart.d/40-home.conf | 7 +
tools/spectrum-installer/shell.nix | 28 +
tools/spectrum-installer/src/destination_device.rs | 53 +
tools/spectrum-installer/src/main.rs | 53 +
tools/spectrum-installer/src/pages/completion.rs | 138 +
tools/spectrum-installer/src/pages/confirmation.rs | 108 +
.../spectrum-installer/src/pages/disk_selection.rs | 123 +
tools/spectrum-installer/src/pages/installation.rs | 186 +
tools/spectrum-installer/src/pages/layout.rs | 89 +
tools/spectrum-installer/src/pages/mod.rs | 43 +
tools/spectrum-installer/src/pages/welcome.rs | 62 +
51 files changed, 6328 insertions(+), 705 deletions(-)
create mode 100644 host/rootfs/image/etc/s6-linux-init/run-image/service/spectrum-installer-as-root/notification-fd
create mode 100644 host/rootfs/image/etc/s6-linux-init/run-image/service/spectrum-installer-as-root/notification-fd.license
create mode 100755 host/rootfs/image/etc/s6-linux-init/run-image/service/spectrum-installer-as-root/run
create mode 100755 host/rootfs/image/usr/bin/spectrum-installer-as-root
delete mode 100644 release/checks/installer.nix
delete mode 100644 release/combined/default.nix
delete mode 100644 release/combined/eosimages.nix
delete mode 100644 release/combined/grub.cfg.in
delete mode 100644 release/combined/run-vm.nix
delete mode 100644 release/installer/app/0001-gpt-disable-gpt-partition-attribute-55-check.patch
delete mode 100644 release/installer/app/0002-gpt-disable-partition-table-CRC-check.patch
delete mode 100644 release/installer/app/0003-install-remove-Endless-OS-ad.patch
delete mode 100644 release/installer/app/0004-finished-don-t-run-eos-diagnostics.patch
delete mode 100644 release/installer/app/0005-finished-promote-spectrum-not-the-Endless-forum.patch
delete mode 100644 release/installer/app/default.nix
delete mode 100644 release/installer/app/vendor-customer-support.ini
delete mode 100644 release/installer/configuration.nix
delete mode 100644 release/installer/default.nix
delete mode 100644 release/installer/run-vm.nix
delete mode 100644 release/installer/seat.rules
create mode 100644 tools/spectrum-installer/Cargo.lock
create mode 100644 tools/spectrum-installer/Cargo.lock.license
create mode 100644 tools/spectrum-installer/Cargo.toml
create mode 100644 tools/spectrum-installer/default.nix
create mode 100644 tools/spectrum-installer/res/installer_logo_mesh.svg
create mode 100644 tools/spectrum-installer/res/repart.d/10-esp.conf
create mode 100644 tools/spectrum-installer/res/repart.d/20-verity-A.conf
create mode 100644 tools/spectrum-installer/res/repart.d/21-rootfs-A.conf
create mode 100644 tools/spectrum-installer/res/repart.d/30-verity-B.conf
create mode 100644 tools/spectrum-installer/res/repart.d/31-rootfs-B.conf
create mode 100644 tools/spectrum-installer/res/repart.d/40-home.conf
create mode 100644 tools/spectrum-installer/shell.nix
create mode 100644 tools/spectrum-installer/src/destination_device.rs
create mode 100644 tools/spectrum-installer/src/main.rs
create mode 100644 tools/spectrum-installer/src/pages/completion.rs
create mode 100644 tools/spectrum-installer/src/pages/confirmation.rs
create mode 100644 tools/spectrum-installer/src/pages/disk_selection.rs
create mode 100644 tools/spectrum-installer/src/pages/installation.rs
create mode 100644 tools/spectrum-installer/src/pages/layout.rs
create mode 100644 tools/spectrum-installer/src/pages/mod.rs
create mode 100644 tools/spectrum-installer/src/pages/welcome.rs
next reply other threads:[~2026-02-04 17:57 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-04 17:55 Johannes Süllner [this message]
2026-02-04 17:55 ` [PATCH v2 1/5] tools: add spectrum-installer Johannes Süllner
2026-02-04 17:55 ` [PATCH v2 2/5] host/rootfs: integrate spectrum-installer Johannes Süllner
2026-02-05 4:17 ` Demi Marie Obenour
2026-02-05 8:56 ` Johannes Süllner
2026-03-15 11:56 ` Alyssa Ross
2026-03-15 12:15 ` Alyssa Ross
2026-02-04 17:55 ` [PATCH v2 3/5] release: drop combined and installer image Johannes Süllner
2026-03-15 12:20 ` Alyssa Ross
2026-02-04 17:55 ` [PATCH v2 4/5] release/live: remove B slot from live image and reduce A slot size Johannes Süllner
2026-03-15 12:21 ` Alyssa Ross
2026-02-04 17:55 ` [PATCH v2 5/5] Revert "scripts/make-gpt.sh: allow setting partition size" Johannes Süllner
2026-03-15 12:23 ` Alyssa Ross
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260204175543.22164-2-johannes.suellner@mailbox.org \
--to=johannes.suellner@mailbox.org \
--cc=devel@spectrum-os.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://spectrum-os.org/git/crosvm
https://spectrum-os.org/git/doc
https://spectrum-os.org/git/mktuntap
https://spectrum-os.org/git/nixpkgs
https://spectrum-os.org/git/spectrum
https://spectrum-os.org/git/ucspi-vsock
https://spectrum-os.org/git/www
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).