本文学习如何用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.pswp.cn/bicheng/87105.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/87105.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/87105.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nanoGPT复现——prepare拆解(自己构建词表 VS tiktoken)

在nanoGPT的data文件夹有两个很相似的文件夹结构&#xff1a;shakespeare和shakespeare-char&#xff0c;这两种都是对shakespeare数据集的处理&#xff0c;但是shakespeare使用的是tiktoken对文字进行编码&#xff0c;另一个则是使用自己构建的词表 一、shakespeare-char&…

macos 安装 xcode

在 macOS 上安装 Xcode&#xff08;或者 Xcode Command Line Tools&#xff09;的方法如下&#xff1a; 1. 安装 Xcode Command Line Tools&#xff08;轻量级&#xff0c;满足大部分编译需求&#xff09; 终端命令&#xff1a; xcode-select --install会弹出安装提示&#x…

大学专业科普 | 云计算、大数据

大数据专业是近年来随着信息技术发展而兴起的热门学科&#xff0c;专注于从海量、多样化的数据中提取有价值信息&#xff0c;为各行业提供数据驱动的决策支持。 专业定义 大数据专业旨在培养掌握大数据采集、存储、管理、分析和应用等核心技术的人才。该专业融合了计算机科学…

本地文件自动提交到仓库

背景 将本地目录做一个存储仓库&#xff0c;将归档的文件放入其中。自动同步到远程仓库。 仓库配置 省略 配置密钥 用户可以 git pull \ git push \ git commit 自动 拉取、更新 脚本 文件名&#xff1a;autosave.sh #!/bin/zsh# 设置变量 LOCAL_DIR$1# 进入工作目录 cd "…

Ubuntu中控制用户存储空间配置步骤

目的&#xff0c;限制用户磁盘空间占用&#xff0c;例如给用户限制100-150G容量 1.安装磁盘配额工具 sudo apt-get install -y quota 2.备份并修改/etc/fstab文件&#xff0c;使能支持quota sudo cp /etc/fstab /etc/fstab.bak vim /etc/fstab #写入如下,usrjquotaaquota.u…

【网络】Linux 内核优化实战 - net.ipv4.tcp_rmem 和 net.core.rmem_default 关系

