deb 打包、安装、卸载

    技术2022-07-11  82

    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 <stdio.h> 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, x11priority软件对于系统的重要程度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用了记录软件标识,版本号,平台,依赖信息等数据preinstpre-installation,在解包前运行的脚本postinstpost-installation,在解包后运行的脚本prermpre-removal,卸载时,在删除文件之前运行的脚本postrmpost-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 脚本

    Processed: 0.011, SQL: 9