1. 程式人生 > >Ubuntu16.04下製作deb包的方法詳解

Ubuntu16.04下製作deb包的方法詳解

1 認識deb包

1.1 認識deb包

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

1.2 使用deb包

  • 檢視deb包含有哪些檔案(不安裝)
dpkg -c xxx.deb // 安裝前根據deb檔案檢視
dpkg -L debname // 安裝後根據包名檢視
  • 1
  • 2
  • 安裝deb包
dpkg -i xxx.deb
  • 1

注意,如果提示錯誤,可以加引數—force-all強制安裝,但不推薦這樣做

  • 移除deb包
dpkg -r debname
  • 1
  • 檢視某個檔案屬於哪個deb包
dpkg -S filepath
  • 1
  • 釋放安裝內容到dirname目錄中
dpkg -X xxx.deb dirname
  • 1
  • 釋放控制資訊到當前目錄下的DEBIAN子目錄中
dpkg -e xxx.deb
  • 1

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

目錄結構

在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 Tong
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

然後我們回到工作目錄上級, 使用dpkg-deb命令建立deb包

使用dpkg-deb --help檢視使用幫助的資訊, 可以使用-b選項生成deb

dpkg-deb -b electronic-wechat electronic-wechat-linux-i386.deb
  • 1

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
  • 1

可以使用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 # 構建
  • 1
  • 2
  • 3

構建專案

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

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

構建deb

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

使用者填入或者修改deb的控制資訊

最後等待生成deb完成

完成

此時當前目錄下生成了deb

生成的deb包

2.3 方法三: 使用dh_make方法建立deb包

deb包所需的預設資訊

dh_make -s -e [email protected]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 -rfakeroot
  • 1

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

2.4 方法四: 修改已有deb包

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

dpkg -X xxx.deb test #  解包安裝內容
cd test
dpkg -e ../xxx.deb #  解包控制資訊
  • 1
  • 2
  • 3

修改其中內容

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

3 參考

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

轉載自:https://blog.csdn.net/gatieme/article/details/52829907

相關推薦

Ubuntu16.04製作deb方法

1 認識deb包 1.1 認識deb包 deb是Unix系統(其實主要是Linux)下的安裝包,基於 tar 包,因此本身會記錄檔案的許可權(讀/寫/可執行)以及所有者/使用者組。 由於 Unix 類系統對許可權、所有者、組的嚴格要求,而 d

Ubuntu製作deb方法

1 認識deb包 1.1 認識deb包 deb是Unix系統(其實主要是Linux)下的安裝包,基於 tar 包,因此本身會記錄檔案的許可權(讀/寫/可執行)以及所有者/使用者組。 由於 Unix 類系統對許可權、所有者、組的嚴

Ubuntu16.04安裝caffe的方法(踩坑無數後的吐血總結)

        平常較少接觸linux系統,因專案需要使用linux下的caffe。為了這一次安裝探索了兩天,踩了無數的坑,參考了網上很多教程,發現百度裡的答案不是內容有錯誤,就是描述的問題和自己無關

ubuntu安裝eclipse的方法

     Eclipse是一個程式開發的很好的工具,所以說在ubuntu裡面安裝eclipse是我的一個不錯的選擇,首先獲取eclipse的安裝包(官網獲取,建議下載地址:http://www.eclipse.org/downloads/download.php?file=

直流穩壓電源製作及管理方法

本文詳細介紹了直流穩壓電源的製作、檢測與管理方法。首先介紹了直流穩壓電源主電路、控制電路以及簡單保護電路的設計。其次提出了一種適合於有多路電壓輸出的複雜電源系統中,各個直流電壓的有無檢測和管理方法,可提高電壓輸出檢測效率和實現電源管理自動化。最後總結了在該電源的設計與試驗

ubuntu16.04安裝如何安裝.deb安裝

在Ubuntu下安裝deb包需要使用dpkg命令. Dpkg 的普通用法: 1、sudo dpkg -i <package.deb> 安裝一個 Debian 軟體包,如你手動下載的檔案。 2、sudo dpkg -c <package.deb> 列

Ubuntu16.04安裝Chrome出現“未安裝軟件 libappindicator1”問題的解決辦法

googl spa 軟件包 依賴 mic 安裝軟件 ren for 其中 1. 強制安裝chrome sudo dpkg -i google-chrome-stable_current_i386.deb --force 2. 補齊依賴 sudo apt-get i

ubuntu16.04CMake安裝方法

檔案下載: sudo wget https://cmake.org/files/v3.9/cmake-3.9.1-Linux-x86_64.tar.gz   解壓: sudo tar zxvf cmake-3.9.1-Linux-x86_64.tar.gz  

瀏覽器無法登入csdn或csdn無法儲存、釋出博文的一個奇怪的解決方法ubuntu16.04網頁)

