64. Автоматическое обновление Proxmox.

Когда речь заходит об обновлениях, среди пользователей (читай администраторов) происходит деление на 2 лагеря. Одни утверждают что ставить новые обновления на рабочую систему без проверки нельзя, другие - что раз обновления вышли в свет, то они должны быть установлены  как можно скорее. В этом материале не будем искать кто прав, кто нет, а просто рассмотрим удобный вариант автоматизации процесса.

Справедливости ради, стоит сказать что правы приверженцы обоих мнений. Остаётся только грамотно применять эти подходы в каждом конкретном случае.

Теория.

Рассмотрим ситуацию чуть подробнее.
Уже не раз бывали случаи у самых разных производителей софта, что обновления оказывались недоделанными или с ошибками и от этого страдало много людей и организаций.
Как же от этого уберечься?
Первый ответ напрашивающийся сам собой - бэкапы. Чем важнее и критичнее система, тем тщательнее нужно заботиться о её "здоровье". Всегда важно иметь возможность быстро развернуть систему в случае её отказа, или "откатиться" назад, к состоянию до критических изменений.
Второй ответ - тесты. Имея полную копию основной (рабочей) системы, и забэкапив её, можно провести процедуру установки обновлений, после которой выполнить полную симуляцию всех рабочих процессов. Если всё прошло гладко, то нет проблем повторить то же самое в продакшн (рабочей) системе. Если же были выявлены ошибки или рабочие процессы происходят не стабильно, то остаётся ждать когда выйдет исправление для этого обновления. После чего этап проверки повторяется.


С другой стороны, обновления выходят не просто так, особенно когда речь идёт о критических уязвимостях. И такие апдейты должны быть установлены в максимально сжатые сроки, чтобы минимизировать возможный урон от потенциальных угроз.

Но есть и третий, усреднённый подход, который подходит 99% домашних пользователей. Т.к. мало у кого есть возможность иметь полную аппаратную и софтовую копию основной системы, и уж тем более есть время, а главное знания на проведение проверок.
Суть этого подхода очень проста - ставим апдейты, но не сразу.
Опыт показывает что в случае ужасно тяжёлых проблем из-за ошибок в обновлениях, исправление выходит примерно от нескольких дней до месяца. Поэтому тут уже каждый для себя решает и взвешивает риски относительно частоты и регулярности обновлений.

Практика.

По сути сводится к одной команде. А именно записи времени и дня недели/месяца по которым будет выполняться команда скачивания и установки обновлений.

Известно что проксмокс сам проверяет (но не скачивает и не устанавливает) обновления раз в сутки. Соответственно, всё что нужно сделать, это запланировать действие по проверке, скачиванию и установке апдейтов.


И раз уж мы автоматизируем этот процесс, то добавим ещё пару действий. А именно:
  1. Обновим информацию о пакетах из репозиториев, чтобы узнать о новых версиях пакетов: apt update -y (эквивалент кнопки Refresh в интерфейсе).
  2. Обновим все установленные пакеты до их последних версий, включая зависимости: apt dist-upgrade -y (эквивалент кнопки Upgrade в интерфейсе).
  3. Удалим устаревшие пакеты и их зависимости, которые больше не нужны системе: apt autoremove -y
  4. Удалим устаревшие пакеты из кэша APT, что позволит освободить место на диске: apt autoclean -y
  5. Перезагрузим систему немедленно после завершения обновления и очистки: /sbin/reboot (эквивалент кнопки Reboot в интерфейсе. Главное не забыть перед применением настроить нужные виртуалки и контейнеры на автоматический запуск).

Перезагрузки бояться не стоит, гипервизор корректно останавливает все работающие виртуальные машины и контейнеры, и перезагружается только после того как они выключены.

Ключ -y в конце каждой команды означает автоматическое согласие на вопрос системы подтвердить действие.

Теперь, когда знаем перечень необходимых команд, осталось записать их в одну строку так, чтобы они выполнялись последовательно одна за другой. Для разделения команд друг от друга воспользуемся символом &&
Символ && в командной строке большинства Unix-подобных систем (включая Linux) представляет собой логический оператор "И". Он используется для выполнения последовательности команд только в случае успешного выполнения предыдущей команды.
Когда команда выполняется с использованием &&, интерпретатор команд проверяет код возврата (exit code) предыдущей команды. Если код возврата равен нулю, что обычно означает успешное выполнение команды, следующая команда после && будет выполнена. Если код возврата не ноль (что означает ошибку), команда справа от && не будет выполнена, и выполнение цепочки команд прервется.

Итоговая команда будет выглядеть так: apt update -y && apt dist-upgrade -y && apt autoremove -y && apt autoclean -y && /sbin/reboot


Осталось только решить когда именно будет происходить данная процедура. Само собой разумеется, что она не должна происходить во время бэкапа или синхронизации на сетевое/облачное хранилище. Так же стоит подстраховаться и выбрать время когда вы с большой вероятностью будете находиться дома, но не будете спать. Чтобы в случае необходимости, своевременно отреагировать и иметь в запасе достаточно времени для восстановления работоспособности системы.

Исходя из таких соображений, можно допустить (для примера), что подходящим временем будет четверг, в районе 7 часов вечера.

Дальнейшие действия максимально просты.
  • Открываем терминал проксмокса через веб интерфейс либо подключаемся по SSH ( что предпочтительнее, например с помощью Putty).
  • Открываем на редактирование файл планировщика задач с помощью команды crontab -e.
  • Добавляем в самом конце файла новую строку: 15 19 * * 4 apt update -y && apt dist-upgrade -y && apt autoremove -y && apt autoclean -y && /sbin/reboot.
  • Жмём Ctl+x чтобы выйти из режима редактирования, нажав Y подтверждаем сохранение изменений.
Формат записей crontab выглядит следующим образом:
"минуты" "часы" "день месяца" "месяц" "день недели" "команда"

Поэтому, разбирая указанный пример, получаем:
15: Указывает на минуты. Команда будет выполнена в 15 минут каждого часа.
19: Указывает на часы. Команда будет выполнена в 19 часов каждого дня.
*: Звёздочка в позициях "день месяца", "месяц" и "день недели" означает "любое значение". Таким образом, команда будет выполняться в любой день месяца, в любом месяце.
4: Указывает на день недели (0 - воскресенье, 1 - понедельник, ..., 6 - суббота). Т.е. "4" означает четверг.

В итоге, переведя запись на "человеческий" язык получаем: в 19:15 каждый четверг выполнить проверку и установку обновлений с последующей очисткой и перезагрузкой системы. Собственно то, чего и пытались достичь.

Внутри каждого контейнера или виртуальной машины на этом хосте, можно так же запланировать выключение за пару минут до начала действий на самом гипервизоре. И тогда, к моменту запуска процедуры, все объекты уже будут выключены самым корректным способом, и процесс перезапуска пройдёт гораздо быстрее.

И конечно же всегда стоит помнить о том, что технические аспекты могут меняться со временем. Поэтому рекомендуется всегда проверять актуальные ресурсы и официальную документацию Proxmox для обновлений и изменений в процессе.

Комментарии

  1. Можно ли обойти ошибку неавторизованности при обновлениях в прокмокс?

    ОтветитьУдалить
    Ответы
    1. что за ошибка? под каким пользователем выполняется команда? какая именно команда и как должна выполняться?

      Удалить

Отправить комментарий