2011-04-10 71 views
26

spec文件有什麼辦法來提取rpm包的規範文件(我只有RPM文件)提取rpm包

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

(這句法不能得到規範文件只有rpm的腳本)

+0

你確定spec文件存儲在RPM中嗎?在.src.rpm中,當然,但對於正常的RPM我根本不確定。 – Mat 2011-04-10 18:57:13

+0

因此,如果我只有rpm文件,我可以獲取spec文件,請幫助 – jon 2011-04-10 18:59:27

+0

查找源RPM或該軟件包的主頁。 – Mat 2011-04-10 19:00:27

回答

6

spec文件通常不是rpm。它們的源代碼爲rpm。

+0

我可以再次重建轉速不規範文件? – jon 2011-04-10 19:41:35

+0

@jon:AFAIK,不可能「構建」它,但是,我認爲,只需通過查看以二進制rpm打包的文件,只需安裝一節即可編寫一個spec文件, – 2011-04-10 19:43:47

+0

「通過查看打包的文件在二進制rpm中「請解釋一下? – jon 2011-04-10 20:08:41

12

spec文件不是存儲在二進制rpms中,除非打包者由於某種原因明確包含它(並且實際上沒有理由這麼做)。您可以從二進制rpm獲得的唯一信息是rpm -qi <package>返回的信息以及rpm -ql <package>列出的文件。如果您需要更多,則必須找到源代碼包。如果Google /供應商的網站未能爲您提供相關信息,則應在Packager字段中提供由任何主管人員打包的任何聯繫信息。例如,下面是附帶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]) 

有你有一個網站和一個電子郵件地址,分別爲,在那裏你可以問一個spec文件或SRPM文件。

5

你可以使用

yumdownloader --source < something.rpm 

則:

rpm2cpio packagename | cpio -ivd 
+5

只能獲得將要安裝的文件,而不是spec文件。 – 2012-08-23 21:21:33

+1

rpm -i pkg.src.rpm會將其解壓到rpmbuild目錄 – qrtt1 2012-11-17 08:44:21

15

安裝rpmrebuild並提取您的轉文件或者您已經安裝的軟件包的規範文件。

例子:

rpmrebuild --package --notest-install -e oracle-instantclient-basic-10.2.0.4-1.x86_64.rpm 
rpmrebuild -s hercules.spec hercules 
+10

查看rpmrebuild的代碼,然後實際測試它,它不會「提取」spec文件;它會重新生成大部分spec文件(頭文件,日誌文件,前/後腳本)。但是,重建至關重要,它實際上並沒有得到%prep或%build部分;它只是將它們保留爲默認值(分別爲「make clean」和「make install」)。我懷疑這是因爲/那/信息沒有存儲在RPM中。因此,雖然這應該在最常見的情況下起作用,但它看起來並不普遍(尤其是對於包含複雜編譯步驟的軟件包)。 :/ – dannysauer 2015-07-22 20:16:47

+0

dannysauer:肯定的,實際上它是沒有開採,因爲這是一個重建的規範文件(「提取物」是問題)。該規範不是RPM包的一部分,因此重建是獲得「規範模板」的唯一方法。但在許多情況下,這可能是一個很好的起點。過去它有時幫助我修復二進制rpm包。 – reichhart 2017-06-24 01:54:24

1

rpmrebuild是你的朋友。使用

rpmrebuild -e -p <rpm_file> 

由於它在編輯器中打開了spec文件,您還可以對rpm spec進行更改。

+1

rpmrebuild在2年前已經提到 – reichhart 2017-06-24 01:56:00

2

根據@RumpleStiltskin的回答,原始spec文件位於可以提取的源rpms中。要獲得源rpms,請運行以下命令:

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