Replaces the gnome-terminal-launched installer.sh session with a browser-based kiosk (opt/tuxflotte/kiosk/start-kiosk.sh launching Epiphany with --profile). Sets German keyboard layout for the graphical session (vconsole.keymap only covers the text console), suppresses Epiphany's default-browser prompt, hides desktop icons, and reduces the panel to a window list + power applet. Also disables the SELinux troubleshooter desktop notification, and copies the full live-updates tree (not just etc/) so opt/ payload ships too. Several Epiphany invocation modes were tried and discarded before landing on plain --profile=<dir> (see ADR-0004/0006 and platform-docs history for the rejected --application-mode/--private-instance paths). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
121 lines
2.5 KiB
Bash
Executable File
121 lines
2.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
SOURCE_ISO="${1:-}"
|
|
|
|
REPO_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
BASE_DIR="$(cd "$REPO_DIR/.." && pwd)"
|
|
BUILD_DIR="$BASE_DIR/build"
|
|
WORK_DIR="$BUILD_DIR/work"
|
|
OUTPUT_DIR="$BUILD_DIR/output"
|
|
|
|
usage() {
|
|
echo "Usage: $0 /path/to/source.iso"
|
|
}
|
|
|
|
check_input() {
|
|
if [[ -z "$SOURCE_ISO" ]]; then
|
|
usage
|
|
exit 1
|
|
fi
|
|
|
|
if [[ ! -f "$SOURCE_ISO" ]]; then
|
|
echo "Error: ISO not found: $SOURCE_ISO"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
check_dependencies() {
|
|
for cmd in xorriso; do
|
|
if ! command -v "$cmd" >/dev/null 2>&1; then
|
|
echo "Error: missing dependency: $cmd"
|
|
exit 1
|
|
fi
|
|
done
|
|
}
|
|
|
|
prepare_dirs() {
|
|
mkdir -p "$BUILD_DIR" "$OUTPUT_DIR"
|
|
rm -rf "$WORK_DIR"
|
|
mkdir -p "$WORK_DIR"
|
|
}
|
|
|
|
extract_iso() {
|
|
echo "Extracting ISO..."
|
|
xorriso -indev "$SOURCE_ISO" -osirrox on -extract / "$WORK_DIR" >/dev/null
|
|
}
|
|
|
|
patch_grub() {
|
|
echo "Installing Tuxflotte GRUB configuration..."
|
|
|
|
cp "$REPO_DIR/grub/EFI-BOOT-grub.cfg" \
|
|
"$WORK_DIR/EFI/BOOT/grub.cfg"
|
|
|
|
cp "$REPO_DIR/grub/boot-grub2-grub.cfg" \
|
|
"$WORK_DIR/boot/grub2/grub.cfg"
|
|
}
|
|
|
|
verify_workdir() {
|
|
echo "Verifying workdir..."
|
|
|
|
grep -q "Tuxflotte" "$WORK_DIR/EFI/BOOT/grub.cfg"
|
|
grep -q "Tuxflotte" "$WORK_DIR/boot/grub2/grub.cfg"
|
|
|
|
echo "GRUB verification passed."
|
|
}
|
|
|
|
prepare_updates() {
|
|
echo "Assembling live-updates payload..."
|
|
|
|
local updates_dir="$WORK_DIR/updates"
|
|
|
|
rm -rf "$updates_dir"
|
|
mkdir -p "$updates_dir/opt/tuxflotte"
|
|
|
|
cp -a "$REPO_DIR/live-updates/." "$updates_dir/"
|
|
cp -a "$REPO_DIR/scripts" "$updates_dir/opt/tuxflotte/"
|
|
cp -a "$REPO_DIR/backends" "$updates_dir/opt/tuxflotte/"
|
|
cp -a "$REPO_DIR/config" "$updates_dir/opt/tuxflotte/"
|
|
|
|
chmod 0440 "$updates_dir/etc/sudoers.d/90-tuxflotte"
|
|
}
|
|
|
|
create_iso() {
|
|
echo "Creating Tuxflotte ISO..."
|
|
|
|
local output_iso="$OUTPUT_DIR/tuxflotte-provisioning-0.2.iso"
|
|
|
|
rm -f "$output_iso"
|
|
|
|
xorriso \
|
|
-indev "$SOURCE_ISO" \
|
|
-outdev "$output_iso" \
|
|
-compliance no_emul_toc \
|
|
-volid TUXFLOTTE \
|
|
-map "$REPO_DIR/grub/EFI-BOOT-grub.cfg" /EFI/BOOT/grub.cfg \
|
|
-map "$REPO_DIR/grub/boot-grub2-grub.cfg" /boot/grub2/grub.cfg \
|
|
-map "$WORK_DIR/updates" /updates \
|
|
-chown_r 0 /updates -- \
|
|
-chgrp_r 0 /updates -- \
|
|
-boot_image any replay
|
|
|
|
echo "ISO created: $output_iso"
|
|
}
|
|
|
|
main() {
|
|
check_input
|
|
check_dependencies
|
|
prepare_dirs
|
|
extract_iso
|
|
patch_grub
|
|
verify_workdir
|
|
prepare_updates
|
|
create_iso
|
|
|
|
echo
|
|
echo "Build complete."
|
|
echo "Work dir: $WORK_DIR"
|
|
}
|
|
|
|
main "$@"
|