#!/bin/bash set -e cd "$(dirname "$0")" ALL_STAGES="base" STAGES="${1:-$ALL_STAGES}" PREFIX="claude-vm-archlinux" TMPDIR=$(mktemp -d) trap "rm -rf $TMPDIR" EXIT build_docker() { local stage=$1 local name="${PREFIX}-${stage}" echo "Building Docker image: ${name}..." docker build --target "$stage" -t "$name" . } export_to_incus() { local stage=$1 local name="${PREFIX}-${stage}" echo "Exporting to incus: ${name}..." # Create container and export rootfs local cid=$(docker create "$name") docker export "$cid" > "$TMPDIR/rootfs.tar" docker rm "$cid" > /dev/null # Create metadata cat > "$TMPDIR/metadata.yaml" << EOF architecture: x86_64 creation_date: $(date +%s) properties: description: ${name} EOF tar -C "$TMPDIR" -cf "$TMPDIR/metadata.tar" metadata.yaml # Import into incus incus image delete "$name" 2>/dev/null || true incus image import "$TMPDIR/metadata.tar" "$TMPDIR/rootfs.tar" --alias "$name" rm -f "$TMPDIR/rootfs.tar" "$TMPDIR/metadata.yaml" "$TMPDIR/metadata.tar" } # Build Docker images for stage in $STAGES; do build_docker "$stage" done echo "" docker images | grep "$PREFIX" # Export to incus echo "" for stage in $STAGES; do export_to_incus "$stage" done echo "" echo "Incus images:" incus image list | grep "$PREFIX"