net.ipv4.tcp_rmem 和 net.core.rmem_default 都是 Linux 内核中控制网络接收缓冲区的参数,但它们的作用范围、优先级和使用场景存在明显区别。以下是详细对比: 核心区别 参数net.ipv4.tcp_rmemnet.core.rmem_default作用协议仅针对 TCP 协议针对 所有网络协议(TCP、UDP 等…

设计模式精讲 Day 14:命令模式(Command Pattern)

【设计模式精讲 Day 14】命令模式&#xff08;Command Pattern&#xff09; 文章内容 在“设计模式精讲”系列的第14天&#xff0c;我们来学习命令模式&#xff08;Command Pattern&#xff09;。命令模式是一种行为型设计模式&#xff0c;它将请求封装为对象&#xff0c;从而…

手机射频功放测试学习(二)——手机线性功放的静态电流和小信号(S-Parameter)测试

目录 一、概要 二、LPA的电流测试 1、LPA的泄漏电流测试 手动测试步骤如下: 自动化测试: 2、LPA的静态电流测试 手动测试步骤如下: 自动化测试: 三、LPA的S-Parameter测试 1、矢量网络分析仪校准 2、LPA的S参数手动测试步骤: 3、LPA的S参数自动测试步骤: 四…

基础算法合集-图论

本文将介绍数据结构图论部分中常见的算法 单源最短路径问题(用来计算一个点到其他所有顶点的最短路径) Dijkstra(n*n) 1. 初始化: 先找出从源点V0到各终点Vk的直达路径(V0,Vk), 即通过一条弧到达的路径 2. 选择: 从这些路径中找出一条长度最短的路径(V0,u) 3. 更新: 然后对其余…

vue-i18n 插件打包解析失效问题记录

vue-i18n 插件打包解析失效问题记录 开发环境中没有问题的&#xff0c;但打包发布之后就不行了&#xff0c;显示的就是模板字符串 // An highlighted block const messages {en: {step: {stepDesc1: Scan,stepDesc2: Analyze,stepDesc3: Result}},zh: {step: {stepDesc1: 扫描…

数据可视化 - 单子图

一、认识单子图 import matplotlib.pyplot as plt import numpy as np import pandas as pdplt.figure(num单子图, figsize(12, 8), facecolorw) # 中文字体 plt.rcParams[font.sans-serif] KaiTi # 负号显示 plt.rcParams[axes.unicode_minus] False# 2行&#xff0c;1列&a…

服务器上设置了代理之后,服务器可以访问外网,但是不能访问服务器本地。如何解决

你在服务器上设置了代理后&#xff0c;发现&#xff1a; 可以访问外网不能访问服务器本地地址&#xff08;如 localhost、127.0.0.1、内网IP&#xff09; 这是代理设置中常见的问题&#xff0c;尤其是当你设置了全局 HTTP/HTTPS 代理时。本地访问也会被强制走代理&#xff0c…

mysql启动报错:Can‘t connect to local MySQL server through socket

文章目录 一、报错内容二、解决方法 一、报错内容 在linux上启动mysql时报错 [rootlocalhost bin]# ./mysql -u root -p Enter password: ERROR 2002 (HY000): Cant connect to local MySQL server through socket /tmp/mysql.sock (2)执行以上命令后报错&#xff0c;并且也…

C# Avalonia 绑定模式 Mode 的区别,它们的应用场景

C# Avalonia 绑定模式 Mode 的区别&#xff0c;它们的应用场景 文章目录 1. **Default&#xff08;默认模式&#xff09;**2. **OneTime&#xff08;一次性绑定&#xff09;**3. **OneWay&#xff08;单向绑定&#xff09;**4. **TwoWay&#xff08;双向绑定&#xff09;**5. *…

【OpenGL学习】(七)纹理单元

【OpenGL学习】&#xff08;七&#xff09;纹理单元 OpenGL的纹理单元&#xff08;Texture Unit&#xff09;是GPU中用于管理和组织纹理资源的逻辑单元&#xff0c;它允许开发者在渲染过程中同时使用多个纹理&#xff0c;并通过采样器&#xff08;Sampler&#xff09;在着色器…

Ubuntu 下降 Linux Kernel 的版本备忘

此处以 ubuntu 22.04 为示例系统&#xff0c;来降低其 Linux kernel 的版本。 1. 降低 Linux kernel 版本 在 Ubuntu 22.04 上降低 Linux 内核版本的步骤如下所示。 步骤 1&#xff1a;检查当前内核版本 uname -r 确认当前运行的内核版本。 步骤 2&#xff1a;查看已安装的…

Python 数据分析与机器学习入门 (八):用 Scikit-Learn 跑通第一个机器学习模型

引言&#xff1a;初识 Scikit-Learn Scikit-learn 是 Python 机器学习领域的黄金标准库。它构建在 NumPy, SciPy 和 Matplotlib 之上&#xff0c;提供了大量用于分类、回归、聚类和降维等任务的算法。Scikit-learn 广受欢迎的原因在于其三大核心优势&#xff1a; 一致的 API 设…

FPGA芯片的配置方法

FPGA芯片的配置方法 文章目录 FPGA芯片的配置方法1. FPGA配置概述2. 主动配置模式3. 被动配置模式4. JTAG配置模式5. 总结 1. FPGA配置概述 当我们在PC机上的FPGA软件集成开发环境中完成我们的设计后&#xff0c;必须通过某种形式将其映射到FPGA芯片硬件中&#xff0c;这样FPG…

通过python+openCV实现对图片中箭头方向的判断

在项目中遇到一个需求,需要对图片中的箭头方向进行判断,本来是使用YOLOv8算法来实现的,但是发现YOLO的效果对箭头的识别效果很差,不管是分类算法还是检测算法,效果都不理想,因此试一试通过openCV对箭头方向进行判断,发现效果还可以。 下面附上完整的代码和原理。 文章目…

React 第六十六节Router中 StaticRouter使用详解及注意事项

前言 StaticRouter 是 React Router 为服务器端渲染&#xff08;SSR&#xff09;提供的专用路由组件。它允许在服务器环境中处理路由逻辑&#xff0c;确保服务器和客户端渲染结果一致。下面我将详细解释其用途、原理并提供完整的代码示例。 一、StaticRouter 的核心用途 服务…