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 BA09D569B; Wed, 04 Feb 2026 17:57:05 +0000 (UTC) Received: by atuin.qyliss.net (Postfix, from userid 993) id 923845690; Wed, 04 Feb 2026 17:57:02 +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.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,DMARC_PASS,RCVD_IN_DNSWL_LOW,SPF_HELO_PASS autolearn=unavailable autolearn_force=no version=4.0.1 Received: from mout-p-201.mailbox.org (mout-p-201.mailbox.org [80.241.56.171]) by atuin.qyliss.net (Postfix) with ESMTPS id EA902568E for ; Wed, 04 Feb 2026 17:56:58 +0000 (UTC) Received: from smtp202.mailbox.org (smtp202.mailbox.org [IPv6:2001:67c:2050:b231:465::202]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-201.mailbox.org (Postfix) with ESMTPS id 4f5p2d10R9z9typ for ; Wed, 4 Feb 2026 18:56:57 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mailbox.org; s=mail20150812; t=1770227817; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=iaGQHcytgpFJmbGqL34eHItpb/31ohgUiDQxu5OSejk=; b=hVaIsE1sVH9QJlehMiwS+gS7I6YMuuGw4PpIWPY1o7OHyo7Xi0+au9PJmyIRG7tiPlvm7r W6Hqhy6mrrePxqSoiBNajROrA7+9NsJnzP6F6D19foBKbjaw4gLAtVWR5E57xZNQLTQ0vd 2l9AEZvKipumlGY5hFEi9jYos5avttoHW/cjyWsIDfOgRw1ChSzpGtYhLIjzgG+utBfmqg d91JQ1DcDxQh4BYAbC2589Q1nesWrpC8H692EdQ4l532gSLNfcdNIXQyxt+2OC660q+3fm MysAPqOFTUZZWWg7UT/T2axtdCcqI1AfstXmItvMYrA+cB4Z0pmxpNlGKnukYQ== Authentication-Results: outgoing_mbo_mout; dkim=pass header.d=mailbox.org header.s=mail20150812 header.b=VR7boc5V; spf=pass (outgoing_mbo_mout: domain of johannes.suellner@mailbox.org designates 2001:67c:2050:b231:465::202 as permitted sender) smtp.mailfrom=johannes.suellner@mailbox.org From: =?UTF-8?q?Johannes=20S=C3=BCllner?= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mailbox.org; s=mail20150812; t=1770227814; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=iaGQHcytgpFJmbGqL34eHItpb/31ohgUiDQxu5OSejk=; b=VR7boc5Vpd8zKvJw2xb8w8vmaiKn/rx9/lEGiPmUDHuFC1Bh6ldf7W8PbozKfoQgnTPp5+ n+KnElpVQsTrnAt5CoB4LK4LVZzbc8R8xbH4TMGHghaOdUCVhF1vNJ1mydekJIz6hZk/fO OTKIcPoFIgsrHVzDzfNcuNsXSz/tQLtX4s/xZ6NdQmD0wvV004TUojeJHLaVw4rROndT/I X1vYBKrh2iQciLWgRN9lU4eGIDgE2S58gPwB8HGe43oezhr9dHsx9Z1EebkGmluMf9jMMZ Chi69LrkgVVDPHm5bVBkCGWHxeNlRPbi5kyEQCsC58fB7fQOxvw8v/wh8dpxAw== To: devel@spectrum-os.org Subject: [PATCH v2 0/5] Spectrum-installer Date: Wed, 4 Feb 2026 18:55:20 +0100 Message-ID: <20260204175543.22164-2-johannes.suellner@mailbox.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-MBO-RS-ID: 9c5db6962835c2e8af6 X-MBO-RS-META: om898xha5d6knrre6wunmgc98ce1dig9 X-Rspamd-Queue-Id: 4f5p2d10R9z9typ Message-ID-Hash: RDBKHVBZF5UT4KX3XSKA3DHDHSXY6UKN X-Message-ID-Hash: RDBKHVBZF5UT4KX3XSKA3DHDHSXY6UKN X-MailFrom: johannes.suellner@mailbox.org 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: =?UTF-8?q?Johannes=20S=C3=BCllner?= 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: 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 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