#!/bin/bash # Alfred Linux v2.0 — ISO Build Script # Build: b1 (Branding) set -uo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_DIR="$(dirname "$SCRIPT_DIR")" BUILD_DIR="$PROJECT_DIR/build" OUTPUT_DIR="$PROJECT_DIR/iso-output" DATE=$(date +%Y%m%d) VERSION="2.0-b1" ISO_NAME="alfred-linux-${VERSION}-amd64-${DATE}.iso" echo "" echo " ╔═══════════════════════════════════════════════╗" echo " ║ Alfred Linux — ISO Build System v2.0 ║" echo " ║ Building: ${ISO_NAME} ║" echo " ╚═══════════════════════════════════════════════╝" echo "" if [[ $EUID -ne 0 ]]; then echo "ERROR: Must run as root (sudo)." exit 1 fi for cmd in lb debootstrap mksquashfs xorriso; do if ! command -v "$cmd" &>/dev/null; then echo "ERROR: '$cmd' not found. Install: apt-get install live-build debootstrap squashfs-tools xorriso" exit 1 fi done echo "[BUILD] Setting up build directory..." mkdir -p "$BUILD_DIR" cd "$BUILD_DIR" if [[ -f .build/config ]]; then echo "[BUILD] Cleaning previous build..." lb clean --purge 2>/dev/null || true fi echo "[BUILD] Configuring live-build for Debian Bookworm..." lb config \ --mode debian \ --distribution bookworm \ --architectures amd64 \ --binary-images iso-hybrid \ --bootloader syslinux \ --apt-indices false \ --memtest none \ --firmware-chroot false \ --linux-packages "linux-image" \ --linux-flavours "amd64" \ --parent-mirror-bootstrap "http://deb.debian.org/debian" \ --parent-mirror-chroot "http://deb.debian.org/debian" \ --parent-mirror-chroot-security "http://deb.debian.org/debian-security" \ --parent-mirror-binary "http://deb.debian.org/debian" \ --parent-mirror-binary-security "http://deb.debian.org/debian-security" \ --mirror-bootstrap "http://deb.debian.org/debian" \ --mirror-chroot "http://deb.debian.org/debian" \ --mirror-chroot-security "http://deb.debian.org/debian-security" \ --mirror-binary "http://deb.debian.org/debian" \ --mirror-binary-security "http://deb.debian.org/debian-security" \ --iso-application "Alfred Linux" \ --iso-publisher "GoSiteMe — alfredlinux.com" \ --iso-volume "Alfred Linux 2.0" # Copy package lists echo "[BUILD] Installing package lists..." cp "$PROJECT_DIR/config/package-lists/"*.list.chroot config/package-lists/ 2>/dev/null || true # Copy chroot hooks echo "[BUILD] Installing build hooks..." mkdir -p config/hooks/live cp "$PROJECT_DIR/config/hooks/live/"*.hook.chroot config/hooks/live/ 2>/dev/null || true chmod +x config/hooks/live/*.hook.chroot 2>/dev/null || true # Security repo fix hook cat > config/hooks/live/0010-fix-security-repo.hook.chroot << 'HOOKEOF' #!/bin/bash echo "deb http://deb.debian.org/debian-security bookworm-security main" > /etc/apt/sources.list.d/security.list echo "deb http://deb.debian.org/debian bookworm-updates main" > /etc/apt/sources.list.d/updates.list apt-get update -qq HOOKEOF chmod +x config/hooks/live/0010-fix-security-repo.hook.chroot # Fix bootloader echo "[BUILD] Fixing bootloader config (isolinux)..." mkdir -p config/bootloaders/isolinux for f in install.cfg isolinux.cfg live.cfg.in menu.cfg splash.svg.in stdmenu.cfg; do if [[ -f /usr/share/live/build/bootloaders/isolinux/$f ]]; then cp /usr/share/live/build/bootloaders/isolinux/$f config/bootloaders/isolinux/ fi done cp /usr/lib/ISOLINUX/isolinux.bin config/bootloaders/isolinux/isolinux.bin cp /usr/lib/syslinux/modules/bios/vesamenu.c32 config/bootloaders/isolinux/vesamenu.c32 for extra in ldlinux.c32 libutil.c32 libcom32.c32; do [[ -f /usr/lib/syslinux/modules/bios/$extra ]] && cp /usr/lib/syslinux/modules/bios/$extra config/bootloaders/isolinux/ done echo "[BUILD] Bootloader fix applied: $(ls config/bootloaders/isolinux/ | wc -l) files" # Copy skeleton files echo "[BUILD] Installing skeleton files..." if [[ -d "$PROJECT_DIR/config/includes.chroot" ]]; then mkdir -p config/includes.chroot cp -r "$PROJECT_DIR/config/includes.chroot/"* config/includes.chroot/ 2>/dev/null || true fi # Build echo "[BUILD] Starting ISO build... (this takes 20-40 minutes)" echo "[BUILD] Build log: $BUILD_DIR/build.log" lb build 2>&1 | tee "$BUILD_DIR/build.log" BUILD_RC=${PIPESTATUS[0]} echo "[BUILD] lb build exited with code: $BUILD_RC" if [ $BUILD_RC -ne 0 ]; then echo "[BUILD] WARNING: lb build returned non-zero ($BUILD_RC) — checking if ISO was still created..." fi # Move output ISO_FILE=$(find . -maxdepth 1 -name "*.iso" -o -name "*.hybrid.iso" | head -1) if [[ -n "$ISO_FILE" ]]; then mkdir -p "$OUTPUT_DIR" mv "$ISO_FILE" "$OUTPUT_DIR/$ISO_NAME" cd "$OUTPUT_DIR" sha256sum "$ISO_NAME" > "${ISO_NAME}.sha256" SIZE=$(du -h "$ISO_NAME" | cut -f1) echo "" echo " ╔═══════════════════════════════════════════════╗" echo " ║ BUILD COMPLETE ║" echo " ║ ISO: $ISO_NAME" echo " ║ Size: $SIZE" echo " ║ SHA256: $(cat "${ISO_NAME}.sha256" | cut -d' ' -f1 | head -c 16)..." echo " ╚═══════════════════════════════════════════════╝" echo "" else echo "" echo " ERROR: ISO build failed. Check build.log for details." tail -30 "$BUILD_DIR/build.log" echo "" exit 1 fi