From eeeed36358fafe12df97f7436f5c7d8ab45ab5ae Mon Sep 17 00:00:00 2001 From: Hermes Team Date: Tue, 1 Sep 2026 02:12:22 +0700 Subject: [PATCH] =?UTF-8?q?fix(installer):=20=D1=83=D1=81=D1=82=D0=B0?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D0=BA=D0=B0=20=D0=BD=D0=B0=20Linux=20=D0=BD?= =?UTF-8?q?=D0=B5=20=D0=BE=D1=81=D1=82=D0=B0=D0=BD=D0=B0=D0=B2=D0=BB=D0=B8?= =?UTF-8?q?=D0=B2=D0=B0=D0=BB=D0=B0=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0?= =?UTF-8?q?=D1=8E=D1=89=D0=B8=D0=B9=20=D1=85=D0=B0=D0=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Установщик копировал файлы, но работающий сервер не трогал. Процесс продолжал выполнять прежний код из памяти, и владелец видел старый интерфейс при новом номере сборки: раздача статики читает файлы с диска, а вся логика действий живёт в загруженном модуле. Три сборки подряд ставились в файлы, но не в работу — отсюда «сброс не работает», «очистка не работает», «версия не изменилась». Добавлен шаг 0: остановка процессов хаба до копирования. Ищутся только процессы текущего пользователя и только по признакам хаба (antigravity_provider.router.web, hermes_hub_web_entry). Сначала обычное завершение, десять секунд ожидания, затем принудительное. Если процессы всё же остались, установка НЕ прерывается — файлы обновляются, а владельцу сообщается, что старый код продолжит работать, пока он их не снимет. В итоговом сообщении сказано, что хаб остановлен и его надо запустить заново, и дана команда для проверки, что поднялся новый код. 609 passed, ruff clean. Co-Authored-By: Claude Opus 5 --- installer/install-linux.sh | 61 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/installer/install-linux.sh b/installer/install-linux.sh index cd1bb27..957f848 100644 --- a/installer/install-linux.sh +++ b/installer/install-linux.sh @@ -22,6 +22,60 @@ echo "Hermes Home : $HERMES_HOME" echo "Source Root : $REPO_ROOT" echo "" +# 0. Остановка работающего хаба. +# +# Установщик копировал файлы, но работающий сервер не трогал: он продолжал +# крутить старый код в памяти, и владелец видел прежний интерфейс при новом +# номере сборки. Три сборки подряд ставились в файлы, но не в работу. +echo "[0/6] Остановка работающего Hermes Hub..." + +stop_running_hub() { + local pattern="antigravity_provider.router.web|hermes_hub_web_entry" + local pids + # Только процессы ЭТОГО пользователя и только те, что относятся к хабу. + pids="$(pgrep -u "$(id -u)" -f "$pattern" 2>/dev/null | tr ' +' ' ')" + + if [ -z "$pids" ]; then + echo " Работающий хаб не найден — останавливать нечего." + return 0 + fi + + echo " Найдены процессы хаба: $pids" + # shellcheck disable=SC2086 + kill $pids 2>/dev/null || true + + local waited=0 + while [ "$waited" -lt 10 ]; do + sleep 1 + waited=$((waited + 1)) + pids="$(pgrep -u "$(id -u)" -f "$pattern" 2>/dev/null | tr ' +' ' ')" + [ -z "$pids" ] && break + done + + if [ -n "$pids" ]; then + echo " Не завершились за 10 секунд, снимаю принудительно: $pids" + # shellcheck disable=SC2086 + kill -9 $pids 2>/dev/null || true + sleep 1 + pids="$(pgrep -u "$(id -u)" -f "$pattern" 2>/dev/null | tr ' +' ' ')" + fi + + if [ -n "$pids" ]; then + # Не прерываем установку: файлы обновятся, а владельцу скажем правду. + echo " ⚠ Остались процессы: $pids. Снимите их вручную, иначе будет работать старый код." + return 1 + fi + + echo " Хаб остановлен." + return 0 +} + +stop_running_hub || true +echo "" + # 1. Check / Discover Python Runtime and Hermes Environment echo "[1/6] Checking Python and Hermes environment..." PYTHON_BIN="" @@ -203,5 +257,12 @@ echo "To launch the Web Application window:" echo " $LAUNCHER_BIN" echo "" echo "Or open 'Hermes Hub Web' from your Applications menu." +echo "" +echo "ВАЖНО: работавший хаб был остановлен перед установкой, иначе он" +echo "продолжал бы выполнять прежний код из памяти. Запустите его заново" +echo "командой выше — только тогда новая сборка начнёт работать." +echo "" +echo "Проверить, что поднялся новый код:" +echo " curl -s -D - -o /dev/null http://127.0.0.1:5800/workspace.js | grep -i cache-control" echo "======================================================================" exit 0