天天看點

linux下制作deb的方法總結

deb簡介

deb是Unix系統(其實主要是Linux)下的安裝包,基于 tar 包,是以本身會記錄檔案的權限(讀/寫/可執行)以及所有者/使用者組。

由于 Unix 類系統對權限、所有者、組的嚴格要求,而 deb 格式安裝包又經常會涉及到系統比較底層的操作,是以權限等的設定尤其重要。

deb包使用方法

dpkg -c xxx.deb // 安裝前根據deb檔案檢視
dpkg -L debname // 安裝後根據包名檢視
dpkg -i xxx.deb //安裝deb包,如果提示錯誤,可以加參數—force-all強制安裝,但不推薦這樣做
dpkg -r debname //移除deb包
dpkg -S filepath //檢視某個檔案屬于哪個deb包
dpkg -X xxx.deb dirname //釋放安裝内容到dirname目錄中
dpkg -e xxx.deb  //釋放控制資訊到目前目錄下的DEBIAN子目錄中           

複制

deb包的資料組成

deb包裡面的結構:DEBIAN目錄 和 軟體具體安裝目錄(模拟安裝目錄)(如etc, usr, opt, tmp等)。

在DEBIAN目錄中至少有control檔案,還可能有postinst(postinstallation)、postrm(postremove)、preinst(preinstallation)、prerm(preremove)、copyright (版權)、changlog (修訂記錄)和conffiles等。

控制檔案 描述

control 用了記錄軟體辨別,版本号,平台,依賴資訊等資料

preinst 在解包data.tar.gz前運作的腳本

postinst 在解包資料後運作的腳本

prerm 解除安裝時,在删除檔案之前運作的腳本

postrm 在删除檔案之後運作的腳本

control檔案:描述軟體包的名稱(Package),版本(Version),描述(Description)等,是deb包必須劇本的描述性檔案,以便于軟體的安裝管理和索引。為了能将軟體包進行充分的管理,可能還具有以下字段:

Section:申明軟體的類别,常見的有`utils’, `net’, `mail’, `text’, `x11′ 等;

Priority:申明軟體對于系統的重要程度,如`required’, `standard’, `optional’, `extra’ 等;

Essential:申明是否是系統最基本的軟體包(選項為yes/no),如果是的話,這就表明該軟體是維持系統穩定和正常運作的軟體包,不允許任何形式的解除安裝(除非進行強制性的解除安裝)

Architecture:軟體包結構,如基于`i386′, ‘amd64’,`m68k’, `sparc’, `alpha’, `powerpc’ 等;

Source:軟體包的源代碼名稱;

Depends:軟體所依賴的其他軟體包和庫檔案。如果是依賴多個軟體包和庫檔案,彼此之間采用逗号隔開;

Pre-Depends:軟體安裝前必須安裝、配置依賴性的軟體包和庫檔案,它常常用于必須的預運作腳本需求;

Recommends:這個字段表明推薦的安裝的其他軟體包和庫檔案;

Suggests:建議安裝的其他軟體包和庫檔案。

control檔案完整示例:

Package: mysoftware
Version: 2016-02-26
Section: free
Priority: optional
Depends: libssl.0.0.so, libstdc++2.10-glibc2.2
Suggests: Openssl
Architecture: i386
Installed-Size: 66666
Maintainer: Simon @ newdivide7037#gmail.com
Provides: mysoftware
Description: just for test
                    (此處必須空一行再結束)           

複制

使用dpkg指令制作deb包

制作如下目錄及檔案:

linux下制作deb的方法總結

control檔案内容: 

linux下制作deb的方法總結

postinst檔案内容:

# !/bin/sh
echo "my deb" >/home/mydeb.log           

複制

postrm檔案内容:

# !/bin/sh
rm -rf /home/mydeb.log           

複制

完成第一步的制作目錄及檔案後可以給做好的mydeb目錄進行打包成.deb包

$ dpkg -b mydeb mydeb.deb #第一個參數為将要打包的目錄名,
                          #第二個參數為生成包的名稱           

複制

現在完成了deb包的制作。