我在包裝Solaris 11的過程中遇到了很多麻煩。我知道有一個yum
類型的打包方法,但我希望有一個rpm -i
和rpm -U
方法,允許將包交付,然後安裝或升級。Solaris軟件包升級
現在我已經查明瞭如何製作包裝,即pkgmk
和pkgtrans
。鑑於這種我可以創建一個可以安裝這樣的「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。
是的,你是對的我應該使用IPS。我並不清楚,但我需要同時支持Solaris 10和11,而且我只想爲這兩個進程提供一個進程,因此我堅持使用傳統進程。關於'rpm -U'做一個「刪除然後添加」我不認爲這是真的,但相反,我認爲它覆蓋。我的應用程序使用內存數據庫將其狀態寫入應用程序目錄,所以在升級時我們要覆蓋所以我們保持狀態。如果你需要'pkgrm'然後''pkgadd'',這顯然會變得尷尬。如果沒有「更新」概念,那麼我想我們需要一個手動過程來恢復「狀態」。 – mlathe
你說得對,'rpm -U'首先安裝新版本,然後刪除過時的文件(如果有的話)。無論如何,如果狀態文件不是由程序包交付,而是由應用程序稍後創建的,我相信狀態文件將由'pkgrm'命令保存。 – jlliagre
啊......你說得對。我的postremove腳本執行安裝目錄的「rm -rf」。我會確認它會像你所說的那樣離開「國家」。有一個問題,是否有一個共同的流程來處理剩餘的「狀態」文件(這將包括日誌,臨時文件,數據庫等)。 postremove腳本應該告訴用戶還有剩餘的文件嗎?腳本應該是交互式的,並詢問文件是否應該被刪除?最佳做法是什麼? – mlathe