Ubuntu下製作deb包的方法詳解
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
包本身有三部分組成:
資料包,包含實際安裝的程式資料,檔名為 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 Tong
然後我們回到工作目錄上級, 使用dpkg-deb命令建立deb包
使用dpkg-deb --help
檢視使用幫助的資訊, 可以使用-b
選項生成deb
包
dpkg-deb -b electronic-wechat electronic-wechat-linux-i386.deb
驗證打包好的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 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
首先提示輸入安裝包的描述資訊
接著checkinstall提示使用者填入或者修改deb的控制資訊, 其本質就是control檔案的內容
最後等待生成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 參考
- 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語言fmt包Printf方法詳解
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