277 lines
9.1 KiB
Bash
Executable File
277 lines
9.1 KiB
Bash
Executable File
#!/bin/bash
|
|
# Football ISO Build Script
|
|
# Creates Debian 13 ISO with embedded preseed configuration
|
|
# ALL work done in Docker container - no host operations
|
|
|
|
set -euo pipefail
|
|
|
|
BUILD_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
OUTPUT_DIR="$BUILD_DIR/output"
|
|
|
|
echo "================================================"
|
|
echo "Football ISO Build (Docker-only)"
|
|
echo "================================================"
|
|
echo ""
|
|
|
|
# Create output directory only (everything else in Docker)
|
|
mkdir -p "$OUTPUT_DIR"
|
|
|
|
# ============================================================================
|
|
# Run entire build process in single Docker container
|
|
# ============================================================================
|
|
|
|
docker run --rm \
|
|
--name football-iso-build \
|
|
-v "$BUILD_DIR:/build" \
|
|
debian:trixie \
|
|
bash -c '
|
|
set -e
|
|
|
|
echo "================================================"
|
|
echo "Football ISO Build"
|
|
echo "================================================"
|
|
echo ""
|
|
|
|
# ============================================================================
|
|
# Step 1: Download Debian ISO
|
|
# ============================================================================
|
|
|
|
echo "[1/5] Downloading Debian 13 Netboot ISO..."
|
|
|
|
# Create temporary directory inside container
|
|
ISO_DIR="/build/iso-tmp"
|
|
mkdir -p "$ISO_DIR"
|
|
cd "$ISO_DIR"
|
|
|
|
# Install required tools
|
|
echo "Installing required tools..."
|
|
apt-get update -qq
|
|
apt-get install -y -qq wget xorriso rsync isolinux
|
|
|
|
echo ""
|
|
echo "Downloading Debian 13.3.0 (trixie) Stable Netboot ISO..."
|
|
|
|
# Download Debian 13.3.0 (trixie) stable ISO
|
|
wget -q --show-progress \
|
|
-O debian-13.3.0-amd64-netinst.iso \
|
|
https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-13.3.0-amd64-netinst.iso
|
|
|
|
echo ""
|
|
echo "✅ ISO downloaded"
|
|
ls -lh "$ISO_DIR"/*.iso
|
|
echo ""
|
|
echo "✅ Step 1 complete"
|
|
echo ""
|
|
|
|
# ============================================================================
|
|
# Step 2: Extract ISO
|
|
# ============================================================================
|
|
|
|
echo "[2/5] Extracting ISO..."
|
|
|
|
echo "Extracting ISO contents..."
|
|
mkdir -p extracted
|
|
cd extracted
|
|
|
|
xorriso -osirrox on \
|
|
-indev "$ISO_DIR/debian-13.3.0-amd64-netinst.iso" \
|
|
-extract / ./
|
|
|
|
echo ""
|
|
echo "✅ ISO extracted"
|
|
echo "Files in extracted:"
|
|
ls -la | head -20
|
|
echo ""
|
|
echo "✅ Step 2 complete"
|
|
echo ""
|
|
|
|
# ============================================================================
|
|
# Step 3: Inject Preseed Configuration and Scripts
|
|
# ============================================================================
|
|
|
|
echo "[3/5] Injecting preseed configuration and scripts..."
|
|
|
|
echo "Copying preseed file..."
|
|
cp /build/config/preseed.cfg /build/iso-tmp/extracted/preseed.cfg
|
|
|
|
echo ""
|
|
echo "Copying verification and configuration scripts..."
|
|
|
|
# Create scripts and config directories on ISO
|
|
mkdir -p scripts config
|
|
|
|
# Copy scripts to ISO
|
|
cp /build/scripts/verify-system.sh scripts/
|
|
cp /build/config/disable-wifi-bt.sh config/
|
|
cp /build/config/security-config.sh config/
|
|
cp /build/config/football-first-boot.service config/
|
|
|
|
# Make scripts executable
|
|
chmod +x scripts/verify-system.sh
|
|
chmod +x config/disable-wifi-bt.sh
|
|
chmod +x config/security-config.sh
|
|
|
|
echo ""
|
|
echo "Modifying boot menu to use preseed..."
|
|
|
|
# Create preseed-enabled boot entry
|
|
if [ -f isolinux/isolinux.cfg ]; then
|
|
echo "Updating isolinux.cfg..."
|
|
# Back up original
|
|
cp isolinux/isolinux.cfg isolinux/isolinux.cfg.bak
|
|
|
|
# Add auto-install with preseed entry at top
|
|
cat > isolinux/isolinux-auto.cfg <<EOF
|
|
default football
|
|
timeout 5
|
|
|
|
label football
|
|
menu label ^Install Football Secure Access System
|
|
kernel /install.amd/vmlinuz
|
|
append vga=788 initrd=/install.amd/initrd.gz auto=true priority=critical file=/cdrom/preseed.cfg -- quiet
|
|
|
|
label manual
|
|
menu label ^Manual Install
|
|
kernel /install.amd/vmlinuz
|
|
append vga=788 initrd=/install.amd/initrd.gz -- quiet
|
|
|
|
label expert
|
|
menu label ^Expert Mode
|
|
kernel /install.amd/vmlinuz
|
|
append vga=788 initrd=/install.amd/initrd.gz priority=low -- quiet
|
|
|
|
label rescue
|
|
menu label ^Rescue Mode
|
|
kernel /install.amd/vmlinuz
|
|
append vga=788 initrd=/install.amd/initrd.gz rescue/enable=true -- quiet
|
|
EOF
|
|
|
|
# Copy to main cfg
|
|
cp isolinux/isolinux-auto.cfg isolinux/isolinux.cfg
|
|
|
|
echo "✅ Boot configuration updated"
|
|
fi
|
|
|
|
# Update GRUB for UEFI boot
|
|
if [ -f boot/grub/grub.cfg ]; then
|
|
echo "Updating grub.cfg for preseed..."
|
|
cp boot/grub/grub.cfg boot/grub/grub.cfg.bak
|
|
|
|
cat > boot/grub/grub-preseed.cfg <<EOF
|
|
set timeout=5
|
|
set default=0
|
|
|
|
menuentry "Install Football Secure Access System" {
|
|
linux /install.amd/vmlinuz auto=true priority=critical file=/cdrom/preseed.cfg
|
|
initrd /install.amd/initrd.gz
|
|
}
|
|
|
|
menuentry "Manual Install" {
|
|
linux /install.amd/vmlinuz
|
|
initrd /install.amd/initrd.gz
|
|
}
|
|
EOF
|
|
|
|
cp boot/grub/grub-preseed.cfg boot/grub/grub.cfg
|
|
|
|
echo "✅ GRUB configuration updated"
|
|
fi
|
|
|
|
echo ""
|
|
echo "✅ Preseed and scripts injected"
|
|
echo "Contents of scripts/:"
|
|
ls -la scripts/
|
|
echo ""
|
|
echo "Contents of config/:"
|
|
ls -la config/
|
|
echo ""
|
|
echo "✅ Step 3 complete"
|
|
echo ""
|
|
|
|
# ============================================================================
|
|
# Step 4: Create New ISO
|
|
# ============================================================================
|
|
|
|
echo "[4/5] Creating new ISO with preseed..."
|
|
|
|
# Ensure output directory exists
|
|
mkdir -p /build/output
|
|
|
|
# Create new ISO with preseed and scripts
|
|
xorriso -as mkisofs \
|
|
-r -V "Football Secure System" \
|
|
-o /build/output/football-installer.iso \
|
|
-J -l \
|
|
-b isolinux/isolinux.bin \
|
|
-c isolinux/boot.cat \
|
|
-no-emul-boot \
|
|
-boot-load-size 4 \
|
|
-boot-info-table \
|
|
-isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin \
|
|
-eltorito-alt-boot \
|
|
-e boot/grub/efi.img \
|
|
-no-emul-boot \
|
|
-isohybrid-gpt-basdat \
|
|
.
|
|
|
|
echo ""
|
|
echo "✅ ISO created"
|
|
ls -lh /build/output/football-installer.iso
|
|
echo ""
|
|
echo "✅ Step 4 complete"
|
|
echo ""
|
|
|
|
# ============================================================================
|
|
# Step 5: Verify ISO
|
|
# ============================================================================
|
|
|
|
echo "[5/5] Verifying ISO..."
|
|
|
|
echo "ISO information:"
|
|
file /build/output/football-installer.iso
|
|
echo ""
|
|
echo "ISO size:"
|
|
ls -lh /build/output/football-installer.iso
|
|
echo ""
|
|
echo "✅ Step 5 complete"
|
|
echo ""
|
|
|
|
# ============================================================================
|
|
# Cleanup
|
|
# ============================================================================
|
|
|
|
echo "Cleaning up temporary directories..."
|
|
cd /build
|
|
rm -rf "$ISO_DIR"
|
|
|
|
echo ""
|
|
echo "================================================"
|
|
echo "ISO BUILD COMPLETE"
|
|
echo "================================================"
|
|
echo ""
|
|
echo "Output file:"
|
|
echo " 📁 /build/output/football-installer.iso"
|
|
echo ""
|
|
echo "Usage:"
|
|
echo " 1. Write ISO to USB: sudo dd if=/build/output/football-installer.iso of=/dev/sdX bs=4M status=progress"
|
|
echo " 2. Boot from USB"
|
|
echo " 3. Installer will automatically use preseed configuration"
|
|
echo " 4. User only needs to provide:"
|
|
echo " - Username"
|
|
echo " - User password (min 12 chars, mixed case, numbers, special chars)"
|
|
echo " - Root password (min 12 chars, mixed case, numbers, special chars)"
|
|
echo " - Target disk for installation"
|
|
echo ""
|
|
echo "✅ BUILD COMPLETE!"
|
|
echo ""
|
|
'
|
|
|
|
echo ""
|
|
echo "================================================"
|
|
echo "Build finished on host"
|
|
echo "================================================"
|
|
echo ""
|
|
echo "ISO Location: $OUTPUT_DIR/football-installer.iso"
|
|
ls -lh "$OUTPUT_DIR/football-installer.iso"
|
|
echo ""
|