Overview

This guide walks through setting up Chameleon in the cloud from scratch on either AWS or OCI. Both environments are supported; choose the path that matches your account.

Compatibility note

The primary dependency for the current Chameleon pilot is a working Vulkan driver stack (required for the SPIR-V execution path). The pilot build has been validated across 30+ Linux distributions and is designed for compatibility with 50+. Ubuntu 24.04 is the pilot-certified known-good path because it reduces driver and environment variability.

What you'll accomplish

Prerequisites

Cloud account AWS account or OCI tenancy with compute permissions
SSH key pair AWS: .pem · OCI: public + private key
Terminal macOS/Linux terminal or Windows PowerShell
Browser Chrome or Edge recommended for noVNC
Chameleon binary Essence__LNX_X64.w.elf (provided separately)

SSH key handling

Pilot access relies on SSH key authentication. If you are switching machines, ensure the correct private key is present on the machine you are using.

Verify your key exists:

ls -l ~/.ssh

Copy a key from another machine:

scp user@OTHER_MACHINE_IP:~/.ssh/pilot-key ~/.ssh/

Path A — AWS setup

This script is designed for AWS NVIDIA GPU instances running Ubuntu 24.04 with browser-based access via noVNC and full GPU acceleration via Vulkan (SPIR-V). It manages: virtual X server (Xvfb), VNC server (x11vnc), browser access (noVNC + websockify), PulseAudio, NVIDIA Vulkan ICD setup, and the Chameleon lifecycle.

Create the AWS startup script

Run the following on your AWS instance to create chameleon_start.sh:

cd ~/chameleon
cat > chameleon_start.sh << 'ENDOFSCRIPT'
#!/usr/bin/env bash
set -euo pipefail

DISPLAY_NUMBER="${DISPLAY_NUMBER:-99}"
export DISPLAY=":${DISPLAY_NUMBER}"

X_RES="${X_RES:-1920}"
X_HI="${X_HI:-1080}"
X_DEPTH="${X_DEPTH:-24}"

VNC_PORT="${VNC_PORT:-5901}"
NOVNC_PORT="${NOVNC_PORT:-6080}"

CHAMELEON_BIN="${CHAMELEON_BIN:-$HOME/chameleon/Essence__LNX_X64.w.elf}"
WORKDIR="${WORKDIR:-$HOME/chameleon}"
LOGDIR="${LOGDIR:-$HOME/.local/state/chameleon/Log}"

mkdir -p "$LOGDIR"

export VK_ICD_FILENAMES="/usr/share/vulkan/icd.d/nvidia_icd.json"
export SDL_AUDIODRIVER=pulse

install_deps() {
  sudo apt-get update
  sudo apt-get install -y \
    xvfb x11vnc websockify novnc \
    vulkan-tools mesa-vulkan-drivers \
    pulseaudio nvidia-utils-550 libnvidia-gl-550
}

clean_locks() {
  sudo rm -f /tmp/.X${DISPLAY_NUMBER}-lock
  sudo rm -f /tmp/.X11-unix/X${DISPLAY_NUMBER}
}

start_pulseaudio() { pulseaudio --check && pulseaudio --kill || true; pulseaudio --start; }
start_xvfb() { Xvfb "${DISPLAY}" -screen 0 "${X_RES}x${X_HI}x${X_DEPTH}" -ac +extension GLX +render -noreset & sleep 2; }
start_vnc() { x11vnc -display "${DISPLAY}" -rfbport "${VNC_PORT}" -forever -shared -nopw & }
start_websockify() { websockify --web=/usr/share/novnc/ "${NOVNC_PORT}" "localhost:${VNC_PORT}" & }
start_chameleon() { chmod +x "$CHAMELEON_BIN"; cd "$WORKDIR"; "$CHAMELEON_BIN" >"$LOGDIR/chameleon.log" 2>&1 & }

