Архив репозитория
Архив репозитория (repo-archive) — хранилище всех когда-либо выпущенных пакетов ROSA. В основных репозиториях остаётся только последняя версия каждого пакета, в repo-archive — все предыдущие и последняя.
Адрес архива: https://mirror.rosa.ru/repo-archive/ . Каталоги соответствуют платформам: rosa2021.1, rosa13; внутри — SRPMS и x86_64/main, x86_64/contrib, x86_64/non-free.
Пример практического применения: на предприятии используется kubernetes v1.30, а в репозиториях ROSA уже доступна версия v1.36, но перейти на неё не успели. Даже если v1.36 полностью совместим с v1.30 (что не всегда так), может понадобиться развернуть ещё один сервер с проверенной конфигурацией, а не с обновлённой. В подобных ситуациях прежнюю версию пакета устанавливают из repo-archive.
Не гарантируется совместимость прежних версий пакетов с актуальными версиями остальных.
Все примеры проверены на РОСА 13 (платформа rosa13) с пакетами kubernetes и chromium-browser-stable; команды dnf выполняются от root или через sudo.
Подключение репозитория-архива
sudo dnf install rosa-repos-archive
Пакет добавляет файл /etc/yum.repos.d/10-rosa-repo-archive.repo с тремя секциями: repo-archive-main, repo-archive-contrib, repo-archive-non-free. Репозитории включены по умолчанию и подписаны ключом RPM-GPG-KEY-ROSA.
Обратите внимание: метаданные архива занимают около 200 МБ, поэтому первое обновление кэша dnf после подключения будет длительным.
Просмотр доступных версий
Список всех версий пакета, доступных для установки, включая архивные:
dnf list --showduplicates kubeadm kubectl kubelet
Доступные пакеты kubeadm.x86_64 1.30.3-1 repo-archive-main kubeadm.x86_64 1.31.3-1 repo-archive-main kubeadm.x86_64 1.32.5-1 repo-archive-main kubeadm.x86_64 1.34.1-1 repo-archive-main kubeadm.x86_64 1.35.8-1 repo-archive-main kubeadm.x86_64 1.36.4-1 mirror-rosa-x86_64-main kubeadm.x86_64 1.36.4-1 repo-archive-main ... (аналогично для kubectl и kubelet)
Установка конкретной версии
Нужная версия дописывается к имени пакета через дефис:
sudo dnf install kubeadm-1.30.3 kubectl-1.30.3 kubelet-1.30.3
Установленную версию любого пакета показывает команда rpm -q:
rpm -q kubeadm kubectl kubelet
kubeadm-1.30.3-1.x86_64 kubectl-1.30.3-1.x86_64 kubelet-1.30.3-1.x86_64
Внимание. Установки одного лишь метапакета kubernetes-1.30.3 недостаточно: он содержит только документацию, а kubeadm, kubectl и kubelet будут установлены в последних версиях как слабые зависимости. Указывайте версию явно для каждого компонента.
Установка конкретных версий через Ansible
Подключение архива репозитория и установку нужных версий пакетов можно автоматизировать с помощью Ansible. Сценарий (playbook):
---
- name: Подключение репозитория-архива и установка kubernetes 1.30.3
hosts: k8s
become: true
tasks:
- name: Подключить репозиторий-архив
ansible.builtin.dnf:
name: rosa-repos-archive
state: present
- name: Установить kubernetes 1.30.3
ansible.builtin.dnf:
name:
- kubeadm-1.30.3
- kubectl-1.30.3
- kubelet-1.30.3
state: present
Файл inventory с группой k8s:
[k8s] localhost ansible_connection=local
Для реальных серверов вместо localhost указываются их имена. Запуск:
ansible-playbook -i inventory rosa-archive-k8s.yml
Результат проверяется на управляемом узле командой rpm -q:
rpm -q kubeadm kubectl kubelet
kubeadm-1.30.3-1.x86_64 kubectl-1.30.3-1.x86_64 kubelet-1.30.3-1.x86_64
Запрет обновления (versionlock)
Плагин versionlock запрещает обновление указанных пакетов при dnf update. Установка плагина:
sudo dnf install python3-dnf-plugin-versionlock
Зафиксировать текущие версии установленных пакетов:
sudo dnf versionlock add kubeadm kubectl kubelet
Adding versionlock on: kubelet-0:1.30.3-1.* Adding versionlock on: kubeadm-0:1.30.3-1.* Adding versionlock on: kubectl-0:1.30.3-1.*
Посмотреть список блокировок:
dnf versionlock list
Теперь обновление заблокировано:
sudo dnf update kubeadm kubectl kubelet
Nothing to do
Снять блокировку с одного пакета:
sudo dnf versionlock delete kubectl
Снять все блокировки:
sudo dnf versionlock clear
Откат на прежнюю версию (dnf downgrade)
Команда dnf downgrade заменяет установленный пакет более старой версией. Если конкретная версия не указана, выбирается ближайшая предыдущая из доступных:
sudo dnf downgrade kubeadm kubectl kubelet
Проверка результата:
rpm -q kubelet
kubelet-1.35.8-1.x86_64
Чтобы перейти на конкретную версию, укажите её:
sudo dnf downgrade kubeadm-1.32.5 kubectl-1.32.5 kubelet-1.32.5
Проверка результата:
rpm -q kubelet
kubelet-1.32.5-1.x86_64
Откат работает только при подключённом repo-archive: в основных репозиториях прежних версий уже нет.
Пример: откат Chromium после неудачного обновления
Если новая версия пакета по какой-то причине не подходит, можно вернуться на прежнюю. Пример — браузер Chromium (пакет chromium-browser-stable): предположим, после обновления до 154 он стал некорректно отображать внутренний веб-интерфейс организации. Вернёмся на предыдущую версию и запретим обновление до выхода исправления.
Узнать установленную версию:
rpm -q chromium-browser-stable
chromium-browser-stable-154.0.8037.17-2.x86_64
Откатиться на предыдущую:
sudo dnf downgrade chromium-browser-stable
Проверка результата:
rpm -q chromium-browser-stable
chromium-browser-stable-151.0.7922.137-1.x86_64
Запретить обновление до выхода исправления:
sudo dnf versionlock add chromium-browser-stable
Убедиться, что блокировка установлена:
dnf versionlock list
chromium-browser-stable-0:151.0.7922.137-1.*
Когда исправление выйдет, снять блокировку и обновиться:
sudo dnf versionlock clear
sudo dnf update chromium-browser-stable