| #!/bin/bash |
| set -e |
|
|
| echo "==========================================================" |
| echo " INICIALIZANDO AGENT ZERO EN HUGGING FACE SPACES (ROOT)" |
| echo "==========================================================" |
|
|
| |
| 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 |
|
|
| |
| 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" |
|
|
| |
| 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" |
| } |
|
|
| |
| 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" |
|
|
| |
| echo "🧹 Eliminando sockets UNIX huérfanos en /data/usr..." |
| find "$DATA_USR" -type s -delete 2>/dev/null || true |
|
|
| |
| 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 |
|
|
| |
| 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 |
|
|
| |
| echo "🔧 Otorgando propiedad de /data al usuario agent (UID 1000)..." |
| chown -R agent:agent "$DATA_BASE" |
| chmod 755 "$DATA_BASE" |
|
|
| |
| 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 "==========================================================" |
|
|
| |
| 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 |