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

香橙派3B学习笔记14:deb 打包程序_解包前后脚本运行

本文学习如何用deb打包的方式打包自己需要调用系统库的程序。

然后实现deb解包前后的脚本运行。

目录

承接上文: 

删除上文遗留的.so文件:

终止ledlight进程:

目标解释:

创建项目结构:

创建control文件:

创建postinst文件:

 创建preinst文件:

构建Debian包:

结果展示:

 参考文章:


承接上文: 

 打包的程序代码结构、DEB的介绍、安装必要的DEB工具,都承接上文内容:

香橙派3B学习笔记13:deb 打包调用系统库与.so动态链接库的程序(部分失败)-CSDN博客

删除上文遗留的.so文件:

 承接上文的环境,libGPIO_LED.so文件是被手动复制到/usr/local/lib/ 目录的,这里先删去,以测试脚本能否将我的软件包中的 libGPIO_LED.so文件复制到 /usr/local/lib/使得程序能够正常运行。

cd /usr/local/lib/
sudo rm libGPIO_LED.so

 这里尝试运行 ./ledlight 的程序文件,会提示缺失 .so 了:

终止ledlight进程:

这时候如果在删除.so之前,可能ledlight任有后台在运行,如下彻底终止它进程:

ps aux | grep ledlight


sudo kill -15 2176 2178

目标解释:

有俩个文件:

ledlight程序文件,libGPIO_LED.so的动态链接库文件

通过deb打包,要实现解包时自动处理:

        1.将ledlight程序文件复制到/home/orangepi/APP

        2.将libGPIO_LED.so复制到 /usr/local/lib/

最终保证程序能够正常运行

创建项目结构:

/home/orangepi/ledlight-package/  ← 打包根目录
├── DEBIAN/                                ← 控制目录    (必须大写)
│   ├── control                              ← 包元数据文件
│   ├── postinst                             ← 安装后脚本(需可执行 权限755)
│   └── preinst                              ← 安装前脚本(需可执行 权限755)
├── ledlight                                   ← 主程序文件(权限755)
└── libGPIO_LED.so                    ← 库文件       (权限644)

(其中的cp复制文件操作示例,需要先cd到对应目录!)

创建APP目录:

cd /home/orangepi
mkdir APP
 

创建打包目录:

mkdir -p ledlight-package/DEBIAN

复制libGPIO_LED.so:

cp libGPIO_LED.so /home/orangepi/ledlight-package

chmod 644 /home/orangepi/ledlight-package/libGPIO_LED.so

复制程序:

cp ledlight /home/orangepi/ledlight-package

chmod 755 /home/orangepi/ledlight-package/ledlight

创建control文件:

在 DEBIAN 目录中创建 control 文件:

cd /home/orangepi/ledlight-package/DEBIAN/
nano control

Package: ledlight
Version: 1.0
Architecture: arm64
Maintainer: Your Name <your@email.com>
Description: LED控制程序安装到系统真实目录,非模拟目录

创建postinst文件:

nano postinst
 

#!/bin/sh
set -e# 获取包安装的临时目录
TEMP_DIR=$(dpkg -L ledlight | grep -m1 '^/.' | xargs dirname)# 安装文件
install -Dm755 "$TEMP_DIR/ledlight" "/home/orangepi/APP/ledlight"
install -Dm644 "$TEMP_DIR/libGPIO_LED.so" "/usr/local/lib/libGPIO_LED.so"# 更新库缓存
ldconfigexit 0
EOF

chmod 755 postinst
chmod 755 /home/orangepi/ledlight-package/DEBIAN/postinst

 创建preinst文件:

nano preinst

#!/bin/sh
set -e# 确保目标目录存在
mkdir -p /home/orangepi/APP /usr/local/libexit 0
EOF


chmod 755 preinst
chmod 755 /home/orangepi/ledlight-package/DEBIAN/preinst

构建Debian包:

cd /home/orangepi

dpkg-deb --build ledlight-package

结果展示:

sudo dpkg -i ledlight-package.deb

解包成功:

libGPIO_LED.so 成功被复制到usr/local/lib:

ledlight 成功被复制到 home/orangepi/APP :

运行成功:

cd /home/orangepi/APP
sudo ./ledlight

 参考文章:

深入了解 .deb 软件包:Linux 下的包管理基础-CSDN博客

http://www.dtcms.com/a/264112.html

相关文章:

  • 折线图多数据处理
  • redux基本概念介绍 与 更新方式
  • 【网工|知识升华版|理论】ARQ机制|CSMA/CD协议
  • NetSuite 中如何在已关账期间内Unapply Customer Payment?
  • 数据结构day6——内核链表
  • 手机屏色斑缺陷修复及相关液晶线路激光修复原理
  • 一文讲清楚React合成事件机制和this的绑定问题
  • Pycharm命令行能运行,但绿色三角报错?
  • 51单片机制作万年历
  • java web2(黑马)
  • [Python] -基础篇7-新手常见Python语法错误及解决方案
  • 论文阅读:BLIPv1 2022.2
  • Java 大视界 -- Java 大数据在智能交通共享单车智能调度与停放管理中的应用(329)
  • 基于Pandas和FineBI的昆明职位数据分析与可视化实现(四)- 职位数据可视化(FineBI)
  • 解决leetcode第3597题分割字符串
  • 【一起来学AI大模型】模型上下文协议(MCP)详解:背景、架构与应用
  • 从0开始学习R语言--Day35--核密度动态估计
  • Node.js-path模块
  • 12【进程间通信——管道】
  • 记本好书:矩阵力量:线性代数全彩图解+微课+Python编程
  • 【Go-策略模式】告别if/else hell,拥抱 Go 语言策略模式
  • js基础知识
  • 【组合数学】P11362 [NOIP2024] 遗失的赋值|普及+
  • 事务隔离级别深度解析:机制、语法与实战指
  • 力扣74 搜索二维矩阵
  • [密码学实战]深入解析ASN.1和DER编码:以数字签名值为例(三十一)
  • UniApp完全支持快应用QUICKAPP-以及如何采用 Uni 模式开发发行快应用优雅草卓伊凡
  • 从 Copilot 到 通用 Agent : 大厂在 AI Coding 上的应用和挑战
  • 华为云开始了“开发者空间 AI Agent 开发”活动
  • Anthropic 开源 LLM“电路追踪器”:首次可视化语言模型的“推理路径”!