Compare commits
4
Commits
0d2af45bdb
...
v1.2.1.7
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3a8518651c | ||
|
|
915dd35f42 | ||
|
|
edabfd9a83 | ||
|
|
741a70c9bf |
@@ -1,3 +1,24 @@
|
|||||||
|
## v1.2.1.7: исправлена установка (моя регрессия в 1.2.1.6)
|
||||||
|
|
||||||
|
* В 1.2.1.6 я переписал загрузку файлов релиза и оставил проверку SHA256 установщика **раньше**
|
||||||
|
скачивания — установка обрывалась на первой же строке: `sha256sum: .../scripts/3x-ui.sh: No such file
|
||||||
|
or directory`. Теперь сначала скачиваются все файлы релиза (каждый сверяется с подписанным списком),
|
||||||
|
и только потом проверяется установщик.
|
||||||
|
* Проверено не на глаз: воспроизвёл ошибку у себя тем же путём (`--verify-only`) — красное, затем после
|
||||||
|
правки зелёное. Этот прогон добавлен в процедуру выпуска: перед подписью я запускаю установщик в режиме
|
||||||
|
`--verify-only` и убеждаюсь, что путь «скачать и проверить релиз» проходит целиком.
|
||||||
|
|
||||||
|
## v1.2.1.6: доступы к панели в конце установки и рабочая заглушка
|
||||||
|
|
||||||
|
* **Исправлено: доступы к панели не выводились.** Автор пишет строки в `/root/3x-ui.txt` без ведущих
|
||||||
|
пробелов, а наш фильтр требовал два пробела — отсюда «данных панели нет». Теперь адрес панели, логин и
|
||||||
|
пароль печатаются в конце установки (и в пункте меню «9. Доступ к панели, ссылки и заглушка»).
|
||||||
|
Рядом указывается, что подписка и ссылки по протоколам лежат в том же файле.
|
||||||
|
* **Исправлено: наша заглушка не готовилась до установщика.** Обёртка скачивала из релиза только три файла,
|
||||||
|
а `scripts/kit-local.sh` (там функция страницы) не качала — падало с «kl_site_html: command not found».
|
||||||
|
Теперь качаются все файлы релиза, и каждый сверяется с подписанным списком (проверка целостности стала
|
||||||
|
полной, а не только для установщика).
|
||||||
|
|
||||||
## v1.2.1.5: доступ к панели, ссылки и заглушка — одним пунктом меню
|
## v1.2.1.5: доступ к панели, ссылки и заглушка — одним пунктом меню
|
||||||
|
|
||||||
* **В меню kit пункт «9. Доступ к панели, ссылки и заглушка»** — открывает одним экраном: адрес панели,
|
* **В меню kit пункт «9. Доступ к панели, ссылки и заглушка»** — открывает одним экраном: адрес панели,
|
||||||
|
|||||||
@@ -191,6 +191,10 @@ bash tools/fork-sync.sh # подтянуть автора, перен
|
|||||||
|
|
||||||
bash tools/release.sh ~/.ssh/3x-ui-kit-fork/release_key # SHA256SUMS + подпись нашим ключом
|
bash tools/release.sh ~/.ssh/3x-ui-kit-fork/release_key # SHA256SUMS + подпись нашим ключом
|
||||||
|
|
||||||
|
**Перед подписью — обязательный прогон.** `bash scripts/3x-ui-local.sh --verify-only` проверяет ровно тот
|
||||||
|
путь установки, которым пойдут серверы: скачивание всех файлов релиза и сверка каждого с подписанным
|
||||||
|
списком. На Windows запускать с `TMPDIR=C:/…` (нативные утилиты не понимают MSYS-пути).
|
||||||
|
|
||||||
**Нумерация версий.** Основа — версия автора, наша надстройка добавляется через точку с единицы:
|
**Нумерация версий.** Основа — версия автора, наша надстройка добавляется через точку с единицы:
|
||||||
у автора 1.2.1 → наша сборка 1.2.1.1; вышла его 1.2.2 → наша 1.2.2.1. Так на сервере всегда видно,
|
у автора 1.2.1 → наша сборка 1.2.1.1; вышла его 1.2.2 → наша 1.2.2.1. Так на сервере всегда видно,
|
||||||
на чьей базе собрана сборка.
|
на чьей базе собрана сборка.
|
||||||
|
|||||||
+8
-8
@@ -1,9 +1,9 @@
|
|||||||
# 3X-UI KIT 1.2.1.5
|
# 3X-UI KIT 1.2.1.7
|
||||||
# 3X-UI_autoVPS 1.2.1.5
|
# 3X-UI_autoVPS 1.2.1.7
|
||||||
e1ab2a1736228e332226bb857998ecf8a82ca6fd9aa8d2e590cffac65be02c14 scripts/3x-ui.sh
|
3a5f36b8d551d23837f48cf1dea4822be94cd91eb8cc7b06c20e0789289690dc scripts/3x-ui.sh
|
||||||
f27933e32e8424ef556046e99710cccef3a53ba7fe9f996851512cdea39c0a1e scripts/hysteria2.sh
|
f91d95eea94f49ce2fc1b56114230edd85eb3be0fb0c5bf5a3431e36bf5f1cf5 scripts/hysteria2.sh
|
||||||
0b5fec8694b8793e3721040b54661629346cf91af5619df684657d0448d765df scripts/kit.sh
|
96e4ca314846cf118f195bb3beb01497fd2e09945e168876b6a34f1288115937 scripts/kit.sh
|
||||||
f214671464e1c2e174e5af9df42c95567a9b4a9141f31a39f7df2e971e89d240 scripts/kit-sub.py
|
f214671464e1c2e174e5af9df42c95567a9b4a9141f31a39f7df2e971e89d240 scripts/kit-sub.py
|
||||||
857e7c7e08dd80fe0fe1963e908094f8e8ff4d439eb72ae55b96aa92cddbb169 scripts/kit-local.sh
|
75cc7bc4e048c43989f66ca3b9e9addff8d7a434e651daba6db894e18109b45b scripts/kit-local.sh
|
||||||
c5bb4070427effe3717ae733e8eb1f519df6ebcc462aa45d8eca1f57abe60f35 scripts/3x-ui-local.sh
|
1f72217fd4d286b65aa0883e0aa44be0758bfb081b496eb0b32f35503c699420 scripts/3x-ui-local.sh
|
||||||
d9aefff7d6235afc8a7f1581041719422d58b84b93b89c25d3ecb8f7d74567cb VERSION
|
0aa3ba2dc8cf93b813171a7cb596b12a25bc5babd13bb6b3308d8f8d637369a5 VERSION
|
||||||
|
|||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
-----BEGIN SSH SIGNATURE-----
|
-----BEGIN SSH SIGNATURE-----
|
||||||
U1NIU0lHAAAAAQAAADMAAAALc3NoLWVkMjU1MTkAAAAgozRJ+f9RB6qO9S9j3BWCDtC0bV
|
U1NIU0lHAAAAAQAAADMAAAALc3NoLWVkMjU1MTkAAAAgozRJ+f9RB6qO9S9j3BWCDtC0bV
|
||||||
FHakRSSqtQPljLoQUAAAARM3gtdWkta2l0LXJlbGVhc2UAAAAAAAAABnNoYTUxMgAAAFMA
|
FHakRSSqtQPljLoQUAAAARM3gtdWkta2l0LXJlbGVhc2UAAAAAAAAABnNoYTUxMgAAAFMA
|
||||||
AAALc3NoLWVkMjU1MTkAAABABuQ7Bk9OINTS/AAmMA/6YpaWINss4u0QgANgvIpQr+PxXV
|
AAALc3NoLWVkMjU1MTkAAABAwcJjUxl9upludWNJ0ghcbrRDqzIBpNCLmpCYuLBvXswYU2
|
||||||
XBYxM0M/XtgQ7vsC6bOrH6f2KgANdwJ4ieSjlkCQ==
|
Ou29XvPQN9n9oAbXz36N5/iJSt09dhVHcAWeM5BA==
|
||||||
-----END SSH SIGNATURE-----
|
-----END SSH SIGNATURE-----
|
||||||
|
|||||||
+18
-4
@@ -44,7 +44,7 @@
|
|||||||
|
|
||||||
set -Eeuo pipefail
|
set -Eeuo pipefail
|
||||||
|
|
||||||
KIT_VERSION="1.2.1.5" # версия сборки форка; должна совпадать с VERSION релиза
|
KIT_VERSION="1.2.1.7" # версия сборки форка; должна совпадать с VERSION релиза
|
||||||
GITEA="${KIT_FORK_BASE:-https://git.rukavishnikoff.ru/hacker07/3X-UI_autoVPS}"
|
GITEA="${KIT_FORK_BASE:-https://git.rukavishnikoff.ru/hacker07/3X-UI_autoVPS}"
|
||||||
NS="3x-ui-kit-release"
|
NS="3x-ui-kit-release"
|
||||||
SIG_ID="releases@3x-ui-kit"
|
SIG_ID="releases@3x-ui-kit"
|
||||||
@@ -179,7 +179,7 @@ say "беру релиз v$KIT_VERSION и проверяю подпись"
|
|||||||
tmp=$(mktemp -d)
|
tmp=$(mktemp -d)
|
||||||
trap 'rm -rf "$tmp"' EXIT
|
trap 'rm -rf "$tmp"' EXIT
|
||||||
raw="$GITEA/raw/tag/v$KIT_VERSION"
|
raw="$GITEA/raw/tag/v$KIT_VERSION"
|
||||||
for f in SHA256SUMS SHA256SUMS.sig scripts/3x-ui.sh; do
|
for f in SHA256SUMS SHA256SUMS.sig; do
|
||||||
mkdir -p "$tmp/$(dirname "$f")"
|
mkdir -p "$tmp/$(dirname "$f")"
|
||||||
curl -fsSL --retry 3 -m 60 -o "$tmp/$f" "$raw/$f" || die "не скачался $f из $raw (Gitea доступна с сервера?)"
|
curl -fsSL --retry 3 -m 60 -o "$tmp/$f" "$raw/$f" || die "не скачался $f из $raw (Gitea доступна с сервера?)"
|
||||||
done
|
done
|
||||||
@@ -188,9 +188,21 @@ ssh-keygen -Y verify -f "$tmp/allowed_signers" -I "$SIG_ID" -n "$NS" -s "$tmp/SH
|
|||||||
|| die "подпись релиза v$KIT_VERSION не сошлась с ключом форка — это не наш релиз, ничего не запускаю"
|
|| die "подпись релиза v$KIT_VERSION не сошлась с ключом форка — это не наш релиз, ничего не запускаю"
|
||||||
sum=$(awk '{f = $2; sub(/^\*/, "", f)} f == "scripts/3x-ui.sh" {print $1}' "$tmp/SHA256SUMS")
|
sum=$(awk '{f = $2; sub(/^\*/, "", f)} f == "scripts/3x-ui.sh" {print $1}' "$tmp/SHA256SUMS")
|
||||||
[[ $(printf '%s' "$sum" | wc -c) -eq 64 ]] || die "в SHA256SUMS нет установщика — релиз собран неверно"
|
[[ $(printf '%s' "$sum" | wc -c) -eq 64 ]] || die "в SHA256SUMS нет установщика — релиз собран неверно"
|
||||||
|
# Качаем ВСЕ файлы релиза и сверяем каждый с подписанным списком. Так у нас есть и scripts/3x-ui.sh
|
||||||
|
# (установщик), и scripts/kit-local.sh (наша страница-заглушка), и всё остальное. Раньше брали только
|
||||||
|
# установщик: заглушка не готовилась («kl_site_html: command not found»), а проверка целостности была неполной.
|
||||||
|
while read -r sum2 name2; do
|
||||||
|
case $sum2 in \#* | "") continue ;; esac
|
||||||
|
case $name2 in SHA256SUMS | SHA256SUMS.sig) continue ;; esac
|
||||||
|
mkdir -p "$tmp/$(dirname "$name2")"
|
||||||
|
curl -fsSL --retry 3 -m 60 -o "$tmp/$name2" "$raw/$name2" || die "не скачался $name2 из $raw (Gitea доступна с сервера?)"
|
||||||
|
got2=$(sha256sum "$tmp/$name2" | awk '{print $1}')
|
||||||
|
[[ $got2 == "$sum2" ]] || die "SHA256 не совпал у $name2 — не запускаю"
|
||||||
|
done <"$tmp/SHA256SUMS"
|
||||||
got=$(sha256sum "$tmp/scripts/3x-ui.sh" | awk '{print $1}')
|
got=$(sha256sum "$tmp/scripts/3x-ui.sh" | awk '{print $1}')
|
||||||
[[ $got == "$sum" ]] || die "SHA256 установщика не совпал с подписанным — не запускаю"
|
[[ $got == "$sum" ]] || die "SHA256 установщика не совпал с подписанным — не запускаю"
|
||||||
bash -n "$tmp/scripts/3x-ui.sh" || die "установщик не проходит проверку синтаксиса"
|
bash -n "$tmp/scripts/3x-ui.sh" || die "установщик не проходит проверку синтаксиса"
|
||||||
|
[[ -r $tmp/scripts/kit-local.sh ]] || die "в релизе нет scripts/kit-local.sh — сборка неполная"
|
||||||
printf ' ✓ подпись сошлась, SHA256 установщика совпал\n'
|
printf ' ✓ подпись сошлась, SHA256 установщика совпал\n'
|
||||||
|
|
||||||
if [[ $verify_only == yes ]]; then
|
if [[ $verify_only == yes ]]; then
|
||||||
@@ -557,8 +569,10 @@ ${B}─────────────────────────
|
|||||||
|
|
||||||
${B}Доступ к панели${N} (файл /root/3x-ui.txt, виден только root)
|
${B}Доступ к панели${N} (файл /root/3x-ui.txt, виден только root)
|
||||||
EOF
|
EOF
|
||||||
if grep -aqE '^ (Панель|Логин|Пароль):' /root/3x-ui.txt 2>/dev/null; then
|
# Автор пишет эти строки без ведущих пробелов (RESULT=/root/3x-ui.txt), поэтому ищем их как есть.
|
||||||
grep -aE '^ (Панель|Логин|Пароль):' /root/3x-ui.txt | sed 's/^/ /'
|
if grep -aqE '^[[:space:]]*(Панель|Логин|Пароль):' /root/3x-ui.txt 2>/dev/null; then
|
||||||
|
grep -aE '^[[:space:]]*(Панель|Логин|Пароль):' /root/3x-ui.txt | sed 's/^[[:space:]]*/ /'
|
||||||
|
printf ' файл целиком (там же подписка и ссылки по протоколам): /root/3x-ui.txt\n'
|
||||||
else
|
else
|
||||||
warn "данных панели в /root/3x-ui.txt нет — смотрите вывод установщика выше"
|
warn "данных панели в /root/3x-ui.txt нет — смотрите вывод установщика выше"
|
||||||
fi
|
fi
|
||||||
|
|||||||
+1
-1
@@ -39,7 +39,7 @@ wait_apt_idle() {
|
|||||||
XUI_VERSION="v3.9.0"
|
XUI_VERSION="v3.9.0"
|
||||||
# SHA256 установщика 3X-UI этой версии: тег могут передвинуть, а хеш – нет (проверено 2026-09-30).
|
# SHA256 установщика 3X-UI этой версии: тег могут передвинуть, а хеш – нет (проверено 2026-09-30).
|
||||||
XUI_INSTALL_SHA256="18616fe26c8f6c92db6daa2dcd7cd53c5143ee69ecfd26d8ea6dc9b2c78607a6"
|
XUI_INSTALL_SHA256="18616fe26c8f6c92db6daa2dcd7cd53c5143ee69ecfd26d8ea6dc9b2c78607a6"
|
||||||
KIT_VERSION="1.2.1.5"
|
KIT_VERSION="1.2.1.7"
|
||||||
# kit и kit-sub берём из того же релиза, что и этот скрипт, а не из меняющейся ветки main.
|
# kit и kit-sub берём из того же релиза, что и этот скрипт, а не из меняющейся ветки main.
|
||||||
KIT_RAW="https://git.rukavishnikoff.ru/hacker07/3X-UI_autoVPS/raw/tag/v$KIT_VERSION"
|
KIT_RAW="https://git.rukavishnikoff.ru/hacker07/3X-UI_autoVPS/raw/tag/v$KIT_VERSION"
|
||||||
# Ядро Xray для панели. С 26.7.x клиенты на Mihomo и sing-box (Hiddify, FlClash,
|
# Ядро Xray для панели. С 26.7.x клиенты на Mihomo и sing-box (Hiddify, FlClash,
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
# Код выхода 1 при любом запуске (и при `__update_binary`) – старый `hy2 update` на нём
|
# Код выхода 1 при любом запуске (и при `__update_binary`) – старый `hy2 update` на нём
|
||||||
# останавливается и не заменяет команду hy2.
|
# останавливается и не заменяет команду hy2.
|
||||||
|
|
||||||
KIT_VERSION="1.2.1.5"
|
KIT_VERSION="1.2.1.7"
|
||||||
|
|
||||||
cat >&2 <<'MSG'
|
cat >&2 <<'MSG'
|
||||||
Отдельный установщик Hysteria2 больше не поддерживается.
|
Отдельный установщик Hysteria2 больше не поддерживается.
|
||||||
|
|||||||
@@ -967,8 +967,8 @@ kit_local_ports() { # [--close-extra] — что открыто в ufw, что
|
|||||||
kit_local_access() { # доступ к панели, ссылки на подключения, заглушка и сертификат — одним экраном
|
kit_local_access() { # доступ к панели, ссылки на подключения, заглушка и сертификат — одним экраном
|
||||||
local u=${1:-} till2
|
local u=${1:-} till2
|
||||||
printf '%s\n' "${B:-}Доступ к панели 3X-UI${N:-} (файл /root/3x-ui.txt, виден только root)"
|
printf '%s\n' "${B:-}Доступ к панели 3X-UI${N:-} (файл /root/3x-ui.txt, виден только root)"
|
||||||
if grep -aqE '^ (Панель|Логин|Пароль):' /root/3x-ui.txt 2>/dev/null; then
|
if grep -aqE '^[[:space:]]*(Панель|Логин|Пароль):' /root/3x-ui.txt 2>/dev/null; then
|
||||||
grep -aE '^ (Панель|Логин|Пароль):' /root/3x-ui.txt | sed 's/^/ /'
|
grep -aE '^[[:space:]]*(Панель|Логин|Пароль):' /root/3x-ui.txt | sed 's/^[[:space:]]*/ /'
|
||||||
else
|
else
|
||||||
kl_warn "данных панели в /root/3x-ui.txt нет"
|
kl_warn "данных панели в /root/3x-ui.txt нет"
|
||||||
fi
|
fi
|
||||||
|
|||||||
+1
-1
@@ -12,7 +12,7 @@
|
|||||||
set -Eeuo pipefail
|
set -Eeuo pipefail
|
||||||
export LC_ALL=C.UTF-8 # ширина колонок по символам, а не байтам
|
export LC_ALL=C.UTF-8 # ширина колонок по символам, а не байтам
|
||||||
|
|
||||||
KIT_VERSION="1.2.1.5"
|
KIT_VERSION="1.2.1.7"
|
||||||
KIT_RAW="https://git.rukavishnikoff.ru/hacker07/3X-UI_autoVPS/raw/branch/main"
|
KIT_RAW="https://git.rukavishnikoff.ru/hacker07/3X-UI_autoVPS/raw/branch/main"
|
||||||
# Файлы новой версии берём из её тега, а не из меняющейся ветки main.
|
# Файлы новой версии берём из её тега, а не из меняющейся ветки main.
|
||||||
kit_ref_raw() { echo "https://git.rukavishnikoff.ru/hacker07/3X-UI_autoVPS/raw/tag/v$1"; }
|
kit_ref_raw() { echo "https://git.rukavishnikoff.ru/hacker07/3X-UI_autoVPS/raw/tag/v$1"; }
|
||||||
|
|||||||
Reference in New Issue
Block a user