Ubuntu下製做deb包的方法詳解

 

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安裝包

相關文章
相關標籤/搜索