Skip to content

Fix/setup-interactive-mode#4

Merged
ikeniborn merged 5 commits into
devfrom
fix/setup-interactive-mode
Nov 19, 2025
Merged

Fix/setup-interactive-mode#4
ikeniborn merged 5 commits into
devfrom
fix/setup-interactive-mode

Conversation

@ikeniborn

Copy link
Copy Markdown
Owner

Исправлена финальная проблема с ANSI кодами в .env - функция
prompt_network_selection() выводила info и echo в stdout.

Changes:

  • Перенаправлены info "Select network mode:" в stderr
  • Перенаправлены все echo в начале функции в stderr (строки 87, 92-100)

Fixes:

  • NETWORK_MODE больше не содержит "[INFO] Select network mode:"
  • .env файл полностью чистый от лишнего вывода
  • Command substitution $(prompt_network_selection) возвращает только "mode|name"

Root Cause:

  • setup.sh вызывает: result=$(prompt_network_selection)
  • Весь stdout попадал в переменную $result
  • info и echo выводились в stdout вместо stderr
  • Результат: NETWORK_MODE=[INFO]... вместо NETWORK_MODE=shared

🤖 Generated with Claude Code

Co-Authored-By: Claude noreply@anthropic.com

Добавлена проверка BASH_SOURCE для определения способа запуска
скрипта (прямой vs source). Это исправляет проблему, когда setup.sh
показывал usage вместо интерактивных промптов.

Changes:
- Обернуть вызов main "$@" в условную проверку
- При source - только загружаются функции без автовыполнения
- При прямом запуске - выполняется main с аргументами

Fixes:
- setup.sh теперь запускается интерактивно без аргументов
- network-manager.sh работает как standalone CLI
- source в других скриптах не вызывает побочных эффектов

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Исправлена обработка пользовательского ввода и вывода информации
в функциях list_available_networks и prompt_network_selection.

Changes:
- Перенаправлены info/success/warning сообщения в stderr (>&2)
- list_available_networks теперь возвращает только число в stdout
- Добавлена валидация что choice является числом перед сравнением
- Добавлена проверка диапазона для choice (1 до max_choice)

Fixes:
- Исправлена ошибка "integer expression expected" при нечисловом вводе
- Исправлена ошибка "syntax error: operand expected"
- setup.sh теперь корректно ожидает пользовательский ввод

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Исправлена проблема с автовыполнением скриптов при source и
улучшена обработка stdin/stdout в nginx-setup.sh.

Changes:
- Добавлена проверка BASH_SOURCE в ufw-setup.sh (строка 384)
- Перенаправлены info/warning/error/success в stderr в detect_nginx_containers()
- Перенаправлены все информационные сообщения в stderr в prompt_nginx_selection()

Fixes:
- setup.sh больше не запускает UFW конфигурацию автоматически
- Nginx промпты теперь показываются корректно
- Скрипт не зависает после "UFW Firewall Setup"
- Пользователь видит все интерактивные промпты для выбора nginx

Root Cause:
- nginx-setup.sh делает source ufw-setup.sh (строка 10)
- ufw-setup.sh автоматически вызывал main "$@" при source
- prompt_nginx_selection() выводил info сообщения в stdout
- command substitution захватывал весь вывод включая info сообщения

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Исправлена критичная ошибка с ANSI escape кодами в .env файле
и добавлен информативный итоговый вывод в конце setup.sh.

Changes:
- Перенаправлены все info/success/error в stderr в validate_subnet()
- Перенаправлены все info/success/error в stderr в find_free_subnet()
- Перенаправлены все info/success/error в stderr в create_network()
- Исправлена редиректация в find_free_subnet(): &>/dev/null вместо 2>&1 >/dev/null
- Заменен простой вывод в конце setup.sh на детальный summary

Fixes:
- .env файл больше не содержит ANSI escape кодов
- deploy.sh не падает с ошибкой "command not found"
- Пользователь видит полный summary с итоговыми параметрами
- Показываются все конфигурационные детали: Network, Nginx, CouchDB, Domain, Backups

Root Cause:
- Функции validate_subnet/find_free_subnet/create_network выводили info в stdout
- Command substitution $(find_free_subnet) захватывал весь stdout включая ANSI коды
- ANSI коды попадали в переменную NETWORK_SUBNET
- При записи в .env появлялись строки вида: $'36m[INFO]\E[0m'

Impact:
- Пользователь теперь видит красивый summary после завершения setup
- Все параметры отображаются структурировано
- Ясно указаны следующие шаги

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Исправлена финальная проблема с ANSI кодами в .env - функция
prompt_network_selection() выводила info и echo в stdout.

Changes:
- Перенаправлены info "Select network mode:" в stderr
- Перенаправлены все echo в начале функции в stderr (строки 87, 92-100)

Fixes:
- NETWORK_MODE больше не содержит "[INFO] Select network mode:"
- .env файл полностью чистый от лишнего вывода
- Command substitution $(prompt_network_selection) возвращает только "mode|name"

Root Cause:
- setup.sh вызывает: result=$(prompt_network_selection)
- Весь stdout попадал в переменную $result
- info и echo выводились в stdout вместо stderr
- Результат: NETWORK_MODE=[INFO]... вместо NETWORK_MODE=shared

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
@ikeniborn ikeniborn merged commit f942c37 into dev Nov 19, 2025
1 check failed
@ikeniborn ikeniborn deleted the fix/setup-interactive-mode branch November 19, 2025 11:01
ikeniborn pushed a commit that referenced this pull request Nov 19, 2025
…lidation)

Исправлены 4 критические ошибки деплоя:

1. Ошибка #1: cp не может найти nginx config file
   - Проблема: stdout contamination в generate_nginx_config()
   - Решение: Перенаправить info() в stderr через >&2
   - Файл: scripts/nginx-setup.sh:91

2. Ошибка #2: Certbot не может получить SSL (port 80 занят)
   - Проблема: certbot --standalone требует свободный порт 80
   - Решение: Автоматически останавливать nginx перед certbot, запускать обратно после
   - Файл: scripts/ssl-setup.sh:97-137

3. Ошибка #3: NETWORK_NAME variable is not set
   - Проблема: Недостаточная валидация .env переменных
   - Решение: Добавить NETWORK_NAME и NETWORK_MODE в required_vars
   - Файл: deploy.sh:94

4. Ошибка #4: UFW is not active
   - Проблема: Недостаточно информативный error message
   - Решение: Улучшить error message с инструкциями
   - Файл: deploy.sh:104-112

Дополнительно:
- Обновлена документация в docs/troubleshooting.md
- Добавлена секция "Проблемы с деплоем" с описанием всех 4 ошибок
- Добавлен Pre-deployment Checklist

Тестирование:
- Все скрипты прошли bash syntax check

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants