101 lines
2.3 KiB
Bash
101 lines
2.3 KiB
Bash
#!/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"
|