Источник: ROSA Wiki · Лицензия: Creative Commons Attribution · Оригинал: https://wiki.rosa.ru/index.php/Архив_репозитория.html
Это независимое зеркало и не является официальным сайтом ROSA.
Jump to content

Архив репозитория

Архив репозитория (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