下面的脚本是本人在工作过程中,使用shell脚本来完成虚拟化主线版本ISO镜像制作的工具。仅供记录和参考
#########################################################################
# File Name: auto_make_iso.sh
# Author: Toney Sun
# mail: [email protected]
# Created Time: 2020年04月19日 星期五 09时57分43秒
# Function: 自动制作虚拟化主线ISO镜像
# Version:
# Usage: ./auto_make_iso.sh 生产包位置
#
#########################################################################
#!/bin/bash
<<COMMENT
prepare materials for make ISO
initrd_patch: 从虚拟化主线patch目录中拷贝的目录,用于替换指定文件。
COMMENT
DIR=$PWD
PRODUCE_PKT_PATH="$DIR/version"
LICENSE_FILE="license-NGTOS"
PARTION_FILE="NGFW_partition_table_cf"
PROD_FILE="tos_prod_conf"
usage(){
cat <<USAGE
Usage: ./auto_make_iso.sh Produce_Path
for example:
./auto_make_iso.sh /home/sunzd/ngtos_iso_release/version/Produce_V3.2242.2061_NGFW_VRPool_10.1
USAGE
}
#清理工作
make_clean(){
echo "Enter make_clean"
cd ${PRODUCE_PKT_PATH}
local version
version=`ls V3.22*_upt`
[ -z "$version" ] && echo "find produce packet version error!!!" && cd .. && return
#echo $version | awk -F" " '{print $1}'
version=`echo $version | awk -F" " '{print $1}'`
#echo *${version%.*}*
rm -rf *${version%.*}*
rm -rf initrd-d r2.2-d initrd.gz
rm -rf $LICENSE_FILE $LICENSE_FILE $PARTION_FILE $PROD_FILE
cd ..
}
#复制生产包内容
copy_produce_file(){
echo "Enter copy_produce_file"
if [ $# -ne 1 ];
then
usage
fi
[ -z "$1" ] && exit
echo $PWD
cp $1/* $PRODUCE_PKT_PATH
}
#修改启动脚本
modify_prod_conf(){
echo "Enter modify_prod_conf"
cd ${PRODUCE_PKT_PATH}
local version
version=`ls V3.22*_upt`
echo $version | awk -F" " '{print $1}'
version=`echo $version | awk -F" " '{print $1}'`
[ ! -e ${PROD_FILE} ] && echo "${PROD_FILE} doesn't exist!!!" && exit
sed -i "s/TOS_PACK=.*$/TOS_PACK=${version}/" ${PROD_FILE}
echo "modify_prod_conf sucess"
cd ..
}
#修改license文件, 启动feth0 DHCP功能,用于注册license
prepare_lic(){
echo "Enter prepare_lic"
cd ${PRODUCE_PKT_PATH}
[ ! -e "${LICENSE_FILE}" ] && echo "${LICENSE_FILE} doesn't exist!!!" && exit
sed -i 's/BOND=enable/BOND=disable/' ${LICENSE_FILE}
sed -i 's/VSYS=enable/VSYS=disable/' ${LICENSE_FILE}
cd ..
echo "prepare_lic sucess"
}
#修改磁盘分区文件
prepare_partion(){
echo "Enter prepare_partition"
cd ${PRODUCE_PKT_PATH}
[ ! -e "${PARTION_FILE}" ] && echo "$PARTION_FILE} doesn't exist!!!" && exit
virt=`cat ${PARTION_FILE} | grep "virt"`
[ ! -z "$virt" ] && return 0
echo "" >> ${PARTION_FILE}
echo "[virt]" >> ${PARTION_FILE}
echo "partition1=8" >> ${PARTION_FILE}
echo "partition2=2048" >> ${PARTION_FILE}
echo "partition5=32" >> ${PARTION_FILE}
echo "partition6=16" >> ${PARTION_FILE}
echo "partition7=10" >> ${PARTION_FILE}
echo "partition8=8" >> ${PARTION_FILE}
echo "partition9=16" >> ${PARTION_FILE}
echo "partition10=200" >> ${PARTION_FILE}
echo "partition11=1300" >> ${PARTION_FILE}
echo "" >> ${PARTION_FILE}
cd ..
echo "prepare partition success"
}
<<AAA
将需要的替换文件材料放在NGFW_materials目录下
AAA
#重新打upt包
repacket_upt(){
#
echo “ repacket_upt do nothing!!!”
}
#重新制作initrd包
repacket_initrd(){
echo "Enter repacket_initrd"
cd ${PRODUCE_PKT_PATH}
local initrd_version
local initrd_path
#解包
initrd_version=`ls initrd-V3*.gz`
initrd_path="initrd-d"
[ -z ${initrd_version} ] && echo "initrd packet doesn't exist!!!" && exit
gzip -d ${initrd_version}
[ -e ${initrd_path} ] && rm -rf ${initrd_path}
mkdir ${initrd_path}
cd ${initrd_path}
cpio -i <../${initrd_version%.gz}
#替换
cp "${DIR}/initrd_patch/common/running/etc/rcS.d/S10mountall" "./etc/rcS.d/"
#重新打包
find .| cpio -o -H newc >../${initrd_version%.gz}
cd ..
gzip ${initrd_version%.gz}
}
#重新制作r2_2包
repacket_r22(){
echo "Enter repacket_r22"
cd ${PRODUCE_PKT_PATH}
local r2_2_version
local r2_2_path
#解包
r2_2_version=`ls r2.2-V3.*`
r2_2_path="r2.2-d"
[ -z ${r2_2_version} ] && echo "r2.2 packet doesn't exist!!!" && exit
mv ${r2_2_version} "${r2_2_version}.gz"
gzip -d "${r2_2_version}.gz"
[ -e ${r2_2_path} ] && rm -rf ${r2_2_path}
mkdir ${r2_2_path}
cd ${r2_2_path}
cpio -i <../${r2_2_version}
#替换
cp "${DIR}/initrd_patch/common/produce/script/creat_cf_patition.sh" "./script/"
cp "${DIR}/initrd_patch/common/produce/script/partition_table_cf_def" "./script/"
cp "${DIR}/initrd_patch/common/produce/script/produce.sh" "./script/"
#重新打包, 为什么是initrd,不清楚
find .| cpio -o -H newc >../"initrd"
cd ..
gzip -f "initrd"
<<BBB
下面两行操作对ISO包没有任何作用
第一次执行脚本,r2.2文件没有重新压缩,为了重复执行该脚本,在这里重新压缩为r2.2-*******
BBB
cd ${r2_2_path}
find .| cpio -o -H newc >../${r2_2_version}
cd ..
gzip ${r2_2_version}
mv ${r2_2_version}.gz ${r2_2_version}
}
echo "${PRODUCE_PKT_PATH}"
if [ $# -eq 1 ];
then
case "$1" in
clean)
make_clean
;;
all.clean)
make_clean
;;
*)
TMP_DIR=$1
make_clean
copy_produce_file $TMP_DIR
prepare_lic
prepare_partion
modify_prod_conf
repacket_initrd
repacket_r22
echo "Now ${VERSION%.*}.iso begin to make...."
cd $DIR
./build.all
;;
esac
break
else
usage
fi