Initial duckdb skill with HTTP API
This commit is contained in:
100
scripts/autorun.sh
Normal file
100
scripts/autorun.sh
Normal file
@@ -0,0 +1,100 @@
|
||||
#!/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"
|
||||
Reference in New Issue
Block a user