#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