извлеките файл спецификации из пакета rpm

Есть ли способ извлечь файл спецификации из пакета rpm (у меня есть только файл RPM)

не по

   rpm --scripts -qp my-great-app-1.1.2.rpm 

(этот синтаксис не получает спецификационный файл, только скрипты из rpm)


person jon    schedule 10.04.2011    source источник
comment
Вы уверены, что файл спецификации хранится в RPM? В .src.rpm, конечно, но для обычного RPM я в этом совсем не уверен.   -  person Mat    schedule 10.04.2011
comment
поэтому, если у меня есть только файл rpm, где я могу получить файл спецификации, пожалуйста, помогите   -  person jon    schedule 10.04.2011
comment
найдите исходный RPM или домашнюю страницу этого пакета.   -  person Mat    schedule 10.04.2011
comment
У меня есть только файл rpm, а не исходный код   -  person jon    schedule 10.04.2011
comment
Файл спецификации бесполезен без исходного кода - единственная причина его существования - возможность создавать rpm из исходного кода. Чего вы пытаетесь достичь? Какой это пакет?   -  person Mat    schedule 10.04.2011
comment
Мне нужно исправить некоторые скрипты в rpm, затем мне нужно снова запаковать rpm, в спецификации мне нужно обновить версию .etc, так что делать, это срочно и мне нужно закончить эту задачу до 24:00   -  person jon    schedule 10.04.2011
comment
найдите спецификацию, перестройте ее, используя свои знания о пакете, просмотрите rpm с помощью редактора, чтобы найти все скриптлеты/зависимости, которые вы можете извлечь, и т. д.   -  person Mat    schedule 10.04.2011
comment
дайте мне пример, как это сделать, как с vi? Я вижу в rpm много символов и китайское слово, я не могу найти спецификацию таким образом - :(   -  person jon    schedule 10.04.2011
comment
Что-то здесь неприемлемо, мне нужно обновить файл rpm pkg, и очевидно, что мне нужно также обновить файл спецификации и снова перестроить rpm, но у меня нет файла спецификации, у меня есть только rpm   -  person jon    schedule 10.04.2011
comment
@jon, я застрял в той же ситуации, тебе удалось получить файл спецификации любого rpm?   -  person Juned    schedule 01.11.2012


Ответы (7)


Установите rpmrebuild и «извлеките» (фактически заново создайте) spec-файл вашего файла rpm или вашего уже установленного пакета.

Примеры:

rpmrebuild --package --notest-install -e oracle-instantclient-basic-10.2.0.4-1.x86_64.rpm
rpmrebuild -s hercules.spec hercules
person reichhart    schedule 05.01.2013
comment
Глядя на код rpmrebuild, а затем фактически тестируя его, он не извлекает файл спецификации; он регенерирует большую часть файла спецификации (заголовок, журнал, предварительные/пост-скрипты). Но, что критично для перестроения, на самом деле он не получает разделы %prep или %build; он просто оставляет их со значениями по умолчанию (соответственно, make clean и make install). Я подозреваю, что это потому, что /эта/ информация не хранится в RPM. Итак, хотя это должно работать в самых общих случаях, не похоже, что это будет работать повсеместно (особенно для пакетов со сложными этапами компиляции). :/ - person dannysauer; 22.07.2015
comment
dannysauer: Конечно, на самом деле это не извлечение, потому что это перестроение файла спецификации (вопрос был в том, что это извлечение). Спецификация не является частью пакета RPM, поэтому единственным способом получить шаблон спецификации является перестроение. Но во многих случаях это может быть хорошей отправной точкой. В прошлом это иногда помогало мне исправлять бинарные пакеты rpm. - person reichhart; 24.06.2017

Файл спецификации не хранится в двоичных rpm-пакетах, если только упаковщик не включил его по какой-то причине (и на самом деле нет причин для этого). Единственная информация, которую вы можете получить из бинарного rpm, это информация, которую возвращает rpm -qi <package>, и файлы, которые перечисляет rpm -ql <package>. Если вам нужно больше, вы должны найти исходный пакет. Если Google / веб-сайт поставщика не может предоставить вам это, в поле Упаковщик должна быть указана контактная информация для всего, что упаковано кем-либо компетентным. Например, вот пакет, который поставляется с RHEL, и пакет от стороннего поставщика:

$ rpm --qf '%{Packager}\n' -q redhat-release
Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
$ rpm --qf '%{Packager}\n' -q cfengine-community
CFEngine AS ([email protected])

Там у вас есть веб-сайт и адрес электронной почты, соответственно, где вы можете спросить о файле спецификации или файле srpm.

person dannysauer    schedule 28.09.2011

spec-файлы обычно не в rpm. Они находятся в исходных оборотах.

person Rumple Stiltskin    schedule 10.04.2011
comment
Могу ли я снова собрать rpm без файла спецификации? - person jon; 10.04.2011
comment
@jon: Насколько я знаю, это невозможно построить. Но, я думаю, вы можете просто написать спецификационный файл только с разделом установки, просмотрев файлы, упакованные в бинарный rpm. - person Rumple Stiltskin; 10.04.2011
comment
посмотрев на файлы, упакованные в бинарные обороты, объясните, пожалуйста? - person jon; 11.04.2011
comment
Так как же их извлечь из srpm? - person greenoldman; 10.09.2013

вы могли бы использовать

yumdownloader --source < something.rpm

тогда:

rpm2cpio packagename | cpio -ivd
person kamal    schedule 04.05.2012
comment
Это получает только файлы, которые будут установлены, а не файл спецификации. - person Xiong Chiamiov; 24.08.2012
comment
rpm -i pkg.src.rpm извлечет его в каталог rpmbuild - person qrtt1; 17.11.2012
comment
Вопрос не в исходных оборотах, а в бинарных оборотах. Если бы у ОП был src.rpm, это было бы легко, и он бы не задавал этот вопрос. - person reichhart; 19.04.2019

Согласно ответу @RumpleStiltskin, исходные файлы спецификаций находятся в исходных rpm-пакетах, которые можно извлечь. Чтобы получить исходные обороты, выполните следующее:

yum install yum-utils # Only required if yumdownloader is not installed
yumdownloader --source <package name, like 'emacs-nox'>

Это установит пакет в текущий каталог. Чтобы извлечь его, выполните:

rpm2cpio <package name>.src.rpm | cpio -civ '*.spec'

Файл .spec будет в вашем текущем каталоге.

Если вы не можете установить yum-utils по какой-либо причине, посмотрите файлы в /etc/yum.repos.d/ и найдите разделы, относящиеся к исходным репозиториям rpm. Вы можете ввести значения для baseurl в свой браузер и вручную найти исходный пакет. Для извлечения .spec по-прежнему требуется rpm2cpio.

person Rick Smith    schedule 19.10.2017

rpmrebuild — ваш друг. Использовать

rpmrebuild -e -p <rpm_file>

Поскольку он открывает файл спецификации в редакторе, вы также можете вносить изменения в спецификацию rpm.

person esmeagol    schedule 18.02.2015

Я мог получить все свои .spec, исходники, патчи с помощью этой простой команды

$ rpmbuild --recompile --noclean ./SRPMS/somerpm.src.rpm

Теперь можно изменить спецификацию, src и пересобрать RPM или SRPM.

person Vipin Tripathi    schedule 05.06.2019
comment
Это НЕ отвечает на вопрос. Было четко сказано: у меня есть только файл RPM - person reichhart; 20.09.2019