Способ получить предыдущую установленную версию в файле СПЕЦИФИКАЦИИ

#centos7 #yum #rpm-spec

#centos7 #вкуснятина #rpm-спецификация

Вопрос:

возможно, это глупый вопрос, но я искал и ничего не нашел. Есть ли какой-либо элегантный способ внутри файла определения спецификации получить предыдущую установленную версию на локальном компьютере того же пакета, определенного в СПЕЦИФИКАЦИИ, используя, возможно, какую-то переменную?

Ответ №1:

Не напрямую, но ваш %pre скриптлет будет вызван в 2 качестве первого параметра, если это обновление. Затем вы можете делать с этой информацией все, что захотите, например, анализировать существующую README или даже запускать /path/to/your/tool --version и анализировать ее. Или, может быть, у вас есть скрытый файл /path/to/your/tool/.version , чтобы сделать ваш скрипт еще проще.

Подробнее о скриптлетах здесь.

Комментарии:

1. Спасибо за ответ. /path/to/your/tool --version действительно простая и отличная идея… В конце я сделал это, сохранив в макросе результат команды rpm -qi --queryString "%VERSION%" PACKAGE_NAME

2. Однако, на мой взгляд, кажется немного абсурдным не интегрировать эту функцию…

3. Пожалуйста, уточните свой комментарий «сохранение в макросе» — вы имеете в виду переменную среды из скрипта? Если вы имеете в виду макрос RPM, то это может происходить во время сборки . Проверьте окончательные сценарии в RPM! Вызов rpm исполняемого файла из скриплетов — действительно плохая идея, и она может работать, потому что это всего лишь операция чтения. Вот почему я намеренно не упомянул rpm -qi в своем ответе.

4. Я сделал что-то вроде этого: %global _prevver $(rpm -qa --queryformat '%{VERSION}' eplate-rest) на этапе %pre. Если здесь небезопасно вызывать rpm, я могу сохранить это значение из path/to/tool --version

5. Тогда это получение версии RPM, установленной на компьютере сборки во время сборки, а не на целевой машине во время установки. Вам нужно сделать это другим способом. Вы можете убедиться в этом, просмотрев сценарии — rpm -qp --scripts your_rpm.rpm