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

Ubuntu下製作deb包的方法詳解

1 認識deb包

1.1 認識deb包

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

目錄結構

在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

然後我們回到工作目錄上級, 使用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 [email protected]: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 [email protected]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 test
dpkg -e ../xxx.deb #  解包控制資訊

修改其中內容

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

3 參考

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

相關推薦

Ubuntu製作deb方法

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

ubuntu安裝eclipse的方法

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

Ubuntu16.04製作deb方法

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

ubuntu編譯c程式的

1、c語言中的各種字尾名代表的意思: .a檔案代表的是靜態庫 .c代表c原始碼 .h代表c原始碼標頭檔案 .i代表的是c原始碼(這是被預處理過後的結果) .o物件檔案 .s組合語言的程式碼 .so動態庫 2、c語言程式從原始碼到生成可執行檔案的過程:c程式原始碼(.c檔案)

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

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

Ubuntu製作併發布deb

想做有關linaro ubuntu的開發,在wiki上介紹說首先需要熟悉linaro ubuntu的Deb包製作流程,參考網址所述 1. 在2.2.3. Upload your GPG key to Launchpad這一步,第一次匯入key完成後,launchpad網站會

ubuntu製作簡單的deb

目錄結構 被打包之前,檔案結構如下: makeDeb │ ├── DEBIAN   │ └── control  // 1 安裝資訊 └── usr     ├── share │ └── applications

Ubuntu(VMware)用wireshark抓取802.11無線資料 操作

咱們從零開始:準備環境:VMware12.0 + Ubuntu16.04 (越新越好)辛酸之路:筆記本插上無線usb網絡卡,連線到Ubuntu,iwconfig識別不到網絡卡。下個官方驅動吧,這個Ralink很難找,放到Ubuntu編譯失敗。 然而同學卻能直接識別出網絡卡,沒

Linux管理命令與Ubuntu安裝nginx的方法

rpm包和deb包是兩種Linux系統下最常見的安裝包格式,在安裝一些軟體或服務的時候免不了要和它們打交道。rpm包主要應用在RedHat系列包括 Fedora等發行版的Linux系統上,deb包主要應用於Debian系列包括現在比較流行的Ubuntu等發行版上。 二者對應的安裝命令分別為rp

CentOS6防火牆(iptables)的配置方法

CentOS6系統是基於linux中的,它的防火牆其實就是iptables了。 下面我來介紹在CentOS防火牆iptables的配置教程,希望此教程對各位朋友會有所幫助。 iptables是與Linux核心整合的IP資訊包過濾系統,其自帶防火牆功能,我們在配置完伺服器的角色功能後,需要修改iptable

CentOS6防火墻(iptables)的配置方法

拒絕訪問 基於 init.d 0.10 打開 linux 服務 fig 所有 CentOS6系統是基於linux中的,它的防火墻其實就是iptables了。 下面我來介紹在CentOS防火墻iptables的配置教程,希望此教程對各位朋友會有所幫助。 iptables是與L

Windows許可權設定方法

原文連結:http://hi.baidu.com/wfhupnzfycbosze/item/b1a60092b848d78d581461f9 隨著動網論壇的廣泛應用和動網上傳漏洞的被發現以及SQL注入式攻擊越來越多的被使用,WEBSHELL讓防火牆形同虛設,一臺即使打了所有微軟

python中matplotlib.pyplot基本繪圖方法

一般情況下,我們使用以下語句引入該包: import matplotlib.pyplot as plt 全域性中文字型設定: pyplot包並不預設支援中文顯示,需要rcParams修改字型來實現。 import matplotlib.pyplot as plt from pyl

Go strings 字串處理常用方法

golang字串相關操作主要使用strings包下相對應方法,本文主要介紹strings包下一些常用方法的使用方法。 函式:Contain(s,str string) bool 說明:查詢子串是否在指定的字串中 例項: package main import ( "fmt"

Go語言fmtPrintf方法

Go語言的標準輸出流在列印到螢幕時有些引數跟別的語言(比如C#和Java)不同,下面是我整理的一些常用的格式化輸入操作。 General %v 以預設的方式列印變數的值 %T 列印變數的型別 Integer %+d 帶符號的整型, fmt.Printf("

MyEclipse+Maven打可執行war時遇到的一系列問題及解決方法

以下是我整個打war包過程時遇到的一些問題以及我用到的解決方案,及時分享出來,給遇到同樣問題的小夥伴們予以借鑑,少走彎路。 先貼出來pom.xml中打war包需要的依賴 <build>

Linux普通使用者授予root許可權方法

宣告:此方法本人親自試驗過。 紅顏色位Linux命令,綠色為新增的內容 首先,建立一個使用者,沒有密碼 adduser work 其次,用root使用者,修改一下檔案  /etc/sudoers 檔案,找到下面一行,在root下面新增一行,如下所示: 命令是:vim

USB抓工具--Bus Hound的使用方法以及下載

概述 Bus Hound是一個超級軟體匯流排協議分析器,用於捕捉來自裝置的協議包和輸入輸出操作。該軟體是由美國perisoft公司研製的一種專用於PC機各種匯流排資料包監視和控制的開發工具軟體,

49.[Python]使用requests進行HTTP互動方法

簡介 Python的HTTP包有urllib、urllib2、httplib等,但是都需要了解較多的HTTP原理才能編碼,藉助requests包可以在較高的抽象層次上完成HTTP互動過程的開發。安裝requests使用pip install re

java:陣列操作工具類 java.util.Arrays 主要方法

轉載自:https://www.cnblogs.com/dengyungao/p/7525067.html java:陣列操作工具類 java.util.Arrays包 主要方法詳解 Arrays類位於Java.util包下,是一個對陣列操作的工具類,現將Arrays類中的方法做一個總結(J