本文学习如何用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 controlPackage: 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博客