Debian 套件管理系統
作者:chihchun
概觀
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 稱為woody、testing 為 sarge、unstable 為 sid。所有的代號源自 Pixar 的電影 - 玩具總動員 (Toy Story)。
每個新軟體套件首先會進入 sid(unstable,暱稱為 still in develop,這個代號是永遠不變的)中,這個階段的軟體是經過開發者基本的測試後上傳到主A94;案庫中,供所有的人安裝使用,這個階段的軟體品質較為參疵不齊。
下一個階段為 testing,目前代號為 sarge,testing 是下一個 stable 的候選人,這裡的套件是由 unsable 中的套件篩選上來,必須符合以下要件
最後一個階段是可作為生產用途的穩定版,代號為 woody,每個穩定版都是 testing 中的套件經過長久的使用者驗證後才會釋出,下一版的穩定版將會稱為 sarge。每個 testing 成為 stable 在釋出前,必須經過一段時間的凍結(frozen),以確保無重大缺陷,並修復現有的重大缺陷。穩定版在釋出後將不會有任何新的套件加入,唯一的改變是安全性的加強,直到下一版穩定版釋出後一年內,都持續會有資訊安全的照料。
一般而言,建議一般使用者使用穩定版作為主要生產平台,若熱衷於使用新版軟體則使用 testing/unstable 較適合。
另外一個非主要的分支為 experimental,這個分支所放的是最新的軟體,不穩定的開發版本。很多人稱 sid 為非穩定的版本,其實 sid 經過開發者本身的測試,已經具備一定水準,因此一般人使用 sid 應該沒有大問題。唯一要注意的是 sid 中的套件可能由於上傳的先後而造成套件相依性毀壞。
何謂 Debian 套件管理系統
初接觸的人往往對於所謂的軟體套件以及各項設定/前端介面感到困惑,以至於不知道該如何操作或發揮相關工具的效益,我們將系統依照套件管理與前端介面區分如下,以協助了解
原生軟體(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 提供了數種介面,有
- Dialog - 使用 whiptail 或 dialog 所提供的文字模式圖形選單
- Editor - 適合習慣什麼事情都用文字編輯器的人
- Gnome - 圖形介面, Gnome 形式視窗
- Kde - 圖形介面, KDE 形式視窗
- Noninteractive - 反使用者介面的介面,一切設定使用預設值,適合於自動安裝
- Readline - 傳統式介面,以一問一答方式設定
- Web - 網頁介面,提供一個內建的網站伺服器,可使用瀏覽器設定軟體設定
APT
DPKG/DebConf 所提供的只是軟體執行檔案/文件與設定,而未涉及軟體與軟體間的相依性與套件的自動存取,率先提出解決方案的是 Diety/dselect,基本的概念是透過幾個基礎指令以自動取得光碟或檔案系統上的 .deb 檔案,並提供一個可自動解決軟體相依性與衝突性的演算功能,這個突破性的技術徹底解決了其他套件系統(distribution)中的相依性地獄(dependency hell)問題,同時也提供了一個友善的軟體選擇介面。
而 apt (Advanced Package Tool) 的出現,則是為了取代 dselect 中未成熟的套件存取系統,提供網路存取與單一的網址結構,與妥善處理軟體依賴關係的函式庫。由於自由軟體研發本身有擴展性特色,因此 apt 逐漸發展為與 dpkg 有重複性功能,也提供安裝/移除功能。爾後,則有更多以 apt 為基礎的使用者介面出現,dselect 本身也支援了 apt 作為主要的套件存取基礎系統。
apt 的主要指令是 apt-get / apt-cache 與 apt-config / apt-cdrom
apt-get
- apt-get 可用來安裝移除一個軟體,也可抓取該軟體的原始碼。
apt-cache
- apt-cache 則是用來搜尋套件名稱與敘述
- apt-config 設定 apt 來源,然後可以用 apt-get update 升級可用套件列表
- apt-cdrom 設定 apt cdrom,用來檢視光碟的內容
>> : Page 2 >>>



