2012-12-09 44 views
4

我有一個tar.gz,我想創建一個RPM出來,目前正在處理spec文件。我似乎無法理解.spec的%files部分中包含文件的規則是什麼。我的tar.gz由兩個python軟件包組成,並通過makefile安裝,該軟件只需調用setup.py即可使用distutils setup()來安裝它們。什麼需要去RPM的%files部分

我目前已經包括我的文檔,但不知道如何選擇還有什麼包括:

%files 
%doc README changelog 
... 

而且,我的生成文件生成一個man頁的應用程序;在哪裏/如何將它包含在.spec文件中?

我在redhat上做這個。

+2

如果這兩個軟件包已經與distutils打包在一起,爲什麼不使用'setup.py bdist_rpm'來構建每個RPM? –

+1

[Fedora打包指南](http://fedoraproject.org/wiki/Packaging:Guidelines)是如何編寫spec文件的很好參考。 – jbowes

+0

@Femzzyfelt是否可以將它們與該方法一起打包,也可以將該手冊頁放入事物中? – alh

回答

5

%files部分必須列出將包含在二進制包中並因此安裝在目標機器上的每個文件。

如果您是通過本書製作RPM,那麼spec文件可以用於兩個不同的目的。它是一個構建腳本,詳細介紹瞭如何將源代碼轉換爲構建工件以及打包腳本,詳細說明了應該在目標機器上安裝哪些構建產品。在你的情況下,構建方面是非常輕量級的。

在這種傳統方法中,makefile在構建階段運行,並且%files指令列出應該安裝結果構建工件中的哪一個。要清楚的是,你不會使用make install與傳統的方法,或者你會用它與DESTDIR安裝到RPM構建目錄(即不是/usr/lib/python/foo,但是到~/rpmbuild/BUILD/usr/lib/python/foo什麼的),從那裏你會選擇文件與%files

所以,你應該做的是讓一些先前的部分(可能是%install)運行makefile安裝到構建區域,然後使用%files部分挑選出結果。請記住,您可以在%files部分使用通配符,因此您不必明確指定每個單獨的文件。

這有道理嗎?我誤解了你的問題嗎?

+0

好吧,所以使用'DESTDIR'應該是安全的,並且包含'DESTDIR'中出現的'%install'的所有輸出文件?另外,你是否知道如何合併由'make'創建的'man'文件?我只是將它輸出到同一個'DESTDIR'並列在'%files'中? – alh

+0

我不知道你的構建將放在'DESTDIR'中,但希望是的,你可以把所有的輸出都放在一個地方,然後包含所有的東西。是的,您可以將手冊頁放在與其他文件相同的構建目錄中 - 實際上,您必須。不過記得用'%doc'標記它。我不認爲這是絕對必要的,但它是很好的形式。 –