天天看點

Ubuntu下制作deb包的方法詳解1 認識deb包2 制作deb包3 參考

CSDN GitHub
Ubuntu下制作deb包的方法詳解

AderXCoding/system/tools/build_deb

Ubuntu下制作deb包的方法詳解1 認識deb包2 制作deb包3 參考

本作品采用知識共享署名-非商業性使用-相同方式共享 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

包本身有三部分組成:

  1. 資料包,包含實際安裝的程式資料,檔案名為 data.tar.XXX;
  2. 安裝資訊及控制腳本包, 包含

    deb

    的安裝說明,辨別,腳本等,檔案名為 control.tar.gz;
  3. 最後一個是

    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目錄的其他目錄都會被預設安裝到系統的/目錄下

Ubuntu下制作deb包的方法詳解1 認識deb包2 制作deb包3 參考

在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
           
Ubuntu下制作deb包的方法詳解1 認識deb包2 制作deb包3 參考

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

Ubuntu下制作deb包的方法詳解1 認識deb包2 制作deb包3 參考

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 # 建構
           
Ubuntu下制作deb包的方法詳解1 認識deb包2 制作deb包3 參考

首先提示輸入安裝包的描述資訊

Ubuntu下制作deb包的方法詳解1 認識deb包2 制作deb包3 參考

接着checkinstall提示使用者填入或者修改deb的控制資訊, 其本質就是control檔案的内容

Ubuntu下制作deb包的方法詳解1 認識deb包2 制作deb包3 參考

最後等待生成deb完成

Ubuntu下制作deb包的方法詳解1 認識deb包2 制作deb包3 參考

此時目前目錄下生成了

deb

Ubuntu下制作deb包的方法詳解1 認識deb包2 制作deb包3 參考

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 參考

  1. debian/control檔案中資訊說明
) Package 包名
) Version 版本
) Architecture 目标機架構(i386, arm等)
) Maintainer 維護者
) Depends 依賴軟體包
) Description 描述
           

checkinstall詳細例程

自己制作deb包例程

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

linux/ubuntu中制作deb安裝包

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

繼續閱讀