Product SiteDocumentation Site

章 5. 套件系統:工具與基本原則

5.1. 執行檔套件的結構
5.2. 軟體套件中介資訊
5.2.1. 描述:control 檔案
5.2.2. 組態腳本
5.2.3. 校驗,組態檔案清單
5.3. 原始套件的結構
5.3.1. 格式
5.3.2. Debian 內的使用
5.4. 以 dpkg 管理套件
5.4.1. 安裝套件
5.4.2. 移除套件
5.4.3. 查詢 dpkg 的資料庫與檢查 .deb 檔案
5.4.4. dpkg 的日誌檔
5.4.5. 多架構支援
5.5. 與其他打包系統共存
身為 Debian 系統管理員,經常處理 .deb 套件,因為含有一致的功能單元 (應用程式、文件等),強化安裝與維護工作。所以能夠瞭解它們是什麼與如何使用是應該的。
本章介紹 “執行檔” 與 “原始檔” 套件的結構與內容。前者是 .deb 檔案,以 dpkg 執行,後者是原始碼,以及建立執行檔套件的指令。

5.1. 執行檔套件的結構

Debian 套件格式設計成任何 Unix 系統均可用傳統的指令 ar、tar、與 gzip (有時是 xz 或 bzip2) 提取其內容。看起來有點挑剔的屬性卻是跨平台與災難復原的必需品。
舉個例子,您誤刪 dpkg 程式,不能安裝 Debian 套件了。dpkg 本身就是一個 Debian 套件,好像就此和系統再見了... 幸運的,您知道套件的格式並可下載 .deb 檔案來自 dpkg 套件且以手動方式安裝它 (見專欄 工具 dpkg、APT 與 ar)。然而不幸的是 ar、tar 或 gzip/xz/bzip2 等程式都不見了,必須從別的系統複製該程式 (這些都是自主存在的,沒有相依性,祗需複製就能用)。若碰到更不像話的情況,以上作為都行不通 (遺失更深層的程式庫?),則應試試靜態版的 busybox (於 busybox-static 套件內),它更為自足,還有諸如 busybox ar、busybox tar 與 busybox gunzip 等次指令。
查看 .deb 檔案的內容:
$ ar t dpkg_1.17.23_amd64.deb
debian-binary
control.tar.gz
data.tar.gz
$ ar x dpkg_1.17.23_amd64.deb
$ ls
control.tar.gz  data.tar.gz  debian-binary  dpkg_1.17.23_amd64.deb
$ tar tzf data.tar.gz | head -n 15
./
./var/
./var/lib/
./var/lib/dpkg/
./var/lib/dpkg/parts/
./var/lib/dpkg/info/
./var/lib/dpkg/alternatives/
./var/lib/dpkg/updates/
./etc/
./etc/logrotate.d/
./etc/logrotate.d/dpkg
./etc/dpkg/
./etc/dpkg/dpkg.cfg.d/
./etc/dpkg/dpkg.cfg
./etc/alternatives/
$ tar tzf control.tar.gz
./
./conffiles
./postinst
./md5sums
./prerm
./preinst
./control
./postrm
$ cat debian-binary
2.0
如您所見,Debian 套件的 ar 包括以下三個檔案:
  • debian-binary。這是指明 .deb 檔案版本的純文字檔 (在 2015: version 2.0)。
  • control.tar.gz。這個檔案包括軟體套件的名稱與版本等中介資料。安裝與移除時,套件管理工具可以修正部份的中介資料,以配合機器內已有的套件清單。
  • data.tar.gz。此檔案包括套件所有可以解壓縮的內容;包括可執行檔、文件等。使用其他壓縮格式的套件,可能有不同的名字 (data.tar.bz2 是 bzip2、data.tar.xz 是 XZ)。