本文學習如何用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博客