[deb]制作deb包


轉自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名不變

AttentionDeb包的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):

  1. Create a temporary directory, e.g. "~/godpackage" and cd into it
  2. Extract each .deb file using dpkg -x filename.deb .
  3. Extract the control, postrm, ..., files using dpkg --control filename.deb tmpdeb. A new directory will be created, named tmpdeb. 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
  4. Go away from the directory: cd ..
  5. 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


免責聲明!

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



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