Linux系統bin文件打包方法


最近的項目需要客戶端從服務器獲取到文件后自動執行;由於可執行程序中有相關配置文件,並且運行前要進行環境變量的配置,所以不能直接下載可執行程序運行,上網搜了一下解決方法,發現可以打成bin包,下載時下載這個bin文件,然后運行,先進行解包安裝,然后再腳本里配置環境變量,最后運行程序;

 

bin包的制作需要三步:1、 編寫shell腳本文件; 2、 對可執行程序及相關文件進行打包壓縮; 3、 使用cat命令把這兩個文件封裝成一個bin安裝包;

最后生成的bin文件是一個前半部分為shell腳本文件,后半部分為二進制壓縮包文件的文件;我們直接運行這個bin文件,會首先執行前半部分的腳本,所以我們需要再腳本里編寫程序把后半部分的壓縮包分解出來,並進行解壓和運行;

 

一、 編寫shell腳本;

腳本文件主要功能是把cat命令打包進bin文件中的二進制壓縮包分離出bin文件,並進行解壓;分離操作可以用兩種方法來做:sed命令和tail命令;

1、 使用sed命令

sed -n -e '1,/^exit 0$/!p' $0 >xxx.tgz 2>/dev/null

 

2、 使用tail命令

tail +$lines $0 >xxx.tgz

 

但是使用中發現第一種方法並不能成功分離出壓縮文件,不知道什么原因,研究了一下午也沒解決,對比cat封裝前的壓縮包和分離出來的壓縮包,發現文件大小是一樣的,我用diff命令對比兩個文件,發現兩個文件並不一樣,最后用vi打開兩個文件對比,發現分離后的壓縮包里面多了很多換行;

好在第二種方法可以;

下面是我的install.sh文件

#!/bin/sh
lines=12
temptar=/tmp/qoe.tgz
workpath=/tmp/qoe
tail -n +$lines $0 >${temptar} 
tar xzf ${temptar} -C /tmp
rm -rf ${temptar}
cd ${workpath}
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/upt/framework/saf/rootfs/usr/lib:/opt/upt/framework/saf/rootfs/lib
./testapp -daemon
exit 0

 

二、對可執行程序進行打包

新建一個目錄,把運行需要的所有文件拷貝進去,然后使用tar命令進行打包:

tar -czvf qoe.tgz qoe/ 

 

三、使用cat命令封裝為bin

cat install.sh qoe.tgz > qoe.bin

 

最后完成

chmod +x qoe.bin
./qoe.bin

成功運行

 

參考資料:

https://www.jianshu.com/p/9f2919484317

https://blog.csdn.net/jswawawa/article/details/72318024?locationNum=3&fps=1

https://blog.csdn.net/lien0906/article/details/52689185


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM