2009-10-21 102 views
0

我們使用rpm在內部部署我們的Web應用程序。 rpm安裝文件,配置apache,cron,日誌等。RPM軟件包的測試安裝

我想建立一個測試版本的rpm,安裝在不同的位置,使用apache,cron和logging的不同配置。應該可以在同一臺機器上安裝生產和測試rpm。

在安裝我想有這樣的事情

/opt/app/www/... 
/opt/app-test/www/... 
/etc/httpd/conf.d/app.conf 
/etc/httpd/conf.d/app-test.conf 
/etc/cron.d/app 
/etc/cron.d/app-test 
/etc/init.d/app 
/etc/init.d/app-test 

什麼是實現這一目標的好方法都RPM包?

  • 複製規範並將所有內容重命名爲「test」?
  • 爲prod/test創建不同的子包裝?
  • 使用rpm宏來更改規格中的位置和名稱?
  • 使用rpm --relocate?

是否有任何現有的rpm試圖做到這一點,我可以看看?

回答

1

在我的規格文件,我用的是built-in macros,然後用測試帳戶(不是根)和一個定製的〜/ .rpmmacros,我更改默認前綴:

%_prefix %{_home} 

工作正常。

你甚至可以創建一個測試rpm數據庫:

$ rpmdb --initdb --dbpath /home/test/var/lib/rpm 

,並把這個在您的.rpmmacros:

%_dbpath /home/test/var/lib/rpm 
%_rpmlock_path %{_dbpath}/__db.000 
+0

我們決定改用虛擬化並忽略問題。 rpmdb的提示看起來很有用,謝謝。 – serbaut 2009-11-12 20:39:43

+0

你們中的任何一個人是否都在使用Maven完成這類工作?我正在尋找能夠指導我使用[Maven RPM插件](http://mojo.codehaus.org/rpm-maven-plugin/)的更好教程的人。 – blong 2011-10-25 15:22:20

0

即使你有不同的解決方案,我決定提出另一種方式做到這一點。儘管虛擬化沒有問題。可能是更好的解決方案,因爲在同一臺機器上運行測試環境,因爲生產不安全/安全我猜。這就是說......

我可能會使用一個規範文件作爲模板,然後這樣的:

... 
# somwwhere in the beginning of spec 
%global testrel test 

#rest of document 
Source0: tarball-with-things%{?testrel}.tar.bz 
... 
%if ${?testrel:1}${!?testrel:0} 
# this will execute only in test rpm 
%endif 
... 

注意especailly的%{?testrel}宏是有趣的事情。它使您能夠同時更新兩個版本的內容,但是如果您希望保留特定於某個版本或其他版本的內容,您仍然可以。它也不需要對數據庫進行任何更改,〜/ .rpmmacros中的自定義宏(根據構建系統的不同而不同)