https://www.cnblogs.com/Genesis-007/p/5219960.html
dpkg制作deb包
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文件完整示例:
1
2
3
4
5
6
7
8
9
10
11
12
|
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文件:軟件卸載后需要執行的腳本。
制作deb包過程:
1. 制作如下目錄及文件
所有目錄及文件:
mydeb
|----DEBIAN
|-------control
|-------postinst
|-------postrm
|----boot
|----- mysoftware
在任意目錄下創建如上所示的目錄及文件
1
2
3
4
5
6
7
|
$
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文件內容:
1
2
3
4
5
6
7
|
Package: mysoftware (軟件名稱,中間不能有空格)
Version: 1 (軟件版本)
Section:
free
(軟件類別)
Prioritt: optional (軟件對於系統的重要性)
Architecture: amd64 (軟件所支持的平台架構)
Maintainer: xxx <> (打包人和聯系方式)
Description: mydeb (對軟件的描述)<br> (此處必須空一行再結束)
|
postinst文件內容( 軟件安裝完后,執行該Shell腳本,一般用來配置軟件執行環境,必須以“#!/bin/sh”為首行,然后給該腳本賦予可執行權限:chmod +x postinst):
1
2
|
# !/bin/sh
echo
"my deb"
>
/home/mydeb
.log
|
postrm文件內容( 軟件卸載后,執行該Shell腳本,一般作為清理收尾工作,必須以“#!/bin/sh”為首行,然后給該腳本賦予可執行權限:chmod +x postrm):
1
2
|
# !/bin/sh
rm
-rf
/home/mydeb
.log
|
2. 完成第一步的制作目錄及文件后可以給做好的mydeb目錄進行打包成.deb包
1
2
|
$ dpkg -b mydeb mydeb.deb
#第一個參數為將要打包的目錄名,
#第二個參數為生成包的名稱
|
現在完成了deb包的制作。
安裝deb包:
1
2
|
$ dpkg -i mydeb.deb
# 將imysoftware復制到/boot目錄下后,執行postinst
# postinst腳本在/home目錄下生成一個含有"mysoftware"字符的mydeb.log文件
|
卸載deb包:
1
2
3
|
$ dpkg -r mysoftware
# 這里要卸載的包名為control文件Package字段所定義的 mysoftware。
# 將/boot目錄mysoftware刪除后,執行posrm,
# postrm腳本將/home目錄下的mydeb.log文件刪除
|
查看deb包是否安裝:
1
|
$ dpkg -s mysoftware
# 這里要卸載的包名為control文件Package字段所定義的 mysoftware
|
查看deb包文件內容:
1
|
$ dpkg -c mydeb.deb
|
查看當前目錄某個deb包的信息:
1
|
$ dpkg --info mydeb.deb
|
解壓deb包中所要安裝的文件
1
2
|
$ dpkg -X mydeb.deb mydeb
# 第一個參數為所要解壓的deb包,這里為 mydeb.deb
# 第二個參數為將deb包解壓到指定的目錄,這里為 mydeb
|
解壓deb包中DEBIAN目錄下的文件(至少包含control文件)
1
2
3
4
|
$ dpkg -e mydeb.deb mydeb
/DEBIAN
# 第一個參數為所要解壓的deb包,
# 這里為 mydeb.deb
# 第二個參數為將deb包解壓到指定的目錄,
# 這里為 mydeb/DEBIAN
|