#!/bin/bash # Patch existing lobe-sandbox-base image with correctly-installed uv. # One-shot fix for the UV_INSTALL_DIR mistake in initial build. set -euo pipefail PROJECT="lobe-sandbox" BUILDER="sb-patch" IMAGE="lobe-sandbox-base" log() { echo "==> [$(date +%H:%M:%S)] $*"; } incus info "$BUILDER" --project "$PROJECT" >/dev/null 2>&1 && \ incus delete "$BUILDER" --project "$PROJECT" --force log "Launch from base" incus init "$IMAGE" "$BUILDER" --project "$PROJECT" -p sandbox-default incus start "$BUILDER" --project "$PROJECT" sleep 3 log "Install uv via UV_INSTALL_DIR (correct env var)" incus exec "$BUILDER" --project "$PROJECT" -- bash -c ' rm -f /usr/local/bin/uv /usr/local/bin/uvx /root/.local/bin/uv /root/.local/bin/uvx 2>/dev/null || true curl -LsSf https://astral.sh/uv/install.sh | env UV_INSTALL_DIR=/usr/local/bin UV_NO_MODIFY_PATH=1 sh ls -la /usr/local/bin/uv /usr/local/bin/uvx ' log "Verify uv as root AND as sandbox user" incus exec "$BUILDER" --project "$PROJECT" -- uv --version incus exec "$BUILDER" --project "$PROJECT" --user 1000 -- uv --version log "Realistic LLM flow: create venv, install requests" incus exec "$BUILDER" --project "$PROJECT" --user 1000 --cwd /workspace -- bash -c ' uv venv .venv --seed 2>&1 | tail -3 uv pip install --python .venv/bin/python requests 2>&1 | tail -3 .venv/bin/python -c "import requests; print(\"requests\", requests.__version__)" ' log "Cleanup cache (shrink image)" incus exec "$BUILDER" --project "$PROJECT" --user 1000 -- rm -rf /home/sandbox/.cache /workspace/.venv incus exec "$BUILDER" --project "$PROJECT" -- bash -c "rm -rf /root/.cache /tmp/* /var/tmp/*" log "Stop builder" incus stop "$BUILDER" --project "$PROJECT" log "Replace image alias" incus image delete "$IMAGE" --project "$PROJECT" || true incus publish "$BUILDER" --project "$PROJECT" --alias "$IMAGE" log "Cleanup patch container" incus delete "$BUILDER" --project "$PROJECT" log "Final" incus image list --project "$PROJECT" log "DONE"