Вопрос или проблема
Как узнать последний номер релиза той же версии пакета в yum?
Я пытаюсь получить последний номер релиза пакета, а не последнюю версию из репозитория.
Например
yum --showduplicates list package
Установленные пакеты
package 2.1.0-1
Доступные пакеты
package 2.1.0-1
package 2.1.0-2
package 3.1.0-1
Я хочу обновить существующий package
до 2.1.0-2
, а не до последнего 3.1.0-1
. Команда yum update
всегда пытается обновить до последнего 3.1.0-1
. Я пишу скрипт, который проверяет, если номер релиза (в данном случае 2.1.0-2
) выше, чем 2.1.0-1
, и обновляет до этой версии.
Вам просто нужно указать версию, которую вы хотите установить:
sudo yum install package-2.1.0-2
Интересный вопрос 🙂
Первое, что нужно сделать, это получить базовую версию (без релиза) установленного пакета. Вы можете сделать это, запросив rpm
:
VER=$(rpm -q --queryformat "%{VERSION}" foo)
Далее вы просто устанавливаете эту версию с установленным подстановочным знаком для релиза:
yum install foo-${VER}-*
Однострочное решение:
yum install foo-$(rpm -q --queryformat "%{VERSION}" foo)-*
Ответ или решение
Для того чтобы обновить пакет до последнего релиза той же версии, используя yum
, а не до последней доступной версии, вы можете воспользоваться следующими шагами.
-
Получение установленной версии пакета:
Для начала, вам необходимо узнать установленную версию и релиз пакета. Это можно сделать с помощью командыrpm
:установленная_версия=$(rpm -q --queryformat "%{VERSION}-%{RELEASE}" имя_пакета)
Эта команда вернет строку, содержащую версию и релиз, например
2.1.0-1
. -
Определение версии без релиза:
Чтобы извлечь только номер версии, без релиза, можно использовать:версия=$(echo $установленная_версия | cut -d'-' -f1)
-
Поиск доступных релизов:
Теперь, используяyum
, вы можете получить список всех доступных релизов той же версии:yum --showduplicates list имя_пакета
Пример вывода может выглядеть так:
Установленные пакеты имя_пакета 2.1.0-1 Доступные пакеты имя_пакета 2.1.0-1 имя_пакета 2.1.0-2 имя_пакета 3.1.0-1
-
Установка последнего релиза:
Для установки последнего релиза той же версии можно использовать подстановку символов. Например, выполните следующую команду:yum install имя_пакета-${версия}-*
Эта команда установит самый высокий релиз для указанной версии пакета.
-
Объединение в одну команду (однострочник):
Вы можете объединить все шаги в одну команду:yum install имя_пакета-$(rpm -q --queryformat "%{VERSION}" имя_пакета)-*
Эта однострочная команда автоматически обновит ваш пакет до последнего релиза той же версии, осуществляя необходимую проверку.
Пример скрипта
Если вы хотите создать скрипт, который будет автоматически проверять и обновлять пакеты, он может выглядеть следующим образом:
#!/bin/bash
пакет="имя_пакета"
установленная_версия=$(rpm -q --queryformat "%{VERSION}-%{RELEASE}" $пакет)
версия=$(echo $установленная_версия | cut -d'-' -f1)
# Обновление до последнего релиза
yum install -y ${пакет}-${версия}-*
Заключение
Этот подход позволяет вам гибко управлять обновлениями пакетов, выбирая конкретный релиз той же версии, что и установленный, избегая нежелательного обновления до более новой версии.