Main Page | 最近更改 | 編輯本頁 | 頁面歷史

可列印版 | 免責聲明 | 隱私政策

未登入
登入 | 幫助
 

DebianPackageManagement

出自DebianWiki

目錄

[編輯] Debian 套件管理系統

本文的目的在於以使用者視野介紹基礎概念,操作細節另於各指令介紹中說明。

[編輯] 概觀

Debian 所使用的套件管理系統 dpkg 幾乎是所有 Linux 分發版本(Distribution)中功能最強的,含括軟體相依性管理、軟體功能設定、系統排程(crontab)、自動更新使用者選單(Gnome 與 KDE 的選單等)、文件管理系統、字型維護、程式使用偏好、伺服軟體設定、系統紀錄設定以及關於 Perl/Python/Ruby/Java 等程式語言函式庫手冊的配置等,每一項細節都有其成熟的系統設計、文獻解釋與明文規範。你可以藉由 apt 系統處理軟體套件相依性,apt-get 可以替你自網路上下載所有相關的已編譯檔案或原始碼。雖然有些以 RPM 為基礎的分發版本開始以 apt-rpm 作為自動相依性管理的前端介面,但由於這些系統對於軟體的維護原則未妥善規劃,甚至沒有文件定義,也未遵循特定的規則,既使是商業版本的分發版本,在於軟體維護系統的功能上還是與 Debian 相去甚遠。

例如以系統設定檔而言,Debian 系統審慎的處理系統安裝、移除與升級間的設定差異,在一個軟體被使用者移除時,套件設定檔會特別留下,當使用者再度安裝此軟體時,先前一次的設定可以直接被套用。當然使用者也可以選擇『清除(purge)』,完全的清除軟體與設定。

在進行軟體升級時,最怕的就是設定檔被新版的檔案直接覆蓋,先前的辛苦設定付諸流水,dpkg 對於新舊的設定檔會自動進行比對,如果差異不大,系統可以自動合併,使用者無須重新設定,如果由於版本升級,因此設定檔的細節有所差異,例如新增的功能設定等,系統會提示使用者確認是否使用新版設定,或是透過操作介面的選擇去檢視差異,再去選擇願意套用的設定檔版本。

我們在此介紹該如何使用 Debian 的套件管理系統,並試著剖析前端程式與系統介面的優缺點。

[編輯] 軟體生命週期

Debian 的軟體品質堪稱優良,這是開發團隊的成果。每一個套件的生命週期可以分為三個版本階段,穩定(stable)/測試(testing)/開發(unstable),每一個階段都有計畫代號,現有的 stable 稱為 sarge、testing 為 etch、unstable 為 sid。所有的代號源自 Pixar 的電影 - 玩具總動員 (Toy Story)。

每個新套件會先進入 unstable(sid,暱稱為 still in develop,這個代號是永遠不變的),這個階段的軟體是經過開發者基本的測試後上傳到主檔案庫中,供所有的人安裝使用,這個階段的軟體品質較為參疵不齊。

下一個階段為 testing,目前代號為 etch,testing 是下一個 stable 的候選人,這裡的套件是由 unstable 中的套件篩選上來,必須符合以下要件

  1. 一個軟體必須在 unstable 中依據上傳的急促性擺上 10/5/2 天,急促性是由開發者所定義,開發者通常依據前版發生缺陷的嚴重程度來指定需要幾天
  2. 可以在該套件自行指定支援的硬體平台中正確編譯
  3. 並且在 sid 中沒有標注有『釋出關鍵瑕疵』(release-critical bugs )
  4. 在 testing 中必須有可用的相依套件,或者滿足同時安裝的套件
  5. 不可因為版本衝突而破壞了 testing 中的套件可安裝性

最後一個階段是可作為生產用途的穩定版,代號為 sarge,每個穩定版都是 testing 中的套件經過長久的使用者驗證後才會釋出,下一版的穩定版將會稱為 etch。每個 testing 成為 stable 在釋出前,必須經過一段時間的凍結(frozen),以確保無重大缺陷,並修復現有的重大缺陷。穩定版在釋出後將不會有任何新的套件加入,唯一的改變是安全性的加強,直到下一版穩定版釋出後一年內,都持續會有資訊安全的照料。

