Вопрос или проблема
Я использую 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 через неделю или есть лучший способ сделать все это?
- Настройте репозиторий на вашем основном сервере:
dnf install createrepo_c
createrepo_c /path/to/RPMs
- Предоставьте его через
nginx/apache/vsftpd
или любой другой способ
- Укажите ваши подчиненные серверы на этот репозиторий (вы можете проверить существующие репозитории в
/etc/yum.repos.d/
– да, это все еще yum для совместимости) - Запустите
dnf --disablerepo=* --enablerepo=master update
на ваших подчиненных серверах
AI, наверное, должен был дать тот же ответ за менее чем 30 секунд.
Опция N2: может сработать, а может и нет, но, вероятно, должна:
- Распределите RPM любым удобным для вас способом (
rsync/scp/etc
или даже предоставьте их черезSamba/NFS/etc
) - Запустите
cd /directory/with/RPMs
rpm -Uvh *rpm
Первый метод гораздо более предпочтителен.
Ответ или решение
Чтобы управлять обновлениями в вашей среде Almalinux 9 (или аналогичных системах, таких как RHEL или CentOS), необходимо организовать процесс таким образом, чтобы он был эффективным и безопасным для различных серверов в вашем окружении (разработки, тестирования и продуктивной среде). В данном случае, вы хотите скачивать обновления и устанавливать их в разное время на различных серверах, чтобы избежать внедрения изменений, которые не были протестированы.
Подход к управлению обновлениями в Almalinux 9
-
Создание репозитория 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
), чтобы ваши клиентские серверы могли получать доступ к этому репозиторию.
- Установите
-
Настройка клиентских серверов:
- Убедитесь, что ваши клиентские сервера (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
- Убедитесь, что ваши клиентские сервера (dev/test и prod) знают о новом репозитории. Откройте файл конфигурации репозиториев (например, в
-
Процесс обновления для разных серверов:
- Для 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
- Для dev/test серверов можно использовать стандартное обновление с вашей новой локальной репозиторием:
Альтернативный подход: Механизм передачи RPM
Если вы не хотите устанавливать собственный репозиторий, можно просто передать RPM-пакеты вручную с помощью rsync
, scp
или аналогичных инструментов и установить их на сервере производственным путем:
cd /directory/with/RPMs
rpm -Uvh *.rpm
Рекомендации
Создание локального репозитория с createrepo_c
— более предпочтительный и управляемый способ для управления обновлениями на ваших серверах. Этот метод позволяет избежать проблем с совместимостью и сохраняет контейнеры пакетов организованными. Таким образом, вы имеете полный контроль над процессом обновления и минимизируете риск ошибок на продуктивной среде.
Выберите подходящий для вас метод в зависимости от ваших условий и инфраструктуры.