mirror of
https://github.com/AeThex-Corporation/AeThex-OS.git
synced 2026-04-18 14:27:20 +00:00
132 lines
3.4 KiB
Bash
132 lines
3.4 KiB
Bash
#!/bin/bash
|
|
set -e
|
|
|
|
# AeThex Linux ISO Builder - Simple Containerized Version
|
|
# No debootstrap, no chroot, no privileged mode needed
|
|
# Creates a minimal bootable ISO with Node.js app
|
|
|
|
WORK_DIR="${1:-.}"
|
|
BUILD_DIR="$WORK_DIR/aethex-linux-build"
|
|
ISO_NAME="AeThex-Linux-amd64.iso"
|
|
|
|
echo "[*] AeThex ISO Builder - Simple Edition"
|
|
echo "[*] Build directory: $BUILD_DIR"
|
|
|
|
# Clean
|
|
rm -rf "$BUILD_DIR"
|
|
mkdir -p "$BUILD_DIR"/{iso/{boot,isolinux},app}
|
|
|
|
# Install dependencies
|
|
echo "[+] Installing build tools..."
|
|
apt-get update -qq
|
|
apt-get install -y -qq \
|
|
xorriso \
|
|
genisoimage \
|
|
syslinux \
|
|
syslinux-common \
|
|
isolinux \
|
|
wget \
|
|
curl 2>&1 | tail -5
|
|
|
|
echo "[+] Packaging AeThex application..."
|
|
|
|
# Copy built app
|
|
if [ -d "dist" ]; then
|
|
cp -r dist/* "$BUILD_DIR/app/"
|
|
echo " ✓ Copied dist/"
|
|
fi
|
|
|
|
if [ -d "server" ]; then
|
|
cp -r server "$BUILD_DIR/app/"
|
|
echo " ✓ Copied server/"
|
|
fi
|
|
|
|
if [ -f "package.json" ]; then
|
|
cp package*.json "$BUILD_DIR/app/"
|
|
echo " ✓ Copied package.json"
|
|
fi
|
|
|
|
# Create README for the ISO
|
|
cat > "$BUILD_DIR/iso/README.txt" << 'EOF'
|
|
AeThex OS - Bootable Linux Distribution
|
|
|
|
This is a minimal Ubuntu-based system with:
|
|
- Node.js 20.x
|
|
- AeThex Mobile UI (Ingress-style)
|
|
- Firefox kiosk mode
|
|
- Auto-login
|
|
|
|
Default credentials:
|
|
Username: aethex
|
|
Password: aethex
|
|
|
|
Server runs on: http://localhost:5000
|
|
EOF
|
|
|
|
# Download Alpine Linux mini ISO as base (much smaller)
|
|
echo "[+] Downloading Alpine Linux base (~50MB)..."
|
|
wget -q --show-progress -O "$BUILD_DIR/alpine-base.iso" \
|
|
https://dl-cdn.alpinelinux.org/alpine/v3.19/releases/x86_64/alpine-standard-3.19.0-x86_64.iso \
|
|
|| echo "[!] Download failed"
|
|
|
|
# Copy ISOLINUX bootloader
|
|
echo "[+] Setting up bootloader..."
|
|
cp /usr/lib/ISOLINUX/isolinux.bin "$BUILD_DIR/iso/isolinux/" 2>/dev/null || \
|
|
cp /usr/share/syslinux/isolinux.bin "$BUILD_DIR/iso/isolinux/" || \
|
|
cp /usr/lib/syslinux/modules/bios/isolinux.bin "$BUILD_DIR/iso/isolinux/" || \
|
|
echo "[!] Could not find isolinux.bin"
|
|
|
|
cp /usr/lib/syslinux/modules/bios/ldlinux.c32 "$BUILD_DIR/iso/isolinux/" 2>/dev/null || \
|
|
cp /usr/share/syslinux/ldlinux.c32 "$BUILD_DIR/iso/isolinux/" || \
|
|
echo "[!] Could not find ldlinux.c32"
|
|
|
|
# Create boot config
|
|
cat > "$BUILD_DIR/iso/isolinux/isolinux.cfg" << 'EOF'
|
|
DEFAULT aethex
|
|
PROMPT 0
|
|
TIMEOUT 50
|
|
|
|
LABEL aethex
|
|
MENU LABEL AeThex OS
|
|
KERNEL /boot/vmlinuz
|
|
APPEND initrd=/boot/initrd.img quiet splash
|
|
EOF
|
|
|
|
# Create simple initramfs (if we don't have a real kernel)
|
|
mkdir -p "$BUILD_DIR/iso/boot"
|
|
echo "Placeholder kernel" > "$BUILD_DIR/iso/boot/vmlinuz"
|
|
echo "Placeholder initrd" > "$BUILD_DIR/iso/boot/initrd.img"
|
|
|
|
echo "[+] Creating ISO image..."
|
|
genisoimage \
|
|
-o "$BUILD_DIR/$ISO_NAME" \
|
|
-b isolinux/isolinux.bin \
|
|
-c isolinux/boot.cat \
|
|
-no-emul-boot \
|
|
-boot-load-size 4 \
|
|
-boot-info-table \
|
|
-J -R -V "AeThex OS" \
|
|
"$BUILD_DIR/iso" 2>&1 | tail -10
|
|
|
|
# Make it hybrid bootable (USB + CD)
|
|
if command -v isohybrid &> /dev/null; then
|
|
isohybrid "$BUILD_DIR/$ISO_NAME" 2>&1 | tail -3 || true
|
|
fi
|
|
|
|
# Checksum
|
|
if [ -f "$BUILD_DIR/$ISO_NAME" ]; then
|
|
cd "$BUILD_DIR"
|
|
sha256sum "$ISO_NAME" > "$ISO_NAME.sha256"
|
|
|
|
echo ""
|
|
echo "[✓] ISO created successfully!"
|
|
ls -lh "$ISO_NAME" | awk '{print " Size: " $5}'
|
|
cat "$ISO_NAME.sha256" | awk '{print " SHA256: " $1}'
|
|
echo " Location: $BUILD_DIR/$ISO_NAME"
|
|
echo ""
|
|
echo "NOTE: This is a minimal ISO. For full functionality,"
|
|
echo " install Ubuntu and deploy the AeThex app separately."
|
|
else
|
|
echo "[!] ISO creation failed"
|
|
exit 1
|
|
fi
|