文章出處

1 認識deb包


1.1 認識deb包


deb是Unix系統(其實主要是Linux)下的安裝包,基于 tar 包,因此本身會記錄文件的權限(讀/寫/可執行)以及所有者/用戶組。
由于 Unix 類系統對權限、所有者、組的嚴格要求,而 deb 格式安裝包又經常會涉及到系統比較底層的操作,所以權限等的設置尤其重要。

1.2 使用deb包


查看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;

安裝信息及控制腳本包, 包含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-wechatVersion: 1.4.0-2016.08.24Section: BioInfoServPriority: optionalDepends:Suggests:Architecture: i386Installed-Size: 4096Maintainer: gatiemeProvides: bioinfoserv-arbDescription: 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

dpkg-deb打包deb包

驗證打包好的deb, 我們可以使用dpkg -i安裝或者dpkg -X解壓命令驗證我們的deb包

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 git@github.com:chinaran/color-compile.git   # 下載源代碼cd color-compile   make && make install # 構建

構建項目

checkinstall -D --pkgname=color-compile --pkgversion=2014-12-20 --install=no  --pkgsource=../color-compile  # 制作deb

首先提示輸入安裝包的描述信息

構建deb

接著checkinstall提示用戶填入或者修改deb的控制信息, 其本質就是control文件的內容

用戶填入或者修改deb的控制信息

最后等待生成deb完成

完成

此時當前目錄下生成了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 # 生成制作

此時當前目錄下生成了debian目錄, 此時通常修改兩個文件:

修改debian/control文件,配置你的信息,具體字段見參考部分

修改debian/rules腳本,它決定編譯參數(也可以不改)

dpkg是最基本的制作deb包的方法, 推薦使用

dpkg-buildpackage -rfakeroot

此時可以看到,上層目錄中已建立了deb包

2.4 方法四: 修改已有deb包


自己創建deb所需目錄結構(控制信息和安裝內容),然后打包,一般使用這種方法來修改已有的deb包,而不是新建deb包,命令如下:

dpkg -X xxx.deb test #  解包安裝內容cd testdpkg -e ../xxx.deb #  解包控制信息

修改其中內容

cd ../dpkg -b dirname xxx_new.deb #  重新打包

3 參考


debian/control文件中信息說明

1) Package 包名2) Version 版本3) Architecture 目標機架構(i386, arm等)4) Maintainer 維護者5) Depends 依賴軟件包6) Description 描述

checkinstall詳細例程

自己制作deb包例程

官方的debian制作手冊(比較長)

linux/ubuntu中制作deb安裝包

制作Ubuntu的deb格式包 從Hello World做起

就愛閱讀www.92to.com網友整理上傳,為您提供最全的知識大全,期待您的分享,轉載請注明出處。
歡迎轉載:http://www.kanwencang.com/bangong/20161206/65114.html

文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()