將多個文件打包成一個shell
實現自動化環境部署,且將軟件包和部署腳本合並成一個文件,避免腳本和文件分開。
2. 實驗環境
(1) Linux環境
centos 7.4
(2) 軟件包
[root@centos-70 0517]# tar -tf apache_2.4.29.tar.gz # 以自動化安裝apache為例
apr-1.6.3.tar.gz
apr-util-1.6.1.tar.gz
httpd-2.4.29.tar.gz
(3) 安裝腳本
[root@centos-70 0517]# ll install.sh #
-rw-r--r-- 1 root root 2958 May 17 12:03 install.sh
(4) 打包腳本
[root@centos-70 0517]# cat package.sh # 將apache_2.4.29.tar.gz和install.sh合並成一個文件
#!/bin/bash
SCRIPT_SIZE=$(stat -c %s $2)
PACK_SIZE=$(stat -c %s $3)
echo '#!/bin/bash'>/tmp/compress.sh
echo "dd if=$1 of=$3 bs=1 count=$PACK_SIZE skip=$[SCRIPT_SIZE+100]" >> /tmp/compress.sh
COM_SIZE=$(stat -c %s /tmp/compress.sh)
if [ $COM_SIZE -ne 100 ];then
sed -i "2d" /tmp/compress.sh
echo "dd if=$1 of=$3 bs=1 count=$PACK_SIZE skip=$[SCRIPT_SIZE+COM_SIZE]" >> /tmp/compress.sh
COM_SIZE_NEW=$(stat -c %s /tmp/compress.sh)
if [ $COM_SIZE -lt $COM_SIZE_NEW ];then
sed -i "2d" /tmp/compress.sh
echo "dd if=$1 of=$3 bs=1 count=$PACK_SIZE skip=$[SCRIPT_SIZE+COM_SIZE-1]" >> /tmp/compress.sh
elif [ $COM_SIZE -gt $COM_SIZE_NEW ];then
sed -i "2d" /tmp/compress.sh
echo "dd if=$1 of=$3 bs=1 count=$PACK_SIZE skip=$[SCRIPT_SIZE+COM_SIZE+1]" >> /tmp/compress.sh
fi
COM_SIZE=$(stat -c %s /tmp/compress.sh)
fi
dd if=/tmp/compress.sh of=$1 count=$COM_SIZE bs=1 >/dev/null
dd if=$2 of=$1 count=$SCRIPT_SIZE bs=1 seek=$COM_SIZE >/dev/null
dd if=$3 of=$1 count=$PACK_SIZE bs=1 seek=$[COM_SIZE+SCRIPT_SIZE] >/dev/null
3. 測試
(1) 合並apache_2.4.29.tar.gz和install.sh
[root@centos-70 0517]# ll
total 10020
-rw-r--r-- 1 root root 10251674 May 17 11:11 apache_2.4.29.tar.gz
-rw-r--r-- 1 root root 2958 May 17 12:03 install.sh
-rw-r--r-- 1 root root 1070 May 17 12:45 package.sh
[root@centos-70 0517]# bash package.sh apache_2.4.29.tar.sh install.sh apache_2.4.29.tar.gz # 註意參數順序
[root@centos-70 0517]# ll
total 20036
-rw-r--r-- 1 root root 10251674 May 17 11:11 apache_2.4.29.tar.gz
-rw-r--r-- 1 root root 10254726 May 18 00:39 apache_2.4.29.tar.sh
-rw-r--r-- 1 root root 2958 May 17 12:03 install.sh
-rw-r--r-- 1 root root 1070 May 17 12:45 package.sh
(2) 查看apache_2.4.29.tar.sh內容(建議使用vim或者下載到win上用sublime text等文本編輯器查看)
該文件有三部分組成:
(a) 解壓部分
#!/bin/bash
dd if=apache_2.4.29.tar.sh of=apache_2.4.29.tar.gz bs=1 count=10251674 skip=3052
(b) install.sh部分
(c) 亂碼部分(該部分為apache_2.4.29.tar.gz)
(3) 在服務器上執行apache_2.4.29.tar.sh
[root@centos-71 ~]# bash apache_2.4.29.tar.sh
[root@centos-71 ~]# /usr/local/apache/bin/apachectl start
[root@centos-71 ~]# curl 127.0.0.1
<html><body><h1>It works!</h1></body></html>
4. 補充
(1) 重點是package.sh腳本,install.sh 和 apache_2.4.29.tar.gz可以根據隨意調整。
(2) 打包完成後的apache_2.4.29.tar.sh 不能隨意修改,改動任意字符都可能會導致腳本出錯。
將多個文件打包成一個shell