淺談Debian套件打包 
Wen Liao
Disclaimer 
投影片資料為作者整理資料及個人意見,沒有經 
過嚴謹確認,請讀者自行斟酌,更歡迎除錯指教
目標 
● 了解 
○ Debian套件的結構 
○ 如何打包Debian套件 
● 不包含 
○ 套件版本名稱規則規則 
○ sign一個套件 
○ 上傳打包好的debian套件 
○ 標準套件的貢獻流程 (RFP/ITP...等) 
○ APT相關遠端目錄結構說明
說故事時間
很久很久以前
很多Linux軟體是這樣安裝的
./configure
make
make install
如果發生了 
hey_hey.h: No such file or directory
你要找出hey_hey.h是那一個 
套件,拉原始碼下來安裝
喔
那找到的套件又來一樣的狀況 
怎麼辦?
找到的套件需要的套件又來一 
樣的狀況怎麼辦?
找到的套件需要的套件需要的 
套件又來一樣的狀況怎麼辦?
加碼
找到了套件,編譯完成才發現 
版本不同,砍掉重練
我只是想要用軟體為什麼要變 
成組裝工程式設計師? 
┴─┴︵╰(‵□′╰
現在
apt-get install 套件 
收工
可喜可賀,可喜可樂
測試環境
Outline 
● 拖台錢 
● Debian 套件結構 
● Debian 套件打包 (節錄) 
● 延伸討論和結論 
● 參考資料 
● Q & A
關於Debian - 大事記 (引用自Wikipidia) 
● 1993 - Ian Murdock 公佈 Debian (Debra + 
Ian) 
● 1996 - 1997 1.x 版 
● 1998 - 2000 2.x 版 (APT) 
● 2002 ~ 3.x ~ (GUI安裝、多平台、Free 
firmware)
Debian特性 (引用自Wikipidia) 
● Linux distribution主流之一 
○ 衍生: Ubuntu, Mint 
● 自由軟體的擁護者 
● 支援Linux和kFreeBSD kernel 
● 套件管理 
Front end 
apt-tools: 透過repository更新及套件相依問題 
dpkg: 處理系統上已安裝套件和獨立的deb檔案
Release分類 (引用自Wikipidia) 
● Stable (代號會更動) 
○ 穩定版,一般來說當Testing版套件穩定後就會freeze, 
之後只針對free的套件版本更新安全和操作的錯誤修 
正更新。 
● Testing (代號會更動) 
○ 下一版Stable的release 
○ 套件版本號碼介於Stable和Unstable之間 
○ 套件在進入Frozen前可進版 
● Unstable (代號固定: Sid) 
○ 不提供安裝方式,必須從Testing更新
開發流程 (引用自Wikipidia) 
今天要談的 
部份
開發流程 (引用自Wikipidia)
套件分類 (引用自Wikipidia) 
● main 
○ 符合DFSG定義的自由軟體,包含在官方安裝套件 
● non-free 
○ 不符合DFSG定義的套件,可能是 
■ proprietary 軟體 
■ 含有必須伴隨軟體存在不可變動的區塊如,不公開 
binary等。 
● contrib 
○ 雖然套件大致本身符合DFSG定義的自由軟體,但是 
仍然有少數的瑕疵如相依於non-free套件等 
● 請比對/etc/apt/source.list ;)
Outline 
● 拖台錢 
● Debian 套件結構 
● Debian 套件打包 (節錄) 
● 延伸討論和結論 
● 參考資料 
● Q & A
從下載的地方 
複製grep套件 
deb檔使用ar 打包 
套件內容 
● [窄宅看的] ar 可以參考static library 
deb格式版本
data.tar.xz 存放最後安裝到 / 的檔案
control.tar.gz包含md5sums和control 
檔
control檔 (續)
比對apt-cache取得的套件資訊
Outline 
● 拖台錢 
● Debian 套件結構 
● Debian 套件打包 (節錄) 
● 延伸討論和結論 
● 參考資料 
● Q & A
自行打包套件方式 
● 取得source,決定版本號碼 
● 依特定檔案格式取名稱以及解壓縮 
● dh_make產生debian目錄 
● 修改debian目錄內的資訊 
● 使用工具產生及驗證deb檔案
偽. demo
_原始套件版號.orig 
版號前分隔字元不 
同! 
這是autotools包 
裝的tarball 
● tarball先改名稱為 -> 套件名稱_版號.orig.tar.gz 
● 解壓縮tarball,確認解壓縮後的目錄名稱是 
○ 套件名稱-版號
切換目錄 
使用dh_make產生debian目錄及template 
debian 目錄 
偷懶不解釋
使用dpkg-buildpackage 產生deb檔,並且不 
要sign source以及.changes 
* 產生deb檔還有其他方式如debuild和pbuilder,不提
生出來的deb檔
剛才偷懶都沒改debian下面的資料,檢 
查的下場...慘不忍睹
Outline 
● 拖台錢 
● Debian 套件結構 
● Debian 套件打包 (節錄) 
● 延伸討論和結論 
● 參考資料 
● Q & A
延伸討論 
● debian目錄內的檔案和格式相關規範 
● apt-get source 套件名稱 
○ 取得repository打包的source檔和debian設定 
● 如何在source套件中管理的patch? 
○ hint: qulit
延伸討論 
● 更嚴謹的檢查和打包方式 
○ pbuilder 
○ debuild 
● apt-get install lxde裝了好幾個套件怎麼辦到 
的? 
● lib-xxx 和lib-xxx-dev以及lib-xxx-dbg是同一個 
套件,那麼這要怎麼寫?
結論 
● debian的套件由ar 組成,裏面包含 
○ 最後安裝到系統的檔案 
○ 套件相關metadata 
○ 套件格式 
● 自行打包套件方式 
○ 取得source,決定版本號碼 
○ 依特定檔案格式取名稱以及解壓縮 
○ dh_make產生debian目錄 
○ 修改debian目錄內的資訊 
○ 使用工具產生及驗證deb檔案
結論 
● (認真) 這是一個避重就輕的分享 
○ 類比:寫個Hello World很簡單,寫個不會segmentation 
fault的link list就要點功力和技術了。 
● 真正有趣的的是延伸討論的主體
Outline 
● 拖台錢 
● Debian 套件結構 
● Debian 套件打包 (節錄) 
● 延伸討論和結論 
● 參考資料 
● Q & A
參考資料 
● [Meta-Package] Debian 打包系列(正體中文) 
● Debian Packaging Tutorial (PDF, 大推) 
● Wikipedia: deb (file format) 
● Ubuntu Wiki: DebPackaging (正體中文) 
● Debian new maintainer’s guide 
● Debian Package ($4大大文件,正體中文)
Outline 
● 拖台錢 
● Debian 套件結構 
● Debian 套件打包 (節錄) 
● 延伸討論和結論 
● 參考資料 
● Q & A

淺談Debian套件打包