香橙派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博客