Update start.sh
Browse files
start.sh
CHANGED
|
@@ -1,104 +1,98 @@
|
|
| 1 |
#!/bin/bash
|
| 2 |
set -e
|
| 3 |
|
| 4 |
-
# Configurar un límite alto de file descriptors para evitar colapsos por Playwright y subagentes
|
| 5 |
-
ulimit -n 65536 2>/dev/null || true
|
| 6 |
-
|
| 7 |
echo "=========================================================="
|
| 8 |
echo " INICIALIZANDO AGENT ZERO EN HUGGING FACE SPACES"
|
| 9 |
echo "=========================================================="
|
| 10 |
|
| 11 |
-
# Definición de rutas operacionales
|
| 12 |
DATA_USR="/data/usr"
|
| 13 |
DATA_VENV_A0="/data/venv-a0"
|
| 14 |
DATA_VENV_EXEC="/data/venv"
|
| 15 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 16 |
|
| 17 |
-
#
|
| 18 |
-
|
|
|
|
|
|
|
| 19 |
|
| 20 |
-
# 1.
|
| 21 |
-
|
| 22 |
-
echo "📦 Inicializando datos de usuario estructurados en /data/usr..."
|
| 23 |
-
mkdir -p "$DATA_USR"
|
| 24 |
-
if [ -d /a0/usr ]; then
|
| 25 |
-
cp -a /a0/usr/. "$DATA_USR/" 2>/dev/null || true
|
| 26 |
-
fi
|
| 27 |
-
fi
|
| 28 |
|
| 29 |
-
# 2.
|
| 30 |
-
|
|
|
|
| 31 |
find "$DATA_USR" -type s -delete 2>/dev/null || true
|
| 32 |
|
| 33 |
-
# 3.
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
mkdir -p "$DATA_VENV_A0"
|
| 37 |
-
cp -a /opt/venv-a0/. "$DATA_VENV_A0/" 2>/dev/null || true
|
| 38 |
-
fi
|
| 39 |
|
| 40 |
-
# 4.
|
| 41 |
-
|
| 42 |
-
echo "📦 Copiando entorno virtual del agente (/opt/venv) a /data/venv..."
|
| 43 |
-
mkdir -p "$DATA_VENV_EXEC"
|
| 44 |
-
cp -a /opt/venv/. "$DATA_VENV_EXEC/" 2>/dev/null || true
|
| 45 |
-
fi
|
| 46 |
|
| 47 |
-
# 5.
|
| 48 |
if; then
|
| 49 |
-
echo "
|
| 50 |
-
git
|
| 51 |
-
|
| 52 |
-
|
| 53 |
-
|
| 54 |
-
|
|
|
|
| 55 |
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
git -C "$REPO_DIR" reset --hard origin/main
|
| 60 |
fi
|
| 61 |
-
|
| 62 |
-
|
| 63 |
-
git -C "$REPO_DIR" stash pop 2>/dev/null || true
|
| 64 |
-
else
|
| 65 |
-
echo "📦 Clonando código base oficial de Agent Zero en volumen persistente..."
|
| 66 |
-
rm -rf "$REPO_DIR"
|
| 67 |
-
git clone https://github.com/agent0ai/agent-zero.git "$REPO_DIR"
|
| 68 |
-
git config --global --add safe.directory "$REPO_DIR"
|
| 69 |
fi
|
| 70 |
|
| 71 |
-
#
|
| 72 |
-
|
| 73 |
-
|
| 74 |
-
# 6. Vinculación lógica inequívoca de rutas efímeras a volúmenes persistentes
|
| 75 |
-
echo "🔗 Estructurando enlaces simbólicos quirúrgicos para desviar escrituras efímeras..."
|
| 76 |
-
rm -rf /git/agent-zero /a0/usr /opt/venv-a0 /opt/venv
|
| 77 |
-
|
| 78 |
-
ln -sfn "$REPO_DIR" /git/agent-zero
|
| 79 |
-
ln -sfn "$DATA_USR" /a0/usr
|
| 80 |
-
ln -sfn "$DATA_VENV_A0" /opt/venv-a0
|
| 81 |
-
ln -sfn "$DATA_VENV_EXEC" /opt/venv
|
| 82 |
|
| 83 |
-
#
|
| 84 |
-
|
| 85 |
-
|
|
|
|
|
|
|
| 86 |
|
| 87 |
# Diagnóstico de almacenamiento
|
| 88 |
-
echo "📊
|
| 89 |
du -sh /data/ 2>/dev/null || echo "No se pudo calcular la ocupación de disco"
|
| 90 |
echo "=========================================================="
|
| 91 |
|
| 92 |
-
#
|
| 93 |
cd /git/agent-zero
|
| 94 |
-
|
| 95 |
-
|
| 96 |
-
|
| 97 |
-
if; then
|
| 98 |
-
echo "❌ Error Catastrófico: Intérprete de Python no ejecutable en /opt/venv-a0"
|
| 99 |
-
exit 1
|
| 100 |
-
fi
|
| 101 |
-
|
| 102 |
-
echo "🚀 Iniciando servidor de interfaz de usuario de Agent Zero en puerto $PORT..."
|
| 103 |
-
exec setpriv --reuid=1000 --regid=1000 --clear-groups \
|
| 104 |
-
"$PYTHON_CMD" run_ui.py --host 0.0.0.0 --port "$PORT" --dockerized=True
|
|
|
|
| 1 |
#!/bin/bash
|
| 2 |
set -e
|
| 3 |
|
|
|
|
|
|
|
|
|
|
| 4 |
echo "=========================================================="
|
| 5 |
echo " INICIALIZANDO AGENT ZERO EN HUGGING FACE SPACES"
|
| 6 |
echo "=========================================================="
|
| 7 |
|
| 8 |
+
# Definición de rutas operacionales en volumen persistente
|
| 9 |
DATA_USR="/data/usr"
|
| 10 |
DATA_VENV_A0="/data/venv-a0"
|
| 11 |
DATA_VENV_EXEC="/data/venv"
|
| 12 |
+
DATA_REPO_DIR="/data/agent-zero-repo"
|
| 13 |
+
DATA_HOME="/data/home"
|
| 14 |
+
|
| 15 |
+
# Función para persistir directorios de manera limpia y compatible con actualizaciones
|
| 16 |
+
persist_and_link() {
|
| 17 |
+
local CONTAINER_DIR="$1"
|
| 18 |
+
local PERSIST_DIR="$2"
|
| 19 |
+
|
| 20 |
+
echo "Procesando persistencia: $CONTAINER_DIR -> $PERSIST_DIR"
|
| 21 |
+
|
| 22 |
+
# Si no existe en el volumen /data, realizamos copia inicial
|
| 23 |
+
if; then
|
| 24 |
+
echo " ➕ Copia inicial de $CONTAINER_DIR -> $PERSIST_DIR..."
|
| 25 |
+
mkdir -p "$(dirname "$PERSIST_DIR")"
|
| 26 |
+
if; then
|
| 27 |
+
cp -a "$CONTAINER_DIR" "$PERSIST_DIR"
|
| 28 |
+
else
|
| 29 |
+
mkdir -p "$PERSIST_DIR"
|
| 30 |
+
fi
|
| 31 |
+
else
|
| 32 |
+
# Si ya existe, mezclamos los nuevos archivos de la imagen sin clobber (no-overwrite)
|
| 33 |
+
# Esto previene que las actualizaciones de la imagen de Docker borren tus paquetes personalizados,
|
| 34 |
+
# pero permite que nuevas librerías oficiales añadidas por el desarrollador se importen de forma transparente.
|
| 35 |
+
echo " 🔄 Sincronizando actualizaciones del contenedor con volumen persistente..."
|
| 36 |
+
if; then
|
| 37 |
+
cp -an "$CONTAINER_DIR"/. "$PERSIST_DIR/" 2>/dev/null || true
|
| 38 |
+
fi
|
| 39 |
+
fi
|
| 40 |
|
| 41 |
+
# Eliminar el directorio efímero y crear el enlace simbólico
|
| 42 |
+
rm -rf "$CONTAINER_DIR"
|
| 43 |
+
ln -sfn "$PERSIST_DIR" "$CONTAINER_DIR"
|
| 44 |
+
}
|
| 45 |
|
| 46 |
+
# 1. Persistir el directorio de usuario (contiene chats, configuración y proyectos)
|
| 47 |
+
persist_and_link "/a0/usr" "$DATA_USR"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 48 |
|
| 49 |
+
# 2. Mitigar el error ENXIO (No such device or address) en backups y actualizaciones
|
| 50 |
+
# Eliminamos de forma preventiva sockets UNIX huérfanos generados por la interfaz de escritorio
|
| 51 |
+
echo "🧹 Purgando sockets UNIX huérfanos de escritorio en /data/usr para evitar fallos de compresión..."
|
| 52 |
find "$DATA_USR" -type s -delete 2>/dev/null || true
|
| 53 |
|
| 54 |
+
# 3. Persistir entornos virtuales (para que las instalaciones de librerías del agente sean permanentes)
|
| 55 |
+
persist_and_link "/opt/venv-a0" "$DATA_VENV_A0"
|
| 56 |
+
persist_and_link "/opt/venv" "$DATA_VENV_EXEC"
|
|
|
|
|
|
|
|
|
|
| 57 |
|
| 58 |
+
# 4. Persistir el directorio HOME de usuario (guarda configs de git, historial de comandos, etc.)
|
| 59 |
+
persist_and_link "/home/agent" "$DATA_HOME"
|
|
|
|
|
|
|
|
|
|
|
|
|
| 60 |
|
| 61 |
+
# 5. Sincronizar el repositorio de Agent Zero de forma segura contra conflictos de Git
|
| 62 |
if; then
|
| 63 |
+
echo "📦 Clonando código base de Agent Zero por primera vez..."
|
| 64 |
+
git clone https://github.com/agent0ai/agent-zero.git "$DATA_REPO_DIR"
|
| 65 |
+
else
|
| 66 |
+
echo "🔄 Actualizando repositorio de Agent Zero de forma segura (con Auto-Stash)..."
|
| 67 |
+
git config --global --add safe.directory "$DATA_REPO_DIR"
|
| 68 |
+
# Salvaguardar cualquier modificación local hecha por el agente en caliente para evitar dirty tree
|
| 69 |
+
git -C "$DATA_REPO_DIR" stash push -u -m "a0-auto-stash-startup" 2>/dev/null || true
|
| 70 |
|
| 71 |
+
if! git -C "$DATA_REPO_DIR" pull origin main; then
|
| 72 |
+
echo "⚠️ Advertencia: Conflicto severo en git pull. Restableciendo repositorio para mantener estabilidad..."
|
| 73 |
+
git -C "$DATA_REPO_DIR" reset --hard origin/main
|
|
|
|
| 74 |
fi
|
| 75 |
+
# Devolver las modificaciones tras la actualización limpia
|
| 76 |
+
git -C "$DATA_REPO_DIR" stash pop 2>/dev/null || true
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 77 |
fi
|
| 78 |
|
| 79 |
+
# Reemplazar la carpeta de ejecución de código por la carpeta persistente y actualizada
|
| 80 |
+
rm -rf /git/agent-zero
|
| 81 |
+
ln -sfn "$DATA_REPO_DIR" /git/agent-zero
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 82 |
|
| 83 |
+
# Sincronizar el script del bot de Telegram para asegurar que use el venv persistente
|
| 84 |
+
if [ -f /git/agent-zero/plugins/_telegram_integration/helpers/dependencies.py ]; then
|
| 85 |
+
sed -i 's|sys.executable,|"/opt/venv-a0/bin/python",|' \
|
| 86 |
+
/git/agent-zero/plugins/_telegram_integration/helpers/dependencies.py 2>/dev/null || true
|
| 87 |
+
fi
|
| 88 |
|
| 89 |
# Diagnóstico de almacenamiento
|
| 90 |
+
echo "📊 Estado de ocupación en volumen persistente /data:"
|
| 91 |
du -sh /data/ 2>/dev/null || echo "No se pudo calcular la ocupación de disco"
|
| 92 |
echo "=========================================================="
|
| 93 |
|
| 94 |
+
# 6. Lanzar la interfaz web de Agent Zero directamente (sin setpriv redundante)
|
| 95 |
cd /git/agent-zero
|
| 96 |
+
PORT=${PORT:-7860}
|
| 97 |
+
echo "🚀 Iniciando servidor de Agent Zero en el puerto $PORT..."
|
| 98 |
+
exec /opt/venv-a0/bin/python run_ui.py --host 0.0.0.0 --port "$PORT" --dockerized=True
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|