Updates - Обновление системы VyOS
Updates - Обновление системы VyOS
Данная страница описывает механизм обновления VyOS, включая автоматическую проверку обновлений, управление системными образами, процедуры обновления и отката к предыдущим версиям.
Обзор
VyOS использует механизм обновления на основе образов (image-based updates), что обеспечивает:
- Безопасность: Возможность отката к предыдущей версии при проблемах
- Предсказуемость: Полная замена системных файлов, без частичных обновлений
- Изоляция: Каждая версия хранится как отдельный образ
- Быстрый откат: Переключение между версиями через перезагрузку
- Тестирование: Возможность проверки новой версии перед окончательным переходом
Архитектура системы образов
VyOS хранит несколько системных образов на одном устройстве:
/boot/
├── 1.5-rolling-202401150023/ # Текущая версия (default)
├── 1.5-rolling-202312250024/ # Предыдущая версия
└── 1.4.0-sagitta/ # Старая LTS версияКлючевые особенности:
- Все образы используют общий конфигурационный раздел
/config/ - Конфигурация сохраняется при переключении между образами
- При загрузке можно выбрать любой установленный образ
- Удаление образа не влияет на конфигурацию
Типы обновлений VyOS
Rolling Release (1.5+):
- Постоянные обновления с новыми функциями
- Ежедневные nightly builds
- Рекомендуется для тестирования и лабораторий
- Требует регулярного мониторинга обновлений
LTS (Long Term Support):
- Стабильные версии (например, 1.4 Sagitta)
- Только исправления безопасности и критических багов
- Рекомендуется для production
- Предсказуемый цикл обновлений
Проверка текущей версии
Команды проверки версии
# Показать текущую версию системы
show version
# Показать все установленные образы
show system image
# Показать детальную информацию о системе
show version allПример вывода show version
vyos@router:~$ show version
Version: VyOS 1.5-rolling-202401150023
Release train: current
Release flavor: generic
Built by: autobuild@vyos.net
Built on: Mon 15 Jan 2024 00:23 UTC
Build UUID: a7b3c9d2-e4f5-6789-0abc-def123456789
Build commit ID: abcdef123456
Architecture: x86_64
Boot via: installed image
System type: KVM guest
Hardware vendor: QEMU
Hardware model: Standard PC (Q35 + ICH9, 2009)
Hardware S/N: unknown
Hardware UUID: 12345678-1234-1234-1234-123456789abc
Copyright: VyOS maintainers and contributorsПример вывода show system image
vyos@router:~$ show system image
The system currently has the following image(s) installed:
1: 1.5-rolling-202401150023 (default boot) (running image)
2: 1.5-rolling-202312250024
3: 1.4.0-sagitta
Total images: 3Конфигурация автоматической проверки обновлений
Включение автопроверки
VyOS может автоматически проверять наличие новых версий и уведомлять администратора.
# Включить автоматическую проверку обновлений
configure
set system update-check auto-check
commit
save
exitНастройка URL для проверки обновлений
configure
# URL для rolling release (1.5+)
set system update-check url 'https://raw.githubusercontent.com/vyos/vyos-rolling-nightly-builds/main/version.json'
# Включить автопроверку
set system update-check auto-check
commit
save
exitПроверка доступных обновлений
# Ручная проверка наличия обновлений
show system updatesПример вывода show system updates
vyos@router:~$ show system updates
Current version: 1.5-rolling-202312220023
Update available: 1.5-rolling-202401150023
Update URL: https://github.com/vyos/vyos-rolling-nightly-builds/releases/download/1.5-rolling-202401150023/1.5-rolling-202401150023-amd64.iso
To update, use: add system image <URL>Отключение автопроверки
configure
delete system update-check auto-check
commit
save
exitДобавление нового образа системы
Установка образа из URL
# Добавить последнюю доступную версию
add system image latest
# Добавить образ по конкретному URL
add system image https://github.com/vyos/vyos-rolling-nightly-builds/releases/download/1.5-rolling-202401150023/1.5-rolling-202401150023-amd64.iso
# Добавить образ из локального файла
add system image /tmp/vyos-1.5-rolling-202401150023-amd64.isoПроцесс установки образа
vyos@router:~$ add system image latest
Trying to fetch latest version from https://github.com/vyos/vyos-rolling-nightly-builds/releases/download/1.5-rolling-202401150023/1.5-rolling-202401150023-amd64.iso
Checking for available updates...
Found new version: 1.5-rolling-202401150023
Do you want to continue? [y/N] y
Downloading image...
######################################################################## 100.0%
Checking image... OK
What would you like to name this image? [1.5-rolling-202401150023]:
# Нажмите Enter для имени по умолчанию или введите своё
Installing new image...
Copying files... Done
Do you want to set the new image as the default boot image? [y/N] y
# Выберите 'y' чтобы новый образ загружался по умолчанию
Image installation complete.
Do you want to reboot now? [y/N] n
# Можно отложить перезагрузку для завершения текущих задачУстановка образа с пользовательским именем
vyos@router:~$ add system image https://example.com/vyos-custom.iso
What would you like to name this image? [vyos-custom]: production-20240115
# Удобно для идентификации образов
Installing new image...
Copying files... Done
Image 'production-20240115' installed successfully.Управление системными образами
Установка образа по умолчанию
# Установить образ для загрузки по умолчанию
set system image default-boot 1.5-rolling-202401150023
# Или интерактивно
vyos@router:~$ set system image default-boot
Please specify image name:
1: 1.5-rolling-202401150023
2: 1.5-rolling-202312250024
3: 1.4.0-sagitta
Select image [1-3]: 1
Default boot image set to: 1.5-rolling-202401150023Переименование образа
# Переименовать образ для удобства идентификации
rename system image 1.5-rolling-202401150023 to production-current
rename system image 1.5-rolling-202312250024 to production-previousУдаление образа
# Удалить неиспользуемый образ для освобождения места
delete system image 1.4.0-sagitta
# Или интерактивно
vyos@router:~$ delete system image
The following images are available for deletion:
1: 1.5-rolling-202312250024
2: 1.4.0-sagitta
Select image to delete [1-2]: 2
Warning: This will permanently delete image '1.4.0-sagitta'
Continue? [y/N] y
Deleting image... DoneВажно:
- Нельзя удалить текущий загруженный образ (running image)
- Нельзя удалить образ по умолчанию (default boot) без установки нового
- Удаление образа не влияет на конфигурацию в
/config/
Проверка использования дискового пространства
# Проверить занятое место образами
show system storage
# Детальная информация
df -hvyos@router:~$ show system storage
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 9.5G 4.2G 4.8G 47% /
tmpfs 489M 0 489M 0% /dev/shm
/dev/sda1 497M 125M 372M 26% /boot
Images storage usage:
1.5-rolling-202401150023: 1.2G
1.5-rolling-202312250024: 1.2G
1.4.0-sagitta: 950M
Total: 3.35GПроцедура обновления VyOS
Подготовка к обновлению
Шаг 1: Создание резервной копии конфигурации
# Сохранить текущую конфигурацию
save /config/backup-before-update-$(date +%Y%m%d).config
# Копировать на внешний сервер (опционально)
scp /config/backup-before-update-$(date +%Y%m%d).config user@backup-server:/backups/Шаг 2: Проверка текущего состояния
# Проверить текущую версию
show version
# Проверить установленные образы
show system image
# Проверить доступное место
show system storage
# Проверить активные сессии
show system connections
# Проверить запущенные процессы
show system processesШаг 3: Уведомление пользователей
# Отправить предупреждающее сообщение всем подключенным пользователям
wall "ВНИМАНИЕ: Планируется обновление системы через 10 минут. Сохраните работу."
# Или через system login banner
configure
set system login banner pre-login "Система будет перезагружена для обновления в 18:00 МСК"
commit
save
exitВыполнение обновления
Шаг 1: Загрузка и установка нового образа
# Проверить доступные обновления
show system updates
# Установить новый образ
add system image latest
# При появлении запросов:
# 1. Подтвердить загрузку: y
# 2. Указать имя образа (или Enter для значения по умолчанию)
# 3. Установить как default boot: y
# 4. Перезагрузить сейчас: n (отложить для планового окна)Шаг 2: Проверка установки
# Убедиться что образ установлен
show system image
# Проверить что новый образ установлен как default
# Вывод должен показывать (default boot) у нового образаШаг 3: Плановая перезагрузка
# Запланировать перезагрузку (через 5 минут)
shutdown reboot +5 "Перезагрузка для применения обновления VyOS"
# Или немедленная перезагрузка
reboot now
# Или в конкретное время
shutdown reboot 18:00 "Плановое обновление VyOS"Шаг 4: Проверка после перезагрузки
# Проверить что загружена новая версия
show version
# Проверить что конфигурация применена
show configuration
# Проверить сетевую доступность
ping 8.8.8.8
# Проверить работу сервисов
show interfaces
show protocols
show firewallБыстрая процедура обновления (single command)
# Для опытных администраторов - автоматизированное обновление
add system image latest && reboot nowВнимание: Использовать только в тестовых средах или при полном понимании рисков.
Откат к предыдущей версии (Rollback)
Причины для отката
- Обнаружены проблемы совместимости с оборудованием
- Критические баги в новой версии
- Проблемы с производительностью
- Несовместимость с существующей конфигурацией
- Необходимость дополнительного тестирования
Методы отката
Метод 1: Выбор образа через GRUB (при загрузке)
Когда использовать: При невозможности загрузки или критических проблемах
Процедура:
- Перезагрузить систему:
reboot - При появлении GRUB меню (нажать ESC если автозагрузка)
- Выбрать пункт с предыдущей версией VyOS
- Нажать Enter
Примечание: Если GRUB меню не появляется, нажмите ESC во время загрузки.
Метод 2: Изменение default boot образа
Когда использовать: При стабильной работе системы, но необходимости вернуться к предыдущей версии
Процедура:
# Просмотреть доступные образы
show system image
# Вывод:
# 1: 1.5-rolling-202401150023 (default boot) (running image)
# 2: 1.5-rolling-202312250024
# 3: 1.4.0-sagitta
# Установить предыдущий образ как default
set system image default-boot 1.5-rolling-202312250024
# Перезагрузить систему
reboot nowМетод 3: Интерактивный откат
# Запустить интерактивный мастер отката
vyos@router:~$ set system image default-boot
Please specify image name:
1: 1.5-rolling-202401150023 (current default)
2: 1.5-rolling-202312250024
3: 1.4.0-sagitta
Select image [1-3]: 2
Default boot image set to: 1.5-rolling-202312250024
Reboot now to apply changes? [y/N] yПроверка после отката
# Проверить версию после перезагрузки
show version
# Убедиться что конфигурация применена корректно
show configuration
# Проверить работу критичных сервисов
show interfaces
show protocols
show firewall
show nat
# Проверить логи на наличие ошибок
show log tail 100Автоматический откат через watchdog
Для критичных систем можно настроить автоматический откат при потере связи:
#!/bin/bash
# Скрипт автоматического отката при проблемах
# Размещается на внешнем monitoring сервере
VYOS_HOST="192.168.1.1"
PING_TIMEOUT=30
MAX_FAILURES=3
failures=0
while true; do
if ! ping -c 1 -W $PING_TIMEOUT $VYOS_HOST > /dev/null 2>&1; then
((failures++))
echo "Ping failed ($failures/$MAX_FAILURES)"
if [ $failures -ge $MAX_FAILURES ]; then
echo "Critical: VyOS not responding. Manual intervention required!"
# Отправить алерт администратору
# mail -s "VyOS DOWN" admin@example.com < /dev/null
fi
else
failures=0
fi
sleep 60
doneПримеры для облачных платформ
Пример 1: Yandex Cloud - Автоматизированная проверка обновлений
В Yandex Cloud VyOS может автоматически проверять обновления и уведомлять через cloud monitoring.
Конфигурация для Yandex Cloud
configure
# Включить автопроверку обновлений
set system update-check auto-check
set system update-check url 'https://raw.githubusercontent.com/vyos/vyos-rolling-nightly-builds/main/version.json'
# Настроить syslog для отправки в Yandex Cloud Logging
set system syslog host 10.128.0.100 facility all level info
set system syslog host 10.128.0.100 facility all protocol tcp
# Настроить SNMP для мониторинга (если используется)
set service snmp community yc-monitoring authorization ro
set service snmp listen-address 10.128.0.10
commit
save
exitСкрипт проверки обновлений для Yandex Cloud
#!/bin/vbash
# /config/scripts/yc-check-updates.sh
# Автоматическая проверка обновлений с логированием в Yandex Cloud
source /opt/vyatta/etc/functions/script-template
LOG_FILE="/var/log/vyos-update-check.log"
METADATA_URL="http://169.254.169.254/latest/meta-data"
# Получить информацию об инстансе
INSTANCE_ID=$(curl -s $METADATA_URL/instance-id)
ZONE=$(curl -s $METADATA_URL/placement/availability-zone)
echo "[$(date)] Checking updates for instance $INSTANCE_ID in zone $ZONE" >> $LOG_FILE
# Проверить обновления
UPDATE_INFO=$(cli-shell-api showCfg system update-check)
if [ -n "$UPDATE_INFO" ]; then
echo "[$(date)] Update check enabled" >> $LOG_FILE
# Выполнить проверку (команда show недоступна в скриптах, используем API)
# В production следует использовать VyOS API или wrapper
logger -t vyos-updates "Update check completed for $INSTANCE_ID"
else
echo "[$(date)] Update check not configured" >> $LOG_FILE
fi
# Проверить использование дискового пространства
DISK_USAGE=$(df -h / | tail -1 | awk '{print $5}' | sed 's/%//')
if [ $DISK_USAGE -gt 80 ]; then
logger -t vyos-updates "WARNING: Disk usage is ${DISK_USAGE}% - consider removing old images"
echo "[$(date)] WARNING: Disk usage ${DISK_USAGE}%" >> $LOG_FILE
fi
echo "[$(date)] Update check completed" >> $LOG_FILEНастройка планировщика задач
configure
# Запускать проверку обновлений каждый день в 2:00 UTC
set system task-scheduler task check-updates executable path '/config/scripts/yc-check-updates.sh'
set system task-scheduler task check-updates interval 1d
set system task-scheduler task check-updates start-time '02:00'
commit
save
exitСоздание snapshot перед обновлением в Yandex Cloud
#!/bin/bash
# yc-create-snapshot-before-update.sh
# Скрипт для создания snapshot диска перед обновлением VyOS
INSTANCE_NAME="vyos-router-01"
DISK_NAME="vyos-boot-disk"
SNAPSHOT_NAME="vyos-backup-$(date +%Y%m%d-%H%M%S)"
# Требуется установленный и настроенный yc CLI
yc compute snapshot create \
--name "$SNAPSHOT_NAME" \
--disk-name "$DISK_NAME" \
--description "Automatic snapshot before VyOS update" \
--labels "instance=$INSTANCE_NAME,type=pre-update"
echo "Snapshot $SNAPSHOT_NAME created successfully"
# После успешного создания snapshot можно обновлять VyOS
ssh vyos@$INSTANCE_NAME "add system image latest"Пример 2: VK Cloud - Поэтапное развертывание с rollback
VK Cloud позволяет создавать несколько инстансов для blue-green deployment.
Сценарий: Blue-Green обновление
Архитектура:
- Blue environment: Текущая production версия (VyOS 1.4)
- Green environment: Новая версия для тестирования (VyOS 1.5)
- Load balancer переключает трафик между окружениями
Подготовка Green environment:
# На новом инстансе VK Cloud
configure
# Базовая конфигурация
set system host-name vyos-router-green
set system domain-name vkcloud.internal
# Проверить текущую версию
show version
# Если требуется обновление - установить latest
exit
# Установить образ
add system image latest
# Скопировать конфигурацию с Blue
scp vyos@blue-instance:/config/config.boot /tmp/blue-config.boot
# Загрузить конфигурацию
configure
load /tmp/blue-config.boot
# Изменить hostname для Green
set system host-name vyos-router-green
commit
save
exitТестирование Green environment:
#!/bin/bash
# vkcloud-test-green-env.sh
# Тестирование нового окружения перед переключением трафика
GREEN_IP="10.0.1.101"
TESTS_PASSED=0
TESTS_FAILED=0
echo "Testing Green environment at $GREEN_IP"
# Тест 1: Ping connectivity
if ping -c 5 $GREEN_IP > /dev/null 2>&1; then
echo "PASS: Ping connectivity"
((TESTS_PASSED++))
else
echo "FAIL: Ping connectivity"
((TESTS_FAILED++))
fi
# Тест 2: SSH доступность
if ssh -o ConnectTimeout=5 vyos@$GREEN_IP "show version" > /dev/null 2>&1; then
echo "PASS: SSH access"
((TESTS_PASSED++))
else
echo "FAIL: SSH access"
((TESTS_FAILED++))
fi
# Тест 3: Routing table
if ssh vyos@$GREEN_IP "show ip route" | grep -q "default"; then
echo "PASS: Default route present"
((TESTS_PASSED++))
else
echo "FAIL: Default route missing"
((TESTS_FAILED++))
fi
# Тест 4: NAT rules
if ssh vyos@$GREEN_IP "show nat source rules" | grep -q "rule"; then
echo "PASS: NAT rules configured"
((TESTS_PASSED++))
else
echo "FAIL: NAT rules missing"
((TESTS_FAILED++))
fi
# Тест 5: Firewall rules
if ssh vyos@$GREEN_IP "show firewall" | grep -q "rule"; then
echo "PASS: Firewall rules configured"
((TESTS_PASSED++))
else
echo "FAIL: Firewall rules missing"
((TESTS_FAILED++))
fi
echo ""
echo "Results: $TESTS_PASSED passed, $TESTS_FAILED failed"
if [ $TESTS_FAILED -eq 0 ]; then
echo "All tests passed - safe to proceed with traffic switchover"
exit 0
else
echo "Tests failed - do not switch traffic, investigate issues"
exit 1
fiПереключение трафика (через VK Cloud Load Balancer):
#!/bin/bash
# vkcloud-switch-to-green.sh
# Переключение трафика на Green environment
# Проверить тесты
if ! ./vkcloud-test-green-env.sh; then
echo "Pre-flight tests failed. Aborting switchover."
exit 1
fi
# Постепенное переключение (canary deployment)
echo "Phase 1: Switching 10% traffic to Green..."
# Настроить Load Balancer для 10% трафика на Green
# (выполняется через VK Cloud API или панель управления)
sleep 300 # 5 минут мониторинга
echo "Phase 2: Switching 50% traffic to Green..."
# 50% трафика на Green
sleep 300
echo "Phase 3: Switching 100% traffic to Green..."
# 100% трафика на Green
echo "Switchover complete. Blue environment remains as rollback option."Rollback процедура:
#!/bin/bash
# vkcloud-rollback-to-blue.sh
# Откат на Blue environment при проблемах
echo "EMERGENCY ROLLBACK: Switching all traffic to Blue environment"
# Немедленное переключение 100% трафика на Blue
# (через VK Cloud Load Balancer API)
echo "All traffic redirected to Blue. Green environment available for investigation."
# Отправить уведомление команде
wall "ROLLBACK EXECUTED: All traffic returned to Blue environment"Автоматический мониторинг и rollback
#!/bin/bash
# vkcloud-auto-rollback-monitor.sh
# Автоматический откат при обнаружении проблем
GREEN_IP="10.0.1.101"
BLUE_IP="10.0.1.100"
FAILURE_THRESHOLD=3
CHECK_INTERVAL=30
failures=0
while true; do
# Проверка доступности Green
if ! ping -c 3 -W 5 $GREEN_IP > /dev/null 2>&1; then
((failures++))
echo "$(date): Green environment check failed ($failures/$FAILURE_THRESHOLD)"
if [ $failures -ge $FAILURE_THRESHOLD ]; then
echo "$(date): CRITICAL - Initiating automatic rollback to Blue"
./vkcloud-rollback-to-blue.sh
# Отправить критическое уведомление
curl -X POST https://monitoring.vkcloud.example/alert \
-d "severity=critical&message=Auto-rollback to Blue executed"
# Прекратить мониторинг после rollback
exit 1
fi
else
# Сброс счетчика при успешной проверке
if [ $failures -gt 0 ]; then
echo "$(date): Green environment recovered"
fi
failures=0
fi
sleep $CHECK_INTERVAL
doneПример 3: Гибридная облачная среда - Multi-cloud update strategy
#!/bin/bash
# multi-cloud-update-strategy.sh
# Обновление VyOS роутеров в multi-cloud среде
# Роутеры в разных облаках
YANDEX_ROUTERS="10.128.0.10 10.128.0.11"
VK_ROUTERS="10.0.1.10 10.0.1.11"
ONPREM_ROUTERS="192.168.1.10 192.168.1.11"
# Функция обновления одного роутера
update_router() {
local ROUTER_IP=$1
local ENV_NAME=$2
echo "[$ENV_NAME] Updating router $ROUTER_IP"
# Создать backup конфигурации
ssh vyos@$ROUTER_IP "save /config/backup-$(date +%Y%m%d).config"
# Скачать backup на локальный сервер
scp vyos@$ROUTER_IP:/config/backup-$(date +%Y%m%d).config ./backups/$ENV_NAME-$ROUTER_IP-$(date +%Y%m%d).config
# Обновить образ
ssh vyos@$ROUTER_IP "add system image latest" < /dev/null
# Запланировать перезагрузку через 5 минут (для возможности отмены)
ssh vyos@$ROUTER_IP "shutdown reboot +5 'Automatic update'"
echo "[$ENV_NAME] Router $ROUTER_IP scheduled for update"
}
# Обновление поэтапно: сначала Yandex Cloud
echo "Stage 1: Updating Yandex Cloud routers"
for ROUTER in $YANDEX_ROUTERS; do
update_router $ROUTER "Yandex Cloud"
sleep 600 # 10 минут между роутерами
done
sleep 1800 # 30 минут для проверки
# Затем VK Cloud
echo "Stage 2: Updating VK Cloud routers"
for ROUTER in $VK_ROUTERS; do
update_router $ROUTER "VK Cloud"
sleep 600
done
sleep 1800
# Наконец, on-premise
echo "Stage 3: Updating on-premise routers"
for ROUTER in $ONPREM_ROUTERS; do
update_router $ROUTER "On-Premise"
sleep 600
done
echo "All routers updated. Monitor for next 24 hours."Команды проверки и мониторинга
Проверка версии и образов
# Текущая версия
show version
# Короткая версия (только номер)
show version brief
# Все установленные образы
show system image
# Детальная информация
show version allПроверка обновлений
# Проверить доступность обновлений
show system updates
# Показать конфигурацию update-check
show configuration system update-check
# Показать URL для проверки обновлений
show configuration system update-check urlМониторинг дискового пространства
# Общее использование
show system storage
# Детально по файловым системам
df -h
# Размер каждого образа
du -sh /boot/*/
# Топ-10 больших файлов в /config
du -ah /config | sort -rh | head -10Проверка истории загрузок
# Последние перезагрузки
last reboot
# Uptime текущей сессии
show system uptime
# Дата последней загрузки
who -bЛоги обновлений
# Логи установки образов
show log | match image
# Системные логи
show log tail 100
# Логи загрузки
show log boot
# Поиск ошибок при обновлении
show log | match -i "error\|fail" | match imageУстранение неполадок (Troubleshooting)
Проблема 1: Недостаточно места для установки нового образа
Симптомы:
Error: Not enough disk space to install new image
Required: 1.5G, Available: 800MДиагностика:
# Проверить доступное место
show system storage
# Показать все образы
show system image
# Размер каждого образа
du -sh /boot/*/Решение:
# Удалить старые неиспользуемые образы
delete system image 1.4.0-sagitta
# Очистить старые логи
sudo find /var/log -type f -name "*.gz" -delete
sudo find /var/log -type f -name "*.old" -delete
# Очистить старые backups конфигураций
sudo rm /config/backup-*.config
# Проверить освобожденное место
show system storage
# Повторить установку
add system image latestПроблема 2: Загрузка нового образа зависает
Симптомы:
- Система зависает на экране загрузки
- GRUB показывает новый образ, но загрузка не завершается
- Появляются kernel panic сообщения
Решение через GRUB:
- Перезагрузить систему (физически или через IPMI/KVM)
- Нажать ESC при появлении GRUB
- Выбрать предыдущий работающий образ
- После успешной загрузки:
# Установить старый образ как default
set system image default-boot 1.5-rolling-202312250024
# Удалить проблемный образ
delete system image 1.5-rolling-202401150023
# Проверить логи для диагностики
show log boot
show log kernelПроблема 3: Конфигурация не применяется после обновления
Симптомы:
- После обновления и перезагрузки конфигурация не применена
- Интерфейсы не настроены
- Сервисы не запущены
Диагностика:
# Проверить текущую версию
show version
# Проверить содержимое конфигурации
show configuration
# Проверить файл конфигурации
cat /config/config.boot
# Проверить логи загрузки
show log boot | match -i "error\|fail\|warn"Решение:
# Загрузить конфигурацию из backup
configure
load /config/backup-before-update-20240115.config
commit
save
exit
# Если backup отсутствует - восстановить минимальную конфигурацию
configure
# Базовая конфигурация интерфейсов
set interfaces ethernet eth0 address dhcp
set interfaces ethernet eth0 description 'WAN'
set interfaces ethernet eth1 address 192.168.1.1/24
set interfaces ethernet eth1 description 'LAN'
# NAT
set nat source rule 100 outbound-interface name 'eth0'
set nat source rule 100 source address 192.168.1.0/24
set nat source rule 100 translation address masquerade
commit
save
exitПроблема 4: Ошибка загрузки образа из URL
Симптомы:
Error: Failed to download image from URL
Connection timeout or HTTP errorДиагностика:
# Проверить сетевую связность
ping -c 5 github.com
# Проверить DNS
nslookup github.com
# Проверить маршрут к интернету
show ip route
# Проверить NAT (если используется)
show nat source statistics
# Попробовать загрузить URL вручную
curl -I https://github.com/vyos/vyos-rolling-nightly-builds/releases/download/1.5-rolling-202401150023/1.5-rolling-202401150023-amd64.isoРешение:
# Вариант 1: Использовать прямой HTTP вместо HTTPS (если возможно)
add system image http://mirror.example.com/vyos-image.iso
# Вариант 2: Загрузить образ на локальный сервер
# На внешнем сервере с доступом в интернет:
wget https://github.com/vyos/vyos-rolling-nightly-builds/releases/download/1.5-rolling-202401150023/1.5-rolling-202401150023-amd64.iso
# Запустить HTTP сервер
python3 -m http.server 8080
# На VyOS:
add system image http://192.168.1.100:8080/1.5-rolling-202401150023-amd64.iso
# Вариант 3: Загрузить через SCP
# Скопировать файл на VyOS
scp vyos-image.iso vyos@router:/tmp/
# Установить из локального файла
add system image /tmp/vyos-image.isoПроблема 5: После обновления пропал доступ к системе
Симптомы:
- SSH соединение обрывается после перезагрузки
- Невозможно подключиться к роутеру
- Ping не проходит
Диагностика через консоль (KVM/IPMI/Serial):
# Войти через консоль
# Проверить интерфейсы
show interfaces
# Проверить IP адреса
ip addr show
# Проверить routing
show ip route
# Проверить firewall
show firewallРешение:
# Через консоль - восстановить сетевую связность
configure
# Проверить что интерфейсы настроены
show interfaces
# Если нет - настроить заново
set interfaces ethernet eth0 address 192.168.1.1/24
# Временно отключить firewall для диагностики
set firewall all-ping enable
commit
exit
# Попробовать SSH подключение сноваЕсли консоль недоступна - откатиться через GRUB:
- Перезагрузить (hard reset)
- Выбрать предыдущий образ в GRUB
- После загрузки установить его как default
Проблема 6: GRUB меню не появляется
Симптомы:
- Система автоматически загружает образ по умолчанию
- Невозможно выбрать другой образ
Решение:
Метод 1: Настройка GRUB timeout
Через SSH (перед проблемой):
# Увеличить timeout GRUB для возможности выбора образа
sudo vi /boot/grub/grub.cfg
# Найти строку:
# set timeout=0
# Изменить на:
# set timeout=10
# Сохранить и перезагрузитьМетод 2: Нажатие ESC при загрузке
- При появлении логотипа VyOS нажать ESC многократно
- GRUB меню должно появиться даже при timeout=0
Метод 3: Через serial console
# Настроить serial console для доступа к GRUB
configure
set system console device ttyS0 speed 9600
commit
save
exitЛучшие практики (Best Practices)
1. Резервное копирование перед обновлением
Всегда создавайте backup конфигурации:
# Автоматический backup с датой
save /config/backup-$(date +%Y%m%d-%H%M%S).config
# Копировать на внешний сервер
scp /config/backup-$(date +%Y%m%d-%H%M%S).config user@backup-server:/vyos-backups/
# Для критичных систем - snapshot диска (в облаке)
# Yandex Cloud: создать snapshot через web UI или API
# VK Cloud: создать snapshot через панель управления2. Тестирование обновлений
Никогда не обновляйте production без тестирования:
# Схема тестирования:
# 1. Lab environment (изолированная сеть)
# 2. Dev environment (разработка)
# 3. Staging environment (pre-production)
# 4. Production (по графику maintenance window)
# Для каждого этапа:
# - Установить образ
# - Загрузить production конфигурацию
# - Протестировать все критичные функции
# - Мониторить производительность
# - Только после успеха - следующий этап3. Документирование обновлений
Ведите журнал обновлений:
# Пример записи в журнале
# /config/update-log.txt
2024-01-15 18:00 MSK - Update started
Router: vyos-router-01
Previous version: 1.5-rolling-202312220023
New version: 1.5-rolling-202401150023
Reason: Security patches
Executed by: admin@example.com
Backup: /backups/vyos-20240115-180000.config
Rollback plan: GRUB select previous image
2024-01-15 18:15 MSK - Update completed successfully
Post-update checks: PASSED
All services operational4. Окна обслуживания (Maintenance Windows)
Планируйте обновления в непиковое время:
# Определить maintenance window
# Примеры:
# - Корпоративная сеть: 22:00-02:00 в будние дни
# - Интернет-провайдер: 03:00-05:00 в будние дни
# - Критичные системы: только в выходные
# Уведомить пользователей заранее
configure
set system login banner pre-login "
MAINTENANCE WINDOW: 15.01.2024 22:00-02:00 MSK
VyOS update scheduled. Brief service interruption expected.
"
commit
save
exit5. Поэтапное обновление (Staged Rollout)
Для множества роутеров - обновляйте постепенно:
# Week 1: Lab и Dev роутеры (10% fleet)
# Week 2: Staging и non-critical (30% fleet)
# Week 3: Half of production (50% fleet)
# Week 4: Remaining production (100% fleet)
# Между этапами:
# - Мониторинг 7 дней
# - Сбор feedback от пользователей
# - Анализ логов и метрик
# - При проблемах - остановка rollout6. Мониторинг после обновления
Усиленный мониторинг первые 24-48 часов:
#!/bin/bash
# post-update-monitoring.sh
# Расширенный мониторинг после обновления
ROUTER_IP="192.168.1.1"
CHECK_INTERVAL=60 # секунды
DURATION=86400 # 24 часа
end_time=$(($(date +%s) + DURATION))
while [ $(date +%s) -lt $end_time ]; do
echo "=== $(date) ==="
# CPU usage
ssh vyos@$ROUTER_IP "show system cpu" | grep "CPU"
# Memory usage
ssh vyos@$ROUTER_IP "show system memory" | grep "Mem:"
# Interface status
ssh vyos@$ROUTER_IP "show interfaces" | grep -E "eth[0-9]|state"
# Connection count
ssh vyos@$ROUTER_IP "show system connections" | wc -l
# Errors in logs
ERRORS=$(ssh vyos@$ROUTER_IP "show log tail 100 | grep -i error" | wc -l)
if [ $ERRORS -gt 0 ]; then
echo "WARNING: $ERRORS errors detected in logs"
fi
sleep $CHECK_INTERVAL
done7. План отката (Rollback Plan)
Всегда имейте готовый план отката:
# Документ rollback-plan.md
# ROLLBACK PLAN для обновления 15.01.2024
## Условия для отката:
1. Критичные сервисы недоступны > 5 минут
2. Потеря connectivity > 3 минут
3. CPU/Memory usage > 90% в течение 10 минут
4. Обнаружены критические ошибки в логах
## Процедура отката:
1. SSH доступ: ssh vyos@192.168.1.1
2. Команда: set system image default-boot 1.5-rolling-202312220023
3. Команда: reboot now
4. Ожидание: 5 минут
5. Проверка: ping, SSH, services
6. Уведомление: команде об откате
## Контакты для эскалации:
- L1 Support: +7-xxx-xxx-xxxx
- L2 Engineering: engineering@example.com
- L3 Vendor Support: VyOS commercial support
## Backup location:
- Config: /backups/vyos-20240115.config
- Disk snapshot (Yandex Cloud): snapshot-20240115-1800008. Версионирование и метки
Используйте понятные имена для образов:
# Вместо:
# 1.5-rolling-202401150023
# Используйте rename:
rename system image 1.5-rolling-202401150023 to production-current
rename system image 1.5-rolling-202312220023 to production-previous
rename system image 1.4.0-sagitta to lts-stable
# Результат:
show system image
# 1: production-current (default boot) (running image)
# 2: production-previous
# 3: lts-stable9. Автоматизация через CI/CD
Для больших инфраструктур - автоматизация:
# .gitlab-ci.yml - пример CI/CD для обновлений VyOS
stages:
- backup
- update
- verify
- rollback
variables:
VYOS_ROUTERS: "10.0.1.10 10.0.1.11 10.0.1.12"
IMAGE_URL: "https://downloads.example.com/vyos-latest.iso"
backup_configs:
stage: backup
script:
- for router in $VYOS_ROUTERS; do
ssh vyos@$router "save /config/backup-$(date +%Y%m%d).config";
scp vyos@$router:/config/backup-$(date +%Y%m%d).config ./backups/;
done
artifacts:
paths:
- backups/
update_routers:
stage: update
script:
- for router in $VYOS_ROUTERS; do
ssh vyos@$router "add system image $IMAGE_URL";
ssh vyos@$router "shutdown reboot +5";
sleep 600;
done
dependencies:
- backup_configs
verify_update:
stage: verify
script:
- ./scripts/verify-routers.sh
allow_failure: true
rollback_on_failure:
stage: rollback
when: on_failure
script:
- ./scripts/rollback-all-routers.sh10. Безопасность при обновлениях
Проверяйте подлинность образов:
# Проверить checksum образа
curl -O https://downloads.vyos.io/rolling/current/vyos-1.5-rolling-202401150023-amd64.iso
curl -O https://downloads.vyos.io/rolling/current/vyos-1.5-rolling-202401150023-amd64.iso.sha256
# Проверить checksum
sha256sum -c vyos-1.5-rolling-202401150023-amd64.iso.sha256
# Только при успешной проверке - устанавливать
add system image /tmp/vyos-1.5-rolling-202401150023-amd64.isoАвтоматизация обновлений
Скрипт автоматического обновления с проверками
#!/bin/bash
# auto-update-vyos.sh
# Полностью автоматизированное обновление с проверками
set -e
ROUTER_IP="192.168.1.1"
BACKUP_DIR="/backups/vyos"
LOG_FILE="/var/log/vyos-auto-update.log"
ADMIN_EMAIL="admin@example.com"
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOG_FILE
}
send_notification() {
local subject="$1"
local body="$2"
echo "$body" | mail -s "$subject" $ADMIN_EMAIL
}
# Pre-flight checks
log "Starting pre-flight checks"
# Check SSH connectivity
if ! ssh -o ConnectTimeout=5 vyos@$ROUTER_IP "show version" > /dev/null 2>&1; then
log "ERROR: Cannot connect to router"
send_notification "VyOS Update FAILED" "Cannot connect to router $ROUTER_IP"
exit 1
fi
# Check disk space
DISK_USAGE=$(ssh vyos@$ROUTER_IP "df -h / | tail -1 | awk '{print \$5}' | sed 's/%//'")
if [ $DISK_USAGE -gt 70 ]; then
log "WARNING: Disk usage is ${DISK_USAGE}%"
send_notification "VyOS Update WARNING" "High disk usage (${DISK_USAGE}%) on $ROUTER_IP"
# Cleanup old images if needed
log "Cleaning up old images"
ssh vyos@$ROUTER_IP "delete system image oldest"
fi
# Backup configuration
log "Creating configuration backup"
BACKUP_FILE="$BACKUP_DIR/$(date +%Y%m%d-%H%M%S)-$ROUTER_IP.config"
ssh vyos@$ROUTER_IP "save /tmp/backup.config"
scp vyos@$ROUTER_IP:/tmp/backup.config $BACKUP_FILE
if [ ! -f $BACKUP_FILE ]; then
log "ERROR: Backup failed"
send_notification "VyOS Update FAILED" "Backup creation failed for $ROUTER_IP"
exit 1
fi
log "Backup created: $BACKUP_FILE"
# Check for updates
log "Checking for available updates"
UPDATE_INFO=$(ssh vyos@$ROUTER_IP "show system updates" 2>&1)
if echo "$UPDATE_INFO" | grep -q "Update available"; then
NEW_VERSION=$(echo "$UPDATE_INFO" | grep "Update available" | awk '{print $3}')
log "Update available: $NEW_VERSION"
# Download and install new image
log "Installing new image: $NEW_VERSION"
ssh vyos@$ROUTER_IP "add system image latest" < /dev/null
# Set as default boot
log "Setting new image as default boot"
ssh vyos@$ROUTER_IP "set system image default-boot $NEW_VERSION"
# Schedule reboot in 5 minutes (safety window for cancellation)
log "Scheduling reboot in 5 minutes"
ssh vyos@$ROUTER_IP "shutdown reboot +5 'Automatic update to $NEW_VERSION'"
send_notification "VyOS Update SCHEDULED" "Router $ROUTER_IP will reboot in 5 minutes to apply update to $NEW_VERSION"
# Wait for reboot to complete
log "Waiting for reboot to complete"
sleep 360 # 6 minutes
# Post-reboot verification
log "Starting post-reboot verification"
RETRIES=10
while [ $RETRIES -gt 0 ]; do
if ssh -o ConnectTimeout=5 vyos@$ROUTER_IP "show version" > /dev/null 2>&1; then
log "Router is back online"
break
fi
log "Waiting for router to come back online (retries left: $RETRIES)"
sleep 30
((RETRIES--))
done
if [ $RETRIES -eq 0 ]; then
log "ERROR: Router did not come back online after reboot"
send_notification "VyOS Update CRITICAL" "Router $ROUTER_IP did not come back online after update. Manual intervention required!"
exit 1
fi
# Verify new version is running
CURRENT_VERSION=$(ssh vyos@$ROUTER_IP "show version | grep Version | awk '{print \$2}'")
if [ "$CURRENT_VERSION" == "$NEW_VERSION" ]; then
log "SUCCESS: Update completed successfully to $NEW_VERSION"
send_notification "VyOS Update SUCCESS" "Router $ROUTER_IP successfully updated to $NEW_VERSION"
else
log "WARNING: Version mismatch. Expected $NEW_VERSION, got $CURRENT_VERSION"
send_notification "VyOS Update WARNING" "Version mismatch on $ROUTER_IP. Expected $NEW_VERSION, got $CURRENT_VERSION"
fi
# Run post-update checks
log "Running post-update health checks"
# Check interfaces
if ! ssh vyos@$ROUTER_IP "show interfaces" | grep -q "eth0"; then
log "ERROR: Interfaces not configured properly"
send_notification "VyOS Update ISSUE" "Interfaces not configured on $ROUTER_IP after update"
fi
# Check routing
if ! ssh vyos@$ROUTER_IP "show ip route" | grep -q "default"; then
log "ERROR: Default route missing"
send_notification "VyOS Update ISSUE" "Default route missing on $ROUTER_IP after update"
fi
log "Update process completed"
else
log "No updates available"
fi
log "Update script finished"Планирование автоматических обновлений
# Настроить cron на management сервере для еженедельных обновлений
# /etc/cron.d/vyos-updates
# Обновлять каждое воскресенье в 3:00 AM
0 3 * * 0 /opt/scripts/auto-update-vyos.sh >> /var/log/vyos-auto-update.log 2>&1Полезные команды
# Просмотр версии
show version
show version brief
# Управление образами
show system image
add system image <url|latest>
delete system image <name>
rename system image <old-name> to <new-name>
set system image default-boot <name>
# Проверка обновлений
show system updates
show configuration system update-check
# Резервное копирование
save <filename>
save /config/backup-$(date +%Y%m%d).config
# Перезагрузка
reboot
reboot now
shutdown reboot +5
shutdown reboot 18:00
# Мониторинг
show system storage
show system uptime
show log | match image
df -h
# Откат
set system image default-boot <previous-version>
# через GRUB: выбрать предыдущий образ при загрузкеЗаключение
Правильное управление обновлениями VyOS критично для поддержания безопасности и стабильности сетевой инфраструктуры. Механизм на основе образов обеспечивает:
- Безопасное тестирование новых версий
- Быстрый откат при проблемах
- Изоляцию версий
- Сохранение конфигурации между обновлениями
Ключевые рекомендации:
- Всегда создавайте backup перед обновлением
- Тестируйте обновления в лабораторной среде
- Планируйте maintenance windows для production систем
- Документируйте все изменения
- Мониторьте систему после обновления
- Имейте план отката на случай проблем
- Используйте staged rollout для больших инфраструктур
- Проверяйте совместимость конфигурации с новой версией
- Следите за release notes VyOS для известных проблем
- Автоматизируйте процесс где возможно, но с проверками безопасности
Для production сред рекомендуется использовать LTS версии VyOS и применять обновления только после тщательного тестирования в staging environment. Rolling release версии подходят для лабораторий и сред разработки где важен доступ к последним функциям.