#!/bin/bash # Скрипт запуска BGP сервера set -e echo "Starting BGP Server..." # Создание директорий если не существуют mkdir -p /app/logs mkdir -p /app/run mkdir -p /run/exabgp mkdir -p /app/data # Создание 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 # Также создаем в других стандартных местах for dir in /var/run/exabgp /usr/local/run/exabgp /usr/local/var/run/exabgp; do mkdir -p $dir if [ ! -p "$dir/exabgp.in" ] || [ ! -p "$dir/exabgp.out" ]; then echo "Creating named pipes in $dir..." mkfifo $dir/exabgp.in $dir/exabgp.out chmod 600 $dir/exabgp.in $dir/exabgp.out fi done # Проверка наличия файлов с префиксами 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 "Prefixes file content:" cat /app/data/prefixes.txt echo "---" # Генерация конфигурации из переменных окружения echo "Generating ExaBGP configuration from environment variables..." python3 /app/scripts/generate_config.py # Проверка конфигурации echo "Validating ExaBGP configuration..." echo "Configuration file content:" cat /app/exabgp.conf echo "---" exabgp --validate /app/exabgp.conf # Запуск ExaBGP в фоновом режиме с логированием echo "Starting ExaBGP..." LOG_LEVEL=${BGP_LOG_LEVEL:-INFO} exabgp --log.level $LOG_LEVEL /app/exabgp.conf > /app/logs/exabgp.log 2>&1 & # Сохранение 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