使用shell脚本完成虚拟化ISO镜像制作

下面的脚本是本人在工作过程中,使用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
发布了81 篇原创文章 · 获赞 69 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/s2603898260/article/details/105635221