SlideShare a Scribd company logo
1 of 52
Download to read offline
淺談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

More Related Content

What's hot

尚观Linux研究室 linux驱动程序全解析
尚观Linux研究室   linux驱动程序全解析尚观Linux研究室   linux驱动程序全解析
尚观Linux研究室 linux驱动程序全解析hangejnu
 
Memcached内存分析、调优、集群
Memcached内存分析、调优、集群Memcached内存分析、调优、集群
Memcached内存分析、调优、集群hik_lhz
 
Hadoop基线选定
Hadoop基线选定Hadoop基线选定
Hadoop基线选定baggioss
 
Linux必学的60个命令
Linux必学的60个命令Linux必学的60个命令
Linux必学的60个命令yiditushe
 
X64服务器 lamp服务器部署标准 new
X64服务器 lamp服务器部署标准 newX64服务器 lamp服务器部署标准 new
X64服务器 lamp服务器部署标准 newYiwei Ma
 
Hdfs raid migration to hadoop 1.x
Hdfs raid migration to hadoop 1.x Hdfs raid migration to hadoop 1.x
Hdfs raid migration to hadoop 1.x Jiang Yu
 
CentOS5 apache2 mysql5 php5 Zend
CentOS5 apache2 mysql5 php5 ZendCentOS5 apache2 mysql5 php5 Zend
CentOS5 apache2 mysql5 php5 Zendwensheng wei
 
1, shell intro
1, shell intro1, shell intro
1, shell introted-xu
 
Oraliux+mysql5单机多实例安装文档
Oraliux+mysql5单机多实例安装文档Oraliux+mysql5单机多实例安装文档
Oraliux+mysql5单机多实例安装文档xuebao_zx
 
dbdao.com 汪伟华 my-sql-replication复制高可用配置方案
dbdao.com 汪伟华 my-sql-replication复制高可用配置方案dbdao.com 汪伟华 my-sql-replication复制高可用配置方案
dbdao.com 汪伟华 my-sql-replication复制高可用配置方案maclean liu
 
Bypat博客出品-利用cent os快速构建自己的发行版
Bypat博客出品-利用cent os快速构建自己的发行版Bypat博客出品-利用cent os快速构建自己的发行版
Bypat博客出品-利用cent os快速构建自己的发行版redhat9
 
【诗檀软件 郭兆伟-技术报告】跨国企业级Oracle数据库备份策略
【诗檀软件 郭兆伟-技术报告】跨国企业级Oracle数据库备份策略【诗檀软件 郭兆伟-技术报告】跨国企业级Oracle数据库备份策略
【诗檀软件 郭兆伟-技术报告】跨国企业级Oracle数据库备份策略maclean liu
 
主機管理基本指令練習(三)
主機管理基本指令練習(三)主機管理基本指令練習(三)
主機管理基本指令練習(三)K- Peggy
 

What's hot (17)

尚观Linux研究室 linux驱动程序全解析
尚观Linux研究室   linux驱动程序全解析尚观Linux研究室   linux驱动程序全解析
尚观Linux研究室 linux驱动程序全解析
 
Memcached内存分析、调优、集群
Memcached内存分析、调优、集群Memcached内存分析、调优、集群
Memcached内存分析、调优、集群
 
Hadoop基线选定
Hadoop基线选定Hadoop基线选定
Hadoop基线选定
 
Linux必学的60个命令
Linux必学的60个命令Linux必学的60个命令
Linux必学的60个命令
 
X64服务器 lamp服务器部署标准 new
X64服务器 lamp服务器部署标准 newX64服务器 lamp服务器部署标准 new
X64服务器 lamp服务器部署标准 new
 
Hdfs raid migration to hadoop 1.x
Hdfs raid migration to hadoop 1.x Hdfs raid migration to hadoop 1.x
Hdfs raid migration to hadoop 1.x
 
CentOS5 apache2 mysql5 php5 Zend
CentOS5 apache2 mysql5 php5 ZendCentOS5 apache2 mysql5 php5 Zend
CentOS5 apache2 mysql5 php5 Zend
 
Linux File system
Linux File systemLinux File system
Linux File system
 
Dnsse cv9
Dnsse cv9Dnsse cv9
Dnsse cv9
 
1, shell intro
1, shell intro1, shell intro
1, shell intro
 
Oraliux+mysql5单机多实例安装文档
Oraliux+mysql5单机多实例安装文档Oraliux+mysql5单机多实例安装文档
Oraliux+mysql5单机多实例安装文档
 