一般而言,建議使用穩定版作為正式運作的作業系統,若熱衷於使用新版軟體則使用 testing/unstable 較適合。

另外一個非主要的分支為 experimental,這個分支所放的是最新的軟體,不穩定的正在開發版本。很多人稱 sid 為非穩定的版本,其實 sid 經過開發者本身的測試,已經具備一定水準,因此一般人使用 sid 應該沒有大問題。唯一要注意的是 sid 中的套件可能由於上傳的先後而造成套件相依性毀壞。

[編輯] 何謂 Debian 套件管理系統

初接觸的人往往對於所謂的軟體套件以及各項設定/前端介面感到困惑,以至於不知道該如何操作或發揮相關工具的效益,我們將系統依照套件管理與前端介面區分如下,以協助了解

Image:DebianPackageManagement.png

[編輯] 原生軟體(Native Package)

自由軟體社群有上萬種軟體可以使用,絕大部分都是以原始碼釋出,而非預先編譯的執行程式,我們將其稱為 tarball。這些 tarball 必須經過設定、編譯後,才成為可以使用的執行程式。雖然部份的自由軟體計畫使用 GNU-Style 的 autoconf/automake 設定架構,但是仍有許多計畫透過自訂的編譯計畫檔(Makefile)或命令稿來設定編譯選項,因此使用者必須依據不同的軟體進行不同的編譯指令設定。DPKG (Debian Package Management System) 的用途就是包裝原始的原始碼,提供設定、及二進位執行程式的安裝系統。

[編輯] Debian Package

Debian Package 的兩種封裝類型是 "Binary packages" 與 "Source packages"。

[編輯] Binary Packages

二進位套件檔的副檔名為 ".deb",提供的是程式執行檔、設定檔、文件手冊、版權說明以及其他檔案。

你可以藉由以下指令來取得 apt 的 deb 檔案,下載的檔案存放於 /var/cache/apt/archives/apt*.deb 。

# apt-get install -yd --reinstall apt

[編輯] Source Packages

原始碼套件分為三個部份,一個純文字檔副檔名為 ".dsc",敘述檔案的版本、名稱與原始檔案的 MD5 驗證值。第二個為源碼的壓縮檔,格式通常為 .tar.gz,檔名會刻意修改為 project-name.orig.tar.gz,以標註為原始檔案,第三個部份則為 diff 檔,這是開發者對於解壓縮後的原始碼進行修改後的差異檔。如果原始軟體的散佈壓縮檔為 zip 或其他非自由軟體所支援的壓縮檔,那麼開發者會將其轉為 .tar.gz,為的是避免使用不自由的格式(如已註冊專利權的技術格式)。而 Diff 檔案紀錄了修改細節,因此使用者取得檔案時,可以非常清楚的了解 Debian 開發者為了使軟體可以在 Debian 上使用,所進行修改的細節,如果發生使用問題,也可以正確的釐清責任。某些以 Debian 為開發基礎的系統不會有 diff,是因為直接從原始碼編譯包裝為 deb 檔案。

你可以藉由以下指令來取得 xcin 的原始檔,下載的檔案存在現有目錄

$ apt-get source xcin

[編輯] DebConf

DebConf (Debian Package Configuration System) 是與 dpkg 相輔相成的系統,DebConf 提供統一的軟體設定介面,在你安裝之後,通常可以藉由 DebConf 直接設定配置軟體,因此絕大部分的軟體都是隨裝即用,而免再手動逐一編輯設定檔。

DebConf 提供了數種介面,有

DebConf 介面核心支援多國語系,如果某個套件的 DebConf 設定檔經過翻譯,就可以提供不同語言文字的介面。就像是 woody 釋出說明中所言 - DebConf 是使得世界持續運轉的一大動力 :-)

[編輯] APT

DPKG/DebConf 所提供的只是[軟體執行檔/設定文件檔],而未涉及軟體間的相依性與套件的自動存取,率先提出解決方案的是 Diety/dselect,基本的概念是透過幾個基礎指令以自動取得光碟或檔案系統上的 .deb 檔案,並提供一個可自動解決軟體相依性與衝突性的演算功能,此突破性的技術徹底解決了其他套件系統(distribution)中的相依性地獄(dependency hell)問題,同時也提供了一個友善的軟體選擇介面。

