2012-10-02 30 views
4

我想使用rpm爲不同的環境(live,testing,developer)構建子包,但是對於相同的文件,因此需要一個名爲name-config-live的包,一個名爲config-testing的名稱和一個名爲name -config-developer並且在它們中擁有相同的路徑,但每個路徑的配置都與它命名的環境相對應。以 爲例如何使用相同路徑爲不同的envs創建RPM子包?

讓我們來說說所有的環境我有一個名爲/etc/name.conf的文件,並且測試我希望它包含「1」,在開發「2」和現場「3」上。是否有可能在同一規範中做到這一點,因爲子包生成只發生在最後一次,而不是按照我輸入的順序。 (希望不會%後-n)

我嘗試使用buildroot的,但似乎這是一個全局屬性

回答

2

我不認爲有原生的方式;我會做一個像你注意到的%post

不過,我會做到這一點(類似的東西我用我開發工作僅供內部使用的包做):

  1. 三個單獨的文件/etc/name.conf-developer/etc/name.conf-live
  2. 有三個程序包提供一個虛擬包,例如name-config
  3. 有主包需要name-config
    • 這將使rpmyum,或任何需要至少一個被安裝在同一個事務
  4. 有三種封裝相互
  5. 有無衝突每個配置包的%post(可能%verify)符號鏈接/etc/name.conf到適當的配置
    • 這也有助於表明發生了什麼

缺點的用戶:

  1. 這是一個有點hackish的
  2. rpm --whatprovides /etc/name.conf會說,這是沒有任何軟件包所擁有
+0

這正是我現在正在做的。我正在考慮創建一個文件列表,並將evn附加到每個文件的最後(/etc/name.conf.live,/etc/name.conf.devel),並使用%post將它們重命名爲/ etc /name.conf,而它們活着並且devel包發生衝突,所以我將無法同時安裝所有這些包。 – Sorin

+3

然後'rpm -V'會說現在重命名的文件丟失了,它仍然不會幫助我上面提到的' - whatprovides'問題。至少在符號鏈接中,足夠聰明的用戶可以看到它指向RPM數據庫中的* is *文件。 –

-1

TWIMC:我剛剛被告知有一種方法可以做到這一點(通過RPM開發構建帶有來自單個SRPM的文件衝突的二進制RPM)但你真的真的不想這樣做:)

相關問題