dbdao.com 汪伟华 my-sql-replication复制高可用配置方案
dbdao.com 汪伟华 my-sql-replication复制高可用配置方案dbdao.com 汪伟华 my-sql-replication复制高可用配置方案
dbdao.com 汪伟华 my-sql-replication复制高可用配置方案
 
Asm+aix
Asm+aixAsm+aix
Asm+aix
 
Bypat博客出品-利用cent os快速构建自己的发行版
Bypat博客出品-利用cent os快速构建自己的发行版Bypat博客出品-利用cent os快速构建自己的发行版
Bypat博客出品-利用cent os快速构建自己的发行版
 
【诗檀软件 郭兆伟-技术报告】跨国企业级Oracle数据库备份策略
【诗檀软件 郭兆伟-技术报告】跨国企业级Oracle数据库备份策略【诗檀软件 郭兆伟-技术报告】跨国企业级Oracle数据库备份策略
【诗檀软件 郭兆伟-技术报告】跨国企业级Oracle数据库备份策略
 
主機管理基本指令練習(三)
主機管理基本指令練習(三)主機管理基本指令練習(三)
主機管理基本指令練習(三)
 
Ubuntu
UbuntuUbuntu
Ubuntu
 

Similar to 淺談Debian套件打包

5, system admin
5, system admin5, system admin
5, system adminted-xu
 
Debian & Packaging
Debian & PackagingDebian & Packaging
Debian & PackagingLI Daobing
 
Nagios的安装部署和与cacti的整合(linuxtone)
Nagios的安装部署和与cacti的整合(linuxtone)Nagios的安装部署和与cacti的整合(linuxtone)
Nagios的安装部署和与cacti的整合(linuxtone)Yiwei Ma
 
Apache+php+mysql在Linux下的安装与配置
Apache+php+mysql在Linux下的安装与配置Apache+php+mysql在Linux下的安装与配置
Apache+php+mysql在Linux下的安装与配置wensheng wei
 
Linux基础
Linux基础Linux基础
Linux基础zhuqling
 
Bypat博客出品-利用cent os快速构建自己的发行版-进阶版v1.1
Bypat博客出品-利用cent os快速构建自己的发行版-进阶版v1.1Bypat博客出品-利用cent os快速构建自己的发行版-进阶版v1.1
Bypat博客出品-利用cent os快速构建自己的发行版-进阶版v1.1redhat9
 
專案啟動與環境設定
專案啟動與環境設定專案啟動與環境設定
專案啟動與環境設定Shengyou Fan
 
linux 從無到有
linux 從無到有linux 從無到有
linux 從無到有alex867
 
DRBL-live-hadoop at TSLC
DRBL-live-hadoop at TSLCDRBL-live-hadoop at TSLC
DRBL-live-hadoop at TSLCYu-Chin Tsai
 
Docker tutorial
Docker tutorialDocker tutorial
Docker tutorialazole Lai
 
Cloudstack dev/user sharing
Cloudstack dev/user sharingCloudstack dev/user sharing
Cloudstack dev/user sharinggavin_lee
 
啟動 Laravel 與環境設定
啟動 Laravel 與環境設定啟動 Laravel 與環境設定
啟動 Laravel 與環境設定Shengyou Fan
 
使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理Jason Zheng
 
使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理haiyuan ning
 
Puppet安装测试
Puppet安装测试Puppet安装测试
Puppet安装测试Yiwei Ma
 
2, OCP - installing and creating a database
2, OCP - installing and creating a database2, OCP - installing and creating a database
2, OCP - installing and creating a databaseted-xu
 
Clonezilla tutorial.v7
Clonezilla tutorial.v7Clonezilla tutorial.v7
Clonezilla tutorial.v7hs1250
 
Ch8 file system management(2013 ncu-nos_nm)
Ch8   file system management(2013 ncu-nos_nm)Ch8   file system management(2013 ncu-nos_nm)
Ch8 file system management(2013 ncu-nos_nm)Kir Chou
 

Similar to 淺談Debian套件打包 (20)

5, system admin
5, system admin5, system admin
5, system admin
 
Debian & Packaging
Debian & PackagingDebian & Packaging
Debian & Packaging
 
LinuxGuide4F2E
LinuxGuide4F2ELinuxGuide4F2E
LinuxGuide4F2E
 
