From 2ca42a39c4092d0ca1d6ced5878da5bbe9a940be Mon Sep 17 00:00:00 2001 From: Hermes Team Date: Tue, 25 Aug 2026 10:37:05 +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=D1=89=D0=B8=D0=BA=20Linux=20=D1=81=D0=BE?= =?UTF-8?q?=D0=B1=D0=B8=D1=80=D0=B0=D0=BB=D1=81=D1=8F=20=D1=81=20CRLF=20?= =?UTF-8?q?=D0=B8=20=D0=BF=D0=B0=D0=B4=D0=B0=D0=BB=20=D0=BD=D0=B0=20=D0=BF?= =?UTF-8?q?=D0=B5=D1=80=D0=B2=D0=BE=D0=B9=20=D1=81=D1=82=D1=80=D0=BE=D0=BA?= =?UTF-8?q?=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit У владельца на сервере: install-linux.sh: line 7: $'\r': command not found line 31: syntax error near unexpected token `elif' Причину я назвал верно в 1d5e44a, но закрыл не там. .gitattributes нормализует переводы строк при записи в git; объекты действительно чистые — проверено git cat-file. Но сборка идёт на Windows, где рабочая копия хранится с CRLF, а build_installer_linux.sh копирует именно из РАБОЧЕЙ КОПИИ. К .gitattributes это отношения не имеет, поэтому сборка 44808bd уехала с \r. Диагностику дополнительно запутал git show: он применяет преобразование переводов строк при выводе, из-за чего индекс выглядел испорченным, хотя не был. Исправлено там, где надёжно: сборщик нормализует переводы строк в поставке перед упаковкой. Теперь неважно, как настроен checkout на машине сборки. Рабочая копия shell-скриптов тоже приведена к LF. Проверено на распакованной поставке: ни одного .sh или .py с CR (кроме самого сборщика, который на целевой машине не исполняется), пролог без CR, bash -n на install-linux.sh и hermes-hub-web.sh проходит. Co-Authored-By: Claude Opus 5 --- installer/build_installer_linux.sh | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/installer/build_installer_linux.sh b/installer/build_installer_linux.sh index 5f5befa..f924655 100644 --- a/installer/build_installer_linux.sh +++ b/installer/build_installer_linux.sh @@ -29,6 +29,16 @@ for item in src launcher assets config scripts installer; do done printf '%s' "$COMMIT" > "$STAGE/BUILD_COMMIT" +# Нормализация переводов строк — обязательный шаг, а не гигиена. +# +# Сборка идёт на Windows, где рабочая копия хранится с CRLF (core.autocrlf). +# В git объекты лежат с LF, но сборщик копирует из РАБОЧЕЙ КОПИИ, поэтому +# .gitattributes её не спасает. Установщик с падает на первой же строке: +# "$' ': command not found", а строка-маркер с не совпадает, и пролог не +# находит границу вложенных данных. Именно так сломалась сборка 44808bd. +echo "Нормализация переводов строк..." +find "$STAGE" -type f \( -name '*.sh' -o -name '*.py' -o -name '*.yaml' -o -name '*.yml' -o -name '*.json' \) -print0 | xargs -0 -r sed -i 's/ $//' + find "$STAGE" -name '__pycache__' -type d -prune -exec rm -rf {} + 2>/dev/null || true find "$STAGE" -name '*.pyc' -delete 2>/dev/null || true # Виндовые бинарники в линуксовой поставке бесполезны и весят больше мегабайта.