Commit graph

34 commits

Author SHA1 Message Date
veilor-org
b3509b4b06 v0.5.25: don't run veilor-firstboot on live ISO
Live ISO boot chain showing extra step:
  boot → text scroll → veilor-firstboot prompts admin pw → installer

veilor-firstboot.service was enabled in live ks but it's an INSTALLED
system feature (forces admin pw set on first real boot). Made no
sense to ask on live (no persistent admin user, throwaway VM, etc).

Live ks now: doesn't enable veilor-firstboot, masks the unit so
overlay-copied unit file can't auto-activate. Install ks chroot %post
already enables it (correct path).

After fix:
  boot → text scroll → installer banner directly
2026-05-04 04:08:40 +01:00
veilor-org
4dabbd8fcf v0.5.24: live ISO — text-mode boot + GRUB veilor branding
User wants full chained pipeline:
GRUB veilor-os → plymouth text → branded gum installer →
install progress → reboot → installed system text-clean.

Live ISO was missing pieces from the install ks polish. v0.5.24
brings live ks into parity:

- bootloader --append: add plymouth.enable=0 (kills fedora splash,
  exposes tty1 with gum installer banner immediately)
- chroot %post: GRUB_DISTRIBUTOR="veilor-os" (menu title)
- chroot %post: GRUB_CMDLINE_LINUX_DEFAULT="" (drop rhgb quiet)
- chroot %post: plymouth-set-default-theme details (text scroll
  fallback if plymouth.enable=0 ignored)
- grub2-mkconfig regen with new branding

Result on next ISO build:
- Boot from ISO → GRUB shows "veilor-os" entry
- Pick veilor-os → text scroll (no fedora splash)
- TTY1 lands on gum installer banner + menu (no plymouth swallow)
- Install completes → reboot → installed system already has the
  same text-mode boot + LUKS prompt config from v0.5.22-23
2026-05-04 02:26:00 +01:00
veilor-org
abfba24512 v0.5.22: plymouth details theme — scrolling text boot, LUKS visible
v0.5.21 set plymouth.enable=0 — plymouth-start.service still ran +
ate LUKS keystrokes. Boot fell to dracut emergency shell.

Better path: plymouth IS running but in TEXT mode via built-in
`details` theme (scrolling boot log, no graphics, no fedora logo).
LUKS prompt renders as text "Please enter passphrase for...:".
Plymouth still owns the prompt → keystrokes go through.

Changes:
- Drop plymouth.enable=0 from cmdline (let plymouth run)
- chroot %post: plymouth-set-default-theme details
- Drop rhgb quiet from GRUB_CMDLINE_LINUX_DEFAULT (all kernel msgs visible)
- dracut --force --regenerate-all (new theme baked into initramfs)

Result: text scroll boot → text LUKS prompt → text scroll → SDDM.
Onyx aesthetic. Branded plymouth theme deferred to v0.6.
2026-05-03 23:10:23 +01:00
veilor-org
68ebe6fdbe v0.5.21: plymouth.enable=0 — text boot like onyx, plymouth pkg kept
User wants onyx-style boot: pure text scroll → LUKS prompt → text scroll
→ SDDM. No fedora splash, no plymouth UI.

Solution: keep plymouth PACKAGE installed (Fedora's dracut module
ships LUKS-prompt machinery via plymouth), but disable plymouthd at
runtime via kernel cmdline `plymouth.enable=0`.

Effect:
- plymouthd starts → reads cmdline → exits
- systemd-ask-password sees no plymouth daemon → falls back to
  systemd-tty-ask-password-agent on /dev/console
- LUKS prompt rendered as text "Please enter passphrase for /dev/dm-0: "
- All kernel/systemd messages visible
- SDDM still launches at graphical.target (real install)

Applied to both:
- LIVE ks bootloader --append (so live boot text-mode + installer
  visible on tty1, no splash hiding it)
- Generated install ks bootloader --append (so installed system
  text-boots with LUKS prompt)

v0.6 will rebrand plymouth theme + re-enable for branded splash. For
v0.5.0 ship: minimal/text aesthetic matches user's onyx daily driver.
2026-05-03 21:59:58 +01:00
veilor-org
ec4291293e v0.5.2: move veilor-installer + veilor-firstboot to /usr/local/bin
QEMU boot test of v0.5.1 (commit 3cbffaf) revealed both scripts
missing from /usr/local/sbin/ on running system, despite being in
overlay/usr/local/sbin/ in the source tree.

Root cause: Fedora's filesystem package (or post-install scriptlet)
rewrites /usr/local/sbin → /usr/local/bin symlink AFTER kickstart
%post --nochroot's overlay copy runs. The cp -a placed files in
/usr/local/sbin/ as a real directory; the symlink replacement
deleted them.

Confirmed via tty diagnostic: `ls -la /usr/local` shows
`lrwxrwxrwx ... sbin -> bin` with bin mtime predating sbin symlink
ctime by ~5min — overlay copy ran first, scriptlet rewrote sbin
second.