Nagios的安装部署和与cacti的整合(linuxtone)
Nagios的安装部署和与cacti的整合(linuxtone)Nagios的安装部署和与cacti的整合(linuxtone)
Nagios的安装部署和与cacti的整合(linuxtone)
 
Apache+php+mysql在Linux下的安装与配置
Apache+php+mysql在Linux下的安装与配置Apache+php+mysql在Linux下的安装与配置
Apache+php+mysql在Linux下的安装与配置
 
Linux基础
Linux基础Linux基础
Linux基础
 
Bypat博客出品-利用cent os快速构建自己的发行版-进阶版v1.1
Bypat博客出品-利用cent os快速构建自己的发行版-进阶版v1.1Bypat博客出品-利用cent os快速构建自己的发行版-进阶版v1.1
Bypat博客出品-利用cent os快速构建自己的发行版-进阶版v1.1
 
Overlayfs and VFS
Overlayfs and VFSOverlayfs and VFS
Overlayfs and VFS
 
專案啟動與環境設定
專案啟動與環境設定專案啟動與環境設定
專案啟動與環境設定
 
linux 從無到有
linux 從無到有linux 從無到有
linux 從無到有
 
DRBL-live-hadoop at TSLC
DRBL-live-hadoop at TSLCDRBL-live-hadoop at TSLC
DRBL-live-hadoop at TSLC
 
Docker tutorial
Docker tutorialDocker tutorial
Docker tutorial
 
Cloudstack dev/user sharing
Cloudstack dev/user sharingCloudstack dev/user sharing
Cloudstack dev/user sharing
 
啟動 Laravel 與環境設定
啟動 Laravel 與環境設定啟動 Laravel 與環境設定
啟動 Laravel 與環境設定
 
使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理
 
使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理使用Rpm&yum进行基础软件管理
使用Rpm&yum进行基础软件管理
 
Puppet安装测试
Puppet安装测试Puppet安装测试
Puppet安装测试
 
2, OCP - installing and creating a database
2, OCP - installing and creating a database2, OCP - installing and creating a database
2, OCP - installing and creating a database
 
Clonezilla tutorial.v7
Clonezilla tutorial.v7Clonezilla tutorial.v7
Clonezilla tutorial.v7
 
Ch8 file system management(2013 ncu-nos_nm)
Ch8   file system management(2013 ncu-nos_nm)Ch8   file system management(2013 ncu-nos_nm)
Ch8 file system management(2013 ncu-nos_nm)
 

More from Wen Liao

Hello world 的一生
Hello world 的一生Hello world 的一生
Hello world 的一生Wen Liao
 
Notes on oracle solaris 11.3 linkers and libraries guide chapter one
Notes on oracle solaris 11.3 linkers  and libraries guide  chapter oneNotes on oracle solaris 11.3 linkers  and libraries guide  chapter one
Notes on oracle solaris 11.3 linkers and libraries guide chapter oneWen Liao
 
開放街圖 自助旅行的好幫手
開放街圖   自助旅行的好幫手開放街圖   自助旅行的好幫手
開放街圖 自助旅行的好幫手Wen Liao
 
GNU AS簡介
GNU AS簡介GNU AS簡介
GNU AS簡介Wen Liao
 
UPnP 1.0 簡介
UPnP 1.0 簡介UPnP 1.0 簡介
UPnP 1.0 簡介Wen Liao
 
故事:自由軟體和 Richard Stallman
故事:自由軟體和 Richard Stallman故事:自由軟體和 Richard Stallman
故事:自由軟體和 Richard StallmanWen Liao
 
Hello world在那邊?背景說明
Hello world在那邊?背景說明Hello world在那邊?背景說明
Hello world在那邊?背景說明Wen Liao
 
A successful git branching model 導讀
A successful git branching model 導讀A successful git branching model 導讀
A successful git branching model 導讀Wen Liao
 
GNU ld的linker script簡介
GNU ld的linker script簡介GNU ld的linker script簡介
GNU ld的linker script簡介Wen Liao
 
Trace 程式碼之皮
Trace 程式碼之皮Trace 程式碼之皮
Trace 程式碼之皮Wen Liao
 
GNU Make, Autotools, CMake 簡介
GNU Make, Autotools, CMake 簡介GNU Make, Autotools, CMake 簡介
GNU Make, Autotools, CMake 簡介Wen Liao
 
