Files
probo/contrib/lima
Bryan Frimin f3aa0dea36 Fix sandbox provisioning failure due to missing LIMA_CIDATA_USER
The provision script relied on LIMA_CIDATA_USER being set in the
environment, but during cloud-init this variable is not exported — it
only exists in /mnt/lima-cidata/lima.env. The file cannot be sourced
directly because values like LIMA_CIDATA_COMMENT contain unquoted
spaces, so we extract LIMA_CIDATA_USER with sed instead.

Also ensure HOME is set for root's go install commands and explicitly
set PATH when running make as the Lima user via su, since profile.d
scripts may not be loaded during cloud-init provisioning.

Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-03-18 19:51:53 +01:00
..

Lima Sandbox Environments

Run isolated dev environments using Lima VMs. Each git worktree gets its own VM with Docker, standard ports, and a unique IP — no port conflicts between sandboxes.

Prerequisites

brew install lima jq

Quickstart

# Create and start a sandbox for the current worktree
./contrib/lima/sandbox.sh create

# Check status and get the VM IP
./contrib/lima/sandbox.sh status

# Build the backend binary (probo-stack starts automatically on boot)
./contrib/lima/sandbox.sh exec -- make build

# Start probod and the console dev server
./contrib/lima/sandbox.sh exec -- sudo systemctl start probod probo-console

# Access services from your host browser using the VM IP
# e.g. http://192.168.105.2:5173 (console)
# e.g. http://192.168.105.2:8080 (API)

Commands

Command Description
./contrib/lima/sandbox.sh create [--cpus C] [--memory M] [--disk D] Create and start a new VM
./contrib/lima/sandbox.sh start Start a stopped VM
./contrib/lima/sandbox.sh stop Shut down the VM (preserves disk and Docker images)
./contrib/lima/sandbox.sh restart Stop + start
./contrib/lima/sandbox.sh delete Remove the VM entirely
./contrib/lima/sandbox.sh ssh Interactive shell at /workspace
./contrib/lima/sandbox.sh exec -- CMD Run a command in the VM
./contrib/lima/sandbox.sh status Show VM state, IP, and service URLs
./contrib/lima/sandbox.sh list List all probo-* VMs

Architecture

Host (macOS)
├── worktree: ~/Developer/probo/delhi      → VM "probo-delhi"      (192.168.105.x)
├── worktree: ~/Developer/probo/feature-a  → VM "probo-feature-a"  (192.168.105.y)
└── worktree: ~/Developer/probo/feature-b  → VM "probo-feature-b"  (192.168.105.z)

Each VM:

  • Mounts the worktree at /workspace via virtiofs (read-write)
  • Runs Docker + docker-compose inside the VM
  • Forwards the host SSH agent
  • Gets its own IP via vzNAT — all services on standard ports

Makefile targets

Convenience wrappers are available:

make sandbox-create
make sandbox-start
make sandbox-stop
make sandbox-delete
make sandbox-ssh
make sandbox-status

Troubleshooting

VM won't start: Check limactl list for stale entries. Delete with ./contrib/lima/sandbox.sh delete and recreate.

Slow file I/O: The worktree is mounted via virtiofs which is fast for most operations. If node_modules is slow, consider symlinking it to VM-local disk.

Docker permission denied: The provision script adds the lima user to the docker group. If you see permission errors, restart the VM with ./contrib/lima/sandbox.sh restart.

Can't reach VM IP from host: Ensure vzNAT networking is working. Run ./contrib/lima/sandbox.sh status to verify the IP is assigned.