而 apt (Advanced Package Tool) 的出現,則是為了取代 dselect 中未成熟的套件存取系統,提供網路存取與單一的網址結構,與妥善處理軟體依賴關係的函式庫。由於自由軟體研發本身有擴展性特色,因此 apt 逐漸發展為與 dpkg 有重複性功能,也提供安裝/移除功能。爾後,則有更多以 apt 為基礎的使用者介面出現,dselect 本身也支援了 apt 作為主要的套件存取基礎系統。

apt 的主要指令是 apt-get / apt-cacheapt-config / apt-cdrom

[編輯] 使用者介面

指令或文字模式為主的介面,另許多人對 Debian 望之卻步,以下是基於 apt 的圖形模式或加強型的指令,可以提供較為友善的介面

絕大部分的軟體是基於 Debian 所開發,但是逐漸移植到 apt-rpm 系統上。 Image:Screenshot-aptitude.png

aptitude

Image:Screenshot-Synaptic.png

Synaptic

[編輯] 軟體關聯

我們這裡所說明的軟體關係有相依性(Dependency)與衝突性(conflicting dependency)。而 Debian 套件系統中細分為數種套件關係,分別是Depends, Pre-Depends, Recommends, Suggests, Conflicts, Provides, Replaces。

所謂軟體相依性(Depends)是軟體與函式庫的關聯,如 firefox 便依賴大量的函式庫,如 xlibs/fontconfig 等,套件管理系統必須自動處理解決這些相依性,自動安裝相關的套件,這可以替使用者解決麻煩的問題,避免逐一的檢查安裝套件軟體。相依性(Depends)又可細分為建議(Suggests)與推薦(Recommends),這兩種告訴使用者除了必要的檔案外,可以額外安裝的軟體,這些額外的軟體可以增加程式的方便性與功能性。

衝突性是矛盾的軟體關聯,例如以 mail-transport-agents 為例,一個系統只會有一個電子郵件傳送代理人(MTA),不是使用 sendmail 就是 postfix 或是 exim,你不會同時安裝數個郵件系統在一台主機上,那樣會造成資源衝突,如同時兩個程式企圖佔用埠 25。安裝這類套件時,系統應該要自動移除另外一套。這種矛盾性關係是衝突(Conflicts)與取代(Replaces),取代的主要用途是新版用於取代舊版,絕大部分的函式庫可以新舊並存,但是部份軟體不可行,有時候是套件名稱更改,因此新名稱取代舊名稱軟體,衝突則是兩種不同的軟體或軟體的版本水火不容,一山不容二虎。

這兩種依賴關係 apt 都會自動為使用者處理。還有一種相依性是 apt 目前無法處理的,姑且稱為被相依性,這是當你安裝並移除一個套件,安裝時因為相依性而自動安裝的套件並不會自動移除,而形成孤兒軟體,成為沒有人需要的檔案,留在系統中僅是佔用空間。

DebianPackages:deborphan 是設計來解決這種問題,它可用於自動檢測被相依性,列出系統中剩餘的孤兒軟體,使用者便可逐一刪除。此外,aptitude 對於此狀況也有其解決方案,aptitude 會紀錄該套件是由使用者『手動』或因為相依性而『自動』安裝,使用者可在 aptitude 介面中選擇該套件的手動/自動狀態,當 aptitude 執行時會自動分析相關的數據,並自動移除孤兒軟體。

供給(Provides) 是一項重要的軟體維護政策產物,目的在於提供虛擬套件的關聯性。如某軟體依據於網頁瀏覽器,它會聲明必須安裝 www-browser,而 www-browser 僅是一個虛擬套件的名稱,許多軟體都會在套件細節中說明提供 www-browser,例如 mozilla, lynx, w3m 等,使用者只要安裝任何一種,即可解決此相依性問題也提供了多樣性的選擇。上述 mail-transport-agents 也是其中一種虛擬套件名稱。

[編輯] 進階工具

以上以外的基礎工具皆稱為進階工具,這些工具是加強功能與獨特目的的指令。這裡不介紹製作映射(mirror)或偏網路管理者工作。

[編輯] 自動升級工具

使用 Debian 無論是使用 stable 或 unstable 版本,軟體版本的升級是提高功能性與安全的重要工作,可以用於自動檢查版本與升級的軟體是 cron-apt 與 apt-watch。

