AeThex-OS/script/build-unikernel.sh

92 lines
2.9 KiB
Bash

#!/bin/bash
set -e
# AeThex OS - Unikernel Build Script (OPS)
# Requires 'ops' (https://ops.city)
echo "═══════════════════════════════════════════════════════════════"
echo " AeThex OS - Unikernel Builder"
echo " Target: Nanos Unikernel (Bootable Image)"
echo "═══════════════════════════════════════════════════════════════"
# 0. Check for MinGW/Git Bash (Windows NPM environment)
if [ -n "$MSYSTEM" ] || [[ "$OSTYPE" == "msys" ]] || [[ "$OSTYPE" == "cygwin" ]]; then
echo "[*] Detected Windows Environment (MinGW/Git Bash)."
echo "[*] Switching to WSL Context..."
# Convert the current script path to a WSL path
# $0 is likely "script/build-unikernel.sh"
# We assume the current directory is the project root in Windows format, accessible via /mnt/c
# Simple re-execution in WSL, assuming we are at project root
wsl bash script/build-unikernel.sh
exit $?
fi
# Try to find 'ops' in various ways
OPS_CMD=""
# 1. Check if 'ops' is already in PATH
if command -v ops &> /dev/null; then
OPS_CMD="ops"
fi
# 2. Hardcoded check for known user 'mrpiglr' (The specific fix)
if [ -z "$OPS_CMD" ]; then
if [ -f "/home/mrpiglr/.ops/bin/ops" ]; then
OPS_CMD="/home/mrpiglr/.ops/bin/ops"
fi
fi
# 3. Check current user's Linux home
if [ -z "$OPS_CMD" ]; then
LINUX_USER=$(whoami)
if [ -f "/home/$LINUX_USER/.ops/bin/ops" ]; then
OPS_CMD="/home/$LINUX_USER/.ops/bin/ops"
fi
fi
# 4. Final check
if [ -z "$OPS_CMD" ]; then
echo "[!] OPS binary not found."
echo " Checked: PATH, /home/mrpiglr/.ops/bin/ops"
echo " Please run this command directly in your WSL terminal:"
echo " export PATH=\$PATH:\$HOME/.ops/bin"
echo " bash script/build-unikernel.sh"
exit 1
fi
echo "[*] Using OPS binary: $OPS_CMD"
if [ ! -d "dist" ]; then
echo "[!] 'dist' directory not found. Building project..."
npm run build
fi
echo "[*] Updating OPS package list..."
$OPS_CMD update
echo "[*] Building Unikernel Image..."
# Try fully qualified name format: account/package:version
PACKAGE="eyberg/node:v18.12.1"
echo " Running: $OPS_CMD pkg load $PACKAGE ..."
if ! $OPS_CMD pkg load $PACKAGE -c ops.json -i aethex-kernel-v1; then
echo "[!] $PACKAGE failed."
# Fallback to another format seen in the list
PACKAGE="eyberg/node:20.5.0"
echo " Trying fallback: $PACKAGE ..."
$OPS_CMD pkg load $PACKAGE -c ops.json -i aethex-kernel-v1
fi
echo ""
echo "[✓] Build Complete."
echo " Image: ~/.ops/images/aethex-kernel-v1"
echo ""
echo "To boot the kernel:"
echo " $OPS_CMD run aethex-kernel-v1"
echo ""
echo "To deploy to AWS/GCP:"
echo " $OPS_CMD image create -c ops.json -i aethex-kernel-v1 -t aws"