v2.4.8: preflight port-conflict check

Добавлена предустановочная проверка свободы портов перед установкой
telemt. На вход приходит режим (lite/pro) и выбранный порт, проверяются
443 (lite: выбранный), 80 и 8443 (pro). Известный proxy/VPN/веб-софт
(xray, sing-box, v2ray, trojan, hysteria, mtg, shadowsocks, x-ui,
marzban, amneziawg, caddy, apache, haproxy, wireguard, openvpn)
распознаётся по имени процесса и показывается отдельным блоком.

При конфликте пользователь видит список занятых портов, получает
рекомендацию удалить конфликтующий софт или взять чистый VPS, и
может либо форсировать установку, либо отказаться — тогда показывается
15-секундный промо-блок с QR для донатов и возврат в меню.

Override для автоматизированных сценариев: GOTELEGRAM_SKIP_PREFLIGHT=1.

Files:
  lib/common.sh      — get_port_process, match_known_conflict, preflight_check
  lib/lang/ru.sh     — preflight_* i18n keys (ru)
  lib/lang/en.sh     — preflight_* i18n keys (en)
  install.sh         — preflight_check вызов в install_lite_mode / install_pro_mode;
                        show_promo_with_qr теперь принимает countdown arg
  gotelegram-bot/bot.py — version bump 2.4.7 → 2.4.8
This commit is contained in:
anten-ka
2026-04-11 23:48:53 +03:00
parent 8f249c35e5
commit 9d9d12e150
5 changed files with 207 additions and 4 deletions

18
install.sh Executable file → Normal file
View File

@@ -295,6 +295,12 @@ install_lite_mode() {
port=$(select_port)
[ $? -ne 0 ] && return
# Preflight: port conflict check (checks the external port only for lite)
if ! preflight_check "lite" "$port"; then
show_promo_with_qr 15
return
fi
# Generate secret
local secret
secret=$(generate_hex 32)
@@ -342,6 +348,12 @@ install_lite_mode() {
install_pro_mode() {
log_step "$(t install_pro_step)"
# Preflight: pro mode needs 443, 80 and 8443 (internal nginx mask)
if ! preflight_check "pro"; then
show_promo_with_qr 15
return
fi
# Enter domain
echo ""
echo -ne " ${WHITE}$(t install_enter_domain)${NC} "
@@ -1142,6 +1154,7 @@ mark_promo_shown() {
# текстовые ссылки и промокоды (см. _promo_block) — QR-коды хостеров
# визуально конкурировали с чаевыми и перегружали экран.
show_promo_with_qr() {
local countdown="${1:-5}"
_promo_block
# QR только для чаевых
@@ -1154,8 +1167,9 @@ show_promo_with_qr() {
mark_promo_shown
# 5-second countdown
for i in 5 4 3 2 1; do
# Countdown (default 5s, caller may pass longer for preflight abort)
local i
for ((i=countdown; i>0; i--)); do
echo -ne "\r ${DIM}$(tf promo_menu_in "$i")${NC} "
sleep 1
done