Files
bgp-server/install_bird6.sh
T
2025-07-11 19:24:43 +07:00

198 lines
5.8 KiB
Bash

#!/bin/bash
# Скрипт для установки BIRD6 на Ubuntu 24.04
# BIRD6 не всегда устанавливается по умолчанию
set -e
# Цвета для вывода
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# Функции для вывода
print_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
print_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
print_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# Проверка на root права
check_root() {
if [[ $EUID -ne 0 ]]; then
print_error "Этот скрипт должен быть запущен с правами root"
exit 1
fi
}
# Установка BIRD6
install_bird6() {
print_info "Проверка установки BIRD6..."
# Проверка существования bird6
if command -v bird6 &> /dev/null; then
print_success "BIRD6 уже установлен"
return 0
fi
print_info "Установка BIRD6..."
# Попытка установки bird6
if apt install -y bird6; then
print_success "BIRD6 установлен успешно"
else
print_warning "BIRD6 не найден в репозиториях, попробуем альтернативные способы"
# Попытка установки из пакета bird2
if apt install -y bird2; then
print_info "BIRD2 установлен, проверяем наличие bird6"
# Проверка символических ссылок
if [[ -f /usr/sbin/bird6 ]]; then
print_success "BIRD6 найден в BIRD2 пакете"
else
print_warning "BIRD6 не найден в BIRD2 пакете"
return 1
fi
else
print_error "Не удалось установить BIRD6"
return 1
fi
fi
return 0
}
# Настройка BIRD6 сервиса
configure_bird6_service() {
print_info "Настройка BIRD6 сервиса..."
# Проверка существования сервиса
if systemctl list-unit-files | grep -q bird6; then
print_success "BIRD6 сервис найден"
# Включение автозапуска
systemctl enable bird6
# Запуск сервиса
systemctl start bird6
# Проверка статуса
if systemctl is-active --quiet bird6; then
print_success "BIRD6 сервис запущен"
else
print_error "Ошибка запуска BIRD6 сервиса"
systemctl status bird6
return 1
fi
else
print_warning "BIRD6 сервис не найден, создаем вручную"
# Создание systemd сервиса для BIRD6
cat > /etc/systemd/system/bird6.service << EOF
[Unit]
Description=BIRD Internet Routing Daemon (IPv6)
Documentation=man:bird(8)
After=network.target
[Service]
Type=notify
ExecStart=/usr/sbin/bird6 -c /etc/bird/bird6.conf -s /var/run/bird6.ctl
ExecReload=/bin/kill -HUP \$MAINPID
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
# Перезагрузка systemd
systemctl daemon-reload
# Включение и запуск сервиса
systemctl enable bird6
systemctl start bird6
# Проверка статуса
if systemctl is-active --quiet bird6; then
print_success "BIRD6 сервис создан и запущен"
else
print_error "Ошибка запуска созданного BIRD6 сервиса"
systemctl status bird6
return 1
fi
fi
return 0
}
# Проверка конфигурации BIRD6
check_bird6_config() {
print_info "Проверка конфигурации BIRD6..."
if [[ -f /etc/bird/bird6.conf ]]; then
# Проверка синтаксиса
if bird6 -p /etc/bird/bird6.conf; then
print_success "Конфигурация BIRD6 корректна"
else
print_error "Ошибка в конфигурации BIRD6"
return 1
fi
else
print_warning "Файл конфигурации BIRD6 не найден"
return 1
fi
return 0
}
# Основная функция
main() {
echo "=========================================="
echo "BIRD6 Installation Script"
echo "Ubuntu 24.04"
echo "=========================================="
check_root
# Установка BIRD6
if install_bird6; then
# Настройка сервиса
if configure_bird6_service; then
# Проверка конфигурации
if check_bird6_config; then
print_success "BIRD6 успешно установлен и настроен"
echo ""
echo "Полезные команды:"
echo " sudo systemctl status bird6"
echo " sudo bird6c show protocols"
echo " sudo bird6c show routes"
echo " sudo journalctl -u bird6 -f"
else
print_warning "BIRD6 установлен, но есть проблемы с конфигурацией"
fi
else
print_error "Ошибка настройки BIRD6 сервиса"
exit 1
fi
else
print_error "Ошибка установки BIRD6"
exit 1
fi
}
# Запуск основной функции
main "$@"