Fix: move both binaries to overlay/usr/local/bin/ where they're
safe from the symlink rewrite. Update all references:
- kickstart/veilor-os.ks chmod path + chown + diagnostic ls
- overlay/etc/systemd/system/getty@tty1.service.d/veilor-installer.conf ExecStart
- overlay/etc/systemd/system/veilor-firstboot.service ExecStart
- scripts/selinux/build-policy.sh fcontext + restorecon paths
- generated install ks template inside veilor-installer

Service drop-in stays at /etc/systemd/system/getty@tty1.service.d/
unchanged. The veilor-installer binary in /usr/local/bin/ is
discoverable via $PATH same as before.
2026-05-02 05:33:22 +01:00
s8n
8127f32868 v0.6: pre-stage veilor-update + veilor-doctor CLI tools (#11)
Two user-facing commands shipped in overlay/usr/local/bin/.
Wraps dnf+flatpak update flow and read-only health diagnostic.
Uses gum if available, plain output otherwise. No kickstart wiring
yet beyond chmod — full integration in v0.6.0 release.

Co-authored-by: veilor-org <admin@veilor.org>
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-02 04:39:33 +01:00
s8n
09f7c1f753 build: wire 30-apply-v03-theme.sh into ks %post + SSH key auto-inject in run-vm.sh (#1)
Co-authored-by: veilor-org <admin@veilor.org>
2026-05-02 04:38:23 +01:00
veilor-org
3328ffb460 v0.5.0-alpha: TTY1 installer (omarchy/archinstall-style)
Adds:
- overlay/usr/local/sbin/veilor-installer — bash+whiptail TUI
- overlay/etc/systemd/system/getty@tty1.service.d/veilor-installer.conf
  → replaces tty1 login with installer
- ks: newt + parted + cryptsetup + lvm2 + btrfs-progs packages
- ks: systemctl set-default multi-user.target (TTY1 lands first; user
  picks "Try live — desktop" from menu to isolate graphical.target)
- ks: chmod +x veilor-installer in chroot %post

Flow:
1. Boot ISO → TTY1 → ASCII banner + menu:
   1) Install to disk    2) Try live — desktop   3) Try live — shell
   4) Reboot             5) Power off
2. Install path: collects disk/hostname/LUKS/admin pw/locale via whiptail,
   generates /run/install/veilor-generated.ks, execs anaconda --kickstart=
3. Reboots into hardened install with full init_on_alloc/free cmdline

Known limitations (v0.5.0-alpha):
- Generated ks doesn't yet copy overlay/scripts into target (anaconda
  installs base Fedora, missing veilor branding/hardening). Fix in v0.5.1.
- whiptail = ugly. v0.5.1 swaps to gum (Go TUI) for omarchy-tier UX.
- No mid-install progress bar; anaconda runs unattended in same tty.
2026-05-02 03:20:42 +01:00
veilor-org
ebf0032559 v0.2.7: fix SDDM autostart + blank-pw login
- display-manager.service symlink: livecd-creator skips alias creation
  vs Anaconda installer; without it sddm stays inactive at graphical.target
- admin user: replace `passwd -d` with throwaway pw `veilor` + chage -d 0
  (SDDM rejects blank pw by default, breaks first-login flow)

Tested in QEMU v0.2.5: confirmed sddm enabled but inactive after boot,
and blank-pw login at SDDM returns "Login Failed".
2026-05-02 03:08:08 +01:00
veilor-org
22928b0a83 v0.2.6: drop '(Fedora 43 base)' from PRETTY_NAME; chown -R 0:0 overlay (cp -a preserved CI uid 1001 → sudo refused sudoers.d) 2026-05-02 01:08:03 +01:00
veilor-org
8515bdbe38 ks: drop init_on_alloc/init_on_free from live cmdline (5x boot time on KVM)
Live ISO stalled at dracut for 5+min on KVM with init_on_alloc=1
init_on_free=1 — kernel zeroes every page on alloc/free, brutal in
virtualized memory. Keep slab_nomerge + lockdown=integrity +
randomize_kstack + vsyscall=none for live (cheap). Re-add memory
init flags on installed system via veilor-firstboot post-install
GRUB edit (planned v0.3).
2026-05-01 23:23:35 +01:00
veilor-org
ef54a246f0 v0.2.3: os-release branding + admin user creation in %post
- kde-theme-apply.sh: search /etc/os-release.d/veilor (where overlay
  put it) before falling back to $REPO/overlay path. Rewire symlinks
  cleanly: /etc/os-release → ../usr/lib/os-release.
- Kickstart: useradd admin in chroot %post since livecd-creator skips
  the `user` directive (no installer phase). Blank pw + expired = forced
  reset at first login same as before.
