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