Linux之DEB打包指南

使用的Linux系统

  • Debian
  • Ubuntu

打包流程说明

1. 工作空间

首先创建一个目录作为工作空间,目录名可以使用软件名,deb包所有文件都将会存在这个目录下,这个目录就是安装时的根目录/。一个工作空间的目录树如下:

1
2
3
4
5
6
7
8
9
 PackageDIR
├─DEBIAN
├─opt
│ └─kushidou-touchscreen
│ └─desktops
├─usr
│ ├─bin
│ └─share
└─var

其中,DEBIAN目录放置了安装包的信息、配置、控制文件等,其他文件都放在目录的相对位置里,安装时就会根据这些相对位置,把程序与文件直接拷贝到对应的地方。

2. DEBIAN文件夹

DEBIAN目录下有一个control文件和至多四个脚本文件。

1
2
3
4
5
6
7
8
/DEBIAN/
/DEBIAN/control
/DEBIAN/preinit(可选)
/DEBIAN/postinit(可选)
/DEBIAN/prerm(可选)
/DEBIAN/postrm(可选)
/opt/(可选)
/usr/lib(可选)

control 文件,位于DEBIAN文件夹中,主要包含deb包的安装描述信息
preinit 文件(可选),位于DEBIAN文件夹中,安装处理文件,在解包前执行
postinit 文件(可选),位于DEBIAN文件夹中,安装处理文件,在解包后执行
prerm 文件(可选),位于DEBIAN文件夹中,卸载处理文件,在删除关联文件前执行
postrm 文件(可选),位于DEBIAN文件夹中,卸载处理文件,在删除关联文件后执行

3. control文件

control文件用于写入安装包的识别信息,包括包名、版本、作者、简介等。没有严格的顺序要求。表格中列出常用的关键字和作用,图片展示了一个软件包的control信息。control文件最后需要添加一个空行。

NAME Description
Package 软件包的名称, dpkg -l 列出的名字
Version 版本号-修订号
Section 软件类型,比如mail, test, x11等
Priority 优先级/重要性,比如optional 可选的
Architecture 软件架构,比如x86, arm64
Depends 依赖环境,用 , 隔开,用(>=< )指定版本号
Suggests 推荐安装,指非必要依赖,可以提供更多功能
Maintainer 作者(软件维护人员) <邮箱或者其他联系方式>
Descritprion 简介,可以换行书写

4. 打包命令

所有文件配置完成后,进入工作空间上级目录,执行指令

1
$ dpkg -b ./PackageDIR packagename.deb

打包示例

1. 创建deb包的文件夹

在制作deb包时,该文件夹是不会打包的,而是会把该文件夹当作是系统的根目录,因此也可以称该文件夹为根文件夹或根目录,里面的所有文件和文件夹(除DEBIAN外)在安装时都会按照其在根文件夹的相对路径安装到Linux系统中

1
$ mkdir myApp

2. 在deb包根路径中创建DEBIAN文件夹

1
2
$ cd myApp
$ mkdir DEBIAN

3. 创建control

1
2
$ cd DEBIAN
$ touch vi control

control文件的内容

1
2
3
4
5
6
7
Package: AppName
Version: 1.0
Section: Application
Priority: optional
Architecture: armhf
Maintainer: -
Description: the application description.

4. 创建 preinit、postinit、prerm、postrm 等文件

根据实际需要创建相应的文件,在文件中编写需要执行的脚本,例如:

1
2
3
4
5
6
7
8
#创建postinit文件
$ touch postinit

#postinit的内容
$ sudo ldconfig

#由于这几个文件是需要在安装或卸载时执行的,因此需要给这几个文件加上可执行的权限
$ sudo chmod a+x postinit

5. 复制关联文件到deb包中

将deb包根目录当作是Linux系统的根目录,将需要安装的程序或文件按照指定路径存放。

  • 示例1

    • 可执行程序 demo 需要安装到Linux系统的 /opt/ 中,则在deb包根目录中创建一个 opt 文件夹,并把 demo 复制到该文件夹中。
  • 示例2

    • 调用库 libmyapp.so 需要安装到Linux系统的 /usr/lib 中,则在deb包根目录中创建一个 usr 文件夹,然后在 usr 文件夹中再创建 lib 文件夹,最后将 libmyapp.so 文件复制到 /usr/lib 中

6. 打包生成deb包

切换当前目录到deb包文件夹所在的目录,执行打包的命令

1
2
#sudo dpkg -b 打包的目录 deb安装包文件名称
$ dpkg -b ./myApp myApp.deb

关于dpkg命令的使用

  1. 安装

    1
    2
    # sudo dpkg -i deb文件名
    $ sudo dpkg -i slave-1.0.0.deb
  2. 卸载安装包

    1
    2
    # sudo dpkg -P 安装包名称
    $ sudo dpkg -P slave
  3. 查看程序安装包的信息

    1
    2
    # sudo dpkg -s 安装包名称
    $ sudo dpkg -s slave
  4. 编译打包deb文件

    1
    2
    # sudo dpkg -b 打包的目录 deb安装包文件名称
    $ sudo dpkg -b slave-builder slave-1.0.0.deb

参考