2026-05-06 18:09:38 +01:00
|
|
|
# veilor-os installer kickstart — v0.7 CI build variant
|
|
|
|
|
#
|
|
|
|
|
# Derived from kickstart/install-ostreecontainer.ks by stripping all
|
|
|
|
|
# __PLACEHOLDER__ tokens that the runtime gum TUI substitutes at install
|
|
|
|
|
# time. Anaconda's interactive TUI handles disk selection, LUKS passphrase,
|
|
|
|
|
# and user account creation in their place.
|
|
|
|
|
#
|
|
|
|
|
# Consumed by livemedia-creator --make-iso to produce
|
|
|
|
|
# veilor-os-installer-43-*.iso. Do NOT add __PLACEHOLDER__ tokens here —
|
|
|
|
|
# they cannot be filled at build time. See install-ostreecontainer.ks
|
|
|
|
|
# for the runtime template the gum TUI fills in.
|
|
|
|
|
|
|
|
|
|
# ── Locale / keyboard / time ──
|
|
|
|
|
keyboard --xlayouts='us'
|
|
|
|
|
lang en_US.UTF-8
|
|
|
|
|
timezone Europe/London --utc
|
|
|
|
|
|
|
|
|
|
# ── Install mode ──
|
|
|
|
|
text
|
|
|
|
|
firstboot --disable
|
|
|
|
|
eula --agreed
|
|
|
|
|
selinux --enforcing
|
|
|
|
|
|
|
|
|
|
# ── Network ──
|
|
|
|
|
network --bootproto=dhcp --device=link --activate --hostname=veilor-install
|
|
|
|
|
firewall --enabled --service=ssh
|
|
|
|
|
|
|
|
|
|
# ── Identity ──
|
|
|
|
|
# rootpw --lock only. No user directive — Anaconda's user spoke handles
|
|
|
|
|
# admin account creation interactively. Runtime ks substitutes
|
|
|
|
|
# --password=__ADMIN_PW__ for unattended installs.
|
|
|
|
|
rootpw --lock
|
|
|
|
|
|
|
|
|
|
# ── Disk / partitioning ──
|
|
|
|
|
# Intentionally absent. Anaconda's disk spoke presents interactive
|
|
|
|
|
# disk + LUKS + btrfs selection. Runtime ks (gum TUI) provides the
|
|
|
|
|
# full partition spec at real-install time.
|
|
|
|
|
|
2026-05-07 08:16:01 +01:00
|
|
|
# ── Packages for the LIVE BOOT ENVIRONMENT ──
|
|
|
|
|
# These are NOT installed on the target system. They populate the
|
|
|
|
|
# squashfs that boots Anaconda. The target is populated by
|
|
|
|
|
# `ostreecontainer` below from the OCI image.
|
|
|
|
|
%packages
|
|
|
|
|
@^minimal-environment
|
|
|
|
|
@core
|
|
|
|
|
@anaconda-tools
|
|
|
|
|
anaconda-live
|
|
|
|
|
anaconda-tui
|
|
|
|
|
livesys-scripts
|
|
|
|
|
dracut-live
|
|
|
|
|
dracut-config-generic
|
|
|
|
|
kernel
|
|
|
|
|
kernel-modules
|
|
|
|
|
kernel-modules-extra
|
|
|
|
|
glibc-all-langpacks
|
|
|
|
|
ostree
|
|
|
|
|
rpm-ostree
|
|
|
|
|
bootupd
|
|
|
|
|
grub2-efi-x64
|
|
|
|
|
grub2-efi-x64-modules
|
|
|
|
|
grub2-pc
|
|
|
|
|
grub2-pc-modules
|
|
|
|
|
grub2-tools
|
|
|
|
|
grub2-tools-extra
|
|
|
|
|
shim-x64
|
|
|
|
|
efibootmgr
|
|
|
|
|
syslinux
|
|
|
|
|
isomd5sum
|
|
|
|
|
xorriso
|
|
|
|
|
%end
|
|
|
|
|
|
2026-05-06 18:09:38 +01:00
|
|
|
# ── ostreecontainer: populate / from veilor-os OCI ──
|
|
|
|
|
ostreecontainer --url=ghcr.io/veilor-org/veilor-os:43 --transport=registry
|
|
|
|
|
|
|
|
|
|
# ── %post (chroot) ──
|
|
|
|
|
%post
|
|
|
|
|
set -uo pipefail
|
|
|
|
|
echo veilor-install > /etc/hostname
|
|
|
|
|
chage -d 0 admin 2>/dev/null || true
|
|
|
|
|
%end
|
2026-05-08 00:51:16 +01:00
|
|
|
|
|
|
|
|
# ── %post --nochroot — persist install logs to USB (toggle: veilor.install_logs=on|off) ──
|
|
|
|
|
#
|
|
|
|
|
# Runs OUTSIDE the target chroot so /tmp/anaconda.log etc. on the live
|
|
|
|
|
# ramdisk are accessible alongside /mnt/sysroot. Calls the helper that
|
|
|
|
|
# ships in the veilor-os OCI image overlay; if the helper is missing
|
|
|
|
|
# (corrupt overlay, stripped image, etc.) we fall back to a minimal
|
|
|
|
|
# inline copy. NEVER fail the install over log persistence.
|
|
|
|
|
#
|
|
|
|
|
# Default: ON until v1.0 final. Disable per-boot:
|
|
|
|
|
# edit GRUB / press 'e', append: veilor.install_logs=off
|
|
|
|
|
%post --nochroot --erroronfail=no
|
|
|
|
|
set -uo pipefail
|
|
|
|
|
|
|
|
|
|
VEILOR_HELPER="/mnt/sysroot/usr/share/veilor-os/scripts/persist-install-logs.sh"
|
|
|
|
|
[ -x "$VEILOR_HELPER" ] || VEILOR_HELPER="/mnt/sysimage/usr/share/veilor-os/scripts/persist-install-logs.sh"
|
|
|
|
|
|
|
|
|
|
if [ -x "$VEILOR_HELPER" ]; then
|
|
|
|
|
"$VEILOR_HELPER" || true
|
|
|
|
|
else
|
|
|
|
|
# Inline fallback — toggle-aware, backup-only (no USB write attempt).
|
|
|
|
|
TS="$(date -u +%Y-%m-%dT%H-%M-%SZ)"
|
|
|
|
|
SR=/mnt/sysroot; [ -d "$SR" ] || SR=/mnt/sysimage
|
|
|
|
|
DST="${SR}/var/log/veilor-install-logs/${TS}"
|
|
|
|
|
TOGGLE=on
|
|
|
|
|
for tok in $(cat /proc/cmdline 2>/dev/null); do
|
|
|
|
|
case "$tok" in veilor.install_logs=off|veilor.install_logs=0|veilor.install_logs=false|veilor.install_logs=no) TOGGLE=off ;; esac
|
|
|
|
|
done
|
|
|
|
|
if [ "$TOGGLE" = "on" ]; then
|
|
|
|
|
mkdir -p "$DST" 2>/dev/null || true
|
|
|
|
|
for f in /tmp/anaconda.log /tmp/program.log /tmp/storage.log \
|
|
|
|
|
/tmp/packaging.log /tmp/syslog /tmp/dnf.log \
|
|
|
|
|
/tmp/ks.cfg /run/veilor-installer.log; do
|
|
|
|
|
[ -e "$f" ] && cp -a "$f" "$DST/" 2>/dev/null || true
|
|
|
|
|
done
|
|
|
|
|
dmesg > "$DST/dmesg.txt" 2>/dev/null || true
|
|
|
|
|
journalctl --no-pager -b > "$DST/journalctl-b.txt" 2>/dev/null || true
|
|
|
|
|
echo "[veilor] inline fallback used — helper missing at $VEILOR_HELPER" \
|
|
|
|
|
> "$DST/manifest.txt"
|
|
|
|
|
fi
|
|
|
|
|
fi
|
|
|
|
|
exit 0
|
|
|
|
|
%end
|