#!/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 "Checking file permissions:" ls -la /app/data/ ls -la /app/scripts/ echo "---" # Генерация конфигурации из переменных окружения echo "Generating ExaBGP configuration from environment variables..." echo "Environment variables:" env | grep BGP_ || echo "No BGP_ variables found" echo "---" python3 /app/scripts/generate_config.py # Проверка конфигурации echo "Validating ExaBGP configuration..." echo "Configuration file content:" cat /app/exabgp.conf echo "---" exabgp --validate /app/exabgp.conf # Тестовый запуск скрипта загрузки префиксов echo "Testing prefix loader script..." python3 /app/scripts/load_prefixes.py --test 2>&1 || echo "Prefix loader test failed (this is normal)" echo "---" # Проверка сетевого подключения echo "Checking network connectivity..." NEIGHBOR_IP=${BGP_NEIGHBOR_IP:-192.168.1.1} if ping -c 1 $NEIGHBOR_IP > /dev/null 2>&1; then echo "Network connectivity to $NEIGHBOR_IP: OK" else echo "Warning: Cannot reach $NEIGHBOR_IP. BGP session may not establish." fi # Запуск ExaBGP в фоновом режиме с логированием echo "Starting ExaBGP..." LOG_LEVEL=${BGP_LOG_LEVEL:-INFO} # Запуск с подробным логированием в режиме демона exabgp --log.level $LOG_LEVEL --daemon /app/exabgp.conf > /app/logs/exabgp.log 2>&1 & EXABGP_PID=$! # Сохранение 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" echo "Recent logs:" tail -10 /app/logs/exabgp.log else echo "Failed to start ExaBGP" echo "Full logs:" cat /app/logs/exabgp.log echo "---" echo "Process status:" ps aux | grep exabgp || echo "No exabgp process found" 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 # Ожидание завершения echo "Waiting for ExaBGP to run..." echo "Process status:" ps aux | grep exabgp || echo "No exabgp process found" echo "---" wait $EXABGP_PID