Files
vtl-appliance/build/build-iso.sh

177 lines
4.7 KiB
Bash
Executable File

#!/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!"