ASTAROTH0405 commited on
Commit
0d3e20c
·
verified ·
1 Parent(s): 39ce25b

Update start.sh

Browse files
Files changed (1) hide show
  1. start.sh +69 -75
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
- REPO_DIR="/data/agent-zero-repo"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
 
17
- # Asegurar la propiedad de los archivos en tiempo de ejecución para el usuario UID 1000
18
- chown -R agent:agent /data 2>/dev/null || true
 
 
19
 
20
- # 1. Inicialización quirúrgica del directorio de usuario /a0/usr
21
- if; then
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. Mitigación Crítica ENXIO: Eliminación de sockets UNIX residuales antes de actualizaciones/backups
30
- echo "🧹 Purgando sockets UNIX activos o huérfanos de escritorio en /data/usr para evitar fallos de compresión..."
 
31
  find "$DATA_USR" -type s -delete 2>/dev/null || true
32
 
33
- # 3. Inicialización del entorno virtual de Framework persistente
34
- if; then
35
- echo "📦 Copiando entorno virtual del framework (/opt/venv-a0) a /data/venv-a0..."
36
- mkdir -p "$DATA_VENV_A0"
37
- cp -a /opt/venv-a0/. "$DATA_VENV_A0/" 2>/dev/null || true
38
- fi
39
 
40
- # 4. Inicialización del entorno virtual de Ejecución persistente (Habilidades del agente)
41
- if; then
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. Sincronización de Repositorio Resistente a Modificaciones Locales
48
  if; then
49
- echo "🔄 Detectado repositorio existente de Agent Zero. Sincronizando parches del desarrollador..."
50
- git config --global --add safe.directory "$REPO_DIR"
51
-
52
- # Resguardar posibles prompts locales o herramientas modificadas por el agente en caliente
53
- echo "💾 Salvaguardando modificaciones locales mediante Auto-Stash..."
54
- git -C "$REPO_DIR" stash push -u -m "a0-auto-stash-startup" 2>/dev/null || true
 
55
 
56
- # Intentar descargar de manera segura los cambios del núcleo upstream
57
- if! git -C "$REPO_DIR" pull origin main; then
58
- echo "⚠️ Advertencia: Conflicto severo en git pull. Realizando restablecimiento forzado para mantener estabilidad..."
59
- git -C "$REPO_DIR" reset --hard origin/main
60
  fi
61
-
62
- # Devolver los prompts modificados localmente tras la actualización limpia
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
- # Ajustar permisos globales del código descargado para UID 1000
72
- chown -R agent:agent "$REPO_DIR"
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
- # Asegurar la propiedad de los accesos directos simbólicos para evitar fallas lógicas de resolución
84
- chown -h agent:agent /git/agent-zero /a0/usr /opt/venv-a0 /opt/venv
85
- chown -R agent:agent /data/usr /data/venv-a0 /data/venv
 
 
86
 
87
  # Diagnóstico de almacenamiento
88
- echo "📊 Diagnóstico de ocupación física en volumen persistente:"
89
  du -sh /data/ 2>/dev/null || echo "No se pudo calcular la ocupación de disco"
90
  echo "=========================================================="
91
 
92
- # 7. Ejecución de la UI web bajo identidad estricta no privilegiada
93
  cd /git/agent-zero
94
- export HOME=/home/agent USER=agent LOGNAME=agent
95
-
96
- PYTHON_CMD="/opt/venv-a0/bin/python"
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