174 lines
5.2 KiB
Bash
174 lines
5.2 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
#
|
||
|
|
# Quick-iterate on boot branding without rebuilding the ISO.
|
||
|
|
#
|
||
|
|
# Usage:
|
||
|
|
# ./dev-branding.sh <base-iso>
|
||
|
|
#
|
||
|
|
# What it does:
|
||
|
|
# 1. Regenerates GRUB background and Plymouth logo from Python scripts
|
||
|
|
# 2. Extracts the existing ISO
|
||
|
|
# 3. Swaps in updated branding files (theme, background, Plymouth)
|
||
|
|
# 4. Repackages as a new ISO
|
||
|
|
# 5. Boots it in QEMU for testing
|
||
|
|
#
|
||
|
|
# This takes ~10 seconds instead of 20 minutes.
|
||
|
|
#
|
||
|
|
# For design-only iteration (no QEMU boot):
|
||
|
|
# python3 branding/generate-grub-background.py /tmp/grub-bg.png && open /tmp/grub-bg.png
|
||
|
|
#
|
||
|
|
|
||
|
|
set -e
|
||
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||
|
|
ISO="${1:-}"
|
||
|
|
|
||
|
|
if [ -z "$ISO" ] || [ ! -f "$ISO" ]; then
|
||
|
|
# Auto-detect latest dev ISO on Desktop
|
||
|
|
ISO=$(ls -t ~/Desktop/archipelago-dev-*.iso 2>/dev/null | head -1)
|
||
|
|
fi
|
||
|
|
if [ -z "$ISO" ] || [ ! -f "$ISO" ]; then
|
||
|
|
ISO=$(ls -t "$SCRIPT_DIR/results/archipelago-*.iso" 2>/dev/null | head -1)
|
||
|
|
fi
|
||
|
|
if [ -z "$ISO" ] || [ ! -f "$ISO" ]; then
|
||
|
|
echo "No ISO found. Provide a path or place one on Desktop/results."
|
||
|
|
echo "Usage: $0 <base-iso>"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
WORK="/tmp/archipelago-dev-branding"
|
||
|
|
PATCHED="$SCRIPT_DIR/results/archipelago-dev-patched.iso"
|
||
|
|
|
||
|
|
echo "=== Archipelago Branding Dev ==="
|
||
|
|
echo " Base ISO: $ISO"
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Step 1: Regenerate assets
|
||
|
|
echo "[1/4] Generating assets..."
|
||
|
|
python3 "$SCRIPT_DIR/branding/generate-grub-background.py" /tmp/grub-bg.png 2>/dev/null && \
|
||
|
|
echo " GRUB background: OK" || echo " GRUB background: FAILED"
|
||
|
|
python3 "$SCRIPT_DIR/branding/generate-plymouth-logo.py" /tmp/plymouth-logo.png 2>/dev/null && \
|
||
|
|
echo " Plymouth logo: OK" || echo " Plymouth logo: FAILED"
|
||
|
|
|
||
|
|
# Also show the background for quick visual check
|
||
|
|
if command -v open >/dev/null 2>&1; then
|
||
|
|
open /tmp/grub-bg.png 2>/dev/null &
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Step 2: Extract ISO
|
||
|
|
echo "[2/4] Extracting ISO..."
|
||
|
|
rm -rf "$WORK"
|
||
|
|
mkdir -p "$WORK"
|
||
|
|
xorriso -osirrox on -indev "$ISO" -extract / "$WORK" 2>/dev/null || {
|
||
|
|
# Fallback: mount + copy
|
||
|
|
MNT=$(mktemp -d)
|
||
|
|
if [ "$(uname)" = "Darwin" ]; then
|
||
|
|
hdiutil attach "$ISO" -mountpoint "$MNT" -readonly -nobrowse 2>/dev/null
|
||
|
|
else
|
||
|
|
sudo mount -o loop,ro "$ISO" "$MNT"
|
||
|
|
fi
|
||
|
|
cp -a "$MNT"/* "$WORK/" 2>/dev/null || true
|
||
|
|
if [ "$(uname)" = "Darwin" ]; then
|
||
|
|
hdiutil detach "$MNT" 2>/dev/null
|
||
|
|
else
|
||
|
|
sudo umount "$MNT"
|
||
|
|
fi
|
||
|
|
rmdir "$MNT" 2>/dev/null || true
|
||
|
|
}
|
||
|
|
|
||
|
|
# Step 3: Patch branding
|
||
|
|
echo "[3/4] Patching branding..."
|
||
|
|
THEME_DST="$WORK/boot/grub/themes/archipelago"
|
||
|
|
mkdir -p "$THEME_DST"
|
||
|
|
|
||
|
|
# GRUB theme
|
||
|
|
cp "$SCRIPT_DIR/branding/grub-theme/theme.txt" "$THEME_DST/" 2>/dev/null && \
|
||
|
|
echo " theme.txt: OK"
|
||
|
|
cp /tmp/grub-bg.png "$THEME_DST/background.png" 2>/dev/null && \
|
||
|
|
echo " background.png: OK"
|
||
|
|
|
||
|
|
# Plymouth theme
|
||
|
|
if [ -d "$WORK/archipelago/plymouth-theme" ]; then
|
||
|
|
cp "$SCRIPT_DIR/branding/plymouth-theme/"* "$WORK/archipelago/plymouth-theme/" 2>/dev/null
|
||
|
|
cp /tmp/plymouth-logo.png "$WORK/archipelago/plymouth-theme/logo.png" 2>/dev/null
|
||
|
|
echo " Plymouth theme: OK"
|
||
|
|
fi
|
||
|
|
|
||
|
|
# GRUB config (in case you edited it)
|
||
|
|
if [ -f "$SCRIPT_DIR/branding/grub.cfg" ]; then
|
||
|
|
cp "$SCRIPT_DIR/branding/grub.cfg" "$WORK/boot/grub/grub.cfg"
|
||
|
|
echo " grub.cfg: OK (custom)"
|
||
|
|
fi
|
||
|
|
|
||
|
|
# ISOLINUX config
|
||
|
|
if [ -f "$SCRIPT_DIR/branding/isolinux.cfg" ]; then
|
||
|
|
cp "$SCRIPT_DIR/branding/isolinux.cfg" "$WORK/isolinux/isolinux.cfg"
|
||
|
|
echo " isolinux.cfg: OK (custom)"
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Step 4: Repackage ISO
|
||
|
|
echo "[4/4] Repackaging ISO..."
|
||
|
|
mkdir -p "$SCRIPT_DIR/results"
|
||
|
|
|
||
|
|
# Find isohdpfx.bin
|
||
|
|
ISOHDPFX=""
|
||
|
|
for p in "$WORK/isolinux/isohdpfx.bin" \
|
||
|
|
/usr/lib/ISOLINUX/isohdpfx.bin \
|
||
|
|
/usr/share/syslinux/isohdpfx.bin \
|
||
|
|
/opt/homebrew/share/syslinux/isohdpfx.bin; do
|
||
|
|
[ -f "$p" ] && ISOHDPFX="$p" && break
|
||
|
|
done
|
||
|
|
|
||
|
|
# Check for EFI image
|
||
|
|
EFI_IMG="$WORK/boot/grub/efi.img"
|
||
|
|
|
||
|
|
if [ -n "$ISOHDPFX" ] && [ -f "$EFI_IMG" ]; then
|
||
|
|
xorriso -as mkisofs -o "$PATCHED" \
|
||
|
|
-volid "ARCHIPELAGO" \
|
||
|
|
-iso-level 3 \
|
||
|
|
-J -joliet-long -R \
|
||
|
|
-isohybrid-mbr "$ISOHDPFX" \
|
||
|
|
-c isolinux/boot.cat \
|
||
|
|
-b isolinux/isolinux.bin \
|
||
|
|
-no-emul-boot -boot-load-size 4 -boot-info-table \
|
||
|
|
-eltorito-alt-boot \
|
||
|
|
-e boot/grub/efi.img \
|
||
|
|
-no-emul-boot \
|
||
|
|
-isohybrid-gpt-basdat \
|
||
|
|
-partition_offset 16 \
|
||
|
|
"$WORK" 2>/dev/null
|
||
|
|
elif [ -n "$ISOHDPFX" ]; then
|
||
|
|
xorriso -as mkisofs -o "$PATCHED" \
|
||
|
|
-volid "ARCHIPELAGO" \
|
||
|
|
-iso-level 3 \
|
||
|
|
-J -joliet-long -R \
|
||
|
|
-isohybrid-mbr "$ISOHDPFX" \
|
||
|
|
-c isolinux/boot.cat \
|
||
|
|
-b isolinux/isolinux.bin \
|
||
|
|
-no-emul-boot -boot-load-size 4 -boot-info-table \
|
||
|
|
-partition_offset 16 \
|
||
|
|
"$WORK" 2>/dev/null
|
||
|
|
else
|
||
|
|
echo "Cannot repackage: no isohdpfx.bin found."
|
||
|
|
echo "Install xorriso and isolinux: brew install xorriso"
|
||
|
|
echo ""
|
||
|
|
echo "You can still preview the assets:"
|
||
|
|
echo " open /tmp/grub-bg.png"
|
||
|
|
echo " open /tmp/plymouth-logo.png"
|
||
|
|
exit 0
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo " Patched ISO: $PATCHED ($(du -h "$PATCHED" | cut -f1))"
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Auto-boot in QEMU if available
|
||
|
|
if command -v qemu-system-x86_64 >/dev/null 2>&1; then
|
||
|
|
read -p "Boot in QEMU? [Y/n] " -n 1 -r
|
||
|
|
echo ""
|
||
|
|
if [[ ! $REPLY =~ ^[Nn]$ ]]; then
|
||
|
|
exec "$SCRIPT_DIR/test-iso-qemu.sh" "$PATCHED" --bios
|
||
|
|
fi
|
||
|
|
else
|
||
|
|
echo "Install QEMU to test: brew install qemu"
|
||
|
|
fi
|