Скачать обновления Linux сейчас и установить только эти обновления позже.

Вопрос или проблема

Я использую Almalinux 9 и dnf, но RHEL, CentOS или подобные будут работать так же. Есть ли правильный способ загрузить обновления в один момент времени, а затем установить их позже? У меня есть dev/test серверы и prod серверы. Я хотел бы, чтобы dev/test серверы и prod серверы загружали обновления в одно и то же время. С этим нет проблем. Я запускаю dnf upgrade --downloadonly /my/cached/updates -y, и у меня есть все файлы RPM в одной директории, и это одни и те же RPM на dev/test и prod. Теперь скажем, я хочу, чтобы мои dev/test серверы устанавливали обновления в то же время, когда они их загружают, но я хочу, чтобы мои prod серверы ждали целую неделю перед установкой. Я никогда не хочу устанавливать что-либо на своем prod системе, что не было установлено и протестировано на dev/test сначала. Поэтому я не хочу, чтобы в prod были новые обновления, которые могли быть выпущены в течение недели после того, как я обновил dev/test, но перед тем, как я обновлю prod.

Должен ли я просто запустить dnf install /my/cached/updates/*.rpm -y на prod через неделю или есть лучший способ сделать все это?

  1. Настройте репозиторий на вашем основном сервере:
  • dnf install createrepo_c
  • createrepo_c /path/to/RPMs
  • Предоставьте его через nginx/apache/vsftpd или любой другой способ
  1. Укажите ваши подчиненные серверы на этот репозиторий (вы можете проверить существующие репозитории в /etc/yum.repos.d/ – да, это все еще yum для совместимости)
  2. Запустите dnf --disablerepo=* --enablerepo=master update на ваших подчиненных серверах

AI, наверное, должен был дать тот же ответ за менее чем 30 секунд.


Опция N2: может сработать, а может и нет, но, вероятно, должна:

  1. Распределите RPM любым удобным для вас способом (rsync/scp/etc или даже предоставьте их через Samba/NFS/etc)
  2. Запустите
cd /directory/with/RPMs
rpm -Uvh *rpm

Первый метод гораздо более предпочтителен.

Ответ или решение

Чтобы управлять обновлениями в вашей среде Almalinux 9 (или аналогичных системах, таких как RHEL или CentOS), необходимо организовать процесс таким образом, чтобы он был эффективным и безопасным для различных серверов в вашем окружении (разработки, тестирования и продуктивной среде). В данном случае, вы хотите скачивать обновления и устанавливать их в разное время на различных серверах, чтобы избежать внедрения изменений, которые не были протестированы.

Подход к управлению обновлениями в Almalinux 9

  1. Создание репозитория RPM:
    Чтобы централизовать и упростить процесс обновлений, мы рекомендуем создать локальный репозиторий RPM. Это позволит вам контролировать, какие версии пакетов будут установлены на серверах.

    Шаги для создания репозитория:

    • Установите createrepo_c, если он ещё не установлен:
      dnf install createrepo_c
    • Соберите ваши RPM-пакеты в одной директории:
      mv /my/cached/updates/*.rpm /path/to/RPMs/
    • Создайте репозиторий:
      createrepo_c /path/to/RPMs/
    • Настройте сервер (например, nginx, apache, vsftpd), чтобы ваши клиентские серверы могли получать доступ к этому репозиторию.
  2. Настройка клиентских серверов:

    • Убедитесь, что ваши клиентские сервера (dev/test и prod) знают о новом репозитории. Откройте файл конфигурации репозиториев (например, в /etc/yum.repos.d/).
    • Добавьте новый файл репозитория:
      [local-repo]
      name=Local Repository
      baseurl=http://your-local-repo-url/path/to/RPMs/
      enabled=1
      gpgcheck=0
    • Убедитесь, что другие репозитории отключены при обновлении:
      dnf --disablerepo=* --enablerepo=local-repo upgrade
  3. Процесс обновления для разных серверов:

    • Для dev/test серверов можно использовать стандартное обновление с вашей новой локальной репозиторием:
      dnf --disablerepo=* --enablerepo=local-repo upgrade -y
    • После успешного тестирования и установки обновлений на dev/test системах, вы можете обновить ваши продуктивные серверы. Для этого, выполните команду:
      dnf --disablerepo=* --enablerepo=local-repo install <имя_пакета> -y
    • Для вашего случая, когда нужно установить обновления на продуктивные сервера через неделю, просто повторите команду обновления на продуктивных серверах, указав нужные RPM:
      dnf --disablerepo=* --enablerepo=local-repo install /path/to/RPMs/*.rpm -y

Альтернативный подход: Механизм передачи RPM

Если вы не хотите устанавливать собственный репозиторий, можно просто передать RPM-пакеты вручную с помощью rsync, scp или аналогичных инструментов и установить их на сервере производственным путем:

cd /directory/with/RPMs
rpm -Uvh *.rpm

Рекомендации

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

Выберите подходящий для вас метод в зависимости от ваших условий и инфраструктуры.

Оцените материал
Добавить комментарий

Капча загружается...