A Brief Introduction to Regular Expression with Python 2.7.3 Standard Library
A Brief Introduction to Regular Expression with Python 2.7.3 Standard LibraryA Brief Introduction to Regular Expression with Python 2.7.3 Standard Library
A Brief Introduction to Regular Expression with Python 2.7.3 Standard LibraryWen Liao
 
GNU gettext簡介 - 以C語言為範例
GNU gettext簡介 - 以C語言為範例GNU gettext簡介 - 以C語言為範例
GNU gettext簡介 - 以C語言為範例Wen Liao
 
Guide to GStreamer Application Development Manual: CH1 to CH10
Guide to GStreamer Application Development Manual: CH1 to CH10Guide to GStreamer Application Development Manual: CH1 to CH10
Guide to GStreamer Application Development Manual: CH1 to CH10Wen Liao
 
Testing in python 2.7.3
Testing in python 2.7.3Testing in python 2.7.3
Testing in python 2.7.3Wen Liao
 
從組裝軟體中談談軟體發展管理
從組裝軟體中談談軟體發展管理從組裝軟體中談談軟體發展管理
從組裝軟體中談談軟體發展管理Wen Liao
 
軟體組裝心得分享
軟體組裝心得分享軟體組裝心得分享
軟體組裝心得分享Wen Liao
 
Introduce to Linux command line
Introduce to Linux command lineIntroduce to Linux command line
Introduce to Linux command lineWen Liao
 

More from Wen Liao (18)

Hello world 的一生
Hello world 的一生Hello world 的一生
Hello world 的一生
 
Notes on oracle solaris 11.3 linkers and libraries guide chapter one
Notes on oracle solaris 11.3 linkers  and libraries guide  chapter oneNotes on oracle solaris 11.3 linkers  and libraries guide  chapter one
Notes on oracle solaris 11.3 linkers and libraries guide chapter one
 
開放街圖 自助旅行的好幫手
開放街圖   自助旅行的好幫手開放街圖   自助旅行的好幫手
開放街圖 自助旅行的好幫手
 
GNU AS簡介
GNU AS簡介GNU AS簡介
GNU AS簡介
 
UPnP 1.0 簡介
UPnP 1.0 簡介UPnP 1.0 簡介
UPnP 1.0 簡介
 
故事:自由軟體和 Richard Stallman
故事:自由軟體和 Richard Stallman故事:自由軟體和 Richard Stallman
故事:自由軟體和 Richard Stallman
 
Hello world在那邊?背景說明
Hello world在那邊?背景說明Hello world在那邊?背景說明
Hello world在那邊?背景說明
 
A successful git branching model 導讀
A successful git branching model 導讀A successful git branching model 導讀
A successful git branching model 導讀
 
GNU ld的linker script簡介
GNU ld的linker script簡介GNU ld的linker script簡介
GNU ld的linker script簡介
 
Trace 程式碼之皮
Trace 程式碼之皮Trace 程式碼之皮
Trace 程式碼之皮
 
GNU Make, Autotools, CMake 簡介
GNU Make, Autotools, CMake 簡介GNU Make, Autotools, CMake 簡介
GNU Make, Autotools, CMake 簡介
 
A Brief Introduction to Regular Expression with Python 2.7.3 Standard Library
A Brief Introduction to Regular Expression with Python 2.7.3 Standard LibraryA Brief Introduction to Regular Expression with Python 2.7.3 Standard Library
A Brief Introduction to Regular Expression with Python 2.7.3 Standard Library
 
GNU gettext簡介 - 以C語言為範例
GNU gettext簡介 - 以C語言為範例GNU gettext簡介 - 以C語言為範例
GNU gettext簡介 - 以C語言為範例
 
Guide to GStreamer Application Development Manual: CH1 to CH10
Guide to GStreamer Application Development Manual: CH1 to CH10Guide to GStreamer Application Development Manual: CH1 to CH10
Guide to GStreamer Application Development Manual: CH1 to CH10
 
Testing in python 2.7.3
Testing in python 2.7.3Testing in python 2.7.3
Testing in python 2.7.3
 
從組裝軟體中談談軟體發展管理
從組裝軟體中談談軟體發展管理從組裝軟體中談談軟體發展管理
從組裝軟體中談談軟體發展管理
 
軟體組裝心得分享
軟體組裝心得分享軟體組裝心得分享
軟體組裝心得分享
 
Introduce to Linux command line
Introduce to Linux command lineIntroduce to Linux command line
Introduce to Linux command line
 

淺談Debian套件打包