問題描述: ubuntu16.04系統 firefox瀏覽器無法登入csdn,每次登入失敗就會顯示“建立安全連線失敗,連線到passport.csdn.net時發生錯誤” google瀏覽器可以登入csdn,但是無法儲存和釋出博文,request請求中headers出現

ubuntu16.04無法登入或迴圈登入的解決方法

問題起因 由於docker daemon需要繫結到主機的Unix socket而不是普通的TCP埠,而Unix socket的屬主為root使用者,所以其他使用者只有在命令前新增sudo選項才能執行相關操作。 docker 需要使用者具有 sudo

學習筆記(四)ubuntu16.04幾款IDE的安裝方法

注:本文非標準教程,僅是總結個人學習過程,可能存在紕漏,如有錯誤之處歡迎留言告知,非常感謝 一、Visual Studio Code: 一款萬能的IDE 在這裡直接下載deb包並安裝:http

Ubuntu16.04安裝opencv2.4.9及若干問題解決方法

1. 下載opencv2.4.9 安裝包 wget https://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.9/opencv-2.4.9.zipunzip解壓2.安裝依賴sudo apt-get

製作DEB方法

由於個人水平有限,難免有很多不適當的地方,有什麼翻譯錯誤的,請多多指教^_^ 原文地址 Chapter 1. Getting started The Right Way 這一章沒做記錄 Chapter 2. First steps 2.1 建立debian包的工作流  

Ubuntu16.04Android studio 模擬器無法啟動的解決方法

error:Failed to create the SD card. 解決方法: sudo apt-get install lib32ncurses5 lib32z1 error:/opt/androidsdk/tools/mksdcard: er

ubuntu16.04 安裝加入opencv_contribute的GPU版本的OpenCV3.2(CUDA支援)步驟與問題解決

首先肯定是先安裝依賴了,官方列出了一些: sudo apt-get install build-essential sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev liba

Ubuntu16.04安裝python3.6詳細步驟及anaconda安裝

       最近在廖雪峰老師的網站上學習python,開始用的是Windows環境,但是越往後發現用Linux或許更好一些,環境搭建什麼的比較方便,但是對於很少用Linux的同學來說,Linux上python安裝或許會出現各種令人抓狂的問題,本文以Ubuntu16.04為例

Ubuntu16.04Neo4j圖資料庫官網安裝部署步驟(圖文)(博主推薦)

 不多說,直接上乾貨! 說在前面的話    首先,檢視下你的作業系統的版本。  [email protected]virtual-machine:~# cat /etc/issue Ubuntu 16.04.1 LTS \n \l [email p

Ubuntu16.04安裝python3.6詳細步驟及anaconda3安裝

1.Python3.6的安裝  Ubuntu中自帶python2.7和python3.5,但是很多情況下我們需要使用python3.6,以下是在終端中安裝python3.6的詳細步驟: 在終端中輸入下面的命令 wget http://www.python.org/ftp

QT程式在Windows製作安裝釋出程式的方法

設計完成時,用release方式編譯程式,把生成的EXE檔案和其依賴的庫放在一個資料夾中,用setup2go生成安裝檔案。 好,我們啟動程式,選擇檔案>>>>>>>新建工程。 儲存工程專案 出現了安裝配置欄目,我們

ubuntu16.04使用apache2.4部署Python3 web方法一覽

配置環境 ubuntu 16.04 Apache 2.4 Python 3.5+ web框架:django 和 flask django和flask框架都屬於Python類的框架,Apache部署這類Python程式有幾種選擇,這裡