From 54a53e9ff0f1341be424234f111928d3692ca041 Mon Sep 17 00:00:00 2001 From: Dimasssss Date: Thu, 28 May 2026 12:26:46 +0300 Subject: [PATCH] Update install.sh --- install.sh | 83 ++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 58 insertions(+), 25 deletions(-) diff --git a/install.sh b/install.sh index 78c0678..955c73d 100644 --- a/install.sh +++ b/install.sh @@ -84,21 +84,22 @@ set_language() { L_INFO_KEEP_CONF="Примечание: Конфигурация сохранена. Используйте 'purge' для очистки." L_INFO_I_START="Начинается установка" L_I_STAGE_1=">>> Этап 1: Проверка окружения и зависимостей" - L_I_STAGE_1_5=">>> Этап 1.5: Интерактивная настройка" + L_I_STAGE_2=">>> Этап 2: Интерактивная настройка" L_I_PROMPT_DOM="\nПожалуйста, укажите домен TLS\nНажмите Enter, чтобы оставить по умолчанию [%s]: " + L_I_PROMPT_PORT="\nПожалуйста, укажите порт сервера\nНажмите Enter, чтобы оставить по умолчанию [%s]: " L_WARN_NO_TTY="Интерактивный режим недоступен (нет TTY). Используется:" - L_I_STAGE_2=">>> Этап 2: Загрузка архива" + L_I_STAGE_3=">>> Этап 3: Загрузка архива" L_ERR_TMP_DIR="Не удалось создать временную директорию" L_ERR_TMP_INV="Временная директория недействительна" L_INFO_FALLBACK="Сборка x86_64-v3 не найдена, откат к стандартной x86_64..." L_ERR_DL_FAIL="Ошибка загрузки архива" - L_I_STAGE_3=">>> Этап 3: Распаковка архива" + L_I_STAGE_4=">>> Этап 4: Распаковка архива" L_ERR_EXTRACT="Ошибка распаковки архива." L_ERR_BIN_NOT_FOUND="Бинарный файл не найден в архиве" - L_I_STAGE_4=">>> Этап 4: Настройка окружения (Юзер, Группа, Папки)" - L_I_STAGE_5=">>> Этап 5: Установка бинарного файла" - L_I_STAGE_6=">>> Этап 6: Генерация/Обновление конфигурации" - L_I_STAGE_7=">>> Этап 7: Установка и запуск службы" + L_I_STAGE_5=">>> Этап 5: Настройка окружения (Юзер, Группа, Папки)" + L_I_STAGE_6=">>> Этап 6: Установка бинарного файла" + L_I_STAGE_7=">>> Этап 7: Генерация/Обновление конфигурации" + L_I_STAGE_8=">>> Этап 8: Установка и запуск службы" L_OUT_WARN_H="УСТАНОВКА ЗАВЕРШЕНА С ПРЕДУПРЕЖДЕНИЯМИ" L_OUT_WARN_D="Служба установлена, но не запустилась.\nПожалуйста, проверьте логи.\n" L_OUT_SUCC_H="УСТАНОВКА УСПЕШНО ЗАВЕРШЕНА" @@ -160,21 +161,22 @@ set_language() { L_INFO_KEEP_CONF="Note: Configuration kept. Run with 'purge' to remove completely." L_INFO_I_START="Starting installation of" L_I_STAGE_1=">>> Stage 1: Verifying environment and dependencies" - L_I_STAGE_1_5=">>> Stage 1.5: Interactive Setup" + L_I_STAGE_2=">>> Stage 2: Interactive Setup" L_I_PROMPT_DOM="\nPlease specify the TLS Domain\nPress Enter to keep default [%s]: " + L_I_PROMPT_PORT="\nPlease specify the Server Port\nPress Enter to keep default [%s]: " L_WARN_NO_TTY="Interactive mode unavailable (no TTY). Using:" - L_I_STAGE_2=">>> Stage 2: Downloading archive" + L_I_STAGE_3=">>> Stage 3: Downloading archive" L_ERR_TMP_DIR="Temp directory creation failed" L_ERR_TMP_INV="Temp directory is invalid or was not created" L_INFO_FALLBACK="x86_64-v3 build not found, falling back to standard x86_64..." L_ERR_DL_FAIL="Download failed" - L_I_STAGE_3=">>> Stage 3: Extracting archive" + L_I_STAGE_4=">>> Stage 4: Extracting archive" L_ERR_EXTRACT="Extraction failed." L_ERR_BIN_NOT_FOUND="Binary not found in archive" - L_I_STAGE_4=">>> Stage 4: Setting up environment (User, Group, Directories)" - L_I_STAGE_5=">>> Stage 5: Installing binary" - L_I_STAGE_6=">>> Stage 6: Generating/Updating configuration" - L_I_STAGE_7=">>> Stage 7: Installing and starting service" + L_I_STAGE_5=">>> Stage 5: Setting up environment (User, Group, Directories)" + L_I_STAGE_6=">>> Stage 6: Installing binary" + L_I_STAGE_7=">>> Stage 7: Generating/Updating configuration" + L_I_STAGE_8=">>> Stage 8: Installing and starting service" L_OUT_WARN_H="INSTALLATION COMPLETED WITH WARNINGS" L_OUT_WARN_D="The service was installed but failed to start.\nPlease check the logs to determine the issue.\n" L_OUT_SUCC_H="INSTALLATION SUCCESS" @@ -269,7 +271,10 @@ say() { if [ "$#" -eq 0 ] || [ -z "${1:-}" ]; then printf '\n' else - printf '[INFO] %s\n' "$*" + case "$*" in + \[*\]*) printf '%s\n' "$*" ;; + *) printf '[INFO] %s\n' "$*" ;; + esac fi } die() { printf '[ERROR] %s\n' "$*" >&2; exit 1; } @@ -527,9 +532,9 @@ setup_dirs() { stop_service() { svc="$(get_svc_mgr)" - if [ "$svc" = "systemd" ] && systemctl is-active --quiet "$SERVICE_NAME" 2>/dev/null; then + if [ "$svc" = "systemd" ] && $SUDO systemctl is-active --quiet "$SERVICE_NAME" 2>/dev/null; then $SUDO systemctl stop "$SERVICE_NAME" 2>/dev/null || true - elif [ "$svc" = "openrc" ] && rc-service "$SERVICE_NAME" status >/dev/null 2>&1; then + elif [ "$svc" = "openrc" ] && $SUDO rc-service "$SERVICE_NAME" status >/dev/null 2>&1; then $SUDO rc-service "$SERVICE_NAME" stop 2>/dev/null || true fi } @@ -832,10 +837,36 @@ case "$ACTION" in fi fi - check_port_availability + if [ "$PORT_PROVIDED" -eq 0 ] || [ "$DOMAIN_PROVIDED" -eq 0 ]; then + say "$L_I_STAGE_2" + fi + + if [ "$PORT_PROVIDED" -eq 0 ]; then + if [ -t 0 ] || [ -c /dev/tty ]; then + while true; do + printf "$L_I_PROMPT_PORT" "$SERVER_PORT" + read -r input_port &2; continue ;; + esac + port_num="$(printf '%s\n' "$input_port" | sed 's/^0*//')" + [ -z "$port_num" ] && port_num="0" + if [ "${#port_num}" -gt 5 ] || [ "$port_num" -lt 1 ] || [ "$port_num" -gt 65535 ]; then + printf '[ERROR] %s\n' "$L_ERR_PORT_RANGE" >&2; continue + fi + SERVER_PORT="$port_num" + break + done + else + say "[WARNING] $L_WARN_NO_TTY $SERVER_PORT" + fi + PORT_PROVIDED=1 + fi if [ "$DOMAIN_PROVIDED" -eq 0 ]; then - say "$L_I_STAGE_1_5" if [ -t 0 ] || [ -c /dev/tty ]; then printf "$L_I_PROMPT_DOM" "$TLS_DOMAIN" read -r input_domain /dev/null; then die "$L_ERR_EXTRACT" fi @@ -891,16 +924,16 @@ case "$ACTION" in EXTRACTED_BIN="$(find "$TEMP_DIR" -type f -name "$BIN_NAME" -print 2>/dev/null | head -n 1 || true)" [ -n "$EXTRACTED_BIN" ] || die "$L_ERR_BIN_NOT_FOUND" - say "$L_I_STAGE_4" + say "$L_I_STAGE_5" ensure_user_group; setup_dirs; stop_service - say "$L_I_STAGE_5" + say "$L_I_STAGE_6" install_binary "$EXTRACTED_BIN" "${INSTALL_DIR}/${BIN_NAME}" - say "$L_I_STAGE_6" + say "$L_I_STAGE_7" install_config - say "$L_I_STAGE_7" + say "$L_I_STAGE_8" install_service if [ "${SERVICE_START_FAILED:-0}" -eq 1 ]; then