使用Linux dpkg 打包


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

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM