Ubuntu16.04下製作deb包的方法詳解
1 認識deb包
1.1 認識deb包
deb
是Unix
系統(其實主要是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
包本身有三部分組成:
資料包,包含實際安裝的程式資料,檔名為 data.tar.XXX;
安裝資訊及控制指令碼包, 包含
deb
最後一個是
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
驗證打包好的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
- 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
首先提示輸入安裝包的描述資訊
接著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 # 生成製作
- 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 參考
- 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.04下CMake安裝方法
檔案下載: 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.04下Android 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.04下Neo4j圖資料庫官網安裝部署步驟(圖文詳解)(博主推薦)
不多說,直接上乾貨! 說在前面的話 首先,檢視下你的作業系統的版本。 [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程式有幾種選擇,這裡