case "${1:-start}" in
  install) install_deps ;;
  start) clean_locks; start_pulseaudio; start_xvfb; start_vnc; start_websockify; start_chameleon ;;
  stop) pkill -f Xvfb || true; pkill -f x11vnc || true; pkill -f websockify || true; pkill -f Essence || true; clean_locks ;;
  restart) "$0" stop; sleep 2; "$0" start ;;
  status) pgrep -fa Essence || echo "Chameleon not running" ;;
  logs) tail -f "$LOGDIR"/*.log ;;
  test) nvidia-smi; vulkaninfo --summary | head -20 ;;
  *) echo "Usage: $0 {install|start|stop|restart|status|logs|test}" ;;
esac
ENDOFSCRIPT

chmod +x chameleon_start.sh
Next steps (AWS)

1. Run ./chameleon_start.sh install once
2. Upload Essence__LNX_X64.w.elf to ~/chameleon
3. Start Chameleon with ./chameleon_start.sh start
4. Access UI via http://localhost:6080/vnc.html


Path B — OCI setup

Designed for OCI NVIDIA GPU instances running Ubuntu 24.04 with browser-based access via noVNC and full GPU acceleration via Vulkan (SPIR-V). OCI uses a different driver, networking, and image model than AWS and requires the OCI-specific startup script.

Ports & networking

Create the OCI startup script

Run this on the OCI instance to create chameleon_start_oci.sh:

cd ~/chameleon
cat > chameleon_start_oci.sh << 'ENDOFSCRIPT'
#!/usr/bin/env bash
set -euo pipefail

DISPLAY_NUMBER="${DISPLAY_NUMBER:-99}"
export DISPLAY=":${DISPLAY_NUMBER}"
VNC_PORT="${VNC_PORT:-5901}"
NOVNC_PORT="${NOVNC_PORT:-6080}"

CHAMELEON_BIN="${CHAMELEON_BIN:-$HOME/chameleon/Essence__LNX_X64.w.elf}"
WORKDIR="${WORKDIR:-$HOME/chameleon}"
LOGDIR="${LOGDIR:-$HOME/.local/state/chameleon/Log}"
mkdir -p "$LOGDIR"

export SDL_AUDIODRIVER=pulse

set_vk_icd() {
  if [ -f /usr/share/vulkan/icd.d/nvidia_icd.json ]; then
    export VK_ICD_FILENAMES="/usr/share/vulkan/icd.d/nvidia_icd.json"
  elif [ -f /etc/vulkan/icd.d/nvidia_icd.json ]; then
    export VK_ICD_FILENAMES="/etc/vulkan/icd.d/nvidia_icd.json"
  fi
}

install_base_deps() {
  sudo apt-get update
  sudo apt-get install -y \
    xvfb x11vnc websockify novnc \
    pulseaudio vulkan-tools mesa-vulkan-drivers \
    ubuntu-drivers-common ca-certificates curl unzip
}

ensure_nvidia_driver() {
  if command -v nvidia-smi >/dev/null 2>&1; then
    nvidia-smi || true
    return 0
  fi
  sudo ubuntu-drivers autoinstall
  echo ">>> Run: sudo reboot"
  exit 0
}

# ... (lifecycle functions identical to AWS: start_pulseaudio, start_xvfb, start_vnc,
# start_websockify, start_chameleon, stop_all, clean_locks)

case "${1:-start}" in
  install) install_base_deps; ensure_nvidia_driver ;;
  start) clean_locks; start_pulseaudio; start_xvfb; start_vnc; start_websockify; start_chameleon ;;
  stop) stop_all ;;
  restart) stop_all; sleep 2; "$0" start ;;
  status)
    pgrep -fa Xvfb || echo "Xvfb not running"
    pgrep -fa Essence || echo "Chameleon not running" ;;
  logs) tail -f "$LOGDIR"/*.log ;;
  test) nvidia-smi; set_vk_icd; vulkaninfo --summary | head -40 ;;
esac
ENDOFSCRIPT

chmod +x chameleon_start_oci.sh
Next steps (OCI)

1. One-time install: ./chameleon_start_oci.sh install (may trigger a reboot if drivers install)
2. Upload binary to ~/chameleon/
3. Start: ./chameleon_start_oci.sh start
4. Test: ./chameleon_start_oci.sh test

Connect via noVNC (OCI)

SSH tunnel (recommended):

ssh -L 6080:localhost:6080 -i /path/to/your-oci-key ubuntu@YOUR_OCI_PUBLIC_IP

Then open in your browser:

http://localhost:6080/vnc.html

Quick reference

Lifecycle commands (works for both AWS and OCI scripts):

cd ~/chameleon && ./chameleon_start.sh start
cd ~/chameleon && ./chameleon_start.sh stop
cd ~/chameleon && ./chameleon_start.sh restart
cd ~/chameleon && ./chameleon_start.sh status
cd ~/chameleon && ./chameleon_start.sh logs
cd ~/chameleon && ./chameleon_start.sh test
Cost reminder

Stop your cloud instance when not in use to avoid hourly GPU charges. ./chameleon_start.sh stop stops Chameleon processes but the instance itself keeps billing — shut down from the AWS or OCI console.

Planning beyond the pilot

Once pilot results are validated, teams typically evaluate next steps for broader rollout, integration, or service-based deployment. MindAptiv offers multiple deployment paths — including Chameleon as a managed service and a forthcoming platform offering — depending on operational and compliance needs.

Evaluation only

Pilot binaries and workflows are for evaluation only — not production deployment.