Files
bgp-server/scripts/start.sh
T

226 lines
6.9 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
# Установка правильных прав доступа
chmod 755 /app/logs
chmod 755 /app/run
chmod 755 /run/exabgp
chmod 755 /app/data
# Удаление старых named pipes если они существуют
echo "Cleaning up old named pipes..."
rm -f /run/exabgp/exabgp.in /run/exabgp/exabgp.out
rm -f /var/run/exabgp/exabgp.in /var/run/exabgp/exabgp.out
rm -f /usr/local/run/exabgp/exabgp.in /usr/local/run/exabgp/exabgp.out
rm -f /usr/local/var/run/exabgp/exabgp.in /usr/local/var/run/exabgp/exabgp.out
# Создание named pipes для CLI в стандартном месте
echo "Creating named pipes for ExaBGP CLI..."
mkdir -p /run/exabgp
mkfifo /run/exabgp/exabgp.in /run/exabgp/exabgp.out
chmod 666 /run/exabgp/exabgp.in /run/exabgp/exabgp.out
# Также создаем в других стандартных местах
for dir in /var/run/exabgp /usr/local/run/exabgp /usr/local/var/run/exabgp; do
mkdir -p $dir
echo "Creating named pipes in $dir..."
mkfifo $dir/exabgp.in $dir/exabgp.out
chmod 666 $dir/exabgp.in $dir/exabgp.out
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 "Creating log files with proper permissions..."
touch /app/logs/prefixes.log
touch /app/logs/exabgp.log
chmod 666 /app/logs/prefixes.log
chmod 666 /app/logs/exabgp.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 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}
# Дополнительная проверка конфигурационного файла
echo "Final config file check:"
ls -la /app/exabgp.conf
echo "Config file first few lines:"
head -10 /app/exabgp.conf
echo "---"
# Проверка что ExaBGP может прочитать файл
echo "Testing ExaBGP config validation:"
if exabgp --validate /app/exabgp.conf; then
echo "Configuration validation passed"
else
echo "Configuration validation failed"
echo "Full config content:"
cat /app/exabgp.conf
exit 1
fi
echo "---"
# Проверка переменных окружения и путей
echo "Environment check:"
echo "PWD: $PWD"
echo "PATH: $PATH"
echo "PYTHONPATH: $PYTHONPATH"
echo "BGP_ variables:"
env | grep BGP_ || echo "No BGP_ variables found"
echo "---"
# Запуск ExaBGP
echo "Starting ExaBGP with config: /app/exabgp.conf"
# Проверяем что файл существует и читается
if [ ! -f "/app/exabgp.conf" ]; then
echo "ERROR: Configuration file /app/exabgp.conf not found!"
exit 1
fi
if [ ! -r "/app/exabgp.conf" ]; then
echo "ERROR: Configuration file /app/exabgp.conf is not readable!"
exit 1
fi
# Запуск ExaBGP с правильными параметрами
cd /app
echo "Starting ExaBGP in background..."
# Запуск ExaBGP в фоновом режиме
if [ -n "$LOG_LEVEL" ]; then
nohup exabgp --log.level $LOG_LEVEL /app/exabgp.conf > /app/logs/exabgp.log 2>&1 &
else
nohup exabgp /app/exabgp.conf > /app/logs/exabgp.log 2>&1 &
fi
EXABGP_PID=$!
# Проверяем что процесс запустился
sleep 5
echo "Checking if ExaBGP process is running..."
ps aux | grep exabgp | grep -v grep || echo "No exabgp process found in ps"
if ! kill -0 $EXABGP_PID 2>/dev/null; then
echo "Failed to start ExaBGP. Checking logs:"
cat /app/logs/exabgp.log
echo "Trying to run ExaBGP directly for diagnosis:"
exabgp --version
echo "---"
echo "Direct execution test:"
timeout 10 exabgp /app/exabgp.conf || echo "Direct execution completed"
exit 1
fi
# Сохранение 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
# Дополнительная проверка через несколько секунд
sleep 3
if kill -0 $EXABGP_PID 2>/dev/null; then
echo "ExaBGP is still running after 3 seconds"
echo "Process details:"
ps aux | grep exabgp | grep -v grep || echo "Process not found in ps output"
else
echo "ExaBGP process died after startup"
echo "Full logs:"
cat /app/logs/exabgp.log
exit 1
fi
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 "---"
# Проверка процесса загрузки префиксов
echo "Checking prefix loader process:"
ps aux | grep load_prefixes || echo "No prefix loader process found"
echo "---"
wait $EXABGP_PID