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​