Как получить название старого пакета?

Как получить название старого пакета?

У меня RHEL и на одном из серверов я установил один и тот же пакет RPM в двух разных версиях.

[root ~]# rpm -qa | grep my-package-name
my-package-name-6.6.2-129.x86_64
my-package-name-7.0.2-1.x86_64

Интересно, возможно ли получить только старое имя пакета? В принципе, я хочу сделать что-то вроде этого:

[root ~]# rpm -qa | grep my-package-name | get-the-oldest-package

Как мне это сделать?

решение1

Я не совсем понимаю, как вам удалось установить две версии одного и того же пакета, но это должно помочь:

rpm -q --queryformat "%{VERSION} %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n" my-package-name | \
  sort -V | \
  awk 'NR==1 { print $2 }'

Первая строка запрашивает базу данных RPM для my-package-name, прося RPM предоставить результаты в определенном формате — VERSION, за которым следуют поля по умолчанию "rpm -qa". Это передается по конвейеру to sort -V(попытка) сортировки номеров версий, за которым следует конвейер to awkдля печати только первой строки, удаляя дополнительное поле VERSION, что приводит к rpm -qaвыводу по умолчанию.

Это позволяет с уверенностью предположить, что вы запускаете это в системе RHEL, в которой есть -Vфлаг для сортировки.

решение2

Я всегда с паранойей относился к зависимости от программ, интерпретирующих строки версий, поэтому в качестве альтернативы решению Джеффа вы также можете сделать это:

[root@jb87-workstation ~]# rpm -q kernel --queryformat "%{INSTALLTIME} %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n" | sort -n | head -1 | awk '{print $NF}'
kernel-4.8.13-300.fc25.x86_64

(замените kernelназвание вашего пакета)

По сути, это печатает полное имя пакета, выполняя ту же rpm -qaкоманду и просто используя --queryformatдля префикса каждой строки временную метку Unix, когда он был установлен (которая находится в теге %{INSTALLTIME}). Затем он sort -nсортирует вывод от самого старого к самому новому и просто берет первую строку вывода и печатает последний столбец, который будет полным именем пакета.

Хотя у Джеффа все отлично. Это, наверное, больше вопрос личных предпочтений.

решение3

Вы можете использовать yum downgrade package-name. Иногда в новых пакетах появляется ошибка. Я сделал downgrade на старый пакет.

Связанный контент