Compare commits

...

2 Commits

Author SHA1 Message Date
c4f6079077 feat: apply Tuxflotte color scheme to GRUB boot menu
Blue-on-white (matching pics/tuxflotte-beschriftet-schatten.svg's
brand color rgb(52,101,164)) instead of GRUB's default white-on-black.

The logo image itself doesn't work here: classic gfxterm always paints
an opaque per-character cell background, so a background_image gets
fully covered by color_normal's background and never becomes visible -
confirmed by booting the composited variant in QEMU before dropping it
again. Showing the actual logo needs the GRUB theme/gfxmenu engine,
which this live ISO doesn't ship (empty /boot/grub2/themes, no
x86_64-efi module directory) - not attempted here. The logo fits more
naturally on the Plymouth splash or live-desktop wallpaper instead,
both already confirmed to render correctly.
2026-07-18 17:08:40 +02:00
804827c5a9 feat: switch provisioning ISO to a live medium with auto/interactive boot entries
Replaces the Fedora DVD/netinst base with a live-ISO boot chain
(root=live:CDLABEL=Fedora-Cinn-Live-44 rd.live.image instead of
inst.stage2=/inst.ks=), implementing ADR-0003. The GRUB menu now
offers two entries booting the same live image with a
tuxflotte.mode=auto/interactive kernel cmdline flag instead of a
boot-time kickstart URL - installer.sh will read this flag once it
runs inside the live session.

scripts/build.sh and scripts/extract.sh now extract the source ISO via
`xorriso -osirrox` instead of a loop mount, removing the sudo
dependency for local builds.

Verified end-to-end in QEMU/KVM: GRUB menu renders both entries,
kernel/initrd load correctly, boot proceeds to the live session.
2026-07-18 17:08:12 +02:00
4 changed files with 37 additions and 52 deletions

View File

