更多精彩内容 |
---|
👉内容导航 👈 |
👉Qt开发经验 👈 |
1 概述
.deb
包是Debian软件包格式,主要用于Debian及其衍生发行版(如Ubuntu)中。deb包实际是一个压缩包。linux下deb包主要分为源代码包和二进制包;
- Debian源包包含用于构造一个Debian源包的源代码或者更多的二进制包。
- 二进制包里面包含的就是二进制文件,例如可执行程序、二进制库文件等;
本文主要讲如何制作二进制包,将Qt编译生成的可执行程序制作为deb安装包。
Qt编译生成的可执行程序打包依赖库看这里。
演示环境:
环境 | 版本 |
---|---|
系统 | ubuntu22.04 |
Qt | Qt5.14.2 |
2 deb二进制包结构
制作deb二进制包的文件夹主要由两部分组成:
- 软件包元信息:如控制文件,软件包的名称和版本,以及在安装/卸载之前、之中或之后使用的脚本。
- 软件包数据:包含软件包中所有要解压的文件,包括可执行文件、库和文档等。
mhf@mhf-virtual-machine:~/Code/bin64$ tree
.
├── DEBIAN // 元信息
│ └── control // 控制文件
├── opt // 软件包数据(软件安装后的路径,可以有多个)
│ └── untitled1 // 安装deb后会将untitled1文件夹安装到系统的/opt路径下
│ ├── AppRun -> untitled1
│ ├── default.desktop
│ ├── default.png
│ ├── doc
│ │ ├── libcap2-bin
│ │ │ └── copyright
│ │ ├── libdbus-1-3
│ │ │ └── copyright
│ │ ├── libkeyutils1
│ │ │ └── copyright
│ │ ├── liblzma5
│ │ │ └── copyright
│ │ └── libpcre3
│ │ └── copyright
│ ├── lib
- DEBIAN文件夹为元数据存放文件夹,文件夹中最少要包含一个control文件,可以选择增加维护脚本文件,例如
preinst
、postinst
、prerm
、postrm
; - 如果想将程序安装到/opt路径,就创建一个opt文件夹,将需要安装到系统/opt路径下的文件放到opt文件夹中。如果想将程序安装到系统的/usr路径,就创建一个usr文件夹,在usr文件夹中添加需要安装的文件。
例如: vim_8.2.3995-1ubuntu2.21_amd64.deb包解压后如下所示:
3 控制文件
DEBIAN/control
控制文件字段如下所示:包含必须的字段就可以构建deb包。
字段 | 说明 | 必要性 |
---|---|---|
Package | 二进制包的名称。必须以字母或数字开头 | 必须 |
Source | 源码包的名称 | |
Version | 软件版本 | 必须 |
Section | 包被分类到的应用程序区域。 | 推荐 |
Priority | 优先级,required、important、standard、optional、extra | 推荐 |
Architecture | 软件架构,amd64/x86-64、i386、armhf等 | 必须 |
Essential | 这是一个布尔字段,可能只出现在二进制包的控制文件或源包模板控制文件的二进制包节中。 | |
Depends | 声明安装依赖 | |
Installed-Size | 给出了安装指定包所需的磁盘空间总量的估计值 | |
Maintainer | 软件包维护者的姓名和电子邮件地址 | 必须 |
Description | 安装包描述信息,换行后以一个空格开头 | 必须 |
Homepage | 此软件包的网站URL | |
Built-Using | 软件包构建工具 |
- 示例:如下所示为
vim_8.2.3995-1ubuntu2.21_amd64.deb
包的控制文件;
Package: vim
Version: 2:8.2.3995-1ubuntu2.21
Architecture: amd64
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Installed-Size: 3931
Depends: vim-common (= 2:8.2.3995-1ubuntu2.21), vim-runtime (= 2:8.2.3995-1ubuntu2.21), libacl1 (>= 2.2.23), libc6 (>= 2.34), libgpm2 (>= 1.20.7), libpython3.10 (>= 3.10.0), libselinux1 (>= 3.1~), libsodium23 (>= 1.0.14), libtinfo6 (>= 6)
Suggests: ctags, vim-doc, vim-scripts
Provides: editor
Section: editors
Priority: optional
Homepage: https://www.vim.org/
Description: Vi IMproved - enhanced vi editor
Vim is an almost compatible version of the UNIX editor Vi.
.
Many new features have been added: multi level undo, syntax
highlighting, command line history, on-line help, filename
completion, block operations, folding, Unicode support, etc.
.
This package contains a version of vim compiled with a rather
standard set of features. This package does not provide a GUI
version of Vim. See the other vim-* packages if you need more
(or less).
Original-Maintainer: Debian Vim Maintainers <team+vim@tracker.debian.org>
- 简单模板:
Package: hello
Version: 1.0.0
Priority: optional
Architecture: amd64
Installed-Size: 4096
Maintainer: 开发者名称
Description: 软件描述信息
4 维护脚本
DEBIAN文件夹为元数据存放文件夹,文件夹中最少要包含一个control文件,可以选择增加维护脚本文件,例如
preinst
、postinst
、prerm
、postrm
;可用于运行、升级、删除和清理垃圾文件等。维护脚本都是shell脚本,必须是可执行的,以
#!
开头;
- preinst:deb安装前执行;(例如:可用于安装依赖,创建环境)
- postinst:deb安装完成之后执行;(例如:安装完成之后自动运行程序)
- prerm:卸载之前执行;
- postrm:卸载之后执行;
- 示例:
vim_8.2.3995-1ubuntu2.21_amd64
的preinst脚本
#!/bin/sh
set -e
# Automatically added by dh_installdeb/13.6ubuntu1
dpkg-maintscript-helper symlink_to_dir /usr/share/doc/vim vim-common 2:8.0.1451-1\~ vim -- "$@"
# End automatically added section
5 制作deb安装包
- 准备好可运行的可执行程序及相关依赖库,例如Qt编译生成的程序并且打包完成依赖库;
- 如果我想将debPro文件夹下所有文件在安装时安装到/opt路径下,那就在debPro文件夹中创建opt、DEBIAN两个文件夹,然后在opt文件夹中创建一个hello文件夹;
- 将debPro文件夹下除了opt、DEBIAN两个文件夹外的内容复制到
./opt/hello
文件夹下; - 文件结构如下所示:
- 打开
control
文件,添加描述信息:
- 然后使用
dpkg -b ./ hello.deb
或者dpkg-deb -b ./ hello.deb
命令将./
文件夹下内容制作为hello.deb安装包;
- 制作完成后使用
dpkg -i hello.deb
命令安装验证;
!
- 使用
dpkg -l hello
查看安装后hello程序的信息;