1 認識deb包linux
1.1 認識deb包git
deb是Unix系統(其實主要是Linux)下的安裝包,基於 tar 包,所以自己會記錄文件的權限(讀/寫/可執行)以及全部者/用戶組。 因爲 Unix 類系統對權限、全部者、組的嚴格要求,而 deb 格式安裝包又常常會涉及到系統比較底層的操做,因此權限等的設置尤爲重要。github
1.2 使用deb包ubuntu
查看deb包含有哪些文件(不安裝)微信
dpkg -c xxx.deb // 安裝前根據deb文件查看 dpkg -L debname // 安裝後根據包名查看12架構
安裝deb包electron
dpkg -i xxx.deb1ide
注意,若是提示錯誤,能夠加參數—force-all強制安裝,但不推薦這樣作工具
移除deb包post
dpkg -r debname1
查看某個文件屬於哪一個deb包
dpkg -S filepath1
釋放安裝內容到dirname目錄中
dpkg -X xxx.deb dirname1
釋放控制信息到當前目錄下的DEBIAN子目錄中
dpkg -e xxx.deb1
1.3 deb包的組成結構
deb包自己有三部分組成:
數據包,包含實際安裝的程序數據,文件名爲 data.tar.XXX; 安裝信息及控制腳本包, 包含deb的安裝說明,標識,腳本等,文件名爲 control.tar.gz; 最後一個是deb文件的一些二進制數據,包括文件頭等信息,通常看不到,在某些軟件中打開能夠看到。
deb自己可使用不一樣的壓縮方式. tar格式並非一種壓縮格式,而是直接把分散的文件和目錄集合在一塊兒,並記錄其權限等數據信息。以前提到過的 data.tar.XXX,這裏 XXX 就是通過壓縮後的後綴名. deb默認使用的壓縮格式爲gzip格式,因此最多見的就是 data.tar.gz。常有的壓縮格式還有 bzip2 和 lzma,其中 lzma 壓縮率最高,但壓縮須要的 CPU 資源和時間都比較長
data.tar.gz包含的是實際安裝的程序數據,而在安裝過程當中,該包裏的數據會被直接解壓到根目錄(即 / ),所以在打包以前須要根據文件所在位置設置好相應的文件/目錄樹。 control.tar.gz則包含了一個 deb 安裝的時候所須要的控制信息.
通常有 5 個文件:
控制文件 描述
control 用了記錄軟件標識,版本號,平臺,依賴信息等數據
preinst 在解包data.tar.gz前運行的腳本
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: 1.4.0-2016.08.24 Section: BioInfoServ Priority: optional Depends: Suggests: Architecture: i386 Installed-Size: 4096 Maintainer: gatieme Provides: bioinfoserv-arb Description: A better WeChat on macOS and Linux. Built with Electron by Zhongyi Tong1234567891011
而後咱們回到工做目錄上級, 使用dpkg-deb命令建立deb包
使用dpkg-deb --help查看使用幫助的信息, 可使用-b選項生成deb包
dpkg-deb -b electronic-wechat electronic-wechat-linux-i386.deb1
驗證打包好的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 checkinstall1
可使用checkinstall --help來查看幫助信息
checkinstall不只能夠生成deb包, 還能夠生成rpm包,使用簡單,可是不靈活,功能粗糙,只作介紹,不推薦使用
可是他適合從源代碼直接構建咱們的deb包, 咱們下載到待打包的源代碼之後, 先使用make和make install編譯安裝, 而後運行checkinstall便可完成deb的打包
git clone git@github.com:chinaran/color-compile.git # 下載源代碼 cd color-compile make && make install # 構建123
checkinstall -D --pkgname=color-compile --pkgversion=2014-12-20 --install=no --pkgsource=../color-compile # 製做deb1
首先提示輸入安裝包的描述信息
接着checkinstall提示用戶填入或者修改deb的控制信息, 其本質就是control文件的內容
最後等待生成deb完成
此時當前目錄下生成了deb包
2.3 方法三: 使用dh_make方法建立deb包
deb包所需的默認信息
dh_make -s -e gatieme@163.com -p color-compile_2014-12-20 -f ./color-compile_2014-12-20.tar.gz # 生成製做1
此時當前目錄下生成了debian目錄, 此時一般修改兩個文件:
修改debian/control文件,配置你的信息,具體字段見參考部分 修改debian/rules腳本,它決定編譯參數(也能夠不改)
dpkg是最基本的製做deb包的方法, 推薦使用
dpkg-buildpackage -rfakeroot1
此時能夠看到,上層目錄中已創建了deb包
2.4 方法四: 修改已有deb包
本身建立deb所需目錄結構(控制信息和安裝內容),而後打包,通常使用這種方法來修改已有的deb包,而不是新建deb包,命令以下:
dpkg -X xxx.deb test # 解包安裝內容 cd test dpkg -e ../xxx.deb # 解包控制信息123
修改其中內容
cd ../ dpkg -b dirname xxx_new.deb # 從新打包12
3 參考
debian/control文件中信息說明
1) Package 包名 2) Version 版本 3) Architecture 目標機架構(i386, arm等) 4) Maintainer 維護者 5) Depends 依賴軟件包 6) Description 描述123456
checkinstall詳細例程
本身製做deb包例程
官方的debian製做手冊(比較長)
linux/ubuntu中製做deb安裝包