#!/bin/bash # Скрипт запуска BGP сервера set -e echo "Starting BGP Server..." # Создание директорий если не существуют mkdir -p /app/logs mkdir -p /app/run mkdir -p /run/exabgp # Создание named pipes для CLI в стандартном месте if [ ! -p "/run/exabgp/exabgp.in" ] || [ ! -p "/run/exabgp/exabgp.out" ]; then echo "Creating named pipes for ExaBGP CLI..." mkfifo /run/exabgp/exabgp.in /run/exabgp/exabgp.out chmod 600 /run/exabgp/exabgp.in /run/exabgp/exabgp.out fi # Также создаем в /app/run для совместимости if [ ! -p "/app/run/exabgp.in" ] || [ ! -p "/app/run/exabgp.out" ]; then echo "Creating named pipes in /app/run for compatibility..." mkfifo /app/run/exabgp.in /app/run/exabgp.out chmod 600 /app/run/exabgp.in /app/run/exabgp.out fi # Проверка наличия файлов с префиксами if [ ! -f "/app/data/prefixes.txt" ]; then echo "Warning: /app/data/prefixes.txt not found. Creating empty file." echo "# Default prefixes file" > /app/data/prefixes.txt echo "192.168.1.0/24" >> /app/data/prefixes.txt fi # Проверка конфигурации echo "Validating ExaBGP configuration..." exabgp --validate /app/exabgp.conf # Запуск ExaBGP в фоновом режиме echo "Starting ExaBGP..." exabgp /app/exabgp.conf & # Сохранение PID EXABGP_PID=$! echo $EXABGP_PID > /app/logs/exabgp.pid # Ожидание запуска sleep 5 # Проверка статуса if kill -0 $EXABGP_PID 2>/dev/null; then echo "ExaBGP started successfully with PID: $EXABGP_PID" else echo "Failed to start ExaBGP" exit 1 fi # Функция для graceful shutdown cleanup() { echo "Shutting down BGP server..." if [ -f "/app/logs/exabgp.pid" ]; then kill $(cat /app/logs/exabgp.pid) 2>/dev/null || true fi exit 0 } # Обработка сигналов trap cleanup SIGTERM SIGINT # Ожидание завершения wait $EXABGP_PID