File size: 3,766 Bytes
848a39b 2885da8 848a39b 2885da8 0d3e20c 2885da8 0d3e20c 4e621fb 0d3e20c 4e621fb 0d3e20c 2885da8 4e621fb 0d3e20c 848a39b 0d3e20c 848a39b 2885da8 0d3e20c 848a39b 2885da8 4e621fb 2885da8 0d3e20c 2885da8 0d3e20c 4e621fb 2885da8 0d3e20c 848a39b 0d3e20c 848a39b 0d3e20c 848a39b 2885da8 0d3e20c 4e621fb 0d3e20c 848a39b 2885da8 848a39b 2885da8 848a39b 2885da8 0d3e20c 2885da8 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | #!/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 |