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包
制作如下目錄及文件:
control文件內容:
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包的制作。