出處:http://www.xxlinux.com/linux/article/unix/rumen/2006-06-25/2117.html
一、solaris補丁介紹?
1.1補丁的種類及文件名?
????solaris的補丁分為兩類,一類是Point補丁,另一類是Cluster補丁。?
a)Point補丁程序:?
? ?????這類補丁僅僅是針對某一問題或缺陷而發布的單個補丁程序,solaris7、 solaris8、solairs9的Patch一般為*.zip文件solaris2.6一般為.tar.Z或.tar.gz文件,它有如下編號方式:
patch?base?code-revision?num??(如110668-04)
前面部分是這個補丁的主版本號(base?code),后面部分是此補丁的修訂號。兩者合起來構成此補丁的Patch-ID。如上例編號為110668- 04的補丁,110668為主版本號,04是修訂號。此補丁是在110668-03的基礎上做了新的修復。有一點需要指出,補丁版本號為110668的一系列補丁都是針對?/usr/sbin/in.telnetd?這一文件的不同問題的修復,110668-04發布以后,sun將不再提供110668- 04以前的補丁,如110668-03等。?
b)?Cluster補丁程序:??
????cluster補丁僅僅是一系列point補丁的重新包裝,并帶有自動安裝程序。Cluster補丁的命名方式如下:
version_Recommended?
如:9_x86_Recommended.zip是針對Solaris?9?for?X86的補丁集。?
????8_Recommended.zip是針對Solaris?8?for?Sparc?的補丁集。?
????每個Cluster補丁都對應一個CLUSTER_README文件,詳細描述了該Cluster包含的補丁,以及安裝的方法或注意事項。?
1.2?關于補丁的其他信息?
? ???sun公司對每一版本的solaris都維護了一份Patch?Reports,該 Patch?Reports包含了對應版本solaris所有補丁的描述。Patch?Reports每月更新兩次,可以從如下地址得到:?
http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/patch-access&nav=patchpage?
???? 另外sun還維護了一份Sun?Alert?Patch?Report,該文檔按產品分類,并且隨時更新。從這里可以找到所有sun產品的更新文檔及相應補丁,當然也包括的solaris的Sun?Alert?文檔、Patch?ID、簡要說明等。Sun?Alert?Patch?Report從這里可以得到:?
http://sunsolve.sun.com/pub-cgi/show.pl?target=sunalert_patches?
相應的solaris部分可從如下鏈接得到:?
http://sunsolve.sun.com/pub-cgi/show.pl?target=sunalert_patches#Solaris?
表格按時間排序,從Category表格中可以知道此問題屬于安全缺陷修復還是應用優化。?
二、補丁的下載?
????Cluster補丁可以從如下網址下載:
http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/patch-access&nav=patchpage?
同樣可以使用FTP協議下載,在sunsolve.sun.com的/pacthroot/clusters可以找到所有的Cluster補丁。下載后為一個*_Recommended.zip文件。該壓縮文件包含一份CLUSTER_README文件,建議安裝前閱讀此文件。?
????Point 補丁由于其分散性不易下載與管理,可以使用Sun?Alert?Patch?Report或Patch?Reports來查看補丁情況,這兩份文檔相應的 Patch?ID及對應下載地址。另外sun網站提供的Patch?Finder?功能也可以使我們在知道Patch?ID的情況下很方便的找到該補丁,連接如下:?
http://sunsolve.sun.com/pub-cgi/show.pl?target=patches/patch-access&nav=patchpage?
同樣,利用ftp協議從sunsolve.sun.com的/patchroot/all_unsigned目錄下也可以下載指定Patch。?
????Sun公司建議所有下載的補丁都放到/var/tmp目錄下(這也是通常的做法),如此將不會導致補丁安裝時出現的任何permission/ownership的問題。
三、solaris補丁的安裝和刪除?
3.1?/var/sadm/patch目錄?
????在/var/sadm/patch目錄下,記錄了已安裝的補丁。?
????如:?#?ls?/var/sadm/patch??
????107558-05?107594-04?107630-01?107663-01?107683-01??
????107696-01?107817-01?107582-01?107612-06?107640-03?
????建議不要對此目錄做任何修改,此目錄被破壞后將不能安裝或刪除任何補丁。?
3.2?管理solaris補丁?
????Solaris 提供了兩個命令來管理補丁,patchadd和patchrm。這兩個命令是在Solaris?2.6版本開始提供的,在2.6以前的版本中,每個補丁包中都提供了一個installpatch?程序和一個backoutpatch?程序來完成補丁的安裝和卸載。
????patchadd用來安裝解壓縮后的補丁程序。patchadd通過調用pkgadd?命令來安裝補丁。安裝補丁前,我們需要將補丁解壓到/var/tmp下安裝。安裝補丁如下命令:?
????#?cd?/var/tmp?
????#?patchadd?110668-04?
????Checking?installed?patches...?
????Verifying?sufficient?filesystem?capacity?(dry?run?method)?
????Installing?patch?packages...?
?????
???? 如果當前目錄下有110668-04目錄,patchadd將安裝此補丁。補丁安裝后,系統會備份原文件,以便在以后刪除此補丁。如果使用 patchadd?-d?選項安裝補丁,系統將不備份源文件,這意味著你將不能在以后刪除此補丁。使用patchadd?-p?選項可以檢驗已安裝的 patch,例如:?
????#?patchadd?-p?
????Patch:?106793-01?Obsoletes:?Requires:?Incompatibles:?
????Packages:?SUNWhea?
????.?.?.?
????同樣,solaris提供了另一命令來查看已安裝的patch:?
????#?showrev?-p?
????Patch:?106793-01?Obsoletes:?Requires:?Incompatibles:?
????Packages:?SUNWhea?
????.?.?.?
? ???patchrm?如果因為某種情況你想卸載某一補丁,你可以使用patchrm命令來完成。此命令通過調用?pkgadd來恢復安裝補丁前的文件備份來卸載補丁。使用Patch-ID作為patchrm的參數就可以卸載補丁:?
????#?patchrm?106793-01?
????Checking?installed?packages?and?patches...?
????Backing?out?patch?106793-01...?
????Patch?106793-01?has?been?backed?out.?
????這里需要說明一下,在如下三種情況下,補丁將不能卸載:?
????1).在安裝patch時,用patchadd?-d命令指定patchadd不備份被更新的文件。這樣安裝的patch無法刪除。?
????2).另一patch需要此patch,即存在dependence(關聯性),?如一定要刪掉該patch,先刪掉另一patch。?
? ???3).要刪的patch已被另一更新的patch廢棄了。如安裝110668-04補丁后,如果以前安裝過 110668-03,則110668-03將被110668-04廢棄,110668-03將無法刪除。?
3.3?Cluster補丁的安裝?
????Cluster 補丁為單個補丁的集合,下載解壓后,可以通過執行./install_Cluster腳本來完成補丁集的安裝。執行./install_Cluster 后,腳本將檢查當前目錄下的patch_order文件,此文件標明了Patch的安裝順序,./install_Cluster將按照 patch_order文件給出的順序來安裝patch。如果沒有patch_order文件,則假定當前目錄下所有以1開始的目錄名均為需要安裝的補丁目錄,并且假定這些目錄的名稱次序作為安裝Patch的次序。因此你可以通過修改patch_order文件來決定安裝或不安裝某Patch。?
3.4?安裝Patch時的注意事項?
? ???由于在安裝Patch時需要更新文件,故此Solaris官方推薦在安裝補丁時進入單用戶模式安裝。在某些重要服務器上可能帶來不便,因此你完全可以在多用戶模式下通過停止相關服務進程來完成Patch的安裝。?
????Sun 推出的Patch并不是每個都一定要安裝的,因此需要在安裝patch前仔細閱讀README來確定是否需要安裝此補丁。另外,某些補丁具有依賴性,需要先安裝另一補丁才能完成此補丁的安裝,這些都會在README中標明。總之,安裝補丁之前強烈建議你閱讀相應的README(每個Patch都提供單獨的 README文件)。?
3.5?安裝PATCH過程中出現的問題?
????在安裝補丁的過程中,經常出現一些錯誤提示。例如:?
????Installation?of?123456-11?failed.?Return?code?2?
???? 通過Return?code我們可以知道錯誤類型。需要注意的是,Return?code?2說明此補丁已被安裝,Return?code?8說明此補丁要修復的軟件沒有被系統安裝。因此,2和8是完全可以被忽略的錯誤提示。下表說明了各個Return?code對應的錯誤類型。?
Exit?code?Meaning??
0?No?error??
1?Usage?error??
2?Attempt?to?apply?a?patch?that's?already?been?applied??
3?Effective?UID?is?not?root??
4?Attempt?to?save?original?files?failed??
5?pkgadd?failed??
6?Patch?is?obsoleted??
7?Invalid?package?directory??
8?Attempting?to?patch?a?package?that?is?not?installed??
9?Cannot?access?/usr/sbin/pkgadd?(client?problem)??
10?Package?validation?errors??
11?Error?adding?patch?to?root?template??
12?Patch?script?terminated?due?to?signal??
13?Symbolic?link?included?in?patch??
14?NOT?USED??
15?The?prepatch?script?had?a?return?code?other?than?0.??
16?The?postpatch?script?had?a?return?code?other?than?0.