177 lines
4.7 KiB
Bash
Executable File
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!"
|