The installer is booted from removable media that stays mounted at /boot; parted refuses to relabel a disk with mounted partitions, so offering (and selecting) that disk failed the install with "Partition(s) ... are being used" and hung at "Installation started". Exclude any disk that has a mounted filesystem from the disk list. citadel-boot also verity-loop-mounts the resource images (extra/kernel/ rootfs) at boot, which leaves /dev/loop* block devices that udev reports as disks (the extra image loop is ~2.9G, above the 1G size filter), so skip loop devices as well. AI-Generated: Uses DeepSeek V4 Flash
Citadel Installer UI
GUI used to install SubgraphOS
Thanks and Credit
This installer is based on the Rhino Linux setup utility found here: https://github.com/rhino-linux/rhino-setup.git.
Building
To build the project, ensure you have Meson and Ninja installed. The Rust code itself is compiled by cargo, which Meson invokes as part of its build process.
meson setup build
meson compile -C build
Translations
This project uses gettext for translations.
Updating Translation Templates (.pot)
If you add new translatable strings to the source code, you need to update the translation template (.pot) file. This is automatically done when you rebuild the project with Meson:
meson compile --clean -C build # Clean build to ensure all strings are picked up
meson compile -C build
Updating Translation Files (.po)
After updating the .pot file, you can update the individual language translation files (.po) with the new strings:
meson compile -C build citadel-installer-ui-update-po
This command will merge new strings into existing .po files. You can then edit the .po files in the po/ directory to add the translations.
Compiling Translations
The .po files are compiled into binary .mo files as part of the regular Meson build process (meson compile -C build). These compiled files are then used by the application.