CSDN | GitHub |
---|---|
Ubuntu下制作deb包的方法詳解 | |
本作品采用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協定進行許可
1 認識deb包
1.1 認識deb包
deb
是
Unix
系統(其實主要是
Linux
)下的安裝包,基于 tar 包,是以本身會記錄檔案的權限(讀/寫/可執行)以及所有者/使用者組。
由于 Unix 類系統對權限、所有者、組的嚴格要求,而 deb 格式安裝包又經常會涉及到系統比較底層的操作,是以權限等的設定尤其重要。
1.2 使用deb包
- 檢視deb包含有哪些檔案(不安裝)
dpkg -c xxx.deb // 安裝前根據deb檔案檢視
dpkg -L debname // 安裝後根據包名檢視
- 安裝deb包
dpkg -i xxx.deb
注意,如果提示錯誤,可以加參數—force-all強制安裝,但不推薦這樣做
- 移除deb包
dpkg -r debname
- 檢視某個檔案屬于哪個deb包
dpkg -S filepath
- 釋放安裝内容到dirname目錄中
dpkg -X xxx.deb dirname
- 釋放控制資訊到目前目錄下的DEBIAN子目錄中
dpkg -e xxx.deb
1.3 deb包的組成結構
deb
包本身有三部分組成:
- 資料包,包含實際安裝的程式資料,檔案名為 data.tar.XXX;
- 安裝資訊及控制腳本包, 包含
的安裝說明,辨別,腳本等,檔案名為 control.tar.gz;deb
- 最後一個是
檔案的一些二進制資料,包括檔案頭等資訊,一般看不到,在某些軟體中打開可以看到。deb
本身可以使用不同的壓縮方式.
deb
格式并不是一種壓縮格式,而是直接把分散的檔案和目錄集合在一起,并記錄其權限等資料資訊。之前提到過的 data.tar.XXX,這裡 XXX 就是經過壓縮後的字尾名. deb預設使用的壓縮格式為gzip格式,是以最常見的就是 data.tar.gz。常有的壓縮格式還有 bzip2 和 lzma,其中 lzma 壓縮率最高,但壓縮需要的 CPU 資源和時間都比較長
tar
- data.tar.gz包含的是實際安裝的程式資料,而在安裝過程中,該包裡的資料會被直接解壓到根目錄(即 / ),是以在打包之前需要根據檔案所在位置設定好相應的檔案/目錄樹。
- control.tar.gz則包含了一個 deb 安裝的時候所需要的控制資訊.
一般有 5 個檔案:
控制檔案 | 描述 |
---|---|
control | 用了記錄軟體辨別,版本号,平台,依賴資訊等資料 |
preinst | 在解包 前運作的腳本 |
postinst | 在解包資料後運作的腳本 |
prerm | 解除安裝時,在删除檔案之前運作的腳本 |
postrm | 在删除檔案之後運作的腳本 |
2 制作deb包
首先我們需要準備好我們待打包的軟體, 這裡我們采用了
- 下載下傳示例軟體包, 直接對二進制包或者進行打包
- 對源碼編譯後進行打包需要有make的編譯腳本, 或者對于自己寫的代碼制做deb包, 建議用autoconf, automake生成編譯腳本
2.1 最基礎的方式dpkg-deb
最基礎的方式需要我們自己編寫和建立腳本, 不使用其他輔助工具, 而隻使用标準的
dpkg-deb
打包指令
我們以之前的微信電腦版的代碼為例子, 為其建立一個deb安裝包
首先我們為我們建立一個工作目錄
electronic-wechat
然後我們建立一個名為EBIAN的目錄, 用于存放控制資訊
然後我們建立對應的二進制包安裝安裝完成後的路徑資訊放置在DEBIAN的同級目錄下, 也就是說我們把目前的目錄當成根目錄, 制作完成後安裝時, 目前目錄下除DEBIAN目錄的其他目錄都會被預設安裝到系統的/目錄下
在DEBIAN裡建立一個文本文檔, 名為control, 編碼為utf-8, 内容如下所示
Package: electronic-wechat
Version: -
Section: BioInfoServ
Priority: optional
Depends:
Suggests:
Architecture: i386
Installed-Size:
Maintainer: gatieme
Provides: bioinfoserv-arb
Description: A better WeChat on macOS and Linux. Built with Electron by Zhongyi Tong
然後我們回到工作目錄上級, 使用dpkg-deb指令建立deb包
使用
dpkg-deb --help
檢視使用幫助的資訊, 可以使用
-b
選項生成
deb
包
dpkg-deb -b electronic-wechat electronic-wechat-linux-i386.deb
驗證打包好的deb, 我們可以使用dpkg -i安裝或者dpkg -X解壓指令驗證我們的deb包
2.2 方法二: 使用checkinstall方法建立deb包
如果你已經從它的源碼運作”make install”安裝了linux程式. 想完整移除它将變得真的很麻煩, 除非程式的開發者在
Makefile
裡提供了
uninstall
的目标設定. 否則你必須在安裝前後比較你系統裡檔案的完整清單,然後手工移除所有在安裝過程中加入的檔案. 這時候Checkinstall就可以派上使用。Checkinstall會跟蹤install指令行所建立或修改的所有檔案的路徑(例如:”make install”、”make install_modules”等)并建立一個标準的二進制包,讓你能用你發行版的标準包管理系統安裝或解除安裝它,(例如Red Hat的yum或者Debian的apt-get指令)
apt-get install checkinstall
可以使用
checkinstall --help
來檢視幫助資訊
checkinstall
不僅可以生成deb包, 還可以生成rpm包,使用簡單,但是不靈活,功能粗糙,隻做介紹,不推薦使用
但是他适合從源代碼直接建構我們的deb包, 我們下載下傳到待打包的源代碼以後, 先使用make和make install編譯安裝, 然後運作checkinstall即可完成deb的打包
git clone [email protected]:chinaran/color-compile.git # 下載下傳源代碼
cd color-compile
make && make install # 建構
首先提示輸入安裝包的描述資訊
接着checkinstall提示使用者填入或者修改deb的控制資訊, 其本質就是control檔案的内容
最後等待生成deb完成
此時目前目錄下生成了
deb
包
2.3 方法三: 使用dh_make方法建立deb包
deb包所需的預設資訊
此時目前目錄下生成了
debian
目錄, 此時通常修改兩個檔案:
- 修改
檔案,配置你的資訊,具體字段見參考部分debian/control
- 修改
腳本,它決定編譯參數(也可以不改)debian/rules
dpkg
是最基本的制作
deb
包的方法, 推薦使用
dpkg-buildpackage -rfakeroot
此時可以看到,上層目錄中已建立了deb包
2.4 方法四: 修改已有deb包
自己建立deb所需目錄結構(控制資訊和安裝内容),然後打包,一般使用這種方法來修改已有的deb包,而不是建立deb包,指令如下:
dpkg -X xxx.deb test # 解包安裝内容
cd test
dpkg -e ../xxx.deb # 解包控制資訊
修改其中内容
cd ../
dpkg -b dirname xxx_new.deb # 重新打包
3 參考
- debian/control檔案中資訊說明
) Package 包名
) Version 版本
) Architecture 目标機架構(i386, arm等)
) Maintainer 維護者
) Depends 依賴軟體包
) Description 描述
checkinstall詳細例程
自己制作deb包例程
官方的debian制作手冊(比較長)
linux/ubuntu中制作deb安裝包
制作Ubuntu的deb格式包 從Hello World做起