Files
bgp-server/scripts/start.sh
T

87 lines
2.6 KiB
Bash

#!/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