2021-05-12 14:32:11
Linux軟體包管理
如果我們花些時間在 Linux 社群裡,我們會得知很多針對, 類如在眾多 Linux 發行版中哪個是最好的(等問題的)看法。 這些集中在像這些事情上的討論,比方說最漂亮的桌面背景(一些人不使用 Ubuntu, 只是因為 Ubuntu 預設主題顏色是棕色的!)和其它的瑣碎東西,經常變得非常無聊。
Linux 發行版本品質最重要的決定因素是軟體包管理系統和其支援社群的永續性。隨著我們 花更多的時間在 Linux 上,我們會發現它的軟體園地是非常動態的。軟體不斷變化。大多數一線 Linux 發行版每隔六個月發布一個新版本,並且許多獨立的程式每天都會更新。為了能和這些 如暴風雪一般多的軟體保持聯絡,我們需要一些好工具來進行軟體包管理。
軟體包管理是指系統中一種安裝和維護軟體的方法。今天,通過從 Linux 發行版中安裝的軟體包, 已能滿足許多人所有需要的軟體。這不同於早期的 Linux,人們需要下載和編輯原始碼來安裝軟體。 編輯原始碼沒有任何問題,事實上,擁有對原始碼的存取許可權是 Linux 的偉大奇蹟。它賦予我們( 其它每個人)才幹來檢測和提高系統效能。只是若有一個預先編譯好的軟體包處理起來要相對 容易快速些。這章中,我們將檢視一些用於包管理的命令列工具。雖然所有主流 Linux 發行版都 提供了強大且精緻的圖形管理程式來維護系統,但是學習命令列程式也非常重要。因為它們 可以完成許多讓圖形化管理程式處理起來困難(或者不可能)的任務。
打包系統
不同的 Linux 發行版使用不同的打包系統,一般而言,大多數發行版分別屬於兩大包管理技術陣營: Debian 的”.deb”,和紅帽的”.rpm”。也有一些重要的例外,比方說 Gentoo, Slackware,和 Foresight,但大多數會使用這兩個基本系統中的一個。
包管理系統 | 發行版 (部分列表) |
---|---|
Debian Style (.deb) | Debian, Ubuntu, Xandros, Linspire |
Red Hat Style (.rpm) | Fedora, CentOS, Red Hat Enterprise Linux, OpenSUSE, Mandriva, PCLinuxOS |
軟體包管理系統是怎樣工作的
在專有軟體產業中找到的軟體發布方法通常需要買一張安裝媒介,比方說”安裝盤”,然後執行 “安裝嚮導”,來在系統中安裝新的應用程式。
Linux 不是這樣。Linux 系統中幾乎所有的軟體都可以在網際網路上找到。其中大多數軟體由發行商以 包檔案的形式提供,剩下的則以原始碼形式存在,可以手動安裝。在後面章節裡,我們將會談談怎樣 通過編譯原始碼來安裝軟體。
包檔案
在包管理系統中軟體的基本單元是包檔案。包檔案是一個構成軟體包的檔案壓縮集合。一個軟體包 可能由大量程式以及支援這些程式的資料檔案組成。除了安裝檔案之外,軟體包檔案也包括 關於這個包的後設資料,如軟體包及其內容的文字說明。另外,許多軟體包還包括預安裝和安裝後指令碼, 這些指令碼用來在軟體安裝之前和之後執行設定任務。
軟體包檔案是由軟體包維護者建立的,他通常是(但不總是)一名軟體發行商的僱員。軟體維護者 從上游提供商(程式作者)那裡得到軟體原始碼,然後編輯原始碼,建立軟體包後設資料以及所需要的 安裝指令碼。通常,軟體包維護者要把所做的修改應用到最初的原始碼當中,來提高此軟體與 Linux 發行版其它部分的融合性。
資源庫
雖然某些軟體專案選擇執行他們自己的打包和發佈策略,但是現在大多數軟體包是由發行商和感興趣 的第三方建立的。系統發行版的使用者可以在一個中心資源庫中得到這些軟體包,這個資源庫可能 包含了成千上萬個軟體包,每一個軟體包都是專門為這個系統發行版建立和維護的。
A distribution may maintain several different repositories for different stages of the software development life cycle. For example, there will usually be a “testing” repository that contains packages that have just been built and are intended for use by brave souls who are looking for bugs before they are released for general distribution. A distribution will often have a “development” repository where work-in-progress packages destined for inclusion in the distribution’s next major release are kept.
因軟體開發生命週期不同階段的需要,一個系統發行版可能維護著幾個不同的資源庫。例如,通常會 有一個”測試”資源庫,其中包含剛剛建立的軟體包,它們想要勇敢的使用者來使用, 在這些軟體包正式發布之前,讓使用者查詢錯誤。系統發行版經常會有一個”開發”資源庫, 這個資源庫中儲存著注定要包含到下一個主要版本中的半成品軟體包。
一個系統發行版可能也會擁有相關第三方的資源庫。這些資源庫需要支援一些因法律原因, 比如說專利或者是 DRM 反規避問題,而不能被包含到發行版中的軟體。可能最著名的案例就是 那個加密的 DVD 支援,在美國這是不合法的。第三方資源庫在這些軟體專利和反規避法案不 生效的國家中起作用。這些資源庫通常完全地獨立於它們所支援的資源庫,要想使用它們, 你必須了解它們,手動地把它們包含到軟體包管理系統的組態檔中。
依賴性
程式很少是”孤立的”,而是依賴於其它軟體元件來完成它們的工作。常見活動,以 輸入/輸出為例,就是由共用程式例程來處理的。這些程式例程儲存在共用庫中,共用庫不只 為一個程式提供基本服務。如果一個軟體包需要共用資源,比如說共用庫,據說就有一個依賴。 現代的軟體包管理系統都提供了一些依賴項解析方法,以此來確保當安裝軟體包時,也安裝了 其所有的依賴程式。
上層和底層軟體包工具
軟體包管理系統通常由兩種工具型別組成:底層工具用來處理這些任務,比方說安裝和刪除軟體包檔案, 和上層工具,完成後設資料搜尋和依賴解析。在這一章中,我們將看一下由 Debian 風格的系統 (比如說 Ubuntu,還有許多其它系統)提供的工具,還有那些由 Red Hat 產品使用的工具。雖然所有基於 Red Hat 風格的發行版都依賴於相同的底層程式(rpm), 但是它們卻使用不同的上層工具。我們將研究上層程式 yum 供我們討論,Fedora, Red Hat 企業版,和 CentOs 都是使用 yum。其它基於 Red Hat 風格的發行版提供了帶有可比較特性的上層工具。
發行版 | 底層工具 | 上層工具 |
---|---|---|
Debian-Style | dpkg | apt-get, aptitude |
Fedora, Red Hat Enterprise Linux, CentOS | rpm | yum |
常見軟體包管理任務
通過命令列軟體包管理工具可以完成許多操作。我們將會看一下最常用的工具。注意底層工具也 支援軟體包檔案的建立,這個話題超出了本書敘述的範圍。在以下的討論中,”package_name” 這個術語是指軟體包實際名稱,而不是指”package_file”,它是包含在軟體包中的檔名。
查詢資源庫中的軟體包
使用上層工具來搜尋資源庫後設資料,可以根據軟體包的名字和說明來定位它。
風格 | 命令 |
---|---|
Debian | apt-get update; apt-cache search search_string |
Red Hat | yum search search_string |
例如:搜尋一個 yum 資源庫來查詢 emacs 文字編輯器,使用以下命令:
yum search emacs
從資源庫中安裝一個軟體包
上層工具允許從一個資源庫中下載一個軟體包,並經過完全依賴解析來安裝它。
風格 | 命令 |
---|---|
Debian | apt-get update; apt-get install package_name |
Red Hat | yum install package_name |
例如:從一個 apt 資源庫來安裝 emacs 文字編輯器:
apt-get update; apt-get install emacs
通過軟體包檔案來安裝軟體
如果從某處而不是從資源庫中下載了一個軟體包檔案,可以使用底層工具來直接(沒有經過依賴解析)安裝它。
風格 | 命令 |
---|---|
Debian | dpkg --install package_file |
Red Hat | rpm -i package_file |
例如:如果已經從一個並非資源庫的網站下載了軟體包檔案 emacs-22.1-7.fc7-i386.rpm, 則可以通過這種方法來安裝它:
rpm -i emacs-22.1-7.fc7-i386.rpm
注意:因為這項技術使用底層的 rpm 程式來執行安裝任務,所以沒有執行依賴解析。 如果 rpm 程式發現缺少了一個依賴,則會報錯並退出。
解除安裝軟體
可以使用上層或者底層工具來解除安裝軟體。下面是可用的上層工具。
風格 | 命令 |
---|---|
Debian | apt-get remove package_name |
Red Hat | yum erase package_name |
例如:從 Debian 風格的系統中解除安裝 emacs 軟體包:
apt-get remove emacs
經過資源庫來更新軟體包
最常見的軟體包管理??務是保持系統中的軟體包都是最新的。上層工具僅需一步就能完成 這個至關重要的任務。
風格 | 命令 |
---|---|
Debian | apt-get update; apt-get upgrade |
Red Hat | yum update |
例如:更新安裝在 Debian 風格系統中的軟體包:
apt-get update; apt-get upgrade
經過軟體包檔案來升級軟體
如果已經從一個非資源庫網站下載了一個軟體包的最新版本,可以安裝這個版本,用它來 替代先前的版本:
風格 | 命令 |
---|---|
Debian | dpkg --install package_file |
Red Hat | rpm -U package_file |
例如:把 Red Hat 系統中所安裝的 emacs 的版本更新到軟體包檔案 emacs-22.1-7.fc7-i386.rpmz 所包含的 emacs 版本。
rpm -U emacs-22.1-7.fc7-i386.rpm
注意:rpm 程式安裝一個軟體包和升級一個軟體包所用的選項是不同的,而 dpkg 程式所用的選項是相同的。
列出所安裝的軟體包
下表中的命令可以用來顯示安裝到系統中的所有軟體包列表:
風格 | 命令 |
---|---|
Debian | dpkg --list |
Red Hat | rpm -qa |
確定是否安裝了一個軟體包
這些底端工具可以用來顯示是否安裝了一個指定的軟體包:
風格 | 命令 |
---|---|
Debian | dpkg --status package_name |
Red Hat | rpm -q package_name |
例如:確定是否 Debian 風格的系統中安裝了這個 emacs 軟體包:
dpkg --status emacs
顯示所安裝軟體包的資訊
如果知道了所安裝軟體包的名字,使用以下命令可以顯示這個軟體包的說明資訊:
風格 | 命令 |
---|---|
Debian | apt-cache show package_name |
Red Hat | yum info package_name |
例如:檢視 Debian 風格的系統中 emacs 軟體包的說明資訊:
apt-cache show emacs
查詢安裝了某個檔案的軟體包
確定哪個軟體包對所安裝的某個特殊檔案負責,使用下表中的命令:
表15-12: 包檔案識別命令
風格 | 命令 |
---|---|
Debian | dpkg --search file_name |
Red Hat | rpm -qf file_name |
例如:在 Red Hat 系統中,檢視哪個軟體包安裝了/usr/bin/vim 這個檔案
rpm -qf /usr/bin/vim
總結歸納
在隨後的章節裡面,我們將探討許多不同的程式,這些程式涵蓋了廣泛的應用程式領域。雖然 大多數程式一般是預設安裝的,但是若所需程式沒有安裝在系統中,那麼我們可能需要安裝額外的軟體包。 通過我們新學到的(和了解的)軟體包管理知識,我們應該沒有問題來安裝和管理所需的程式。
Linux 軟體安裝謠言
從其它平台遷移過來的使用者有時會成為謠言的受害者,說是在 Linux 系統中,安裝軟體有些 困難,並且不同系統發行版所使用的各種各樣的打包方案是一個障礙。唉,它是一個障礙, 但只是針對於那些希望把他們的秘密軟體只以二進位制版本發行的專有軟體供應商。
Linux 軟體生態系統是基於開放原始碼理念。如果一個程式開發人員發布了一款產品的 原始碼,那麼與系統發行版相關聯的開發人員可能就會把這款產品打包,並把它包含在 他們的資源庫中。這種方法保證了這款產品能很好地與系統發行版整合在一起,同時為使用者 “一站式採購”軟體提供了方便,從而使用者不必去搜尋每個產品的網站。
裝置驅動差不多也以同樣的方式來處理,但它們不是系統發行版資源庫中單獨的專案, 它們本身是 Linux 系統核心的一部分。一般來說,在 Linux 當中沒有一個類似於“驅動盤”的東西。 要不核心支援一個裝置,要不不支援,反正 Linux 核心支援很多裝置,事實上,多於 Windows 所支援的裝置數目。當然,如果你需要的特定裝置不被支援,這裡也沒有安慰。當那種情況 發生時,你需要查詢一下原因。缺少驅動程式支援通常是由以下三種情況之一導致:
1.裝置太新。 因為許多硬體供應商沒有積極地支援 Linux 的發展,那麼編寫核心 驅動程式碼的任務就由一些 Linux 社群來承擔,而這需要花費時間。
2.裝置太奇異。 不是所有的發行版都包含每個可能的裝置驅動。每個發行版會建立 它們自己的核心,因為核心是可以設定的(這使得從手表到主機的每台裝置上執行 Linux 成為可能), 這樣它們可能會忽略某個特殊裝置。通過定位和下載驅動程式的原始碼,可能需要你自己(是的,由你) 來編譯和安裝驅動。這個過程不是很難,而是參與。我們將在隨後的章節裡來討論編譯軟體。
3.硬體供應商隱藏資訊。 他們既不發布應用於 Linux 系統的驅動程式程式碼, 也不發布技術文件來讓某人建立它。這意味著硬體供應商試圖保密此裝置的程式介面。因為我們 不想在計算機中使用保密的裝置,所以我建議刪除這令人厭惡的軟體, 把它和其它無用的專案都仍到垃圾桶裡。
拓展閱讀
Spend some time getting to know the package management system for your distribution. Each distribution provides documentation for its package management tools. In addition, here are some more generic sources:
花些時間來了解你所用發行版中的軟體包管理系統。每個發行版都提供了關於自帶軟體包管理工具的 文件。另外,這裡有一些更普遍的資源:
Debian GNU/Linux FAQ 關於軟體包管理一章對軟體包管理進行了概述:
http://www.debian.org/doc/FAQ/ch-pkgtools.en.html
The home page for the RPM project:
RPM 工程的主頁:
The home page for the YUM project at Duke University:
杜克大學 YUM 工程的主頁:
http://linux.duke.edu/projects/yum/
For a little background, the Wikipedia has an article on metadata:
了解一點兒背景知識,Wikipedia 上有一篇關於 metadata 的文章:
http://en.wikipedia.org/wiki/Metadata
本文永久更新連結地址:http://www.linuxidc.com/Linux/2015-12/126456.htm
相關文章