From d127a927857874bcfc525e7a67ad5e25f3b2a90a Mon Sep 17 00:00:00 2001 From: hacker07 Date: Tue, 13 Oct 2026 23:59:29 +0300 Subject: [PATCH] =?UTF-8?q?v1.2.19:=20extra=20=D0=BE=D0=B1=D1=8A=D1=8F?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BF=D1=83=D1=81=D1=82=D0=BE?= =?UTF-8?q?=D0=B9=20(set=20-u=20=D0=B2=D0=B0=D0=BB=D0=B8=D0=BB=20=D1=83?= =?UTF-8?q?=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2=D0=BA=D1=83)=20+=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=D0=BE=20=D0=B2=20FORK.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FORK-CHANGELOG.md | 9 +++++++++ FORK.md | 4 ++++ VERSION | 2 +- scripts/3x-ui-local.sh | 2 +- scripts/3x-ui.sh | 4 ++-- scripts/hysteria2.sh | 2 +- scripts/kit.sh | 2 +- tools/fork_apply.py | 6 +++--- 8 files changed, 22 insertions(+), 9 deletions(-) diff --git a/FORK-CHANGELOG.md b/FORK-CHANGELOG.md index 7e7d05a..3eb0651 100644 --- a/FORK-CHANGELOG.md +++ b/FORK-CHANGELOG.md @@ -1,3 +1,12 @@ +## v1.2.19: исправлено «extra: unbound variable» при установке + +* На середине установки (после проверки протоколов) скрипт падал: `extra: unbound variable`. + Причина — моя правка v1.2.13: присваивание ссылок legacy-подписок завёрнуто в `if`, а переменная + объявлялась как `local extra` без значения. Авторский скрипт работает с `set -u`, поэтому при + невыполненном условии (AWG и MTProto не выбраны) чтение `$extra` валило установку. Объявлена пустой. +* Правило записано в FORK.md: оборачивая авторское присваивание в `if`, объявляй переменную пустой — + `local extra=""`, иначе `set -u` обрывает установку на середине. + ## v1.2.18: выбранный «свой домен» больше не подменяется соседом * Что было: после выбора «ввести свой домен» установщик всё равно брал запасной сайт из подсети. diff --git a/FORK.md b/FORK.md index 687a58c..3486e93 100644 --- a/FORK.md +++ b/FORK.md @@ -130,6 +130,10 @@ Hysteria2 (UDP 443) работают как работали; исходящий (проверка LF, гейт справки, шапка `SHA256SUMS` в двух строках, свой список файлов). Швов к нему нет; при обновлении из авторского проекта файл конфликтует и решается в нашу пользу (как README). +Важно при правках швов: авторский скрипт работает с `set -u`, поэтому если оборачивать его присваивание +в `if`, переменную нужно объявить пустой (`local extra=""`, а не `local extra`) — иначе при невыполненном +условии любое чтение `$extra` валит установку на середине с «unbound variable». + Проверка корректности швов (делать после каждой правки и после синхронизации с автором): накатать `tools/fork_apply.py` на чистую копию авторского кода и сверить с нашим деревом — расхождений быть не должно, кроме наших собственных файлов. Это единственный способ увидеть правки, которых нет в швах. diff --git a/VERSION b/VERSION index 591bdbc..9ddbe16 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.2.18 +1.2.19 diff --git a/scripts/3x-ui-local.sh b/scripts/3x-ui-local.sh index 3c22bcc..57b00b2 100644 --- a/scripts/3x-ui-local.sh +++ b/scripts/3x-ui-local.sh @@ -44,7 +44,7 @@ set -Eeuo pipefail -KIT_VERSION="1.2.18" # версия сборки форка; должна совпадать с VERSION релиза +KIT_VERSION="1.2.19" # версия сборки форка; должна совпадать с VERSION релиза GITEA="${KIT_FORK_BASE:-https://git.rukavishnikoff.ru/hacker07/3X-UI_autoVPS}" NS="3x-ui-kit-release" SIG_ID="releases@3x-ui-kit" diff --git a/scripts/3x-ui.sh b/scripts/3x-ui.sh index 16ae0d4..3876b3d 100755 --- a/scripts/3x-ui.sh +++ b/scripts/3x-ui.sh @@ -30,7 +30,7 @@ wait_apt_idle() { XUI_VERSION="v3.9.0" # SHA256 установщика 3X-UI этой версии: тег могут передвинуть, а хеш – нет (проверено 2026-09-30). XUI_INSTALL_SHA256="18616fe26c8f6c92db6daa2dcd7cd53c5143ee69ecfd26d8ea6dc9b2c78607a6" -KIT_VERSION="1.2.18" +KIT_VERSION="1.2.19" # kit и kit-sub берём из того же релиза, что и этот скрипт, а не из меняющейся ветки main. KIT_RAW="https://git.rukavishnikoff.ru/hacker07/3X-UI_autoVPS/raw/tag/v$KIT_VERSION" # Ядро Xray для панели. С 26.7.x клиенты на Mihomo и sing-box (Hiddify, FlClash, @@ -862,7 +862,7 @@ kl_sni_menu() { fi links=$(sub_links "$SUBID") # У установок до kit 1.1 AmneziaWG и MTProto лежат в подписках «-awg» и «-tg». - local extra + local extra="" # пустая строка, иначе set -u валит скрипт, когда AWG/MTProto не выбраны # Наш шов: подписки «-awg»/«-tg» есть только у установок с AmneziaWG и MTProto — не тянем их, # если эти протоколы не выбраны (никаких лишних обращений к панели). if [[ " ${PROTOS[*]} " == *" awg "* || " ${PROTOS[*]} " == *" awg3 "* || " ${PROTOS[*]} " == *" mtproto "* ]]; then diff --git a/scripts/hysteria2.sh b/scripts/hysteria2.sh index d11bca6..bc1d7bd 100755 --- a/scripts/hysteria2.sh +++ b/scripts/hysteria2.sh @@ -8,7 +8,7 @@ # Код выхода 1 при любом запуске (и при `__update_binary`) – старый `hy2 update` на нём # останавливается и не заменяет команду hy2. -KIT_VERSION="1.2.18" +KIT_VERSION="1.2.19" cat >&2 <<'MSG' Отдельный установщик Hysteria2 больше не поддерживается. diff --git a/scripts/kit.sh b/scripts/kit.sh index 5aed906..f1dcd76 100644 --- a/scripts/kit.sh +++ b/scripts/kit.sh @@ -12,7 +12,7 @@ set -Eeuo pipefail export LC_ALL=C.UTF-8 # ширина колонок по символам, а не байтам -KIT_VERSION="1.2.18" +KIT_VERSION="1.2.19" KIT_RAW="https://git.rukavishnikoff.ru/hacker07/3X-UI_autoVPS/raw/branch/main" # Файлы новой версии берём из её тега, а не из меняющейся ветки main. kit_ref_raw() { echo "https://git.rukavishnikoff.ru/hacker07/3X-UI_autoVPS/raw/tag/v$1"; } diff --git a/tools/fork_apply.py b/tools/fork_apply.py index 603b46a..ffe53e3 100644 --- a/tools/fork_apply.py +++ b/tools/fork_apply.py @@ -347,10 +347,10 @@ def main(): ), ( 'scripts/3x-ui.sh', - ' extra=$(sub_links "$SUBID-awg" 1; sub_links "$SUBID-tg" 1)\n', + ' local extra\n extra=$(sub_links "$SUBID-awg" 1; sub_links "$SUBID-tg" 1)\n', False, - ' # Наш шов: подписки «-awg»/«-tg» есть только у установок с AmneziaWG и MTProto — не тянем их,\n # если эти протоколы не выбраны (никаких лишних обращений к панели).\n if [[ " ${PROTOS[*]} " == *" awg "* || " ${PROTOS[*]} " == *" awg3 "* || " ${PROTOS[*]} " == *" mtproto "* ]]; then\n extra=$(sub_links "$SUBID-awg" 1; sub_links "$SUBID-tg" 1)\n fi\n', - 'авто-шов: replace, строк 1', + ' local extra="" # пустая строка, иначе set -u валит скрипт, когда AWG/MTProto не выбраны\n # Наш шов: подписки «-awg»/«-tg» есть только у установок с AmneziaWG и MTProto — не тянем их,\n # если эти протоколы не выбраны (никаких лишних обращений к панели).\n if [[ " ${PROTOS[*]} " == *" awg "* || " ${PROTOS[*]} " == *" awg3 "* || " ${PROTOS[*]} " == *" mtproto "* ]]; then\n extra=$(sub_links "$SUBID-awg" 1; sub_links "$SUBID-tg" 1)\n fi\n', + 'авто-шов: replace, строк 2', ), ( 'scripts/3x-ui.sh',