DebianPackages:cron-apt 主要功能是設定定期排程(crontab),會在深夜時自動更新並下載可以升級的軟體,如此一來當使用者升級時,便不用浪費時間等待下載。

DebianPackages:apt-watch 有點類似 RedHat 的 RHN 與微軟系統的自動升級系統,適合使用 Linux 為桌面系統的使用者使用,你可以在工作列的小軟體上見到目前的系統是否有可升級的軟體,他也會自動下載套件檔案,但不提供套件管理介面,而以 apt-get、aptitude、synaptic 或 gnome-apt 為套件管理介面。 Image:Screenshot-apt-watch.png

[編輯] 套件資訊蒐集工具

此類工具的目的在於提供使用者於安裝時自動蒐集網路與套件內容的資訊,必須配合 apt 系統使用。

DebianPackages:apt-listbugs 是在使用者安裝某個套件時,自動從臭蟲回報系統抓取該軟體的最新資訊,特別是『嚴重』的缺陷,這些問題將會造成系統無法使用,如果使用者在安裝前就注意到嚴重缺陷,那麼可以馬上終止程序,避免誤觸 "地雷" 而必須將時間浪費在錯誤排除上。對於使用 testing/unstable 的使用者特別有用。

DebianPackages:apt-listchanges 的功能,則是從 deb 檔案中,抓取 changelog ,Debian 有個嚴謹的規範,也就是所有的套件都會註明修改紀錄,修改紀錄又包含為 Debian 開發者本身封裝套件的紀錄,以及軟體開發上游的歷史紀錄,apt-listchanges 會列出此次升級中修改的細節,因此使用者便可以知道這次修改是為了解決某些臭蟲或是有新的版本可用。

[編輯] 巫毒編程/原始碼編譯工具

有一種現象我們將其稱為 Voodoo Programming (巫毒編程),也就是指許多程式設計師明知不可行卻為之的事情(這種狀況之下,或許應該稱呼他們為"巫師"),而且某些狀況下這些事情真的可以運作,像是重新編譯所有的軟體。有許多朋友熱愛所謂 source-based distribution,像是 FreeBSD 或 Gentoo 等套件系統,對於 pre-build 的套件系統不屑一顧,縱然 Debian 提供預先編譯的套件提供使用效率上優勢。然而 Debian 也可當作 source-based distribution,辦法是使用 DebianPackages:apt-buildapt-build 是用來協助系統使用者逐一下載原始碼,並重新依據設定最佳化編譯,就像其他的源碼基礎系統一般。你可以用 apt-build 來安裝、移除與升級軟體,你願意的話,也可以重新編譯整個系統

# apt-build world

[編輯] 檔案搜尋

某些時候,我們知道需要某些指令,卻不清楚該指令存在那個軟體中,我們需要一個檔案列表資料庫,以搜尋必要的檔案,DebianPackages:apt-file 的功能便是如此,有點類似 apt-get ,apt-file 會依據 sources.list 中所設定的 apt 資源,下載檔案列表,然後使用者便可搜尋特定檔名

# apt-file update
# apt-file serach foo

除了 apt-file 外,某些時候執行命令稿或指令時,偏偏缺了必要的檔案資料庫或指令,DebianPackages:auto-apt 可以替使用者自動找出某軟體需要的指令,並自動安裝。

[編輯] 現有缺點

最大的缺點就是自由軟體的研發特性造成相關工具的設計多樣性,不同的開發者有不同的設計偏好,有 C/C++/Perl/Python/Ruby 等不同語言的實作指令,因此如果要使用各種工具,你必須安裝各項程式語言的基礎函式庫,以至於系統逐漸龐大,失去小巧簡單的特質。但多樣性的選擇也是自由軟體系統的長處之一。

取自"http://wiki.debian.org.tw/index.php/DebianPackageManagement"

本頁面已經被瀏覽15,087次。 這頁的最後修訂在 2007年5月16日 (星期三) 14:48。 本站的全部文本內容在GNU Free Documentation License 1.2之條款下提供。


[Main Page]
Main Page
社區
近期活動
最近更改
隨機頁面
幫助
贊助

編輯本頁
討論本頁
頁面歷史
鏈入頁面
鏈出更改

特殊頁面
錯誤報告