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 -h
vyos@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 (при загрузке)

Когда использовать: При невозможности загрузки или критических проблемах

Процедура:

  1. Перезагрузить систему: reboot
  2. При появлении GRUB меню (нажать ESC если автозагрузка)
  3. Выбрать пункт с предыдущей версией VyOS
  4. Нажать 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:

  1. Перезагрузить систему (физически или через IPMI/KVM)
  2. Нажать ESC при появлении GRUB
  3. Выбрать предыдущий работающий образ
  4. После успешной загрузки:
# Установить старый образ как 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:

  1. Перезагрузить (hard reset)
  2. Выбрать предыдущий образ в GRUB
  3. После загрузки установить его как 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 operational

4. Окна обслуживания (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
exit

5. Поэтапное обновление (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 от пользователей
# - Анализ логов и метрик
# - При проблемах - остановка rollout

6. Мониторинг после обновления

Усиленный мониторинг первые 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
done

7. План отката (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-180000

8. Версионирование и метки

Используйте понятные имена для образов:

# Вместо:
# 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-stable

9. Автоматизация через 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.sh

10. Безопасность при обновлениях

Проверяйте подлинность образов:

# Проверить 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 критично для поддержания безопасности и стабильности сетевой инфраструктуры. Механизм на основе образов обеспечивает:

  • Безопасное тестирование новых версий
  • Быстрый откат при проблемах
  • Изоляцию версий
  • Сохранение конфигурации между обновлениями

Ключевые рекомендации:

  1. Всегда создавайте backup перед обновлением
  2. Тестируйте обновления в лабораторной среде
  3. Планируйте maintenance windows для production систем
  4. Документируйте все изменения
  5. Мониторьте систему после обновления
  6. Имейте план отката на случай проблем
  7. Используйте staged rollout для больших инфраструктур
  8. Проверяйте совместимость конфигурации с новой версией
  9. Следите за release notes VyOS для известных проблем
  10. Автоматизируйте процесс где возможно, но с проверками безопасности

Для production сред рекомендуется использовать LTS версии VyOS и применять обновления только после тщательного тестирования в staging environment. Rolling release версии подходят для лабораторий и сред разработки где важен доступ к последним функциям.