970 likes | 1.07k Views
第 14 章. 套件管理. 前言. 以前在 Unix/Linux 作業系統要安裝軟體 , 往往都需要用文字模式的 make 指令來編譯程式 , 安裝過程稍嫌複雜 , 而不容易使用。因此 , 許多 Linux 發行版都自行開發 , 或沿用由其他發行版廠商開發的套件管理軟體 , 來幫助使用者可以輕鬆的安裝、移除及更新軟體。. 前言.
E N D
第 14 章 套件管理
前言 • 以前在 Unix/Linux 作業系統要安裝軟體, 往往都需要用文字模式的 make指令來編譯程式, 安裝過程稍嫌複雜, 而不容易使用。因此, 許多 Linux 發行版都自行開發, 或沿用由其他發行版廠商開發的套件管理軟體, 來幫助使用者可以輕鬆的安裝、移除及更新軟體。
前言 • 本章, 我們將介紹目前最被廣泛使用的 RPM(Red Hat Package Manager) 套件管理系統, 以及為解決 RPM 常遇到的相依性問題而開發的 Yum (Yellow dog Updater, Modified) 套件管理程式。 • 最後, 也會為您說明如何安裝傳統的 tarball 套件。
本章提要 • 14-1 以 RPM 指令管理套件 • 14-2 使用 Yum 線上安裝、移除與更新套件 • 14-3 安裝自行下載的軟體 • 14-4 Linux 軟體下載網站
14-1 以 RPM 指令管理套件 • RPM 的全名為 Red Hat Package Manager, 是一個由 Red Hat 公司開發的套件管理系統。 • 由於 Red Hat 公司鼓勵大家使用此格式發行軟體及使用此管理系統, 因此 RPM 被許多發行版採用為預設的套件管理系統, 同時 RPM 也可以在 Unix 平台上執行。
以 RPM 指令管理套件 • 14-1-1 rpm 指令概念說明 • 14-1-2 安裝套件 • 14-1-3 移除套件 • 14-1-4 升級與更新套件 • 14-1-5 查詢套件 • 14-1-6 套件驗證 • 14-1-7 rpm 指令常用的查詢實例 • 14-1-8 如何解決套件相依性及查詢未安裝檔案所屬的套件
14-1-1 rpm 指令概念說明 • 為了讓讀者易於區別, 底下我們將整個 RPM 套件管理系統簡稱為 RPM,將管理 RPM 套件管理系統的程式稱為 rpm 程式或 rpm指令, 而將能夠被 rpm 程式處理的安裝套件稱為 RPM 套件。 • 其關係可用下圖表示:
14-1-1 rpm 指令概念說明 • RPM 的優點 • RPM 套件檔名的命名原則 • rpm 指令的操作方法
RPM 的優點 • 使用 RPM 套件管理系統具有下列優點, 而這也是 RPM 套件管理系統的設計目標: • 易於安裝、升級與移除套件: • 安裝傳統 tar.gz 等格式的壓縮套件時, 必須先將其解開壓縮到一個目錄中 , 然後再執行安裝的程序。而各套件的安裝方式又有所差異, 有的要再編譯原始碼,有的要指定安裝的參數, 實在頗為麻煩。RPM 套件則將安裝需要的設定項目準備好, 只要執行 rpm指令, 就可以安裝、升級套件, 或移除已安裝的套件。
RPM 的優點 • 有強大的查詢功能: • 透過 RPM 的組態資料庫, 我們可以查詢系統已安裝的套件;也可以查詢某個檔案是屬於哪個套件, 而此套件又來自何處。 • 能夠進行套件驗證: • RPM 提供套件驗證的功能, 您可藉以驗證是否誤刪了某個套件中的檔案。而且 RPM 在安裝時會保留原來的設定檔, 所以即使誤刪檔案, 重新安裝也不必擔心遺失原來的設定。
RPM 的優點 • 支援套件以原始碼形式發行: • RPM 支援套件以原始碼的形式發行, 在 RPM 套件中能包含原始程式、更新程式 patch 及完整的建構指令。因此我們在取得一個程式的更新版時, 可以先看看程式的更新部分, 再採取適當的行動。 • 有興趣的讀者可至 http://www.rpm.org 網站取得更多有關 RPM 的資訊。
RPM 套件檔名的命名原則 • 完整的 RPM 套件檔名由四個部分組成, 其格式及意義如下:
RPM 套件檔名的命名原則 • 套件名稱:套件名稱用來說明該套件的用途, 例如 Apache 伺服器主程式的套件名稱為 httpd、說明文件的套件名稱為 httpd-manual。 • 版本編號:該套件的版本資訊, 版本編號與套件名稱間以 "-" 相隔。上例中3.10a-13 的 "13" 稱為版次。套件在釋出之後, 都有可能因為發現有某些問題而進行修改, 再重新編譯、打包釋出, 版次即記錄該套件是第幾次修正後的版本。
RPM 套件檔名的命名原則 • 平台:RPM 套件是已經編譯好的程式檔, 這樣的檔案通常只能適用於特定的操作平台, 此處的訊息即用以標示該套件所適用的平台為何, 常見的有i386、i586、i686 及 noarch 等。其中 i386 表示該套件適用於 Intel 80386及其後的各種 CPU, 也就是從 Intel 386 到 486、Pentium、Pentuim II...都可以適用。 i586、i686 的意義與此相當, i586 適用於 586 及其後的CPU。而 noarch 則表示沒有限制。 • 副檔名:RPM 套件的副檔名預設皆為 .rpm。
RPM 套件檔名的命名原則 • 雖然使用 Pentium CPU 的機器可以使用 i386 的套件, 但效能可能會較使用 i586 的套件稍差一點。 • 有時還會看到此處標示為 .src 的 RPM 套件, 此類套件稱為 SRPM 套件, 是尚未編譯的程式原始碼, 在安裝前需要自行編譯。
rpm 指令的操作方法 • 除了建構安裝套件外, rpm 指令具有 5 種基本的操作模式, 包含套件的:安裝、移除、升級、查詢及驗證。我們可以使用 rpm --help指令獲得完整的細節及參數:
rpm 指令的操作方法 • 要注意的是:在安裝、移除及更新套件時, 必須取得 root 的權限, 而查詢及驗證套件時則不用。以下我們將分別說明這 5 種操作模式 (請您注意, 上述 rhviewer 與稍後會提及的 rhpainter 套件, 都是筆者舉例說明用的套件名稱,實際上並沒有這兩個套件)。 • 您可以執行 man rpm 指令, 觀看線上說明。
14-1-2 安裝套件 • 使用 rpm指令的安裝模式可以將套件內所有的元件放至系統中的正確路徑, 安裝套件的指令是:
安裝套件 • 以此指令安裝時, 會顯示套件的名稱 (不一定會與檔名相同), 並顯示 # 字號以指示安裝程序正在進行中。 • rpm指令還能透過 FTP 或 HTTP 來進行遠距的套件安裝或查詢。使用方式與在本機上並無太大不同, 只要在檔案前加上適當的 URL 位址即可, 例如:
安裝套件 • 使用遠距安裝時, 建議使用 -h 參數, 可以幫助您確認安裝程序還在進行中。此外, 還可以使用 --percent 參數來得知安裝進度的百分比。 • 在安裝套件時, 有時會出現要安裝的套件已經安裝過、某個檔案已被其他的套件安裝, 或是不同套件之間有相依性的問題, 以下分別詳細說明。
安裝套件 • 重複安裝套件 • 套件中某個檔案已被其他套件安裝 • 不同套件之間的相依性
重複安裝套件 • 要重複安裝一個原本就已經安裝的套件時, rpm指令會顯示出類似下面的錯誤訊息: • 如果您確定要安裝此套件, 可以在命令列中加上 --replacepkgs 參數, 使 rpm指令忽略錯誤訊息, 取代原有套件:
套件中某個檔案 已被其他套件安裝 • 如果要安裝的套件中, 有某個檔案已被其他套件安裝於系統中, 則 rpm指令會顯示錯誤的訊息:
套件中某個檔案 已被其他套件安裝 • 要 rpm指令忽略此訊息直接取代舊檔案, 可使用 --replacefiles 參數:
不同套件之間的相依性 • 有些 RPM 套件會與其他的 RPM 套件有相依性, 這些套件通常要別的套件已先安裝於系統中才能正常執行。當您試圖要安裝這類 RPM 套件, 則 rpm指令會列出其所需的相關套件:
不同套件之間的相依性 • 比較好的解決方式是將其所需要的套件先安裝好, 以上例來說, 先安裝 rhviewer 套件之後, 再安裝 rhpainter 套件即可。 • 此外, 也可以加上 --nodeps 參數來略過相依性檢查, 不過這樣強行安裝的結果可能會使套件不能正常執行。
14-1-3 移除套件 • 移除模式會將指定的套件元件全部刪除, 但會保留已更改過的設定檔。移除 RPM 套件的指令如下: • 讀者要注意的是, 這裡必須使用套件的名稱 "rhviewer" 或 "rhviewer-3.10a-13", 而不是使用當初安裝套件時所用的檔名 "rhviewer-3.10a-13.i386.rpm"。
移除套件 • 如果在移除套件時出現類似下列訊息, 代表移除這個套件會破壞其他套件的套件相依性:
移除套件 • 此時您必須先移除 rhpainter 套件後, 才能接著移除 rhviewer。或者也可以使用 --nodeps 參數, 即可忽略此訊息而強行移除套件, 不過這樣可能會導致其他套件無法正常執行。
14-1-4 升級與更新套件 • 前面提及的 rpm 有 5 種工作模式, 其中升級模式包含有升級和更新兩個部分, 我們分別說明如下。 • 升級模式 • 更新模式
升級模式 • 升級模式會安裝使用者所指定的更新版本, 並移除已安裝於系統中的相同套件。升級套件的指令如下:
升級模式 • 升級模式的運作方式是將系統中的舊版本移除, 再安裝新版本。您也可以使用升級模式取代安裝模式來安裝新版本。因為在沒有舊版本的情況下, 使用-U 這個參數仍可正常運作。 • 以 rpm指令升級套件時, 如果有舊版的套件存在於系統中, 則會看到如下的訊息:
升級模式 • 這是 rpm指令特有的設定檔智慧型升級訊息。因為有些套件的設定檔格式在不同版本間並不相容, 因此 rpm指令會將舊的設定檔加上 .rpmsave 副檔名儲存, 並安裝新的設定檔, 您可以在套件安裝後立即比較新舊設定檔, 以決定是否要換回原來的設定。
升級模式 • 升級模式下的錯誤除了包含移除與安裝模式下的錯誤外, 還有一個比較特別的是, 當使用者試圖安裝一個比現有套件更舊的套件時, 會顯示如下訊息:
升級模式 • 若決心要將套件 "升級" 到較舊的版本, 可使用 --oldpackage 參數:
更新模式 • 更新模式可算是升級模式的另一種使用方式。更新套件的指令如下:
更新模式 • rpm指令在更新模式下會檢查在指令列中所指定的套件是否比系統中原有的套件來得新。如果情況屬實, rpm指令會自動更新指定的套件。 • 反之, 若系統中並沒有指定套件的較舊版本, rpm指令就不會安裝此套件。而在升級模式下,不管系統中是否有較舊的版本, rpm指令都會安裝指定的套件。
更新模式 • 如果您從網路下載了許多的套件, 且想更新所有已經安裝在系統中的套件 (未曾安裝的套件則不安裝), 可以執行以下指令: • 如此 RPM 就會為我們更新所有系統中已存在的套件。
14-1-5 查詢套件 • 想要取得 RPM 套件的相關資訊可以使用查詢模式, 使用 -q 參數可查詢一個已安裝的套件內容。 • 如執行 rpm -q rhviewer指令將顯示 rhviewer 套件的套件名稱、版本及次版本:
查詢套件 • 在查詢模式中可用套件指定參數配合查詢:
查詢套件 • 也可以再加上資訊選擇參數來決定所要顯示的資訊:
查詢套件 • 我們可以結合 -qi 參數得到一般性的套件資訊:
查詢套件 • 對於顯示檔案列表的 -l 參數, 還可以再加上 -v 參數以獲得較完整的資訊,其輸出格式類似 ls -l 指令的結果。
14-1-6 套件驗證 • 要驗證目前系統中的檔案是否與原始套件相符, 可使用驗證模式。-V 參數可用來驗證套件的正確性。驗證模式會比較原始套件資訊及目前系統中的檔案資訊, 包括每個檔案的大小、MD5 (一種加密方式) checksum、權限、型別、擁有者及所屬的檔案群組。在驗證模式中也可以使用上一節所提到的套件指定參數來指定特別的套件。例如:
套件驗證 • 在上例中前 3 個指令會比較 RPM 組態資料庫與目前系統中的檔案;而第4 個指令則是比較原始 .rpm 檔的內容與目前系統中的檔案, 適用於 RPM 組態資料庫毀損或遭人修改的狀況下。
套件驗證 • 在驗證後沒有任何輸出, 表示套件正常。如有不一致的地方, RPM 會顯示錯誤碼。下表列出可能的錯誤碼及其代表的意義:
14-1-7 rpm 指令常用的查詢實例 • 這裡再舉幾個例子, 加深對 rpm指令的了解: • 查詢套件所安裝的檔案:安裝某個套件之後, 常常困擾人的是, 不曉得這個套件究竟被裝到哪裡去。此時只要執行 rpm -ql package-name指令即可, 例如:
rpm 指令常用的查詢實例 • 查詢是否刪除套件檔案:當您誤刪了某些檔案, 又不知道到底刪掉些什麼時,只要執行 rpm -Va指令即可對系統做完整的套件驗證, 得知是否刪除了某些套件檔案。 • 查詢檔案屬於哪個套件:遇到一些不認得的檔案, 想要知道這個檔案是否屬於某個套件, 可執行 rpm -qf / 完整路徑/檔案名稱 指令查詢。
rpm 指令常用的查詢實例 • 驗證套件的正確性:上兩個例子可以結合使用, 例如您懷疑某個程式 (如 vi)有問題, 而想對該程式進行驗證, 可以執行 rpm -Vf /bin/vi指令檢查。 • 查詢套件的相關說明文件:想要取得某個程式套件 (如 ispell) 的更多資訊,可執行 rpm -qdf /usr/bin/ispell以得知這個程式所屬的說明文件有那些, 其輸出如下: