deb 打包、安装、卸载

deb 打包、安装、卸载

deb 格式是 Debian 系统(包含 Debian 和 Ubuntu )专属安装包格式。
dpkg 是 Debian下的包管理工具,用来执行软件包的打包、解包、安装、卸载等命令。
运行环境:Debian、Ubuntu,国产操作系统 UOS、银河麒麟等。
本文将介绍以下几点内容:
作为入门,首先以 hello world 程序为例,介绍如何将其可执行文件打包、安装到用户指定目录、软件卸载。之后介绍 Debian 的 preinst、postinst、prerm、postrm 脚本,这些是软件包安装前后自动运行的可执行脚本。最后对 deb 包管理工具 dpkg 的常用命令进行总结。

1、如何将可执行文件 helloworld 打包、安装、卸载

程序语言的入门都是 hello world 程序,下面就以此开始,介绍如何将其生成的可执行文件进行打包、安装到指定目录、卸载。
C语言 helloworld.c 代码如下:

#include 
int main(void)
{
	printf("Hello, world!\n");
	return 0;
}

将代码编译生成可执行文件 helloworld。
gcc helloworld.c -o helloworld

创建文件夹 MyFirstDeb,并在该文件夹下创建子文件夹 DEBIAN、创建指定的安装目录。DEBIAN目录下存放的是控制信息control、以及软件包安装前后自动运行的可执行脚本preinst、postinst、prerm、postrm(后续介绍)。其他目录为软件具体的安装路径,而在安装过程中,包里的数据会被直接解压到根目录(即/),因此在打包之前需要根据文件所在位置设置好相应的文件/目录树。

此时的目录树为:
|-- MyFirstDeb
  |-- DEBIAN
     |-- control
  |-- opt
     |-- helloworld

control文件记录待发布的软件包名,版本号,平台,维护者、描述信息等数据,内容为:

package: MyFirstDeb
version: 1.0.0
architecture: arm64
maintainer: WonderThink
description: This is my first deb package.

control字段信息说明

字段 用途 例子/其他
package 程序名称 中间不能有空格
version 软件版本
description 程序说明
section 软件类别 utils, net, mail, text, x11
priority 软件对于系统的重要程度 required, standard, optional, extra等
essential 是否是系统最基本的软件包 yes/no,若为yes,则不允许卸载(除非强制性卸载)
architecture 软件所支持的平台架构 i386, arm64, amd64, m68k, sparc, alpha, powerpc等
maintainer 维护者信息
source 软件包的源代码名称
depends 软件所依赖的其他软件包和库文件 若依赖多个软件包和库文件,采用逗号隔开
pre-depends 软件安装前必须安装、配置依赖性的软件包和库文件 常用于必须的预运行脚本需求
recommends 推荐安装的其他软件包和库文件
suggests 建议安装的其他软件包和库文件

以上完成了打包前准备工作,接下来执行打包、安装、卸载操作。

在 MyFirstDeb 同级目录下进行打包,规范的包名格式为(包名、版本号、平台,中间以下划线连接)package_version_architecture.deb,dpkg打包命令为:
dpkg -b MyFirstDeb/ MyFirstDeb_1.0.0_arm64.deb

MyFirstDeb_1.0.0_arm64.deb 的安装
dpkg -i MyFirstDeb_1.0.0_arm64.deb
安装后在 /opt 目录下有了 helloworld 可执行文件。

卸载 MyFirstDeb 包(dpkg对包名的大小写不敏感):
dpkg -r MyFirstDeb

通过上述操作就简单完成了 helloworld 可执行文件的打包、安装到指定目录、卸载。接下来介绍 Debian 的软件包安装前后自动运行的可执行脚本。

2、 Debian 的 preinst、postinst、prerm、postrm 脚本

DEBIAN 目录下除了 control 文件,还可以有 preinst、postinst、prerm、postrm 脚本,这些是软件包安装前后自动运行的可执行shell脚本,统称为控制文件。

控制文件 描述
control 用了记录软件标识,版本号,平台,依赖信息等数据
preinst pre-installation,在解包前运行的脚本
postinst post-installation,在解包后运行的脚本
prerm pre-removal,卸载时,在删除文件之前运行的脚本
postrm post-removal,在删除文件之后运行的脚本

preinst
Debian软件包(".deb")解压前执行的脚本,为正在被升级的包停止相关服务,直到升级或安装完成。

postinst
主要完成软件包(".deb")安装完成后所需的配置工作。通常,postinst 脚本要求用户输入,和(或) 警告用户如果接受默认值,应该记得按要求返回重新配置这个软件。 一个软件包安装或升级完成后,postinst 脚本驱动命令,启动或重起相应的服务。

prerm
停止一个软件包的相关进程,要卸载软件包的相关文件前执行。

postrm
修改相关文件或连接,和(或)卸载软件包所创建的文件。

3、dpkg 命令

打包:

dpkg -b MyFirstDeb/ xxx.deb    # build,将文件夹MyFirstDeb打deb包

安装与卸载:

dpkg -i xxx.deb   # install,安装deb软件包
dpkg -r xxx       # remove,卸载软件包

解包:

dpkg -X xxx.deb extract/         #提取包的内容到文件夹 extract/ 下
dpkg -e xxx.deb extract/DEBIAN   #提取的控制信息到文件夹 extract/DEBIAN 下

查看deb软件包信息:

dpkg -I xxx.deb   # info,查看deb软件包的控制信息
dpkg -c xxx.deb   # contents,查看deb软件包中包含的文件结构

查看已安装的deb软件包信息:

dpkg -l xxx   # list,查看xxx软件包的信息
dpkg -L xxx   # listfile,列出xxx软件包安装到系统中的文件
dpkg -s xxx   # status,查看xxx软件包的控制信息

参考文献

[1] Ubuntu中deb包详解及打包教程
[2] linux的程序打包deb
[3] Debian 的 preinst, postinst, prerm, 和 postrm 脚本

你可能感兴趣的:(软件发布,linux,ubuntu)