543 lines
17 KiB
Bash
543 lines
17 KiB
Bash
#!/bin/bash
|
|
# DevMatrix Setup Script for Proxmox - CUSTOMIZED for Roberth
|
|
# Storage: pve-main2 (HDD) | Future NVMe: pve-main
|
|
# TrueNAS: 192.168.5.195 | Dataset: NAS2
|
|
# VM IDs: 300-320
|
|
# Run this ON THE PROXMOX HOST as root
|
|
|
|
set -e
|
|
|
|
# ============================================
|
|
# CONFIGURATION (Your Specific Setup)
|
|
# ============================================
|
|
NETWORK_BRIDGE="vmbr1"
|
|
STORAGE_HDD="pve-main2" # Current HDD storage
|
|
STORAGE_NVME="pve-main" # Future NVMe storage (when installed)
|
|
TRUENAS_IP="192.168.5.195"
|
|
TRUENAS_DATASET="NAS2"
|
|
|
|
# VM IDs
|
|
MAIN_VMID=300 # OpenClaw DevMatrix (Ubuntu)
|
|
WIN_VMID=301 # Windows LTSC IoT Test VM
|
|
ANDROID_VMID=302 # Android Emulator VM
|
|
|
|
# Static IPs (safe range - verified from network scan)
|
|
MAIN_IP="192.168.5.210"
|
|
WIN_IP="192.168.5.211"
|
|
ANDROID_IP="192.168.5.212"
|
|
GATEWAY="192.168.5.1"
|
|
|
|
# Resource Allocation (Optimized for HDD)
|
|
MAIN_RAM=32768 # 32GB RAM
|
|
MAIN_CORES=16
|
|
MAIN_OS_DISK=200 # 200GB OS disk (HDD now, NVMe later)
|
|
MAIN_DATA_DISK=200 # 200GB data disk (stays on HDD)
|
|
|
|
WIN_RAM=16384 # 16GB RAM
|
|
WIN_CORES=8
|
|
WIN_DISK=100 # 100GB disk
|
|
|
|
ANDROID_RAM=8192 # 8GB RAM
|
|
ANDROID_CORES=4
|
|
ANDROID_DISK=50 # 50GB disk
|
|
|
|
# ============================================
|
|
# COLORS
|
|
# ============================================
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
CYAN='\033[0;36m'
|
|
NC='\033[0m'
|
|
|
|
log() { echo -e "${GREEN}[DevMatrix]${NC} $1"; }
|
|
warn() { echo -e "${YELLOW}[Warning]${NC} $1"; }
|
|
error() { echo -e "${RED}[Error]${NC} $1"; exit 1; }
|
|
info() { echo -e "${CYAN}[Info]${NC} $1"; }
|
|
|
|
# ============================================
|
|
# PRE-FLIGHT CHECKS
|
|
# ============================================
|
|
log "🔍 Running pre-flight checks..."
|
|
|
|
if [ "$EUID" -ne 0 ]; then
|
|
error "Please run as root"
|
|
fi
|
|
|
|
# Check vmbr1
|
|
if ! ip link show "$NETWORK_BRIDGE" &> /dev/null; then
|
|
error "Network bridge '$NETWORK_BRIDGE' not found!"
|
|
fi
|
|
log "✓ Network bridge '$NETWORK_BRIDGE' found"
|
|
|
|
# Check storage
|
|
if ! pvesm status | grep -q "^$STORAGE_HDD"; then
|
|
error "Storage '$STORAGE_HDD' not found!"
|
|
fi
|
|
log "✓ HDD storage '$STORAGE_HDD' found"
|
|
|
|
# Check available space on HDD
|
|
HDD_AVAIL=$(pvesm status | grep "^$STORAGE_HDD" | awk '{print $4}' | sed 's/G//')
|
|
info "HDD available: ${HDD_AVAIL}GB"
|
|
|
|
NEEDED_HDD=$((MAIN_OS_DISK + MAIN_DATA_DISK + WIN_DISK + ANDROID_DISK + 100)) # +100GB buffer
|
|
if [ "${HDD_AVAIL%.*}" -lt "$NEEDED_HDD" ]; then
|
|
error "Not enough space on $STORAGE_HDD. Need ${NEEDED_HDD}GB, have ${HDD_AVAIL}GB"
|
|
fi
|
|
log "✓ Sufficient HDD space (${NEEDED_HDD}GB needed)"
|
|
|
|
# Check VM IDs
|
|
for vmid in $MAIN_VMID $WIN_VMID $ANDROID_VMID; do
|
|
if qm status "$vmid" &> /dev/null; then
|
|
error "VM ID $vmid already exists!"
|
|
fi
|
|
done
|
|
log "✓ VM IDs available (300-302)"
|
|
|
|
# Check RAM
|
|
AVAILABLE_RAM=$(free -m | awk '/^Mem:/{print $7}')
|
|
TOTAL_RAM=$((MAIN_RAM + WIN_RAM + ANDROID_RAM))
|
|
info "Available RAM: ${AVAILABLE_RAM}MB"
|
|
info "Required RAM: ${TOTAL_RAM}MB"
|
|
|
|
if [ "$AVAILABLE_RAM" -lt "$TOTAL_RAM" ]; then
|
|
warn "Low RAM! Consider reducing VM memory"
|
|
read -p "Continue anyway? (y/N): " confirm
|
|
[ "$confirm" != "y" ] && exit 1
|
|
fi
|
|
|
|
# Check TrueNAS connectivity
|
|
if ping -c 1 "$TRUENAS_IP" &> /dev/null; then
|
|
log "✓ TrueNAS ($TRUENAS_IP) reachable"
|
|
else
|
|
warn "TrueNAS ($TRUENAS_IP) not reachable - will configure later"
|
|
fi
|
|
|
|
echo ""
|
|
log "✅ Pre-flight checks complete!"
|
|
echo ""
|
|
|
|
# ============================================
|
|
# DOWNLOAD ISO IMAGES
|
|
# ============================================
|
|
log "⬇️ Checking for ISO images..."
|
|
|
|
ISO_DIR="/var/lib/vz/template/iso"
|
|
mkdir -p "$ISO_DIR"
|
|
|
|
# Ubuntu 22.04 Server ISO
|
|
UBUNTU_ISO="$ISO_DIR/ubuntu-22.04.5-live-server-amd64.iso"
|
|
if [ -f "$UBUNTU_ISO" ]; then
|
|
log "✓ Ubuntu ISO found"
|
|
else
|
|
log "⬇️ Downloading Ubuntu 22.04 Server ISO..."
|
|
wget -O "$UBUNTU_ISO" \
|
|
"https://releases.ubuntu.com/22.04/ubuntu-22.04.5-live-server-amd64.iso" \
|
|
--progress=bar:force 2>&1 | tail -f -n +6
|
|
log "✓ Ubuntu ISO downloaded"
|
|
fi
|
|
|
|
# Check for Windows ISO
|
|
WIN_ISO="$ISO_DIR/Win11_Ent_LTSC_IoT.iso"
|
|
WIN_ISO_ALT="$ISO_DIR/Win11.iso"
|
|
|
|
if [ -f "$WIN_ISO" ]; then
|
|
log "✓ Windows LTSC IoT ISO found"
|
|
WIN_ISO_FILE="Win11_Ent_LTSC_IoT.iso"
|
|
elif [ -f "$WIN_ISO_ALT" ]; then
|
|
log "✓ Windows 11 ISO found"
|
|
WIN_ISO_FILE="Win11.iso"
|
|
else
|
|
warn "⚠️ Windows ISO not found"
|
|
info "Please download Windows 11 ISO and place it in:"
|
|
info " $ISO_DIR/Win11.iso"
|
|
info "Download from: https://www.microsoft.com/software-download/windows11"
|
|
read -p "Press Enter when Windows ISO is ready (or 'skip' to continue without): " response
|
|
if [ "$response" == "skip" ]; then
|
|
WIN_ISO_FILE=""
|
|
fi
|
|
fi
|
|
|
|
echo ""
|
|
|
|
# ============================================
|
|
# CREATE VM 300: OpenClaw DevMatrix (Ubuntu)
|
|
# ============================================
|
|
log "🚀 Creating VM $MAIN_VMID: OpenClaw-DevMatrix"
|
|
log " IP: $MAIN_IP | Storage: $STORAGE_HDD (migrates to $STORAGE_NVME later)"
|
|
|
|
qm create $MAIN_VMID \
|
|
--name "OpenClaw-DevMatrix" \
|
|
--memory $MAIN_RAM \
|
|
--cores $MAIN_CORES \
|
|
--cpu host \
|
|
--net0 virtio,bridge=$NETWORK_BRIDGE,tag=1 \
|
|
--scsihw virtio-scsi-single \
|
|
--bios ovmf \
|
|
--machine q35
|
|
|
|
# EFI disk (small, fast)
|
|
qm set $MAIN_VMID --efidisk0 ${STORAGE_HDD}:1,format=qcow2,efitype=4m,pre-enrolled-keys=1
|
|
|
|
# OS Disk - HDD optimized (will migrate to NVMe)
|
|
# Using writeback cache for better HDD performance
|
|
qm set $MAIN_VMID \
|
|
--scsi0 ${STORAGE_HDD}:${MAIN_OS_DISK},format=qcow2,cache=writeback,discard=on,iothread=1,ssd=1
|
|
|
|
# Data Disk - stays on HDD even after migration
|
|
qm set $MAIN_VMID \
|
|
--scsi1 ${STORAGE_HDD}:${MAIN_DATA_DISK},format=qcow2,cache=none,discard=on,iothread=1
|
|
|
|
# Cloud-init drive
|
|
qm set $MAIN_VMID --ide2 ${STORAGE_HDD}:cloudinit,media=cdrom
|
|
|
|
# Attach Ubuntu ISO
|
|
qm set $MAIN_VMID --ide0 local:iso/ubuntu-22.04.5-live-server-amd64.iso,media=cdrom
|
|
|
|
# Boot order
|
|
qm set $MAIN_VMID --boot order=scsi0;ide0
|
|
|
|
# Enable QEMU Guest Agent
|
|
qm set $MAIN_VMID --agent enabled=1,fstrim_cloned_disks=1
|
|
|
|
# CPU optimization for compilation workloads
|
|
qm set $MAIN_VMID --cpu cputype=host,flags=+aes
|
|
|
|
# Configure cloud-init with static IP
|
|
qm set $MAIN_VMID --ciuser devmatrix
|
|
qm set $MAIN_VMID --cipassword $(openssl rand -base64 32)
|
|
qm set $MAIN_VMID --ipconfig0 ip=${MAIN_IP}/24,gw=${GATEWAY}
|
|
|
|
# Generate SSH key pair
|
|
if [ ! -f ~/.ssh/devmatrix_id_rsa ]; then
|
|
ssh-keygen -t rsa -b 4096 -f ~/.ssh/devmatrix_id_rsa -N "" -C "devmatrix@proxmox"
|
|
chmod 600 ~/.ssh/devmatrix_id_rsa
|
|
fi
|
|
qm set $MAIN_VMID --sshkeys ~/.ssh/devmatrix_id_rsa.pub
|
|
|
|
# Description
|
|
qm set $MAIN_VMID --description "OpenClaw DevMatrix - Ubuntu Dev Environment
|
|
IP: ${MAIN_IP}
|
|
Storage: ${STORAGE_HDD} (OS migrates to ${STORAGE_NVME} later)
|
|
Data: ${STORAGE_HDD} (permanent)
|
|
TrueNAS: ${TRUENAS_IP}"
|
|
|
|
log "✓ VM $MAIN_VMID created"
|
|
echo ""
|
|
|
|
# ============================================
|
|
# CREATE VM 301: Windows LTSC IoT Test VM
|
|
# ============================================
|
|
log "🚀 Creating VM $WIN_VMID: Windows-LTSC-Test"
|
|
log " IP: $WIN_IP | Storage: $STORAGE_HDD"
|
|
|
|
qm create $WIN_VMID \
|
|
--name "Windows-LTSC-Test" \
|
|
--memory $WIN_RAM \
|
|
--cores $WIN_CORES \
|
|
--cpu host \
|
|
--net0 virtio,bridge=$NETWORK_BRIDGE,tag=1 \
|
|
--scsihw virtio-scsi-single \
|
|
--bios ovmf \
|
|
--machine q35
|
|
|
|
# EFI disk
|
|
qm set $WIN_VMID --efidisk0 ${STORAGE_HDD}:1,format=qcow2,efitype=4m,pre-enrolled-keys=1
|
|
|
|
# OS Disk - HDD optimized
|
|
qm set $WIN_VMID \
|
|
--scsi0 ${STORAGE_HDD}:${WIN_DISK},format=qcow2,cache=writeback,discard=on,iothread=1,ssd=1
|
|
|
|
# Attach Windows ISO if available
|
|
if [ -n "$WIN_ISO_FILE" ]; then
|
|
qm set $WIN_VMID --ide0 local:iso/${WIN_ISO_FILE},media=cdrom
|
|
else
|
|
warn "No Windows ISO attached. Attach manually later."
|
|
fi
|
|
|
|
# Boot order
|
|
qm set $WIN_VMID --boot order=scsi0;ide0
|
|
|
|
# Enable QEMU Guest Agent
|
|
qm set $WIN_VMID --agent enabled=1
|
|
|
|
# Windows benefits from more video memory
|
|
qm set $WIN_VMID --vga virtio,memory=64
|
|
|
|
# Description
|
|
qm set $WIN_VMID --description "Windows 11 LTSC IoT Test VM
|
|
IP: ${WIN_IP}
|
|
Storage: ${STORAGE_HDD}
|
|
User: testuser / DevMatrix2024!"
|
|
|
|
log "✓ VM $WIN_VMID created"
|
|
echo ""
|
|
|
|
# ============================================
|
|
# CREATE VM 302: Android Emulator VM
|
|
# ============================================
|
|
log "🚀 Creating VM $ANDROID_VMID: Android-Emulator"
|
|
log " IP: $ANDROID_IP | Storage: $STORAGE_HDD"
|
|
|
|
qm create $ANDROID_VMID \
|
|
--name "Android-Emulator" \
|
|
--memory $ANDROID_RAM \
|
|
--cores $ANDROID_CORES \
|
|
--cpu host \
|
|
--net0 virtio,bridge=$NETWORK_BRIDGE,tag=1 \
|
|
--scsihw virtio-scsi-single \
|
|
--bios ovmf \
|
|
--machine q35
|
|
|
|
# EFI disk
|
|
qm set $ANDROID_VMID --efidisk0 ${STORAGE_HDD}:1,format=qcow2,efitype=4m,pre-enrolled-keys=1
|
|
|
|
# OS Disk
|
|
qm set $ANDROID_VMID \
|
|
--scsi0 ${STORAGE_HDD}:${ANDROID_DISK},format=qcow2,cache=writeback,discard=on,iothread=1,ssd=1
|
|
|
|
# Attach Ubuntu ISO (for Android dev environment setup)
|
|
qm set $ANDROID_VMID --ide0 local:iso/ubuntu-22.04.5-live-server-amd64.iso,media=cdrom
|
|
|
|
# Boot order
|
|
qm set $ANDROID_VMID --boot order=scsi0;ide0
|
|
|
|
# Enable QEMU Guest Agent
|
|
qm set $ANDROID_VMID --agent enabled=1
|
|
|
|
# Description
|
|
qm set $ANDROID_VMID --description "Android Emulator VM
|
|
IP: ${ANDROID_IP}
|
|
Storage: ${STORAGE_HDD}
|
|
Note: Install Android SDK and Emulator after Ubuntu setup"
|
|
|
|
log "✓ VM $ANDROID_VMID created"
|
|
echo ""
|
|
|
|
# ============================================
|
|
# CREATE MIGRATION SCRIPT
|
|
# ============================================
|
|
log "📝 Creating NVMe migration script..."
|
|
|
|
mkdir -p /root/devmatrix-scripts
|
|
|
|
cat > /root/devmatrix-scripts/migrate_to_nvme.sh << 'EOF'
|
|
#!/bin/bash
|
|
# Migrate DevMatrix VMs from HDD (pve-main2) to NVMe (pve-main)
|
|
# Run this after installing NVMe drive and adding it as 'pve-main' storage
|
|
|
|
STORAGE_NVME="pve-main"
|
|
STORAGE_HDD="pve-main2"
|
|
|
|
MIGRATE_VMS="300 301 302"
|
|
|
|
echo "🚀 DevMatrix NVMe Migration Tool"
|
|
echo "================================"
|
|
echo ""
|
|
|
|
# Check NVMe storage exists
|
|
if ! pvesm status | grep -q "^$STORAGE_NVME"; then
|
|
echo "❌ NVMe storage '$STORAGE_NVME' not found!"
|
|
echo ""
|
|
echo "To add NVMe storage:"
|
|
echo "1. Install NVMe drive"
|
|
echo "2. In Proxmox: Datacenter -> Storage -> Add -> Directory"
|
|
echo "3. Set ID to 'pve-main' and point to your NVMe mount point"
|
|
exit 1
|
|
fi
|
|
|
|
echo "✓ NVMe storage '$STORAGE_NVME' found"
|
|
echo ""
|
|
|
|
migrate_vm() {
|
|
local vmid=$1
|
|
local vmname=$(qm config $vmid | grep name | cut -d' ' -f2)
|
|
|
|
echo "🔄 Migrating VM $vmid ($vmname)..."
|
|
|
|
# Check if running
|
|
if qm status $vmid | grep -q running; then
|
|
echo " Stopping VM..."
|
|
qm stop $vmid
|
|
sleep 5
|
|
fi
|
|
|
|
# Get current disk size
|
|
DISK_SIZE=$(qm config $vmid | grep scsi0 | grep -oP '\d+(?=,)' | head -1)
|
|
|
|
echo " Moving disk (${DISK_SIZE}GB)..."
|
|
qm move-disk $vmid scsi0 $STORAGE_NVME
|
|
|
|
# Update cache settings for SSD (writethrough is safer for SSD)
|
|
qm set $vmid --scsi0 ${STORAGE_NVME}:${DISK_SIZE},cache=writethrough,discard=on,ssd=1,iothread=1
|
|
|
|
# Update description
|
|
qm set $vmid --description "$(qm config $vmid | grep description | cut -d' ' -f2-) | Migrated to NVMe $(date +%Y-%m-%d)"
|
|
|
|
echo " ✓ Migrated successfully"
|
|
echo ""
|
|
}
|
|
|
|
# Confirm
|
|
read -p "Migrate VMs $MIGRATE_VMS to NVMe? (y/N): " confirm
|
|
if [ "$confirm" != "y" ]; then
|
|
echo "Cancelled."
|
|
exit 0
|
|
fi
|
|
|
|
# Migrate
|
|
for vmid in $MIGRATE_VMS; do
|
|
migrate_vm $vmid
|
|
done
|
|
|
|
echo "🎉 All VMs migrated to NVMe!"
|
|
echo ""
|
|
echo "Next steps:"
|
|
echo "1. Start VMs and verify they boot correctly"
|
|
echo "2. Update any hardcoded paths in VM configs"
|
|
echo "3. Consider moving data disks (scsi1) to NVMe for better performance"
|
|
echo ""
|
|
echo "Old HDD storage can now be used for backups and less critical VMs"
|
|
EOF
|
|
|
|
chmod +x /root/devmatrix-scripts/migrate_to_nvme.sh
|
|
|
|
log "✓ Migration script created: /root/devmatrix-scripts/migrate_to_nvme.sh"
|
|
|
|
# ============================================
|
|
# CREATE VM INFO FILE
|
|
# ============================================
|
|
cat > ~/devmatrix_vm_info.txt << EOF
|
|
DevMatrix VM Configuration
|
|
==========================
|
|
Created: $(date)
|
|
Network: $NETWORK_BRIDGE
|
|
Storage HDD: $STORAGE_HDD
|
|
Future NVMe: $STORAGE_NVME
|
|
TrueNAS: $TRUENAS_IP ($TRUENAS_DATASET)
|
|
|
|
VM INVENTORY
|
|
============
|
|
|
|
ID 300: OpenClaw-DevMatrix (Ubuntu 22.04)
|
|
-----------------------------------------
|
|
Name: OpenClaw-DevMatrix
|
|
IP: ${MAIN_IP}/24 (Gateway: ${GATEWAY})
|
|
RAM: ${MAIN_RAM}MB (32GB)
|
|
CPU: ${MAIN_CORES} cores
|
|
OS Disk: ${MAIN_OS_DISK}GB on ${STORAGE_HDD} (migrates to ${STORAGE_NVME})
|
|
Data Disk: ${MAIN_DATA_DISK}GB on ${STORAGE_HDD} (permanent)
|
|
SSH: ssh -i ~/.ssh/devmatrix_id_rsa devmatrix@${MAIN_IP}
|
|
VS Code: http://${MAIN_IP}:8080
|
|
|
|
ID 301: Windows-LTSC-Test (Windows 11)
|
|
--------------------------------------
|
|
Name: Windows-LTSC-Test
|
|
IP: ${WIN_IP}/24
|
|
RAM: ${WIN_RAM}MB (16GB)
|
|
CPU: ${WIN_CORES} cores
|
|
Disk: ${WIN_DISK}GB on ${STORAGE_HDD}
|
|
RDP: mstsc /v:${WIN_IP}
|
|
User: testuser / DevMatrix2024!
|
|
|
|
ID 302: Android-Emulator (Ubuntu 22.04)
|
|
---------------------------------------
|
|
Name: Android-Emulator
|
|
IP: ${ANDROID_IP}/24
|
|
RAM: ${ANDROID_RAM}MB (8GB)
|
|
CPU: ${ANDROID_CORES} cores
|
|
Disk: ${ANDROID_DISK}GB on ${STORAGE_HDD}
|
|
|
|
SSH ACCESS
|
|
==========
|
|
Private Key: ~/.ssh/devmatrix_id_rsa
|
|
Public Key: ~/.ssh/devmatrix_id_rsa.pub
|
|
|
|
Add this public key to VMs during cloud-init or after install:
|
|
$(cat ~/.ssh/devmatrix_id_rsa.pub)
|
|
|
|
PROXMOX COMMANDS
|
|
================
|
|
Start VM 300: qm start 300
|
|
Stop VM 300: qm stop 300
|
|
Console: qm console 300
|
|
Status: qm status 300
|
|
|
|
SNAPSHOTS
|
|
=========
|
|
Create: qm snapshot 300 before-update
|
|
List: qm listsnapshot 300
|
|
Restore: qm rollback 300 before-update
|
|
|
|
MIGRATION
|
|
=========
|
|
When NVMe (pve-main) is installed, run:
|
|
/root/devmatrix-scripts/migrate_to_nvme.sh
|
|
|
|
This will move VM 300-302 OS disks from HDD to NVMe
|
|
|
|
TRUENAS INTEGRATION
|
|
===================
|
|
TrueNAS IP: ${TRUENAS_IP}
|
|
Dataset: ${TRUENAS_DATASET}
|
|
|
|
Setup shares on TrueNAS:
|
|
1. Create dataset: ${TRUENAS_DATASET}/devmatrix
|
|
2. Create sub-datasets:
|
|
- ${TRUENAS_DATASET}/devmatrix/projects
|
|
- ${TRUENAS_DATASET}/devmatrix/backups
|
|
- ${TRUENAS_DATASET}/devmatrix/iso-archive
|
|
3. Create NFS shares for each
|
|
4. Mount in VM 300 using ~/scripts/setup_truenas.sh
|
|
|
|
NEXT STEPS
|
|
==========
|
|
1. Install Ubuntu on VM 300:
|
|
qm start 300
|
|
# Connect via console, complete installation
|
|
|
|
2. Install Windows on VM 301:
|
|
qm start 301
|
|
# Install Windows LTSC IoT
|
|
|
|
3. Setup Dev Environment (inside VM 300):
|
|
ssh devmatrix@${MAIN_IP}
|
|
# Run setup_openclaw_dev.sh
|
|
|
|
4. Configure TrueNAS shares (optional):
|
|
# Setup on TrueNAS first, then run setup_truenas.sh in VM
|
|
|
|
For detailed instructions, see: DEVMATRIX_SETUP_GUIDE.md
|
|
EOF
|
|
|
|
# ============================================
|
|
# SUMMARY
|
|
# ============================================
|
|
log "🎉 DevMatrix VMs Created Successfully!"
|
|
echo ""
|
|
echo "╔════════════════════════════════════════════════════════════╗"
|
|
echo "║ VM INVENTORY ║"
|
|
echo "╠════════════════════════════════════════════════════════════╣"
|
|
echo "║ ║"
|
|
printf "║ ID 300: %-15s IP: %-15s ║\n" "OpenClaw-DevMatrix" "$MAIN_IP"
|
|
printf "║ Ubuntu 22.04 RAM: 32GB Disk: 400GB ║\n"
|
|
echo "║ ║"
|
|
printf "║ ID 301: %-15s IP: %-15s ║\n" "Windows-LTSC-Test" "$WIN_IP"
|
|
printf "║ Windows 11 LTSC RAM: 16GB Disk: 100GB ║\n"
|
|
echo "║ ║"
|
|
printf "║ ID 302: %-15s IP: %-15s ║\n" "Android-Emulator" "$ANDROID_IP"
|
|
printf "║ Ubuntu 22.04 RAM: 8GB Disk: 50GB ║\n"
|
|
echo "║ ║"
|
|
echo "╠════════════════════════════════════════════════════════════╣"
|
|
echo "║ Storage: HDD ($STORAGE_HDD) → NVMe ($STORAGE_NVME) later ║"
|
|
echo "║ TrueNAS: $TRUENAS_IP ║"
|
|
echo "╚════════════════════════════════════════════════════════════╝"
|
|
echo ""
|
|
log "📄 Configuration saved to: ~/devmatrix_vm_info.txt"
|
|
log "🔑 SSH key: ~/.ssh/devmatrix_id_rsa"
|
|
log "🚀 Migration tool: /root/devmatrix-scripts/migrate_to_nvme.sh"
|
|
echo ""
|
|
echo "Next: Install Ubuntu on VM 300, then run setup_openclaw_dev.sh"
|
|
echo ""
|