Linux之利用dpkg制作deb包

一、deb包的文件结构:

deb包结构分为:DEBIAN目录 和 软件具体安装目录(如etc, usr, opt, tmp等,之后 deb 的安装会根据这个目录把文件放到到对应的目录,如 etc/file 会放到你 linux 中的 /etc 下 )。

在 DEBIAN 目录中至少有 control 文件,还可能有 postinst(postinstallation)、postrm(postremove)、preinst(preinstallation)、prerm(preremove)、copyright (版权)、changlog (修订记录)和 conffiles 等。

(1)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: xxx 
Provides: mysoftware
Description: just for test
                    (此处必须空一行再结束)

  

(2)postinst文件:包含了软件在进行正常目录文件拷贝到系统后,所需要执行的配置工作。
(3)prerm文件:软件卸载前需要执行的脚本。
(4)postrm文件:软件卸载后需要执行的脚本。

 

二、制作deb包过程:

(1)制作如下目录及文件(可安装 mysoftware 到 /boot)

所有目录及文件:

mydeb
|----DEBIAN
       |-------control
       |-------postinst
       |-------postrm
|----boot
       |----- mysoftware

在任意目录下(假设在 home 目录)创建如上所示的目录及文件:

$ mkdir -p /home/mydeb                         # 在该目录下存放生成deb包的文件以及目录
$ mkdir -p /home/mydeb/DEBIAN                  # 目录名必须大写
$ mkdir -p /home/mydeb/boot                    # 将文件安装到/boot目录下
$ touch /home/mydeb/DEBIAN/control             # 必须要有该文件
$ 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        (对软件的描述)
          (此处必须空一行再结束)

postinst文件内容( 软件安装完后,执行该Shell脚本,一般用来配置软件执行环境,必须以“#!/bin/sh”为首行,然后给该脚本赋予可执行权限:chmod +x postinst):

# !/bin/sh
echo "Install mydeb.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 包的制作。

 

三、deb 包其他操作

(1)安装deb包:

$ dpkg -i mydeb.deb      # 将imysoftware复制到/boot目录下后,执行postinst
                         # postinst脚本在/home目录下生成一个含有"mysoftware"字符的mydeb.log文件

(2)卸载deb包:

$ dpkg -r mysoftware    # 这里要卸载的包名为control文件Package字段所定义的 mysoftware。
                        # 将/boot目录mysoftware删除后,执行posrm,
                        # postrm脚本将/home目录下的mydeb.log文件删除

(3)查看deb包是否安装:

$ dpkg -s mysoftware      # 这里要卸载的包名为control文件Package字段所定义的 mysoftware

(4)查看deb包文件内容:

$ dpkg -c mydeb.deb

(5)查看当前目录某个deb包的信息:

$ dpkg --info mydeb.deb

(6)解压deb包中所要安装的文件:

$ dpkg -X mydeb.deb mydeb    # 第一个参数为所要解压的deb包,这里为 mydeb.deb
                             # 第二个参数为将deb包解压到指定的目录,这里为 mydeb

(7)解压deb包中DEBIAN目录下的文件(至少包含control文件):

$ dpkg -e mydeb.deb mydeb/DEBIAN    # 第一个参数为所要解压的deb包,
                                    # 这里为 mydeb.deb
                                    # 第二个参数为将deb包解压到指定的目录,
                                    # 这里为 mydeb/DEBIAN

(8)列出系统中所有已安装的软件包信息。结合grep,可以过滤出自己想要的内容。如:

$ dpkg -l | grep mydeb

(9)显示一个包安装到系统里面的文件目录信息:

$ dpkg -L mydeb

 

你可能感兴趣的:(Linux)