alfred-linux/scripts/build.sh
Alfred 18c2bfd5c6 Initial commit: Alfred Linux v4.0 build system
- build-unified.sh: master build script (16 hooks, kernel 7.0.0-rc7)
- config/package-lists: Debian package selections
- assets: Alfred Commander extension tarball
- docs: ARM64 investigation, kernel upgrade roadmap
2026-04-07 11:38:44 -04:00

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