Files

189 lines
5.8 KiB
Bash

#!/bin/bash
# Скрипт запуска BGP сервера на FRR
set -e
echo "Starting BGP Server (FRR)..."
# Создание директорий если не существуют
mkdir -p /app/logs
mkdir -p /app/run
mkdir -p /app/data
mkdir -p /var/run/frr
mkdir -p /etc/frr
# Установка правильных прав доступа
chmod 755 /app/logs
chmod 755 /app/run
chmod 755 /app/data
chmod 755 /var/run/frr
chmod 755 /etc/frr
# Проверка наличия файлов с префиксами
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 "Creating log files with proper permissions..."
touch /app/logs/prefixes.log
touch /app/logs/frr.log
chmod 666 /app/logs/prefixes.log
chmod 666 /app/logs/frr.log
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 FRR configuration from environment variables..."
echo "Environment variables:"
env | grep BGP_ || echo "No BGP_ variables found"
echo "---"
python3 /app/scripts/generate_config.py
# Проверка конфигурации
echo "Validating FRR configuration..."
echo "Configuration file content:"
cat /etc/frr/frr.conf
echo "---"
# Проверка синтаксиса конфигурации FRR
if vtysh -c "show running-config" > /dev/null 2>&1; then
echo "FRR configuration validation passed"
else
echo "FRR configuration validation failed"
echo "Full config content:"
cat /etc/frr/frr.conf
exit 1
fi
# Тестовый запуск скрипта загрузки префиксов
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
# Запуск FRR демонов
echo "Starting FRR daemons..."
# Запуск zebra (обязательный демон для FRR)
echo "Starting zebra daemon..."
zebra -d -f /etc/frr/frr.conf -A 127.0.0.1 -z /var/run/frr/zebra.api
sleep 2
# Запуск bgpd
echo "Starting bgpd daemon..."
bgpd -d -f /etc/frr/frr.conf -A 127.0.0.1 -z /var/run/frr/zebra.api
sleep 2
# Проверка что демоны запустились
echo "Checking if FRR daemons are running..."
ps aux | grep -E "(zebra|bgpd)" | grep -v grep || echo "No FRR daemons found in ps"
# Сохранение PID файлов
echo "Saving PID files..."
pgrep zebra > /app/logs/zebra.pid 2>/dev/null || echo "zebra PID not found"
pgrep bgpd > /app/logs/bgpd.pid 2>/dev/null || echo "bgpd PID not found"
# Ожидание запуска
sleep 5
# Проверка статуса через vtysh
echo "Checking FRR status via vtysh..."
if vtysh -c "show version" > /dev/null 2>&1; then
echo "FRR started successfully"
echo "FRR version:"
vtysh -c "show version" 2>/dev/null || echo "Could not get version"
echo "BGP neighbors:"
vtysh -c "show ip bgp neighbors" 2>/dev/null || echo "Could not get BGP neighbors"
echo "BGP summary:"
vtysh -c "show ip bgp summary" 2>/dev/null || echo "Could not get BGP summary"
else
echo "Failed to start FRR. Checking logs:"
cat /app/logs/frr.log 2>/dev/null || echo "No FRR logs found"
exit 1
fi
# Запуск скрипта загрузки префиксов в фоновом режиме
echo "Starting prefix loader in background..."
python3 /app/scripts/load_prefixes.py > /app/logs/prefixes.log 2>&1 &
PREFIX_LOADER_PID=$!
echo $PREFIX_LOADER_PID > /app/logs/prefix_loader.pid
# Запуск монитора в фоновом режиме
echo "Starting monitor in background..."
python3 /app/scripts/monitor.py > /app/logs/monitor.log 2>&1 &
MONITOR_PID=$!
echo $MONITOR_PID > /app/logs/monitor.pid
echo "All services started successfully!"
echo "Recent logs:"
tail -10 /app/logs/prefixes.log 2>/dev/null || echo "No prefix logs yet"
echo "---"
# Функция для graceful shutdown
cleanup() {
echo "Received shutdown signal. Cleaning up..."
# Остановка скриптов
if [ -f "/app/logs/prefix_loader.pid" ]; then
kill $(cat /app/logs/prefix_loader.pid) 2>/dev/null || true
fi
if [ -f "/app/logs/monitor.pid" ]; then
kill $(cat /app/logs/monitor.pid) 2>/dev/null || true
fi
# Отзыв всех префиксов
echo "Withdrawing all prefixes..."
python3 /app/scripts/load_prefixes.py --withdraw > /dev/null 2>&1 || true
# Остановка FRR демонов
echo "Stopping FRR daemons..."
killall bgpd 2>/dev/null || true
killall zebra 2>/dev/null || true
echo "Cleanup completed."
exit 0
}
# Установка обработчиков сигналов
trap cleanup SIGTERM SIGINT
# Ожидание завершения
echo "BGP Server is running. Press Ctrl+C to stop."
while true; do
sleep 10
# Проверка что демоны все еще работают
if ! pgrep zebra > /dev/null; then
echo "ERROR: zebra daemon stopped unexpectedly"
exit 1
fi
if ! pgrep bgpd > /dev/null; then
echo "ERROR: bgpd daemon stopped unexpectedly"
exit 1
fi
done