Files

110 lines
3.7 KiB
Bash
Raw Permalink Normal View History

#!/bin/bash
# ==========================================
# AdaptiveOS Builder v6 (16GB RAM Disk Edition)
# ==========================================
# 1. Setup 16GB RAM Disk (tmpfs) on the HOST for the build process
RAMDISK="/tmp/adaptive-build"
echo "[0/8] Creating 16GB RAM disk at $RAMDISK..."
sudo mkdir -p "$RAMDISK"
sudo umount "$RAMDISK" 2>/dev/null
# Mount 16GB of RAM as a filesystem
sudo mount -t tmpfs -o size=16G tmpfs "$RAMDISK"
cd "$RAMDISK"
set -e
ALPINE_VERSION="3.19.1"
ISO_NAME="alpine-virt-${ALPINE_VERSION}-x86_64.iso"
ISO_URL="https://dl-cdn.alpinelinux.org/alpine/v3.19/releases/x86_64/${ISO_NAME}"
echo "[1/8] Downloading Alpine..."
wget -nc "$ISO_URL"
echo "[2/8] Extracting ISO..."
mkdir -p alpine-custom alpine-initrd
sudo mount -o loop "${ISO_NAME}" /mnt
cp -a /mnt/. alpine-custom/
sudo umount /mnt
echo "[3/8] Unpacking initramfs..."
cd alpine-initrd
zcat ../alpine-custom/boot/initramfs-virt | sudo cpio -idm > /dev/null 2>&1
echo "[4/8] Injecting Learning Loop & 16GB RAM Workspace..."
sudo mkdir -p etc/profile.d
sudo tee etc/profile.d/adaptive-loop.sh > /dev/null << 'EOF'
#!/bin/sh
# 1. Create a 16GB RAM workspace inside the booted OS
mkdir -p /mnt/ramdisk
mount -t tmpfs -o size=16G tmpfs /mnt/ramdisk 2>/dev/null
f() {
# 2. Store learned fixes in the RAM disk for maximum speed
touch /mnt/ramdisk/.f
FIX=$(awk -v k="$*" 'substr($0, 1, length(k)+1) == k"=" {print substr($0, length(k)+2); exit}' /mnt/ramdisk/.f)
until { eval "$FIX" 2>/dev/null; "$@"; }; do
printf "\n[ADAPTIVE LOOP] Command failed. Enter fix: "
read n
if [ -n "$n" ]; then
echo "$*=$n" >> /mnt/ramdisk/.f
FIX="$n"
eval "$FIX"
else
return 1
fi
done
}
echo "========================================="
echo " Welcome to the Adaptive Governance OS "
echo " 16GB RAM Disk Mounted: /mnt/ramdisk "
echo " Persistent Learning Loop Initialized. "
echo " Usage: f <command> "
echo "========================================="
EOF
sudo chmod +x etc/profile.d/adaptive-loop.sh
echo "[5/8] Repacking initramfs..."
sudo find . | sudo cpio -o -H newc > ../alpine-custom/boot/initramfs-virt.tmp 2>/dev/null
gzip -9 < ../alpine-custom/boot/initramfs-virt.tmp > ../alpine-custom/boot/initramfs-virt
rm ../alpine-custom/boot/initramfs-virt.tmp
cd ..
echo "[6/8] Ensuring Bootloader Paths Exist..."
# Dynamically find the bootloader so xorriso doesn't fail on hardcoded paths
ISOLINUX_BIN=$(find alpine-custom/boot -name "isolinux.bin" | head -n 1)
ISOLINUX_BIN_REL=${ISOLINUX_BIN#alpine-custom/}
BOOT_DIR_REL=$(dirname "$ISOLINUX_BIN_REL")
mkdir -p alpine-custom/boot/syslinux
if [ "$BOOT_DIR_REL" != "boot/syslinux" ]; then
# Create a symlink so xorriso's hardcoded -c boot/syslinux/boot.cat works
ln -sfn $(basename "$BOOT_DIR_REL") alpine-custom/boot/syslinux
fi
echo "[7/8] Compiling Bootable ISO..."
wget -q "https://repo.or.cz/syslinux.git/blob_plain/HEAD:/mbr/isohdpfx.bin" -O isohdpfx.bin || true
XORRISO_CMD=(xorriso -as mkisofs -o adaptive-os.iso -V "AdaptiveOS" -c boot/syslinux/boot.cat -b "$ISOLINUX_BIN_REL" -no-emul-boot -boot-load-size 4 -boot-info-table)
if [ -f "isohdpfx.bin" ]; then
XORRISO_CMD+=(-isohybrid-mbr "isohdpfx.bin")
fi
XORRISO_CMD+=(alpine-custom)
"${XORRISO_CMD[@]}"
echo "[8/8] Moving ISO to Host and Cleaning Up..."
cp adaptive-os.iso ~/
cd ~
sudo umount "$RAMDISK"
sudo rmdir "$RAMDISK"
echo ""
echo "========================================="
echo " SUCCESS: Bootable ISO created in RAM!"
echo " File: ~/adaptive-os.iso"
echo "========================================="
echo ""
echo "To boot the VM and allocate 16GB of RAM to the OS, run:"
echo "qemu-system-x86_64 -cdrom ~/adaptive-os.iso -m 16G"