Поиск по сайту:

Как обновлять серверы Rocky Linux 9


Введение

В этом руководстве вы познакомитесь с некоторыми рекомендациями по поддержанию стека вашего сервера Rocky Linux 9 в актуальном состоянии. Как и в случае усиления сетевой безопасности, вы можете предпринять множество шагов, чтобы ваши серверы продолжали безопасно работать без вмешательства в будущем.

Существует ряд инструментов и конфигураций, которые вы можете применить к большинству серверов Rocky Linux помимо того, что настроено для вас автоматически. Если вы занимаетесь администрированием своего собственного сервера, ручное исправление всех ваших сред может быть довольно разрушительным и подверженным ошибкам.

Этот учебник будет охватывать:

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

Предпосылки

  • Сервер Rocky Linux 9 и пользователь без полномочий root с привилегиями sudo. Вы можете узнать больше о том, как настроить пользователя с этими привилегиями, в нашем руководстве Initial Server Setup with Rocky Linux 9.

Шаг 1. Следование рекомендациям по управлению приложениями

Фундаментальной частью настройки сервера для автоматических обновлений является обеспечение возможности корректного перезапуска всех приложений, работающих на сервере, после незапланированного простоя или перезагрузки. Менеджеры пакетов Linux предназначены для бесперебойной работы в фоновом режиме, поэтому необходимое обслуживание не связано с какими-либо дополнительными накладными расходами. Несмотря на это, одной из наиболее распространенных причин отсутствия хорошей стратегии обновления является беспокойство о том, как ваш сервер будет вести себя после перезапуска.

По возможности приложения в вашем стеке должны управляться системой инициализации вашего сервера, которой в большинстве современных дистрибутивов Linux, включая Rocky Linux, является systemd. Systemd предоставляет команду systemctl для взаимодействия с запущенными службами и их автоматического перезапуска по мере необходимости. Практически все программное обеспечение, устанавливаемое с помощью диспетчера пакетов и предназначенное для работы в фоновом режиме, должно автоматически предоставлять службу systemd и файл конфигурации в качестве наилучшей практики.

При запуске собственного программного обеспечения или программного обеспечения, развернутого из репозиториев Git, неплохо было бы написать собственные файлы модулей для интеграции с systemd. В качестве упрощенной альтернативы вы можете использовать такой инструмент, как планировщик cron, с синтаксисом @reboot.

После того, как ваша конфигурация будет готова, обязательно проверьте ее с помощью перезагрузки. Вы можете перезагрузиться, запустив sudo shutdown now -r, который полностью остановит ваши запущенные процессы и немедленно перезагрузится. Вы также можете указать время в формате чч:мм или несколько минут, а не сейчас, чтобы запланировать перезагрузку в будущем. Производственные развертывания, как правило, не требуют вашего внимания после каких-либо незапланированных простоев, и все необходимые службы и конечные точки должны автоматически восстанавливаться.

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

Шаг 2. Настройка автоматических обновлений

Менеджер пакетов Rocky, dnf, имеет два основных способа выполнить полное обновление системы. Вы можете запустить dnf upgrade без указания пакета, чтобы обновить каждый пакет в вашей системе. Вы также можете запустить dnf upgrade-minimal, чтобы обновить каждый пакет только до последнего выпуска исправления ошибки или исправления безопасности, который выполнит необходимое обслуживание, избегая при этом каких-либо потенциальных критических изменений выше по течению. Подробнее о командах dnf можно прочитать в документации по dnf.

Rocky также предоставляет уникальный инструмент под названием dnf-automatic для автоматического получения и установки исправлений безопасности и других необходимых обновлений для вашего сервера. Вы можете установить его с помощью dnf:

  1. sudo dnf install dnf-automatic -y

dnf-automatic не включается автоматически после установки. Вместо этого он предоставляет несколько различных сервисов, которые вы можете зарегистрировать в Systemd, чтобы настроить его поведение. Это:

  • dnf-automatic — эта служба использует параметры файла конфигурации dnf-automatic в /etc/dnf/automatic.
  • dnf-automatic-notifyonly — переопределяет файл конфигурации, уведомляя вас только о доступных обновлениях, но не устанавливая их.
  • dnf-automatic-download — переопределяет файл конфигурации, загружая пакеты, но не устанавливая их.
  • dnf-automatic-install — переопределяет файл конфигурации, всегда устанавливая загруженные пакеты.

В этом руководстве вы включите службу dnf-automatic-install, но сначала внесете одно изменение в файл конфигурации dnf-automatic. Откройте файл с помощью vi или вашего любимого текстового редактора:

  1. sudo vi /etc/dnf/automatic
[commands]
#  What kind of upgrade to perform:
# default                            = all available upgrades
# security                           = only the security upgrades
upgrade_type = security
random_sleep = 0

# Maximum time in seconds to wait until the system is on-line and able to
# connect to remote repositories.
network_online_timeout = 60

# To just receive updates use dnf-automatic-notifyonly.timer

# Whether updates should be downloaded when they are available, by
# dnf-automatic.timer. notifyonly.timer, download.timer and
# install.timer override this setting.
download_updates = yes

