2014-02-26 109 views
0

我在包裝Solaris 11的過程中遇到了很多麻煩。我知道有一個yum類型的打包方法,但我希望有一個rpm -irpm -U方法,允許將包交付,然後安裝或升級。Solaris軟件包升級

現在我已經查明瞭如何製作包裝,即pkgmkpkgtrans。鑑於這種我可以創建一個可以安裝這樣的「foo_1.0.pkg」文件:

pkgadd -d foo_1.0.pkg

但我無法弄清楚如何將此包「foo_2.0.pkg」升級:

[email protected] # pkgadd -d foo_2.0.pkg 

The following packages are available: 
    1 foo  foo 
      (x86) private_build 

Select package(s) you wish to process (or 'all' to process 
all packages). (default: all) [?,??,q]: all 

Processing package instance <foo> from </root/foo_2.0.pkg> 

foo(x86) private_build 

Current administration requires that a unique instance of the <foo> 
package be created. However, the maximum number of instances of the 
package which may be supported at one time on the same system has 
already been met. 

No changes were made to the system. 

我在做什麼錯了?看來我應該使用pkg update,但這似乎暗示我需要在回購協議中發佈我的pkg。

回答

3

首先,您沒有使用Solaris 11打包(IPS),而是使用舊版SVR4打包。

對於後者,您無法升級自定義軟件包。然後,唯一的方法就是去掉舊包裝並安裝新包裝,這正是rpm -U在發動機罩下所做的。

pkgrm foo 
pkgadd -d foo_2.0.pkg foo 
+0

是的,你是對的我應該使用IPS。我並不清楚,但我需要同時支持Solaris 10和11,而且我只想爲這兩個進程提供一個進程,因此我堅持使用傳統進程。關於'rpm -U'做一個「刪除然後添加」我不認爲這是真的,但相反,我認爲它覆蓋。我的應用程序使用內存數據庫將其狀態寫入應用程序目錄,所以在升級時我們要覆蓋所以我們保持狀態。如果你需要'pkgrm'然後''pkgadd'',這顯然會變得尷尬。如果沒有「更新」概念,那麼我想我們需要一個手動過程來恢復「狀態」。 – mlathe

+0

你說得對,'rpm -U'首先安裝新版本,然後刪除過時的文件(如果有的話)。無論如何,如果狀態文件不是由程序包交付,而是由應用程序稍後創建的,我相信狀態文件將由'pkgrm'命令保存。 – jlliagre

+0

啊......你說得對。我的postremove腳本執行安裝目錄的「rm -rf」。我會確認它會像你所說的那樣離開「國家」。有一個問題,是否有一個共同的流程來處理剩餘的「狀態」文件(這將包括日誌,臨時文件,數據庫等)。 postremove腳本應該告訴用戶還有剩餘的文件嗎?腳本應該是交互式的,並詢問文件是否應該被刪除?最佳做法是什麼? – mlathe

0

我有同樣的問題,但我可以通過傳遞一個配置文件到cmd解決方法。在與「echo |」一起使用時,這在腳本中特別有用因爲它也會繞過確認提示。配置文件將覆蓋位於文件中的默認安裝屬性:/ var/sadm/install/admin/default。關鍵是實例=覆蓋行。我也改變了其他一些,以避免可能出現的任何其他提示。作爲備用解決方案,您可以直接更改默認文件,而不必引用其他配置文件。

已安裝myprog1.0(或2.0)運行以下命令。

echo | pkgadd -a /opt/myprog/install.conf -d myprog2.0 

內容/opt/myprog/install.conf文件:

mail= 
instance=overwrite 
partial=nocheck 
runlevel=nocheck 
idepend=nocheck 
rdepend=nocheck 
space=ask 
setuid=ask 
conflict=nocheck 
action=nocheck 
networktimeout=60 
networkretries=3 
authentication=quit 
keystore=/var/sadm/security 
proxy= 
1

$ UPDATE

這個變量不會在大多數安裝環境存在。如果確實存在(值爲yes),則意味着已經在系統上安裝了具有相同名稱,版本和體系結構的PKG,或者安裝的PKG將覆蓋已安裝的PKG。然後使用原始的BASEDIR。 因此,您可以在預安裝或安裝後腳本中使用此變量進行任何更新。

相關問題