当前位置: 首页 > news >正文

【HD-RK3576-PI】Linux制作deb包的方法

1.什么是deb包 ?

        DEB包是Debian及其衍生Linux发行版(如Ubuntu、Linux Mint等)使用的软件包格式。DEB包主要用于简化软件的安装、更新和卸载过程。它实际上是一个归档文件,通常包含了两个主要部分:

  1. 数据压缩包:包含软件实际的可执行文件、库文件、文档、图标等。
  2. 控制信息:包含软件包的元数据,例如软件包名称、版本号、依赖关系、维护者信息以及安装和卸载脚本等。

        可以使用命令dpkg -l来查看系统以及安装了那些deb包

2.制作deb包

        安装工具与依赖库

sudo apt-get install build-essential debhelper \
    make autoconf automake dpkg-dev fakeroot pbuilder gnupg

        创建以下目录结构

        在test_deb目录下创建DEBIAN及opt/test_deb目录,DEBIAN目录下包含控制信息文件, 而在opt/test_deb目录下创建hello_deb.sh文件则表示我们需要将test_deb.sh文件安装到 linux系统的opt/test_deb目录下。

        然后分别给予postinst、postrm、test_deb.sh文件可执行权限,postinst和postrm的权限必须>=0555且<=0775。

test_deb/DEBIAN/control

Package: test-deb
Version: 1.0.0
Section: free
Priority: optional
Essential: no
Architecture: arm64
Maintainer: embedfire <embedfire@embedfire.com>
Provides: test_deb
Description: deb test

        注意:control文件的末尾需添加一个空行,否则会报错“缺失结尾的换行符”

test_deb/DEBIAN/postinst

#! /bin/bash

if [ "$1" = "upgrade" ] || [ "$1" = "install" ];then
    echo "test_deb installing"
fi

        当安装了该deb包以后,系统会默认执行postinst脚本, 通常我们利用该脚本来搭建一些为软件执行的环境(如创建目录、修改权限等), 值得注意的是该文件需具有可执行权限。

test_deb/opt/test_deb/test_deb.sh

#! /bin/bash

echo test deb ok!

        脚本仅仅是打印信息,用户可自行设置需要执行的程序。

        执行下面命令构建软件包

sudo dpkg-deb -b ../test_deb ../test_deb_1.0.0_arm64.deb

        其中dpkg-deb是构建deb包命令,-b参数表示要构建一个deb包, ../hello_deb参数表示要构建deb包原材料的路径, ../test_deb_1.0.0_arm64.deb参数表示将该deb包构建在当前目录的上级目录中, 一般我们构建deb包的名字都会遵循这么一个原则, 其命名方式为:软件名称+软件版本号+该软件所支持的处理器架构, 如软件名为test_deb,版本号为1.0.0,所支持的处理器架构为arm64。

        制作好之后可以查看是否制作成功

        查看deb信息

根据已有的deb包修改内容

        首先安装工具和依赖库

sudo apt-get install build-essential debhelper make autoconf automake dpkg-dev fakeroot pbuilder gnupg

        新建一个update_deb目录,使用 dpkg -X 命令将deb包解压到update_deb目录中。

       进入update_deb目录下可看到并没DEBIAN相关目录,在update_deb目录下使用 dpkg -e 解压出控制文件相关信息。

       此时即可对deb包进行修改,比如在test_deb.sh里添加一句打印消息

       修改DEBIAN/control下的版本信息为1.0.1

     以重新打包应用程序并安装了。

相关文章:

  • STM32 HAL库之GPIO示例代码
  • YSlow使用指南
  • FreeRTOS使任务处于阻塞态的API
  • jvm内存如何调优
  • UWB双通道隧道人员定位方案
  • KWDB创作者计划—KWDB:国产分布式多模数据库的创新实践
  • java爬虫案例
  • JAVA SE 自我总结
  • React useEffect
  • 虚幻引擎5-Unreal Engine笔记之“将MyStudent变量设置为一个BP_Student的实例”这句话如何理解?
  • 双数之和+三数之和+四数之和
  • CyclicBarrier 基本用法
  • 【JS进阶】对象解构与数组解构
  • 基于3A4000及CentOS的银河麒麟V10离线源码编译安装VLC
  • Java八股文背诵 第四天JVM
  • BC3 有容乃大(sizeof关键字,sizeof(long long) >= sizeof(long) >= sizeof(int)
  • Spring 中的 @Cacheable 缓存注解
  • Hook_Unfinished
  • 【含文档+PPT+源码】基于微信小程序的学校体育馆操场预约系统的设计与实现
  • python的web框架flask(hello,world版)
  • 做响应式网站的菜单/朝阳seo排名
  • 国际转运网站建设/大连企业网站建站模板
  • 做任务挣钱的网站聚/广州网站优化步骤
  • 流行的企业网站推广/网站优化师
  • 怎么做网站优化推广/html网页制作模板代码
  • 创业网站建设政策/app推广软文范文