agent-zero-space / start.sh
ASTAROTH0405's picture
Update start.sh
2885da8 verified
Raw
History Blame Contribute Delete
3.77 kB
#!/bin/bash
set -e
echo "=========================================================="
echo " INICIALIZANDO AGENT ZERO EN HUGGING FACE SPACES (ROOT)"
echo "=========================================================="
# 1. Asegurar que el usuario agent (UID 1000) existe
if ! id -u agent >/dev/null 2>&1; then
echo "📌 Creando usuario agent (UID 1000)..."
groupadd -g 1000 agent
useradd -u 1000 -g 1000 -m -s /bin/bash agent
fi
# 2. Definir rutas persistentes
DATA_BASE="/data"
DATA_USR="$DATA_BASE/usr"
DATA_VENV_A0="$DATA_BASE/venv-a0"
DATA_VENV_EXEC="$DATA_BASE/venv"
DATA_REPO_DIR="$DATA_BASE/agent-zero-repo"
DATA_HOME="$DATA_BASE/home"
# 3. Función para persistir directorios (copia inicial o sincronización)
persist_and_link() {
local CONTAINER_DIR="$1"
local PERSIST_DIR="$2"
echo "Procesando persistencia: $CONTAINER_DIR -> $PERSIST_DIR"
if [ ! -d "$PERSIST_DIR" ]; then
echo " ➕ Copia inicial de $CONTAINER_DIR -> $PERSIST_DIR..."
mkdir -p "$(dirname "$PERSIST_DIR")"
if [ -d "$CONTAINER_DIR" ]; then
cp -a "$CONTAINER_DIR" "$PERSIST_DIR"
else
mkdir -p "$PERSIST_DIR"
fi
else
echo " 🔄 Sincronizando actualizaciones (sin sobrescribir existentes)..."
if [ -d "$CONTAINER_DIR" ]; then
cp -an "$CONTAINER_DIR"/. "$PERSIST_DIR/" 2>/dev/null || true
fi
fi
rm -rf "$CONTAINER_DIR"
ln -sfn "$PERSIST_DIR" "$CONTAINER_DIR"
}
# 4. Persistir directorios del agente
persist_and_link "/a0/usr" "$DATA_USR"
persist_and_link "/opt/venv-a0" "$DATA_VENV_A0"
persist_and_link "/opt/venv" "$DATA_VENV_EXEC"
persist_and_link "/home/agent" "$DATA_HOME"
# 5. Purgar sockets UNIX (evita error ENXIO en self-update)
echo "🧹 Eliminando sockets UNIX huérfanos en /data/usr..."
find "$DATA_USR" -type s -delete 2>/dev/null || true
# 6. Sincronizar repositorio de código con protección contra árbol sucio
if [ ! -d "$DATA_REPO_DIR/.git" ]; then
echo "📦 Clonando repositorio oficial por primera vez..."
git clone https://github.com/agent0ai/agent-zero.git "$DATA_REPO_DIR"
else
echo "🔄 Actualizando repositorio (con Auto-Stash)..."
git config --global --add safe.directory "$DATA_REPO_DIR"
git -C "$DATA_REPO_DIR" stash push -u -m "a0-auto-stash-startup" 2>/dev/null || true
if ! git -C "$DATA_REPO_DIR" pull origin main; then
echo "⚠️ Conflicto en git pull. Restableciendo repositorio..."
git -C "$DATA_REPO_DIR" reset --hard origin/main
fi
git -C "$DATA_REPO_DIR" stash pop 2>/dev/null || true
fi
rm -rf /git/agent-zero
ln -sfn "$DATA_REPO_DIR" /git/agent-zero
# 7. Parche para el plugin de Telegram (usa el venv persistente)
if [ -f /git/agent-zero/plugins/_telegram_integration/helpers/dependencies.py ]; then
sed -i 's|sys.executable,|"/opt/venv-a0/bin/python",|' \
/git/agent-zero/plugins/_telegram_integration/helpers/dependencies.py 2>/dev/null || true
fi
# 8. Asignar TODO /data al usuario agent (permisos finales)
echo "🔧 Otorgando propiedad de /data al usuario agent (UID 1000)..."
chown -R agent:agent "$DATA_BASE"
chmod 755 "$DATA_BASE"
# 9. Diagnóstico
echo "📊 Espacio usado en /data:"
du -sh "$DATA_BASE" 2>/dev/null || echo "No se pudo calcular"
echo "Propietario de /data: $(stat -c %U "$DATA_BASE")"
echo "=========================================================="
# 10. Bajar privilegios a agent y ejecutar la UI
cd /git/agent-zero
export HOME=/home/agent USER=agent LOGNAME=agent
PORT=${PORT:-7860}
echo "🚀 Iniciando Agent Zero como usuario agent en puerto $PORT..."
exec setpriv --reuid=1000 --regid=1000 --clear-groups \
/opt/venv-a0/bin/python run_ui.py --host 0.0.0.0 --port "$PORT" --dockerized=True