# Whether updates should be applied when they are available, by
# dnf-automatic.timer. notifyonly.timer, download.timer and
# install.timer override this setting.
apply_updates = no
…

Большинство параметров в этом файле соответствуют различным переопределениям, предоставляемым различными службами Systemd. Исключением является параметр upgrade_type, для которого по умолчанию установлено значение default. Если вы собираетесь внедрять автоматические обновления (наиболее проактивная конфигурация), рекомендуется по умолчанию устанавливать только обновления безопасности, чтобы избежать неожиданных изменений в функциональности. Измените значение upgrade_type на security, как в приведенном выше примере, затем сохраните и закройте файл. Если вы используете vi, вы можете сохранить и выйти, введя :x.

Теперь вы можете включить службу с помощью systemctl:

  1. sudo systemctl enable dnf-automatic-install.timer

Вы можете убедиться, что служба dnf-automatic-install работает правильно, используя systemctl:

  1. sudo systemctl status dnf-automatic-install
Output
● dnf-automatic-install.service - dnf automatic install updates Loaded: loaded (/usr/lib/systemd/system/dnf-automatic-install.service; static; vendor preset: disabled) Active: inactive (dead) Jul 14 21:01:03 droplet-name dnf-automatic[40103]: No security updates needed, but 154 updates available Jul 14 21:01:03 droplet-name systemd[1]: dnf-automatic-install.service: Succeeded. Jul 14 21:01:03 droplet-name systemd[1]: Started dnf automatic install updates.

В отличие от некоторых служб Systemd, dnf-automatic реализован как таймер, а не как служба, постоянно работающая в фоновом режиме. Это означает, что состояние Активно: неактивно (мертво) ожидается, если служба загружена, а журналы отражают успешные запуски.

Вы можете проверить детали этого таймера, используя systemctl cat:

  1. sudo systemctl cat dnf-automatic-install.timer
Output
[Unit] Description=dnf-automatic-install timer # See comment in dnf-makecache.service ConditionPathExists=!/run/ostree-booted Wants=network-online.target [Timer] OnCalendar=*-*-* 6:00 RandomizedDelaySec=60m Persistent=true [Install] WantedBy=timers.target

По умолчанию служба настроена на работу около 6:00 каждый день. Вам не нужно изменять это значение.

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

Шаг 3 — Обновление и исправление ядра

Реже, чем другие пакеты, вам нужно будет обновить ядро вашей системы. Ядро Linux содержит (почти) все работающие аппаратные драйверы и отвечает за большинство низкоуровневых системных взаимодействий. Обновления ядра обычно необходимы только в том случае, если есть известная уязвимость, которую необходимо устранить, если вам нужно использовать опубликованную новую функцию ядра или если ваше ядро стало настолько старым, что существует больший риск накопления ошибок и уязвимостей, которые вы можете не знать.

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

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

Включение исправлений в реальном времени для обеспечения бесперебойной работы сервера во время обновлений ядра

Чтобы избежать простоев во время обновления ядра, вы можете использовать функцию ядра Linux, называемую оперативным исправлением. Эта функция позволяет выполнять обновления ядра без перезагрузки. В экосистеме Rocky Linux есть два основных мейнтейнера для оперативных исправлений ядра: kpatch от Red Hat, который предоставляет оперативные исправления для Red Hat Enterprise Linux, и KernelCare, которая поддерживает Rocky Linux в дополнение к большинству других основных дистрибутивов Linux. . Оба требуют регистрации для использования.

Из-за того, как работает модель лицензирования Red Hat Enterprise Linux, вы не сможете получать оперативные исправления ядра через kpatch при работе с Rocky Linux — Rocky во многих отношениях действует как нелицензионная версия Red Hat, и нет возможности зарегистрироваться для оперативного исправления ядра без запуска полностью лицензированного экземпляра Red Hat. Однако способ его включения одинаков для Rocky или RHEL. Сначала установите пакет kpatch-dnf:

  1. sudo dnf install kpatch-dnf

Затем запустите dnf kpatch auto, чтобы автоматически подписаться на службы исправления в реальном времени:

  1. sudo dnf kpatch auto
Output
Last metadata expiration check: 0:00:06 ago on Thu 14 Jul 2022 09:12:07 PM UTC. Dependencies resolved. Nothing to do. Complete!

kpatch проверит настроенные службы исправлений и, не найдя их, корректно завершит работу. В Red Hat вместо этого будет выполнена проверка лицензии и регистрация на серверах Red Hat kpatch. На Rocky вы можете вместо этого изучить KernelCare как вариант коммерческой поддержки.

Заключение

В этом руководстве вы изучили несколько стратегий автоматического обновления серверов Rocky Linux. Вы также узнали некоторые нюансы репозиториев пакетов, обновлений ядра и обработки перезагрузки сервера. Все это важные основы DevOps и работы с серверами в более широком смысле, и почти все производственные конфигурации основаны на этих основных концепциях.

Затем вы можете научиться использовать Watchtower для автоматического обновления образов контейнеров Docker.