@ -17,9 +17,24 @@ insmod ext2
set timeout=10 set timeout=10
### END /etc/grub.d/00_header ### ### END /etc/grub.d/00_header ###
search --no-floppy --set=root -l 'Fedora-E-dvd-x86_64-44' search --no-floppy --set=root -l 'Fedora-Cinn-Live-44'
insmod gfxterm
terminal_output gfxterm
set color_normal=blue/white
set color_highlight=white/blue
### BEGIN /etc/grub.d/10_linux ### ### BEGIN /etc/grub.d/10_linux ###
menuentry 'Tuxflotte Provisioning (automatisch)' --class fedora --class gnu-linux --class gnu --class os {
linux /boot/x86_64/loader/linux quiet rhgb root=live:CDLABEL=Fedora-Cinn-Live-44 rd.live.image tuxflotte.mode=auto
initrd /boot/x86_64/loader/initrd
}
menuentry 'Tuxflotte Provisioning (interaktiv)' --class fedora --class gnu-linux --class gnu --class os {
linux /boot/x86_64/loader/linux quiet rhgb root=live:CDLABEL=Fedora-Cinn-Live-44 rd.live.image tuxflotte.mode=interactive
initrd /boot/x86_64/loader/initrd
}
menuentry 'Lokales UEFI-System booten' --class hdd --class os { menuentry 'Lokales UEFI-System booten' --class hdd --class os {
insmod part_gpt insmod part_gpt
insmod fat insmod fat
@ -30,8 +45,3 @@ menuentry 'Lokales UEFI-System booten' --class hdd --class os {
chainloader ($local_efi)/EFI/fedora/shimx64.efi chainloader ($local_efi)/EFI/fedora/shimx64.efi
boot boot
} }
menuentry 'Tuxflotte Provisioning - Fedora Workstation' --class fedora --class gnu-linux --class gnu --class os {
linux /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=Fedora-E-dvd-x86_64-44 inst.ks=https://anode.tuxflotte.de/installers/fedora-workstation/ks.cfg ip=dhcp quiet
initrd /images/pxeboot/initrd.img
}

View File

@ -14,14 +14,24 @@ insmod chain
set timeout=10 set timeout=10
### END /etc/grub.d/00_header ### ### END /etc/grub.d/00_header ###
search --no-floppy --set=root -l 'Fedora-E-dvd-x86_64-44' search --no-floppy --set=root -l 'Fedora-Cinn-Live-44'
insmod gfxterm
terminal_output gfxterm
set color_normal=blue/white
set color_highlight=white/blue
### BEGIN /etc/grub.d/10_linux ### ### BEGIN /etc/grub.d/10_linux ###
menuentry 'Tuxflotte Provisioning (automatisch)' --class fedora --class gnu-linux --class gnu --class os {
linux /boot/x86_64/loader/linux quiet rhgb root=live:CDLABEL=Fedora-Cinn-Live-44 rd.live.image tuxflotte.mode=auto
initrd /boot/x86_64/loader/initrd
}
menuentry 'Tuxflotte Provisioning (interaktiv)' --class fedora --class gnu-linux --class gnu --class os {
linux /boot/x86_64/loader/linux quiet rhgb root=live:CDLABEL=Fedora-Cinn-Live-44 rd.live.image tuxflotte.mode=interactive
initrd /boot/x86_64/loader/initrd
}
menuentry 'Von erster lokaler Festplatte booten' --class hdd --class os { menuentry 'Von erster lokaler Festplatte booten' --class hdd --class os {
chainloader (hd0)+1 chainloader (hd0)+1
} }
menuentry 'Tuxflotte Provisioning - Fedora Workstation' --class fedora --class gnu-linux --class gnu --class os {
linux /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=Fedora-E-dvd-x86_64-44 inst.ks=https://anode.tuxflotte.de/installers/fedora-workstation/ks.cfg ip=dhcp quiet
initrd /images/pxeboot/initrd.img
}

View File

@ -8,7 +8,6 @@ BASE_DIR="$(cd "$REPO_DIR/.." && pwd)"
BUILD_DIR="$BASE_DIR/build" BUILD_DIR="$BASE_DIR/build"
WORK_DIR="$BUILD_DIR/work" WORK_DIR="$BUILD_DIR/work"
OUTPUT_DIR="$BUILD_DIR/output" OUTPUT_DIR="$BUILD_DIR/output"
MOUNT_DIR="/mnt/fedora-iso"
usage() { usage() {
echo "Usage: $0 /path/to/source.iso" echo "Usage: $0 /path/to/source.iso"
@ -27,7 +26,7 @@ check_input() {
} }
check_dependencies() { check_dependencies() {
for cmd in rsync xorriso; do for cmd in xorriso; do
if ! command -v "$cmd" >/dev/null 2>&1; then if ! command -v "$cmd" >/dev/null 2>&1; then
echo "Error: missing dependency: $cmd" echo "Error: missing dependency: $cmd"
exit 1 exit 1
@ -41,26 +40,9 @@ prepare_dirs() {
mkdir -p "$WORK_DIR" mkdir -p "$WORK_DIR"
} }
mount_iso() {
sudo mkdir -p "$MOUNT_DIR"
sudo mount -o loop "$SOURCE_ISO" "$MOUNT_DIR"
}
unmount_iso() {
sudo umount "$MOUNT_DIR" || true
}
extract_iso() { extract_iso() {
echo "Extracting ISO..." echo "Extracting ISO..."
mount_iso xorriso -indev "$SOURCE_ISO" -osirrox on -extract / "$WORK_DIR" >/dev/null
trap unmount_iso EXIT
sudo rsync -a "$MOUNT_DIR"/ "$WORK_DIR"/
sudo chown -R "$(id -u):$(id -g)" "$WORK_DIR"
unmount_iso
trap - EXIT
} }
patch_grub() { patch_grub() {
@ -110,10 +92,8 @@ main() {
create_iso create_iso
echo echo
echo "Build preparation complete." echo "Build complete."
echo "Work dir: $WORK_DIR" echo "Work dir: $WORK_DIR"
echo
echo "ISO creation will be added in the next step."
} }
main "$@" main "$@"

View File

@ -17,29 +17,14 @@ REPO_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
BASE_DIR="$(cd "$REPO_DIR/.." && pwd)" BASE_DIR="$(cd "$REPO_DIR/.." && pwd)"
BUILD_DIR="$BASE_DIR/build" BUILD_DIR="$BASE_DIR/build"
WORK_DIR="$BUILD_DIR/work" WORK_DIR="$BUILD_DIR/work"
MOUNT_DIR="/mnt/fedora-iso"
echo "Source ISO: $SOURCE_ISO" echo "Source ISO: $SOURCE_ISO"
echo "Work dir: $WORK_DIR" echo "Work dir: $WORK_DIR"
sudo mkdir -p "$MOUNT_DIR"
rm -rf "$WORK_DIR" rm -rf "$WORK_DIR"
mkdir -p "$WORK_DIR" mkdir -p "$WORK_DIR"
echo "Mounting ISO..." echo "Extracting ISO contents..."
sudo mount -o loop "$SOURCE_ISO" "$MOUNT_DIR" xorriso -indev "$SOURCE_ISO" -osirrox on -extract / "$WORK_DIR" >/dev/null
cleanup() {
echo "Unmounting ISO..."
sudo umount "$MOUNT_DIR" || true
}
trap cleanup EXIT
echo "Copying ISO contents..."
sudo rsync -a "$MOUNT_DIR"/ "$WORK_DIR"/
echo "Fixing ownership..."
sudo chown -R "$(id -u):$(id -g)" "$WORK_DIR"
echo "Done." echo "Done."