Add AdaptiveOS builder script (16GB RAM disk edition)
This commit is contained in:
@@ -0,0 +1,109 @@
|
|||||||
|
#!/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"
|
||||||
Reference in New Issue
Block a user