From 1661dea57c200b4a214e8fd23f2e3cbc52742a7f Mon Sep 17 00:00:00 2001 From: user Date: Fri, 25 Jul 2025 16:38:17 +0300 Subject: [PATCH] fix sh --- README.md | 18 +++++++++ start.sh | 118 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 130 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 4a43523..5b4dfae 100644 --- a/README.md +++ b/README.md @@ -162,6 +162,24 @@ curl http://localhost:15100/api/v3/node/peers | jq ### Проблемы и решения: +**Ошибка сборки Converter (TLS handshake timeout):** +```bash +# Автоматические решения скрипта: +# - 3 попытки сборки с увеличенными таймаутами +# - Очистка Docker cache между попытками +# - Перезапуск Docker daemon при повторных ошибках +# - Установка продолжится без converter если сборка не удалась + +# Ручная сборка converter после установки: +cd /opt/my-network/my-network/converter-module/converter +docker build --network=host --build-arg HTTP_TIMEOUT=300 -t my-network-converter:latest . + +# Проверка и сброс Docker настроек: +sudo systemctl restart docker +docker info | grep -i registry +docker system prune -f +``` + **Ошибка клонирования репозиториев:** ```bash # Проверьте доступность git.projscale.dev diff --git a/start.sh b/start.sh index 47f411c..77c1f48 100755 --- a/start.sh +++ b/start.sh @@ -911,6 +911,58 @@ setup_project() { log_success "Проект настроен в $PROJECT_DIR/my-network" } +# Функция для проверки доступности Docker registry +check_docker_registry() { + log_info "Проверка доступности Docker registry..." + + # Проверяем доступность registry.docker.io + if timeout 30 curl -s --connect-timeout 10 https://registry.docker.io/v2/ >/dev/null 2>&1; then + log_success "Docker registry доступен" + return 0 + else + log_warn "Docker registry недоступен или медленно отвечает" + return 1 + fi +} + +# Функция для настройки Docker daemon timeout +configure_docker_timeout() { + log_info "Настройка Docker timeout для сетевых операций..." + + # Создаем или обновляем Docker daemon config + local docker_config="/etc/docker/daemon.json" + local temp_config="/tmp/daemon.json.tmp" + + if [ -f "$docker_config" ]; then + # Читаем существующий конфиг + cp "$docker_config" "$temp_config" + else + # Создаем новый конфиг + echo '{}' > "$temp_config" + fi + + # Добавляем настройки timeout с помощью jq если доступен + if command -v jq >/dev/null 2>&1; then + jq '. + { + "registry-mirrors": [], + "insecure-registries": [], + "max-concurrent-downloads": 3, + "max-concurrent-uploads": 3, + "default-runtime": "runc" + }' "$temp_config" > "${temp_config}.new" && mv "${temp_config}.new" "$temp_config" + + if sudo cp "$temp_config" "$docker_config" 2>/dev/null; then + log_info "Docker daemon конфигурация обновлена" + # Перезапускаем Docker только если это безопасно + if ! docker ps >/dev/null 2>&1 || [ "$(docker ps -q | wc -l)" -eq 0 ]; then + sudo systemctl reload docker 2>/dev/null || true + fi + fi + fi + + rm -f "$temp_config" 2>/dev/null +} + # Сборка converter образа build_converter_image() { log_info "🔧 Сборка converter образа из converter-module..." @@ -934,13 +986,67 @@ build_converter_image() { # Переходим в папку converter для сборки cd converter - # Сборка converter образа из оригинального репозитория + # Настраиваем Docker timeout + configure_docker_timeout + + # Проверяем доступность registry + if ! check_docker_registry; then + log_warn "Docker registry недоступен, пробуем продолжить с увеличенным timeout" + fi + + # Сборка converter образа из оригинального репозитория с retry логикой log_info "Сборка Docker образа для converter..." - if docker build -t my-network-converter:latest . ; then - log_success "Converter образ собран: my-network-converter:latest" - else - log_error "Ошибка сборки converter образа" - return 1 + + # Попытки сборки с retry + local max_attempts=3 + local attempt=1 + local success=false + + while [ $attempt -le $max_attempts ] && [ "$success" = false ]; do + log_info "Попытка сборки $attempt из $max_attempts..." + + # Сборка с увеличенными таймаутами и дополнительными параметрами + if docker build \ + --network=host \ + --build-arg BUILDKIT_PROGRESS=plain \ + --build-arg HTTP_TIMEOUT=300 \ + --build-arg HTTPS_TIMEOUT=300 \ + -t my-network-converter:latest . ; then + log_success "Converter образ собран: my-network-converter:latest" + success=true + else + log_warn "Попытка $attempt неудачна" + + if [ $attempt -lt $max_attempts ]; then + log_info "Ожидание 15 секунд перед следующей попыткой..." + sleep 15 + + # Очистка Docker build cache и системы при неудачной попытке + log_info "Очистка Docker cache..." + docker builder prune -f >/dev/null 2>&1 || true + docker system prune -f >/dev/null 2>&1 || true + + # Попытка сброса сетевых настроек Docker + if [ $attempt -eq 2 ]; then + log_info "Перезапуск Docker daemon для сброса сетевых настроек..." + systemctl restart docker >/dev/null 2>&1 || true + sleep 10 + fi + fi + + attempt=$((attempt + 1)) + fi + done + + if [ "$success" = false ]; then + log_error "Не удалось собрать converter образ после $max_attempts попыток" + log_warn "Возможные причины:" + log_warn "1. Проблемы с подключением к Docker Hub" + log_warn "2. Сетевые проблемы на сервере" + log_warn "3. Временные проблемы Docker Registry" + log_info "Установка продолжится без converter образа" + log_info "Converter можно собрать позже командой:" + log_info "cd $PROJECT_DIR/my-network/converter-module/converter && docker build -t my-network-converter:latest ." fi cd "$PROJECT_DIR/my-network"