专栏算法工具链J6上基于DEB工具实现包管理

J6上基于DEB工具实现包管理

狗子别怕2024-09-20
96
0

1. 引言

在开发、调测过程中,开发人员需要将系统软件、应用软件部署到Soc板端,以用于运行调试。传统的部署方式是通过解压复制或者调用部署脚本。这样的部署方式需要有着方式不统一、维护投入大的缺点。
在linux系统上,大多采用包管理的方式管理软件包,常见的包管理方式如上。相比于部署脚本的方式,使用统一的包管理工具有规范和优化软件包的发布、管理流程,减少维护工作量、可溯源性高的优点,适合多版本、多种类软件包的场景。
在J6上,底软支持基于DEB的包管理方式,支持通过apt、dpkg的方式安装软件包。本文将讲解基于DEB工具的包管理方式,并以管理Boyan.deb软件包为例,展示包的构建、在J6上的部署等内容

2. Deb软件包原理介绍

.deb 是 Debian 和基于 Debian 系统(如 Ubuntu)使用的软件包格式,它包含软件及其安装信息。它的主要作用是简化软件的分发和安装,即用于板端软件包部署。

2.1 deb包的结构

.deb 包中主要包括 可执行程序、控制文件两大部分。一个常见的 .deb 包的目录结构如下。可执行程序部分是需要安装在板端的程序内容,如下的data.tar.gz路径;控制文件是脚本集合,用于辅助软件包的安装、卸载操作,如下的control.tar.gz路径。

2.2 deb包的安装原理

.deb 包的安装流程主要依赖 deb包管理工具 和 辅助安装脚本。deb包安装工具负责解压、复制、部署;辅助安装脚本负责安装前后的定制化操作。整个安装流程可以总结为以下7步:

  1. 解压软件包:

    • dpkg 首先会解压 .deb 包的内容到一个临时目录。.deb 文件实际上是一个包含多个文件的归档,主要包括:

      • control.tar.gz:包含控制文件(如 control、postinst、prerm 等)。

      • data.tar.gz 或 data.tar.xz:包含实际的安装文件。

      • debian-binary:标识该包使用的 dpkg 版本。

  2. 检查控制文件:

    • dpkg 读取并解析 control 文件,该文件包含了包的元数据(如包名、版本、依赖关系等)。

  3. 执行预装脚本(preinst):

    • 如果存在 preinst 脚本,dpkg 会在正式安装文件之前执行该脚本。这个脚本通常用于在安装之前执行某些准备工作。

  4. 解压文件到目标目录:

    • dpkg 将 data.tar.* 解压到系统的根目录(/),覆盖或新建文件和目录。

  5. 设置文件权限和所有权:

    • 解压后,dpkg 会根据包中的元数据设置文件的权限和所有权。

  6. 执行配置脚本(postinst):

    • dpkg 接下来会执行 postinst 脚本。这个脚本通常用于执行安装后的配置工作,例如启动服务、注册系统组件等。

  7. 记录包信息:

    • dpkg 会在 /var/lib/dpkg/status 文件中记录已安装包的信息,方便系统和用户查询包的状态。

2.3 deb包的卸载原理

.deb 包的卸载流程原理同安装流程原理。卸载流程也主要依赖 deb包管理工具 和 辅助安装脚本。deb包安装工具负责删除;辅助卸载脚本负责卸载前后的定制化操作。整个卸载流程可以总结为以下4步:

  1. 执行预卸载脚本(prerm):

    • 如果存在 prerm 脚本,dpkg 会在移除文件之前执行该脚本。这个脚本通常用于停止服务、解除系统注册等。

  2. 删除文件:

    • dpkg 会删除安装包中包含的文件和目录。

  3. 执行后卸载脚本(postrm):

    • dpkg 会执行 postrm 脚本。这个脚本通常用于清理卸载后的遗留文件或重置系统配置等。

  4. 更新包信息:

    • dpkg 会更新 /var/lib/dpkg/status 文件,移除关于该包的记录。

3. Boyan软件包管理示例

以管理Boyan.deb软件包为例,本节将展示Boyan-runtime.deb软件包的构建、在J6上的安装部署。

3.1 Boyan.deb 包构建

Boyan.deb 包生成的核心步骤是两两步:一是控制文件的生成;二是软件包data的生成。将Boyan.deb包的生成接入到Boyan整包的编译构建流程中,其整体构建流程如下:

Description

在编译完成后,生成runtime_tmp_package目录,存放可执行程序、控制文件、辅助安装脚本等文件,用于构建Boyan_Runtime.deb软件包。最终,runtime_tmp_package目录的结构如下:

其中,可执行程序可直接从编译产出物拷贝,控制文件和辅助安装脚本则需要编写。
控制文件(Control文件)需要描述软件包的相关信息,必须包含包名、版本等必要信息。Boyan_Runtime.deb包的控制文件如下:

辅助安装脚本用于 停止服务进程、启动服务经常、构建执行脚本 等工作,各个辅助安装脚本的作用如下:

  • preinst(安装前脚本):停止em_service和boyan的相关服务

  • postinst(安装后脚本):创建em_service启动脚本

  • prerm(卸载前脚本):停止em_service和boyan的相关服务

  • postrm(卸载后脚本):删除em_service启动脚本

通过上述步骤,将产出物都按照目录结构放置在runtime_tmp_package目录下,再通过 dpkg 工具构建指令构建deb包即可,构建指令如下:

3.2 Boyan.deb 包部署

构建Boyan.deb包后,将软件包拷贝到J6板端,并通过dpkg命令安装软件包,安装指令如下:

安装日志如下:

安装后通过dpkg -l指令查询到包的安装状态、版本、架构等信息,显示如下。当安装新版本软件时,dpkg工具会通过版本比较、依赖检查等方式管理多版本包的升级和替换。

安装后查看/middleware分区下的文件安装情况:

如上,软件包完成安装,可启动软件正常运行。

算法工具链
征程6社区征文技术深度解析官方教程
评论0
0/1000