142 lines
5.6 KiB
Bash
142 lines
5.6 KiB
Bash
#!/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
|