#!/bin/bash set -e DUCKDB_VERSION="${DUCKDB_VERSION:-1.1.3}" SKILLS_DIR="${SKILLS_DIR:-/skills}" DUCKDB_DATA_DIR="${DUCKDB_DATA_DIR:-/data/duckdb}" # Detect architecture get_arch() { case "$(uname -m)" in x86_64) echo "amd64" ;; aarch64) echo "aarch64" ;; *) echo "Unsupported architecture: $(uname -m)" >&2 exit 1 ;; esac } # Install DuckDB CLI install_duckdb() { if command -v duckdb &>/dev/null; then echo "duckdb already installed: $(duckdb --version)" return 0 fi echo "Installing DuckDB v${DUCKDB_VERSION}..." local arch=$(get_arch) local url="https://github.com/duckdb/duckdb/releases/download/v${DUCKDB_VERSION}/duckdb_cli-linux-${arch}.zip" apt-get update && apt-get install -y unzip curl -sSL "$url" -o /tmp/duckdb.zip unzip -o /tmp/duckdb.zip -d /tmp mv /tmp/duckdb /usr/local/bin/duckdb chmod +x /usr/local/bin/duckdb rm /tmp/duckdb.zip echo "DuckDB installed: $(duckdb --version)" } # Install socat for HTTP server install_socat() { if command -v socat &>/dev/null; then return 0 fi echo "Installing socat..." apt-get update && apt-get install -y socat jq } # Setup directories setup_dirs() { mkdir -p "$DUCKDB_DATA_DIR" echo "Data directory: $DUCKDB_DATA_DIR" } # Configure Caddy if present configure_caddy() { local caddy_dir="$SKILLS_DIR/caddy" local duckdb_port="${DUCKDB_PORT:-8432}" local duckdb_domain="${DUCKDB_DOMAIN:-}" if [ ! -d "$caddy_dir" ]; then echo "Caddy not found - DuckDB API on port $duckdb_port" return 0 fi echo "Caddy detected - configuring reverse proxy..." mkdir -p "$caddy_dir/snippets.d" local snippet="$caddy_dir/snippets.d/duckdb.caddy" if [ -n "$duckdb_domain" ]; then cat > "$snippet" << EOF # Auto-generated by duckdb skill $duckdb_domain { reverse_proxy localhost:$duckdb_port } EOF echo "Caddy config: $duckdb_domain -> localhost:$duckdb_port" else cat > "$snippet" << EOF # Auto-generated by duckdb skill # Add to your site block: # handle /duckdb/* { # uri strip_prefix /duckdb # reverse_proxy localhost:$duckdb_port # } EOF echo "Caddy snippet created (manual config needed)" fi } install_duckdb install_socat setup_dirs configure_caddy echo "DuckDB setup complete"