#!/bin/bash set -e SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(dirname "$SCRIPT_DIR")" ISO_DIR="$PROJECT_ROOT/iso" BUILD_DIR="$PROJECT_ROOT/build" WORK_DIR="/tmp/vtl-build" DISTRO_NAME="VTL-Linux" DISTRO_VERSION="1.0" ISO_NAME="${DISTRO_NAME}-${DISTRO_VERSION}-x86_64.iso" echo "==========================================" echo " VTL Linux Distro Builder" echo " Version: $DISTRO_VERSION" echo "==========================================" echo "" if [ "$EUID" -ne 0 ]; then echo "Error: This script must be run as root" exit 1 fi echo "[1/8] Checking dependencies..." REQUIRED_PACKAGES="debootstrap squashfs-tools xorriso isolinux syslinux-common" for pkg in $REQUIRED_PACKAGES; do if ! dpkg -l | grep -q "^ii $pkg"; then echo "Installing $pkg..." apt-get update -qq apt-get install -y $pkg fi done echo "[2/8] Cleaning previous build..." rm -rf "$WORK_DIR" mkdir -p "$WORK_DIR"/{chroot,iso/{live,isolinux}} echo "[3/8] Creating base system with debootstrap..." debootstrap --arch=amd64 --variant=minbase bookworm "$WORK_DIR/chroot" http://deb.debian.org/debian/ echo "[4/8] Configuring chroot environment..." mount --bind /dev "$WORK_DIR/chroot/dev" mount --bind /dev/pts "$WORK_DIR/chroot/dev/pts" mount --bind /proc "$WORK_DIR/chroot/proc" mount --bind /sys "$WORK_DIR/chroot/sys" cat > "$WORK_DIR/chroot/etc/apt/sources.list" << EOF deb http://deb.debian.org/debian bookworm main contrib non-free non-free-firmware deb http://deb.debian.org/debian bookworm-updates main contrib non-free non-free-firmware deb http://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware EOF echo "[5/8] Installing VTL packages in chroot..." chroot "$WORK_DIR/chroot" /bin/bash << 'CHROOT_EOF' export DEBIAN_FRONTEND=noninteractive apt-get update apt-get install -y \ linux-image-amd64 \ live-boot \ systemd-sysv \ network-manager \ openssh-server \ sudo \ vim \ curl \ wget \ net-tools \ iproute2 \ iptables \ sg3-utils \ lsscsi \ tgt \ open-iscsi \ build-essential \ git \ zlib1g-dev \ libibverbs-dev \ libconfig-dev \ libssl-dev \ uuid-dev \ mtx \ mt-st \ lsscsi apt-get clean rm -rf /var/lib/apt/lists/* echo "vtl-linux" > /etc/hostname cat > /etc/hosts << EOF 127.0.0.1 localhost 127.0.1.1 vtl-linux EOF useradd -m -s /bin/bash -G sudo vtladmin echo "vtladmin:vtladmin" | chpasswd echo "root:vtlroot" | chpasswd systemctl enable NetworkManager systemctl enable ssh systemctl enable tgt mkdir -p /opt/mhvtl mkdir -p /etc/mhvtl CHROOT_EOF echo "[6/8] Copying configuration files..." cp -r "$PROJECT_ROOT/config/"* "$WORK_DIR/chroot/tmp/" 2>/dev/null || true cp -r "$PROJECT_ROOT/scripts/"* "$WORK_DIR/chroot/usr/local/bin/" 2>/dev/null || true cp -r "$PROJECT_ROOT/systemd/"* "$WORK_DIR/chroot/etc/systemd/system/" 2>/dev/null || true echo "[7/8] Creating squashfs filesystem..." mksquashfs "$WORK_DIR/chroot" "$WORK_DIR/iso/live/filesystem.squashfs" -e boot -comp xz cp "$WORK_DIR/chroot/boot"/vmlinuz-* "$WORK_DIR/iso/live/vmlinuz" cp "$WORK_DIR/chroot/boot"/initrd.img-* "$WORK_DIR/iso/live/initrd" cat > "$WORK_DIR/iso/isolinux/isolinux.cfg" << 'EOF' UI menu.c32 PROMPT 0 TIMEOUT 100 DEFAULT vtl-linux MENU TITLE VTL Linux Boot Menu LABEL vtl-linux MENU LABEL ^Start VTL Linux KERNEL /live/vmlinuz APPEND initrd=/live/initrd boot=live quiet splash LABEL vtl-linux-safe MENU LABEL Start VTL Linux (^Safe Mode) KERNEL /live/vmlinuz APPEND initrd=/live/initrd boot=live quiet splash nomodeset LABEL vtl-linux-install MENU LABEL ^Install VTL Linux to Disk KERNEL /live/vmlinuz APPEND initrd=/live/initrd boot=live quiet splash toram EOF cp /usr/lib/ISOLINUX/isolinux.bin "$WORK_DIR/iso/isolinux/" cp /usr/lib/syslinux/modules/bios/*.c32 "$WORK_DIR/iso/isolinux/" echo "[8/8] Creating ISO image..." xorriso -as mkisofs \ -iso-level 3 \ -full-iso9660-filenames \ -volid "${DISTRO_NAME}" \ -eltorito-boot isolinux/isolinux.bin \ -eltorito-catalog isolinux/boot.cat \ -no-emul-boot \ -boot-load-size 4 \ -boot-info-table \ -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin \ -output "$ISO_DIR/$ISO_NAME" \ "$WORK_DIR/iso" echo "" echo "==========================================" echo " Build Complete!" echo "==========================================" echo "ISO Location: $ISO_DIR/$ISO_NAME" echo "ISO Size: $(du -h "$ISO_DIR/$ISO_NAME" | cut -f1)" echo "" echo "Cleaning up..." umount "$WORK_DIR/chroot/dev/pts" 2>/dev/null || true umount "$WORK_DIR/chroot/dev" 2>/dev/null || true umount "$WORK_DIR/chroot/proc" 2>/dev/null || true umount "$WORK_DIR/chroot/sys" 2>/dev/null || true rm -rf "$WORK_DIR" echo "Done!"