最近的項目需要客戶端從服務器獲取到文件后自動執行;由於可執行程序中有相關配置文件,並且運行前要進行環境變量的配置,所以不能直接下載可執行程序運行,上網搜了一下解決方法,發現可以打成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