轉自:http://www.cnblogs.com/Genesis-007/p/5219960.html
查看系統安裝了哪些deb包: dpkg -l
打包: dpkg -b dir result.deb
安裝: dpkg -i result.deb
版本升級: control中Package修改版本發生變化,卻動了同一個文件,提示"try to overwrite 'file', which is also in package "former version", 解決:可以使用dpkg -i --force-overwrite upgrade.deb, 會成功,但是有overwrite warning,所以版本升級是圍繞着同一個Package升級,還是Package名稱隨版本遞增? Package名不變
Attention: Deb包的preinst和postinst腳本中不能包含另一個deb的安裝工作,否則會造成"dpkg status database is locked by another process". 也就是不能嵌套
dpkg-deb工具使用:
1. deb包的文件結構
deb包里面的結構:DEBIAN目錄 和 軟件具體安裝目錄(模擬安裝目錄)(如etc, usr, opt, tmp等)。
在DEBIAN目錄中至少有control文件,還可能有postinst(postinstallation)、postrm(postremove)、preinst(preinstallation)、prerm(preremove)、copyright (版權)、changlog (修訂記錄)和conffiles等。
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 (此處必須空一行再結束)
postinst文件:包含了軟件在進行正常目錄文件拷貝到系統后,所需要執行的配置工作。
prerm文件:軟件卸載前需要執行的腳本。
postrm文件:軟件卸載后需要執行的腳本。
2. 制作deb包
1. 制作如下目錄及文件
所有目錄及文件:
mydeb
|----DEBIAN
|-------control
|-------preinst
|-------postinst
|-------postrm
|----boot
|----- mysoftware
在任意目錄下創建如上所示的目錄及文件
$ mkdir -p /home/mydeb # 在該目錄下存放生成deb包的文件以及目錄 $ mkdir -p /home/mydeb/DEBIAN #目錄名必須大寫 $ mkdir -p /home/mydeb/boot # 將文件安裝到/boot目錄下 $ touch /home/mydeb/DEBIAN/contro l # 必須要有該文件 $ touch /home/mydeb/DEBIAN/postinst # 軟件安裝完后,執行該Shell腳本 $ touch /home/mydeb/DEBIAN/postrm # 軟件卸載后,執行該Shell腳本 $ touch /home/mydeb/boot/mysoftware # 所謂的“軟件”程序,這里就只是一個空文件
control文件內容:
Package: mysoftware (軟件名稱,中間不能有空格) Version: 1 (軟件版本) Section: free (軟件類別) Prioritt: optional (軟件對於系統的重要性) Architecture: amd64 (軟件所支持的平台架構) Maintainer: xxx <> (打包人和聯系方式) Description: mydeb (對軟件的描述)<br> (此處必須空一行再結束)
postinst文件內容( 軟件安裝完后,執行該Shell腳本,一般用來配置軟件執行環境,必須以“#!/bin/sh”為首行,然后給該腳本賦予可執行權限:chmod +x postinst):
# !/bin/sh echo "my deb" >/home/mydeb.log
postrm文件內容( 軟件卸載后,執行該Shell腳本,一般作為清理收尾工作,必須以“#!/bin/sh”為首行,然后給該腳本賦予可執行權限:chmod +x postrm):
# !/bin/sh rm -rf /home/mydeb.log
2. 完成第一步的制作目錄及文件后可以給做好的mydeb目錄進行打包成.deb包
$ dpkg -b mydeb mydeb.deb #第一個參數為將要打包的目錄名,
#第二個參數為生成包的名稱
現在完成了deb包的制作。
3. 怎么樣制作一個集合deb包
How to create a God package (not recommended):
- Create a temporary directory, e.g. "~/godpackage" and
cd
into it - Extract each .deb file using
dpkg -x filename.deb .
- Extract the control, postrm, ..., files using
dpkg --control filename.deb tmpdeb
. A new directory will be created, namedtmpdeb
. Adjust the control files like changing the name to avoid conflicts later. When done, move / merge the tmpdeb directory with the DEBIAN directory (create if needed). Repeat it for each deb file - Go away from the directory:
cd ..
- Create the new debfile from
~/godpackage
and store the newly created .deb file in the current directory:dpkg-deb --build ~/godpackage .
4. 常用deb包的操作命令
- 安裝deb包:
$ dpkg -i mydeb.deb # 將imysoftware復制到/boot目錄下后,執行postinst # postinst腳本在/home目錄下生成一個含有"mysoftware"字符的mydeb.log文件
- 卸載deb包:
$ dpkg -r mysoftware # 這里要卸載的包名為control文件Package字段所定義的 mysoftware。 # 將/boot目錄mysoftware刪除后,執行posrm, # postrm腳本將/home目錄下的mydeb.log文件刪除
- 查看deb包是否安裝:
$ dpkg -s mysoftware # 這里要卸載的包名為control文件Package字段所定義的 mysoftware
- 查看deb包文件內容:
$ dpkg -c mydeb.deb
- 查看當前目錄某個deb包的信息:
$ dpkg --info mydeb.deb
- 解壓文件
https://blog.packagecloud.io/eng/2015/10/13/inspect-extract-contents-debian-packages/
- 解壓deb包中所要安裝的文件
$ dpkg -X mydeb.deb mydeb # 第一個參數為所要解壓的deb包,這里為 mydeb.deb
# 第二個參數為將deb包解壓到指定的目錄,這里為 mydeb
- 解壓deb包中DEBIAN目錄下的文件(至少包含control文件)
$ dpkg -e mydeb.deb mydeb/DEBIAN # 第一個參數為所要解壓的deb包,
# 這里為 mydeb.deb
# 第二個參數為將deb包解壓到指定的目錄,
# 這里為 mydeb/DEBIAN