commit 7ee42d231fdff05520ffd6d595f8925f27b1a174 Author: renato97 Date: Mon Aug 3 22:27:24 2026 -0300 OpenClaw all-in-one: 1-click setup con free-ide-proxy (modelo deepseek-v4-flash-free) diff --git a/README.md b/README.md new file mode 100644 index 0000000..c134bf2 --- /dev/null +++ b/README.md @@ -0,0 +1,76 @@ +# OpenClaw All-in-One 🦞 + +Setup de **1 click** para [OpenClaw](https://github.com/openclaw/openclaw) pre-configurado +con tu propio modelo a través de tu propio proxy **OpenAI-compatible** +([free-ide-proxy](https://gitea.cbcren.online/renato97/free-ide-proxy)). + +Instala y deja corriendo, sin pedir nada: + +| Componente | Detalle | +|---|---| +| `openclaw` CLI + Gateway | daemon systemd de usuario (`openclaw-gateway.service`) | +| `free-ide-proxy` | endpoint OpenAI/Anthropic local `127.0.0.1:6446` (binario precompilado o build desde fuente) | +| Config pre-cargada | `~/.openclaw/openclaw.json` apuntando a `free-ide/` | + +## Instalación (1 click) + +```bash +curl -fsSL https://gitea.cbcren.online/renato97/openclaw-allinone/raw/branch/main/install.sh | bash +``` + +Requiere: Linux o macOS, `curl`, y `sudo` para `loginctl enable-linger` +(no pedido si el usuario ya tiene los servicios de usuario). + +### Overrides (variables de entorno) + +```bash +# otro modelo de los 9 del proxy +MODEL=mimo-v2.5-free curl -fsSL https://gitea.cbcren.online/renato97/openclaw-allinone/raw/branch/main/install.sh | bash + +# con tu propia clave de proxy +PROXY_API_KEY=mi-secreto curl -fsSL ... | bash +``` + +| Var | Default | Qué hace | +|---|---|---| +| `MODEL` | `deepseek-v4-flash-free` | modelo por defecto del agente | +| `PROXY_API_KEY` | embebida (solo local) | clave que protege el proxy | +| `GATEWAY_PORT` | `18789` | puerto del gateway de OpenClaw | +| `GITEA_URL` / `GITEA_USER` | `https://gitea.cbcren.online` / `renato97` | de dónde baja el proxy | + +## Qué hace el script + +1. Instala `openclaw` (npm si hay Node ≥22, si no el installer oficial que provee Node). +2. Instala `free-ide-proxy` (binario `linux-amd64` del release, o compila con Go en otras arquitecturas). +3. Escribe `~/.openclaw/openclaw.json` ya configurado (provider `free-ide` → `127.0.0.1:6446/v1`). +4. Activa `loginctl enable-linger` y arranca ambos servicios de systemd de usuario. +5. Verifica `/health` del proxy y hace una inferencia de prueba con el agente. + +Es **idempotente**: si ya hay un proxy en `:6446` o una config existente, los respeta +(hace backup de la config y reutiliza el token del gateway). + +## Uso + +```bash +openclaw chat # TUI de chat +openclaw gateway status # estado del gateway +openclaw dashboard # Control UI +systemctl --user status openclaw-gateway free-ide-proxy +``` + +## Desinstalar + +```bash +curl -fsSL https://gitea.cbcren.online/renato97/openclaw-allinone/raw/branch/main/uninstall.sh | bash +``` + +## Notas de seguridad + +- El gateway escucha solo en loopback y usa auth por token. +- La `PROXY_API_KEY` solo protege el acceso al proxy local; los modelos upstream son públicos. +- Para cambiar de modelo después: `openclaw config set models.providers.free-ide ...` o re-corré el script con `MODEL=...`. + +## Ver también + +- [free-ide-proxy](https://gitea.cbcren.online/renato97/free-ide-proxy) — el proxy (Go stdlib) +- [OpenClaw docs](https://docs.openclaw.ai) diff --git a/install.sh b/install.sh new file mode 100644 index 0000000..9c3d9eb --- /dev/null +++ b/install.sh @@ -0,0 +1,220 @@ +#!/usr/bin/env bash +# ============================================================================= +# OpenClaw All-in-One — instalación en 1 click +# ============================================= +# Instala y pre-configura: +# • openclaw (CLI + Gateway daemon, systemd usuario) +# • free-ide-proxy (endpoint OpenAI-compatible local en 127.0.0.1:6446) +# Con el modelo por defecto deepseek-v4-flash-free apuntando a TU proxy. +# +# Uso (Linux/macOS): +# curl -fsSL https://gitea.cbcren.online/renato97/openclaw-allinone/raw/branch/main/install.sh | bash +# +# Variables de entorno opcionales (override): +# MODEL modelo a usar (default: deepseek-v4-flash-free) +# PROXY_API_KEY clave del proxy (default: embebida, local-only) +# GATEWAY_PORT puerto del gateway de openclaw (default: 18789) +# GITEA_URL base de tu Gitea (default: https://gitea.cbcren.online/) +# GITEA_USER usuario de tu Gitea (default: renato97) +# ============================================================================= +set -euo pipefail + +log() { echo -e "\033[1;34m[openclaw]\033[0m $*"; } +warn() { echo -e "\033[1;33m[openclaw]\033[0m $*"; } +die() { echo -e "\033[1;31m[openclaw]\033[0m ERROR: $*" >&2; exit 1; } + +# ---------------- Configurables (env override) ---------------- +MODEL="${MODEL:-deepseek-v4-flash-free}" +PROXY_API_KEY="${PROXY_API_KEY:-tw0rxo314kvga9lfbp2nj5sde7hiq6uc}" +GATEWAY_PORT="${GATEWAY_PORT:-18789}" +PROXY_PORT="${PROXY_PORT:-6446}" +GITEA_URL="${GITEA_URL:-https://gitea.cbcren.online}" +GITEA_USER="${GITEA_USER:-renato97}" +PROXY_REPO="${PROXY_REPO:-free-ide-proxy}" +PROXY_VERSION="${PROXY_VERSION:-v1.0.0}" +OPENCLAW_VER="${OPENCLAW_VER:-2026.7.1-2}" + +# Normalizar GITEA_URL (sin barra final) +GITEA_URL="${GITEA_URL%/}" + +export PATH="$HOME/.local/bin:$HOME/.openclaw/bin:/usr/local/bin:$PATH" + +# ---------------- Detectar OS / arch ---------------- +OS="$(uname -s)" +case "$OS" in + Linux) OS=linux ;; + Darwin) OS=darwin ;; + *) die "Sistema operativo no soportado: $OS (se requiere Linux o macOS)" ;; +esac +case "$(uname -m)" in + x86_64|amd64) ARCH=amd64 ;; + aarch64|arm64) ARCH=arm64 ;; + *) ARCH=source ;; +esac +log "OS=$OS arch=$(uname -m) modelo=$MODEL gateway=:$GATEWAY_PORT proxy=:$PROXY_PORT" + +# ---------------- 1) openclaw ---------------- +if command -v openclaw >/dev/null 2>&1; then + log "openclaw ya instalado: $(openclaw --version 2>&1 | head -1)" +elif command -v npm >/dev/null 2>&1 && [ "$(node --version 2>/dev/null | sed -E 's/[^0-9.]//g' | cut -d. -f1)" -ge 22 ]; then + log "Instalando openclaw via npm (node >=22)..." + npm install -g "openclaw@${OPENCLAW_VER}" +else + log "Instalando openclaw (installer oficial, provee Node si hace falta)..." + curl -fsSL https://openclaw.ai/install.sh | bash +fi +command -v openclaw >/dev/null 2>&1 || die "openclaw no quedó disponible en PATH" +OPENCLAW_BIN="$(command -v openclaw)" + +# ---------------- 2) free-ide-proxy ---------------- +PROXY_OK=0 +if curl -fsS "http://127.0.0.1:${PROXY_PORT}/health" >/dev/null 2>&1; then + log "free-ide-proxy ya responde en :${PROXY_PORT} — se omite su instalación" + PROXY_OK=1 +fi + +if [ "$PROXY_OK" -eq 0 ]; then + PROXY_BIN="$HOME/.local/bin/free-ide-proxy" + mkdir -p "$HOME/.local/bin" + if [ "$OS" = "linux" ] && [ "$ARCH" = "amd64" ]; then + ASSET="free-ide-proxy-linux-amd64" + log "Descargando free-ide-proxy ${PROXY_VERSION} (${ASSET}) desde tu Gitea..." + curl -fsSL "${GITEA_URL}/${GITEA_USER}/${PROXY_REPO}/releases/download/${PROXY_VERSION}/${ASSET}" -o "$PROXY_BIN" + chmod +x "$PROXY_BIN" + else + warn "No hay binario precompilado para $OS/$ARCH — compilando desde fuente (requiere Go 1.22+)..." + command -v go >/dev/null 2>&1 || die "Go no está instalado. Instala Go 1.22+ o usa Linux/amd64 con el binario precompilado." + TMP="$(mktemp -d)" + git clone --depth 1 "${GITEA_URL}/${GITEA_USER}/${PROXY_REPO}.git" "$TMP/proxy" + (cd "$TMP/proxy" && go build -o "$PROXY_BIN" .) + rm -rf "$TMP" + fi + + # systemd unit a nivel usuario (no requiere root) + mkdir -p "$HOME/.config/systemd/user" + cat > "$HOME/.config/systemd/user/free-ide-proxy.service" </dev/null || true + log "Habilitando linger para arrancar los servicios de usuario al boot..." + (sudo loginctl enable-linger "$USER" 2>/dev/null || loginctl enable-linger "$USER" 2>/dev/null) || warn "no se pudo enable-linger (los servicios de usuario no arrancarán solos al boot)" + systemctl --user daemon-reload + systemctl --user enable --now free-ide-proxy.service + sleep 2 + curl -fsS "http://127.0.0.1:${PROXY_PORT}/health" >/dev/null 2>&1 || die "free-ide-proxy no quedó arriba en :${PROXY_PORT}" + log "free-ide-proxy activo en http://127.0.0.1:${PROXY_PORT} (${MODEL} y más)" +fi + +# ---------------- 3) Config de openclaw (pre-cargada) ---------------- +# Reutiliza el token del gateway si ya existía una config (idempotencia). +GATEWAY_TOKEN="" +if [ -f "$HOME/.openclaw/openclaw.json" ]; then + GATEWAY_TOKEN="$(grep -o '"token"[[:space:]]*:[[:space:]]*"[^"]*"' "$HOME/.openclaw/openclaw.json" | head -1 | sed -E 's/.*:"([^"]*)"/\1/')" + cp "$HOME/.openclaw/openclaw.json" "$HOME/.openclaw/openclaw.json.bak.$(date +%s)" + log "Backup de config existente guardado en ~/.openclaw/openclaw.json.bak.*" +fi +GATEWAY_TOKEN="${GATEWAY_TOKEN:-$(openssl rand -hex 24 2>/dev/null || cat /dev/urandom | tr -dc 'a-f0-9' | head -c 48)}" + +mkdir -p "$HOME/.openclaw/workspace" +cat > "$HOME/.openclaw/openclaw.json" </dev/null || true + +log "Instalando daemon del gateway (systemd usuario)..." +"$OPENCLAW_BIN" daemon install --runtime node >/dev/null 2>&1 || warn "daemon install avisó algo; se intenta igual" +systemctl --user daemon-reload 2>/dev/null || true +systemctl --user enable --now openclaw-gateway.service >/dev/null 2>&1 || { + warn "El servicio openclaw-gateway no arrancó al vuelo; reintentando..." + sleep 2 + systemctl --user start openclaw-gateway.service >/dev/null 2>&1 || true +} +sleep 4 + +# ---------------- 5) Verificación ---------------- +log "Verificando proxy..." +curl -fsS "http://127.0.0.1:${PROXY_PORT}/health" && echo +log "Verificando gateway ($GATEWAY_PORT)..." +(ss -tln 2>/dev/null || netstat -tln 2>/dev/null) | grep -q ":$GATEWAY_PORT " && echo "gateway escuchando en :$GATEWAY_PORT" || warn "no se detectó el puerto $GATEWAY_PORT (revisa: systemctl --user status openclaw-gateway)" + +if timeout 60 "$OPENCLAW_BIN" agent -m "Responde SOLO con: OK" --agent main >/dev/null 2>&1; then + log "Inferencia verificada: el agente respondió OK con $MODEL." +else + warn "La verificación de inferencia no respondió en 60s. El gateway puede estar calentando; probá luego:" + warn " openclaw agent -m 'hola' --agent main" +fi + +echo +echo "==============================================================================" +echo " ✅ OpenClaw listo" +echo " Modelo : $MODEL" +echo " Endpoint : http://127.0.0.1:${PROXY_PORT}/v1" +echo " Gateway : ws://127.0.0.1:${GATEWAY_PORT}" +echo " Servicios : free-ide-proxy + openclaw-gateway (systemd usuario)" +echo "----------------------------------------------------------------------------" +echo " Chat: openclaw chat" +echo " Status: openclaw gateway status" +echo " Panel: openclaw dashboard" +echo "==============================================================================" diff --git a/uninstall.sh b/uninstall.sh new file mode 100644 index 0000000..dfba839 --- /dev/null +++ b/uninstall.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash +# Desinstala OpenClaw All-in-One (servicios + config, deja los binarios). +set -euo pipefail + +log() { echo -e "\033[1;34m[openclaw]\033[0m $*"; } + +export XDG_RUNTIME_DIR="/run/user/$(id -u)" +export DBUS_SESSION_BUS_ADDRESS="unix:path=$XDG_RUNTIME_DIR/bus" +export PATH="$HOME/.local/bin:$HOME/.openclaw/bin:$PATH" + +log "Deteniendo y deshabilitando servicios de usuario..." +for svc in openclaw-gateway free-ide-proxy; do + systemctl --user disable --now "$svc.service" 2>/dev/null || true +done +systemctl --user daemon-reload 2>/dev/null || true + +if command -v openclaw >/dev/null 2>&1; then + log "Desinstalando daemon openclaw..." + openclaw daemon uninstall >/dev/null 2>&1 || true +fi + +log "Backup de la config..." +[ -f "$HOME/.openclaw/openclaw.json" ] && cp "$HOME/.openclaw/openclaw.json" "$HOME/.openclaw/openclaw.json.bak.$(date +%s)" || true + +log "Limpiando archivos de servicio de usuario..." +rm -f "$HOME/.config/systemd/user/openclaw-gateway.service" "$HOME/.config/systemd/user/free-ide-proxy.service" +rm -f "$HOME/.config/systemd/user/free-ide-proxy.service.bak" + +log "Listo. Para borrar datos: rm -rf ~/.openclaw (binarios: npm uninstall -g openclaw; rm ~/.local/bin/free-ide-proxy)"