2026-05-01 18:25:57 +01:00
veilor-org
3408841822 ks: %post --nochroot loosened error handling + nochroot trace log
Found via debugfs: overlay copy succeeds (veilor-power, tuned profiles,
sshd-hardening, sudoers, systemd units all present in v0.2.1 rootfs) but
`mkdir + cp assets/scripts` aborted with set -eu — leaves /usr/share/
veilor-os missing → all chroot %post scripts fail. Switch to set +e on cp
plus persist trace log to /var/log/veilor-nochroot.log for next debug.
2026-05-01 15:21:22 +01:00
veilor-org
9c6136f01f ks: %post --nochroot uses $INSTALL_ROOT (livecd-creator) — was hardcoded /mnt/sysimage
Bug confirmed by inspecting v0.2.0 ISO: rootfs symlinks /etc/os-release →
../usr/lib/os-release (stock Fedora), no /usr/share/veilor-os, no overlay
files, /var/log/veilor-install.log shows %post chroot couldn't find any
script because %post --nochroot copy targeted /mnt/sysimage (livemedia-creator
path) instead of livecd-creator's INSTALL_ROOT.
2026-05-01 11:48:30 +01:00
veilor-org
eeb54942a9 ks: switch fedora/updates repos to direct baseurl (mirrorlist 404s during CDN sync) 2026-04-30 17:24:43 +01:00
veilor-org
084582e0e5 ks: add upstream live plumbing + explicit base repo
Agent A: missing livesys-scripts + anaconda-live = lorax can't build EFI/BOOT.
Agent B: livecd-creator ignores url=, only reads repo.repoList — added
explicit repo --name=fedora to feed it the base.

Both Fedora's own pipeline + livecd-creator now have what they need.
Live image plumbing in %post: enable livesys.service livesys-late.service
tmp.mount, reset machine-id.
2026-04-30 17:07:24 +01:00
veilor-org
314a24f584 ks: add grub2-efi-x64-modules + xorriso for EFI/BOOT grafting
Past grub2-mkimage. Failed at xorrisofs final ISO assembly because EFI/BOOT
dir not built — needs grub2-efi-x64-modules to compile standalone grubx64.efi.
2026-04-30 15:48:57 +01:00
veilor-org
5dea325a0c ks: add grub2-pc + grub2-pc-modules + tools-extra + syslinux + isomd5sum
CI made it through full install, configure, %post, squashfs build,
initrd rebuild — failed at final boot.iso wrap because grub2-mkimage
needed /usr/lib/grub/i386-pc/moddep.lst (BIOS legacy boot modules).
Hybrid BIOS+UEFI ISO requires both grub variants.
2026-04-30 15:07:04 +01:00
veilor-org
5f650d45d8 ks: %post --nochroot — multi-path overlay source detection (/work CI, /run/install/repo virt, kickstart-relative no-virt) 2026-04-30 14:14:07 +01:00
veilor
b3ddf7040a ks: drop veilor-firstboot/veilor-modules-lock from services line — enabled in %post after overlay 2026-04-30 13:44:51 +01:00
veilor
e1e392098f ks: add local fix-repo (file:///tmp/veilor-fix-repo) — pcre2 10.47 + selinux-policy 43.7 paired, cost=1 forces selection 2026-04-30 12:04:49 +01:00
veilor
8e851406d0 ks: includepkgs on updates repo (selinux-policy/pcre2/libselinux only) + cost=10 2026-04-30 11:16:30 +01:00
veilor
b3b5ce0b08 ks: swap install source to updates repo (base has pcre2/selinux-policy version skew) 2026-04-30 11:07:35 +01:00
veilor
10ee8d33e4 ks: updates repo cost=500 vs base default 1000 — force latest selinux-policy + pcre2 2026-04-30 10:45:58 +01:00
veilor
31c1af4aec ks: hardcode releasever=43, add --install on updates repo, add updates-testing — base ships outdated selinux-policy 2026-04-30 10:07:58 +01:00
veilor
e965b148f5 ks: SELinux permissive at build (PCRE2 mismatch); enforcing+relabel at first boot 2026-04-30 09:43:33 +01:00
veilor
238e461553 ks: keep KDE deps (cups/geoclue2/MM/PackageKit) — mask daemons at runtime instead 2026-04-30 04:31:49 +01:00
veilor
ec79dc1746 ks: keep avahi-libs/pcsc-lite — daemons disabled at runtime, libs broadly required 2026-04-30 04:24:20 +01:00
veilor
1d5147ba11 ks: simplify to live rootfs partitioning — installer ks (LUKS) split planned v0.2.1 2026-04-30 04:12:26 +01:00
veilor
3b5341c77a ks: drop text display mode — livemedia-creator forbids 2026-04-30 04:11:46 +01:00
veilor
3c2fec042f ks: add dracut-live + grub2/shim/efibootmgr — required by livemedia-creator --make-iso 2026-04-30 04:08:08 +01:00
veilor
f6a89d16f1 ks: drop removed auth cmd, collapse multiline part/logvol, drop unsupported --hash flag 2026-04-30 04:03:10 +01:00
veilor
f1b44bc218 fonts: swap DuckSans → Fira Code (Fedora fira-code-fonts, SIL OFL 1.1) 2026-04-30 03:57:17 +01:00
veilor
1822005df1 veilor-os v0.1 scaffold — kickstart + hardening + 3-mode power + DuckSans-ready KDE black theme 2026-04-30 03:43:33 +01:00