#!/bin/sh #write by 曙光信息解决方案中心系统优化技术部 #任何问题email to:6104067@qq.com #numvcpus = "128" ver=3.2 clear SCRIPT_DIR=$(dirname "$(readlink -f "$0")") cur_ver=$(cat /tmp/ver.txt | awk -F' ' '{print $4}' |head -n 1) >/dev/null 2>&1 cur_md5=$(cat /tmp/ver.txt |grep $SCRIPT_DIR/hygon-vmware_patch* | awk -F' ' '{print $1}') >/dev/null 2>&1 md5=$(md5sum $SCRIPT_DIR/hygon-vmware_patch*.sh) >/dev/null 2>&1 echo ============================================声明=============================================== echo " " echo "Hygon-VMware V$ver 补丁适用于海光1-3号使用vSphere6.7U1及以上版本, 及海光4号使用vSphere8.0及以上版本用于改善其兼容性。同时也适用于海光平台下使用HCIBench, 以改善其兼容性。" echo " " echo "Hygon-VMware V$ver 补丁适用于非海光平台vSphere6.5及以上环境向海光平台迁移前的预检测准备工作, 用于改善迁移过程中和迁移后环境的稳定性及兼容性。" echo " " echo "使用本补丁提供的服务与功能时即表示您已经同意本补丁使用所带来的风险并自行承担风险!" echo " " echo " " echo " ——————使用问题与使用详情请咨询解决方案中心系统优化技术部" echo " " echo -e "\e[36m Hygon-VMware V$ver,MD5:$md5的海光补丁将修改海光平台中不符合兼容性要求的虚拟机的配置。请确认自行承担此风险后继续!==-- \e[0m" echo " " read -r -p "同意请按Y, 不同意请按N或任意键 [Y/N] " input case $input in [yY][eE][sS]|[yY]) ;; [nN][oO]|[nN]) echo " " echo "Thanks!" exit 1 ;; *) echo " " echo "Thanks!" exit 1 ;; esac if (esxcli hardware cpu list|grep -q HygonGenuine) ; then if [ ! -e "/etc/hcibench_version" ]; then if (vmware -v|grep -q ESXi) ; then if [ -e "/opt/chgload.sh" ] || [ -e "/opt/tmp.sh" ] || [ -e "/opt/vmware/patch/chgload.sh" ] ; then clear echo ==============================注意======================================== echo " " echo -e "\e[31m此ESXi已经安装$cur_ver! \e[0m" echo "" echo -e "\e[36m此ESXi即将安装V$ver,MD5:$md5的海光补丁! \e[0m" echo " " read -r -p "卸载该补丁[R]? 升级安装[U]? 退出安装[Q]? " inputr case $inputr in [uU]) ;; [rR]) echo "#!/bin/sh ++group=host/vim/vmvisor/boot" > /etc/rc.local.d/local.sh echo "exit 0" >> /etc/rc.local.d/local.sh /bin/kill $(cat /var/run/crond.pid) sed -i -e '/chgload/d' -e '/vim-cmd-/d' -e '/chgver/d' -e '/chgsup/d' -e '/allvms/d' /var/spool/cron/crontabs/root sed -i -e '/tmp.sh/d' -e '/temps.sh/d' -e '/vim-cmd-/d' /var/spool/cron/crontabs/root crond rm -f /opt/*.sh rm -f /usr/bin/vm-support2 rm -f /opt/vm-support rm -fr /opt/vmware/patch/ rm -fr /opt/vmware/vm-support/ rm -fr /opt/vm-support/ rm -f /tmp/allvms.* rm -f /tmp/list*.* rm -f /tmp/*.txt rm -f /tmp/vm-support esxcli system settings advanced set -o /UserVars/SuppressShellWarning -i 0 esxcli system settings advanced set -o /UserVars/SuppressHyperthreadWarning -i 0 /bin/auto-backup.sh > /dev/null clear echo ========================================================================== echo " " echo -e "\e[32m $cur_ver海光补丁已成功卸载! \e[0m" echo " " echo ========================================================================== exit 0 ;; [qQ]|*) echo " " echo "已退出, Thanks!" echo " " exit 1 ;; esac echo "#!/bin/sh ++group=host/vim/vmvisor/boot" > /etc/rc.local.d/local.sh echo "exit 0" >> /etc/rc.local.d/local.sh /bin/kill $(cat /var/run/crond.pid) sed -i -e '/chgload/d' -e '/vim-cmd-/d' -e '/chgver/d' -e '/chgsup/d' -e '/allvms/d' /var/spool/cron/crontabs/root sed -i -e '/tmp.sh/d' -e '/temps.sh/d' -e '/vim-cmd-/d' /var/spool/cron/crontabs/root crond rm -f /opt/*.sh rm -f /usr/bin/vm-support2 rm -f /opt/vm-support rm -fr /opt/vmware/patch/ rm -fr /opt/vmware/vm-support/ rm -fr /opt/vm-support/ rm -f /tmp/allvms.* rm -f /tmp/list*.* rm -f /tmp/*.txt rm -f /tmp/vm-support esxcli system settings advanced set -o /UserVars/SuppressShellWarning -i 0 esxcli system settings advanced set -o /UserVars/SuppressHyperthreadWarning -i 0 fi V=$(esxcli system version get|grep Version |awk -F': ' '{print $2}') U=$(esxcli system version get|grep Update |awk -F': ' '{print $2}') G4=$(vim-cmd hostsvc/hostsummary | grep cpuModel | awk -F ' ' '{print $5}') vim-cmd vmsvc/getallvms > /tmp/allvms.tmp if [ "$V" == "8.0.0" -o "$V" == "8.0.1" -o "$V" == "8.0.2" -a "${G4:1:1}" == "4" ]; then echo ========================================================================== echo " " echo -e "\e[32m 当前使用ESXi$V Update$U版,patching and waiting... \e[0m" echo " " echo "#!/bin/sh ++group=host/vim/vmvisor/boot" >/etc/rc.local.d/local.sh tee -a /etc/rc.local.d/local.sh <<-EOF > /dev/null mkdir -p /opt/vmware/patch/ echo \\#\\!\/bin\/sh > /opt/vmware/patch/chgvcls.sh echo c=\\$\(grep vCLS /tmp/allvms.tmp \| awk -F\'\ \ \ \*\'\ \ \'{print\ \\$\3}\'\) >> /opt/vmware/patch/chgvcls.sh echo c=\\$\(\echo\ \\"$\c\" \| \sed -e \"s#\\\[\#\/vmfs\/volumes\/\#g\" -e \"s\#\\\] \#\/\#g\"\) >> /opt/vmware/patch/chgvcls.sh echo \sed \-i \-e \'s\/version = \"11\"/version = \"18\"/\' \-e \'s/Masks = \"TRUE\"/Masks = \"FALSE\"/\' \"\\$\c\" >> /opt/vmware/patch/chgvcls.sh echo "vid=\\\$(cat /tmp/allvms.tmp | grep vCLS | awk '{print "\$\1"}')" >> /opt/vmware/patch/chgvcls.sh echo "vstate=\\\$(vim-cmd vmsvc/power.getstate \\\$vid | grep Powered | awk '{print "\$\2"}')" >> /opt/vmware/patch/chgvcls.sh echo 'if [[ "\$vstate" == "off" ]]; then vim-cmd vmsvc/power.on "\$vid"; fi' >> /opt/vmware/patch/chgvcls.sh echo \\#\\!\/bin\/sh > /opt/vmware/patch/chgvmx.sh echo "touch /tmp/listvmx.old" >>/opt/vmware/patch/chgvmx.sh echo "grep -E 'vmx-(8|9|10|11)' /tmp/allvms.tmp | awk -F' *' '{print \\\$3}' >/tmp/listvmx.new" >>/opt/vmware/patch/chgvmx.sh echo "diff -q /tmp/listvmx.new /tmp/listvmx.old > /dev/null && tmp=true || tmp=false" >>/opt/vmware/patch/chgvmx.sh echo "if [ \\\$tmp == false ] ; then" >>/opt/vmware/patch/chgvmx.sh echo "cat /tmp/listvmx.new >/tmp/listvmx.txt" >>/opt/vmware/patch/chgvmx.sh echo 'sed -i -e "s#\[#/vmfs/volumes/#g" -e "s#\] #/#g" -e "s#(#\\\\\(#g" -e "s#)#\\\\\)#g" -e "s# #\\\\\ #g" /tmp/listvmx.txt' >> /opt/vmware/patch/chgvmx.sh echo awk \''{print "sed -i -e \\047s#virtualHW.version =.*#virtualHW.version = \"18\" #g\\047 " \$0}'\' /tmp/listvmx.txt \>/tmp/tmpvmx.sh >> /opt/vmware/patch/chgvmx.sh echo "cat /tmp/listvmx.new > /tmp/listvmx.old" >>/opt/vmware/patch/chgvmx.sh echo "sh /tmp/tmpvmx.sh" >>/opt/vmware/patch/chgvmx.sh echo "fi" >>/opt/vmware/patch/chgvmx.sh echo "rm -f /tmp/listvmx.new && rm -f /tmp/listvmx.txt && rm -f /tmp/tmpvmx.sh" >>/opt/vmware/patch/chgvmx.sh echo \\#\\!\/bin\/sh > /opt/vmware/patch/chgvbs.sh echo "touch /tmp/listwin.new" >>/opt/vmware/patch/chgvbs.sh echo "cat /tmp/listwin.new > /tmp/listwin.old" >>/opt/vmware/patch/chgvbs.sh echo "grep -E 'windows2019|windows9|windows10|windows11' /tmp/allvms.tmp | awk -F' *' '{print "\$\3"}' > /tmp/listwin.new" >> /opt/vmware/patch/chgvbs.sh echo "diff /tmp/listwin.new /tmp/listwin.old >/tmp/listwin.txt" >> /opt/vmware/patch/chgvbs.sh echo "sed -i -e '1,3d' -e '/+\[/d' -e '/\ \[/d' /tmp/listwin.txt" >> /opt/vmware/patch/chgvbs.sh echo 'sed -i -e "s#\-\[#/vmfs/volumes/#g" -e "s#\] #/#g" -e "s#(#\\\\\(#g" -e "s#)#\\\\\)#g" -e "s# #\\\\\ #g" /tmp/listwin.txt' >> /opt/vmware/patch/chgvbs.sh echo "/bin/awk '{print \"sed -i -e '/vhv.enable/d' -e '/vvtd.enable/d' -e '/uefi.secureBoot.enabled/d' -e '/windows.vbs.enabled/d' \" "\$\0"}' /tmp/listwin.txt |sh" >>/opt/vmware/patch/chgvbs.sh echo "rm -f /tmp/listwin.old /tmp/listwin.txt" >>/opt/vmware/patch/chgvbs.sh echo \\#\\!\/bin\/sh > /opt/vmware/patch/chgid.sh echo "grep -E 'windows7Server|windows8' /tmp/allvms.tmp | awk -F' *' '{print \\\$3}' >/tmp/listoldwin1.txt" >>/opt/vmware/patch/chgid.sh echo 'sed -i -e "s#\[#/vmfs/volumes/#g" -e "s#\] #/#g" -e "s#(#\\\\\(#g" -e "s#)#\\\\\)#g" -e "s# #\\\\\ #g" /tmp/listoldwin1.txt' >>/opt/vmware/patch/chgid.sh echo "awk '{print \"if grep -q cpuid.0 \" \\\$0}' /tmp/listoldwin1.txt >/tmp/listoldwin2.txt" >>/opt/vmware/patch/chgid.sh echo awk \''{print "; then : ; else echo -e \"cpuid.0.ebx = \\\\\"0111:0101:0110:1110:0110:0101:0100:0111\\\\\" \\\ncpuid.0.ecx = \\\\\"0110:1100:0110:0101:0111:0100:0110:1110\\\\\" \\\ncpuid.0.edx = \\\\\"0100:1001:0110:0101:0110:1110:0110:1001\\\\\" \\\nfirmware = \\\\\"efi\\\\\" \"\>> " \$0}'\' /tmp/listoldwin1.txt \>/tmp/listoldwin3.txt >>/opt/vmware/patch/chgid.sh echo "awk '{print \\\$0 \"; fi\"}' /tmp/listoldwin3.txt >/tmp/listoldwin4.txt" >>/opt/vmware/patch/chgid.sh echo "awk 'NR==FNR{a[i]=\\\$0;i++}NR>FNR{print a[j]\" \"\\\$0;j++}' /tmp/listoldwin2.txt /tmp/listoldwin4.txt |sh" >>/opt/vmware/patch/chgid.sh echo "rm -f /tmp/listoldwin*.txt" >>/opt/vmware/patch/chgid.sh echo \\#\\!\/bin\/sh > /opt/vmware/patch/chgload.sh echo "touch /tmp/allvms.old" >> /opt/vmware/patch/chgload.sh echo "vim-cmd vmsvc/getallvms > /tmp/allvms.tmp" >> /opt/vmware/patch/chgload.sh echo "if (grep -qE 'vmx-(8|9|10|11)' /tmp/allvms.tmp) ; then sh /opt/vmware/patch/chgvmx.sh ; fi" >> /opt/vmware/patch/chgload.sh echo "diff -q /tmp/allvms.tmp /tmp/allvms.old > /dev/null && tmp=true || tmp=false" >> /opt/vmware/patch/chgload.sh echo "if [ \\\$tmp == false ] ; then" >> /opt/vmware/patch/chgload.sh echo " if (grep -q 'vCLS' /tmp/allvms.tmp) ; then sh /opt/vmware/patch/chgvcls.sh ; fi" >> /opt/vmware/patch/chgload.sh echo " if (grep -qE 'windows2019|windows9|windows10|windows11' /tmp/allvms.tmp) ; then sh /opt/vmware/patch/chgvbs.sh ; fi" >> /opt/vmware/patch/chgload.sh echo " if (grep -qE 'windows7Server|windows8' /tmp/allvms.tmp) ; then sh /opt/vmware/patch/chgid.sh ; fi" >> /opt/vmware/patch/chgload.sh echo " if (grep -qE 'centos8|centos9|rhel8|rhel9|almalinux|rockylinux|ubuntu' /tmp/allvms.tmp) ; then sh /opt/vmware/patch/chgusb.sh ; fi" >> /opt/vmware/patch/chgload.sh echo " cat /tmp/allvms.tmp > /tmp/allvms.old" >> /opt/vmware/patch/chgload.sh echo "fi" >> /opt/vmware/patch/chgload.sh echo "rm -f /tmp/allvms.tmp" >> /opt/vmware/patch/chgload.sh echo "echo Hygon-VMware patch installed v$ver on ESXi $V > /tmp/ver.txt" >> /opt/vmware/patch/chgver.sh echo 'grep -q "vCLS" /tmp/allvms.old && echo "Include vCLS Agent VM on Current ESXi $V" >> /tmp/ver.txt' >> /opt/vmware/patch/chgver.sh echo "rm -f $SCRIPT_DIR/hygon-vmware_patch*.sh" >> /opt/vmware/patch/chgver.sh echo "rm -fr /tmp/vim-cmd-*.txt" >> /opt/vmware/patch/chgver.sh echo "rm -f /tmp/allvms.old" >> /opt/vmware/patch/chgver.sh echo "rm -f /tmp/listvmx.old" >> /opt/vmware/patch/chgver.sh echo "rm -f /tmp/listusb.new" >> /opt/vmware/patch/chgver.sh echo "exit 0" >> /opt/vmware/patch/chgver.sh echo \\#\\!\/bin\/sh > /opt/vmware/patch/chgsup.sh echo "mkdir -p /opt/vmware/vm-support" >> /opt/vmware/patch/chgsup.sh echo "cp -ru /etc/vmware/vm-support/* /opt/vmware/vm-support/" >> /opt/vmware/patch/chgsup.sh echo "sed -i -e '/vsi_traverse/d' /opt/vmware/vm-support/base-minimal.mfx" >> /opt/vmware/patch/chgsup.sh echo "sed -i -e '/vsi_traverse/d' /opt/vmware/vm-support/base.mfx" >> /opt/vmware/patch/chgsup.sh echo "sed -i -e '/vsi_traverse/d' /opt/vmware/vm-support/performance-end.mfx" >> /opt/vmware/patch/chgsup.sh echo "echo \\#\\!\/bin\/sh >/usr/bin/vm-support2" >> /opt/vmware/patch/chgsup.sh echo 'echo read -p \\"请选择运行vm-support精简版[S],或进入维护模式运行vm-support完整版[F]?回车默认为vm-support精简版[S] \\" input >>/usr/bin/vm-support2' >> /opt/vmware/patch/chgsup.sh echo 'echo case "\\\$input" in >>/usr/bin/vm-support2' >> /opt/vmware/patch/chgsup.sh echo 'echo "[sS]) /bin/vm-support --manifestdir /opt/vmware/vm-support/ \\\$1 \\\$2 \\\$3 ;; " >>/usr/bin/vm-support2' >> /opt/vmware/patch/chgsup.sh echo 'echo [fF]\) \echo \"系统将自动进入维护模式执行vm-support,执行完毕则自动退出维护模式。如果尝试10次后还无法进入维护模式则自动退出! \" \\&\\& vim-cmd hostsvc/maintenance_mode_enter \\>/dev/null 2\\>\\&1 >>/usr/bin/vm-support2' >> /opt/vmware/patch/chgsup.sh echo 'echo "elapsed_time=1" >>/usr/bin/vm-support2' >> /opt/vmware/patch/chgsup.sh echo 'echo "while [ \\"\\\$elapsed_time\\" -le 10 ]; do" >>/usr/bin/vm-support2' >> /opt/vmware/patch/chgsup.sh echo "echo mstate=\\\\$\(vim-cmd /hostsvc/hostsummary \| grep inMaintenanceMode \| awk \\'\\{print \\\$\3\\}\\' \| sed \\'s/,\s*$//\\'\) >>/usr/bin/vm-support2" >> /opt/vmware/patch/chgsup.sh echo "echo [ \\\\\"\\\\$\mstate\\\\\" = \\\\\"true\\\\\" ] \&\& /bin/vm-support \\\$\\1 \\\$\\2 \\\$\\3 \&\& vim-cmd hostsvc/maintenance_mode_exit \&\& exit 0 >>/usr/bin/vm-support2" >> /opt/vmware/patch/chgsup.sh echo 'echo \echo -n \"\\\$elapsed_time \\" >>/usr/bin/vm-support2' >> /opt/vmware/patch/chgsup.sh echo "echo \"vim-cmd hostsvc/maintenance_mode_enter >/dev/null 2>&1 \" >>/usr/bin/vm-support2" >> /opt/vmware/patch/chgsup.sh echo 'echo "elapsed_time=\\\$((elapsed_time + 1)) " >>/usr/bin/vm-support2' >> /opt/vmware/patch/chgsup.sh echo "echo \"done \" >>/usr/bin/vm-support2" >> /opt/vmware/patch/chgsup.sh echo 'echo "echo \"等待超时,请手动确认进入维护模式再继续执行该命令!\" ; exit 1 ;; " >>/usr/bin/vm-support2' >> /opt/vmware/patch/chgsup.sh echo 'echo "*) echo \\"输入无效,退出!\\"; exit 1 ;; " >>/usr/bin/vm-support2' >> /opt/vmware/patch/chgsup.sh echo 'echo "esac " >>/usr/bin/vm-support2' >> /opt/vmware/patch/chgsup.sh echo "chmod +x /usr/bin/vm-support2" >> /opt/vmware/patch/chgsup.sh echo \\#\\!\/bin\/sh > /opt/vmware/patch/chghw.sh echo "echo 'HBA卡VID:DID信息:'" >> /opt/vmware/patch/chghw.sh echo "for name in \\\`vmkchdev -l | grep vmhba | awk '{print\\\$5}'\\\`;\\\\">> /opt/vmware/patch/chghw.sh echo "do echo \\\$name ; echo \"VID :DID SVID:SDID\";\\\\">> /opt/vmware/patch/chghw.sh echo "vmkchdev -l | grep \\\$name | awk '{print \\\$2 , \\\$3}';\\\\">> /opt/vmware/patch/chghw.sh echo "printf \"Driver: \" ;\\\\" >> /opt/vmware/patch/chghw.sh echo "echo \\\`esxcfg-scsidevs -a | grep \\\$name |awk '{print \\\$2}'\\\`|grep -v ahci;\\\\">> /opt/vmware/patch/chghw.sh echo "vmkload_mod -s \\\`esxcfg-scsidevs -a | grep \\\$name|awk '{print \\\$2}'\\\` |grep -i version;\\\\">> /opt/vmware/patch/chghw.sh echo "echo \\\`lspci -vvv | grep \\\$name | awk '{print \\\$1=\\\$NF=\"\",\\\$0}'\\\`;\\\\">> /opt/vmware/patch/chghw.sh echo "printf \"\\n\";done" >> /opt/vmware/patch/chghw.sh echo "echo '网卡VID:DID信息:'" >> /opt/vmware/patch/chghw.sh echo "for name in \\\`vmkchdev -l | grep vmnic | awk '{print\\\$5}'\\\`;\\\\">> /opt/vmware/patch/chghw.sh echo "do echo \\\$name ; echo \"VID :DID SVID:SDID\";\\\\">> /opt/vmware/patch/chghw.sh echo "vmkchdev -l | grep \\\$name | awk '{print \\\$2 , \\\$3}';\\\\">> /opt/vmware/patch/chghw.sh echo "printf \"Driver: \" ;\\\\" >> /opt/vmware/patch/chghw.sh echo "echo \\\`esxcfg-scsidevs -a | grep \\\$name |awk '{print \\\$2}'\\\`;\\\\">> /opt/vmware/patch/chghw.sh echo "vmkload_mod -s \\\`esxcfg-scsidevs -a | grep \\\$name|awk '{print \\\$2}'\\\` |grep -i version;\\\\">> /opt/vmware/patch/chghw.sh echo "echo \\\`lspci -vvv | grep \\\$name | awk '{print \\\$1=\\\$NF=\"\",\\\$0}'\\\`;\\\\">> /opt/vmware/patch/chghw.sh echo "printf \"\\n\";done" >> /opt/vmware/patch/chghw.sh echo \\#\\!\/bin\/sh > /opt/vmware/patch/chgusb.sh echo "touch /tmp/listusb.new" >>/opt/vmware/patch/chgusb.sh echo "cat /tmp/listusb.new > /tmp/listusb.old" >>/opt/vmware/patch/chgusb.sh echo "grep -E 'centos8|centos9|rhel8|rhel9|almalinux|rockylinux|ubuntu' /tmp/allvms.tmp | awk -F' *' '{print "\$\3"}' > /tmp/listusb.new" >> /opt/vmware/patch/chgusb.sh echo "diff /tmp/listusb.new /tmp/listusb.old >/tmp/listusb.txt" >> /opt/vmware/patch/chgusb.sh echo "sed -i -e '1,3d' -e '/+\[/d' -e '/\ \[/d' /tmp/listusb.txt" >> /opt/vmware/patch/chgusb.sh echo 'sed -i -e "s#\-\[#/vmfs/volumes/#g" -e "s#\] #/#g" -e "s#(#\\\\\(#g" -e "s#)#\\\\\)#g" -e "s# #\\\\\ #g" /tmp/listusb.txt' >> /opt/vmware/patch/chgusb.sh echo "/bin/awk '{print \"sed -i -e '/uefi.secureBoot.enabled/d' \" "\$\0"}' /tmp/listusb.txt |sh" >>/opt/vmware/patch/chgusb.sh echo "rm -f /tmp/listusb.old /tmp/listusb.txt" >>/opt/vmware/patch/chgusb.sh echo \\#\\!\/bin\/sh > /opt/vmware/patch/chgtune.sh echo "sed -i -e '/4/d' -e '/30/d' /var/spool/cron/crontabs/root" >> /opt/vmware/patch/chgtune.sh echo "*/1 * * * * /bin/sh /opt/vmware/patch/chgload.sh" >> /var/spool/cron/crontabs/root echo "*/60 * * * * /bin/sh /opt/vmware/patch/chgver.sh" >> /var/spool/cron/crontabs/root echo "*/60 * * * * /bin/sh /opt/vmware/patch/chgsup.sh" >> /var/spool/cron/crontabs/root /bin/sh /opt/vmware/patch/chgsup.sh >/dev/null 2>&1 /bin/sh /opt/vmware/patch/chgver.sh >/dev/null 2>&1 vim-cmd hostsvc/maintenance_mode_exit >/dev/null 2>&1 crond exit 0 EOF kill $(cat /var/run/crond.pid) chmod 777 /etc/rc.local.d/local.sh /bin/sh /etc/rc.local.d/local.sh esxcli system settings advanced set -o /UserVars/SuppressShellWarning -i 1 esxcli system settings advanced set -o /UserVars/SuppressHyperthreadWarning -i 1 /bin/auto-backup.sh > /dev/null echo "*/4 * * * * /bin/sh /opt/vmware/patch/chgver.sh" >> /var/spool/cron/crontabs/root echo "* * */30 * * /bin/sh /opt/vmware/patch/chgtune.sh" >> /var/spool/cron/crontabs/root /bin/sh /opt/vmware/patch/chghw.sh > /tmp/hwlog.txt clear echo ========================================================================== echo " " echo -e "\e[32m ESXi$V Update$U 海光补丁安装成功!\e[0m" "\e[31m 请确认所有虚拟机已关机(vCLS代理虚拟机除外), 以确保补丁立即生效! \e[0m" echo -e "\e[32m 通过查看/tmp/ver.txt校验补丁版本!\e[0m" echo " " echo ========================================================================== exit 0 fi if [ "$V" == "8.0.0" -o "$V" == "8.0.1" -o "$V" == "8.0.2" -o "$V" == "7.0.3" -a "${G4:1:1}" -lt "4" ]; then echo ========================================================================== echo " " echo -e "\e[32m 当前使用ESXi$V Update$U版,patching and waiting... \e[0m" echo " " sed -i '/exit/d' /etc/rc.local.d/local.sh tee -a /etc/rc.local.d/local.sh <<-EOF > /dev/null mkdir -p /opt/vmware/patch/ echo \\#\\!\/bin\/sh > /opt/vmware/patch/chgvcls.sh echo c=\\$\(grep vCLS /tmp/allvms.tmp \| awk -F\'\ \ \ \*\'\ \ \'{print\ \\$\3}\'\) >> /opt/vmware/patch/chgvcls.sh echo c=\\$\(\echo\ \\"$\c\" \| \sed -e \"s#\\\[\#\/vmfs\/volumes\/\#g\" -e \"s\#\\\] \#\/\#g\"\) >> /opt/vmware/patch/chgvcls.sh echo \sed \-i \-e \'s\/version = \"11\"/version = \"18\"/\' \-e \'s/Masks = \"TRUE\"/Masks = \"FALSE\"/\' \"\\$\c\" >> /opt/vmware/patch/chgvcls.sh echo "vid=\\\$(cat /tmp/allvms.tmp | grep vCLS | awk '{print "\$\1"}')" >> /opt/vmware/patch/chgvcls.sh echo "vstate=\\\$(vim-cmd vmsvc/power.getstate \\\$vid | grep Powered | awk '{print "\$\2"}')" >> /opt/vmware/patch/chgvcls.sh echo 'if [[ "\$vstate" == "off" ]]; then vim-cmd vmsvc/power.on "\$vid"; fi' >> /opt/vmware/patch/chgvcls.sh EOF fi if [ "$V" == "7.0.1" -o "$V" == "7.0.2" ]; then echo ========================================================================== echo " " echo -e "\e[32m 当前使用ESXi$V Update$U版,patching and waiting... \e[0m" echo " " sed -i '/exit/d' /etc/rc.local.d/local.sh tee -a /etc/rc.local.d/local.sh <<-EOF > /dev/null mkdir -p /opt/vmware/patch/ echo \\#\\!\/bin\/sh > /opt/vmware/patch/chgvcls.sh echo grep vCLS /tmp/allvms.tmp \| awk -F\'\ \ \ \*\'\ \ \'{print\ \\$\3}\' \| \sed -e \"s#\\\[\#\/vmfs\/volumes\/\#g\" -e \"s\#\\\] \#\\/\#g\" -e \"s\#\\(\#\\\\'\\\('#g\" -e \"s\#\\)\#\\\\'\\\)'#g\" -e \"s\#\\ \#\\\\'\\\ '#g\" \>/tmp/listvcls.txt >> /opt/vmware/patch/chgvcls.sh echo \awk \'{print \"\sed \-i s\/Masks = TRUE\/Masks = FALSE\/g \" \$\0}\' /tmp/listvcls.txt \> \/tmp\/tempv.sh >> /opt/vmware/patch/chgvcls.sh echo \sed \-e \"s\#s\\/Masks\\#\'s\\/Masks\\#g\" \-e \'s\\/TRUE\\/\\"TRUE\\"\\/g\' \-e \'s\\/FALSE\\/\\"FALSE\\"\\/g\' \-e \"s\#\\\/g\#\\\/g\'\#g\" \/tmp\/tempv.sh \| sh >>/opt/vmware/patch/chgvcls.sh echo "rm -f /tmp/tempv.sh /tmp/listvcls.txt" >> /opt/vmware/patch/chgvcls.sh echo "vid=\\\$(cat /tmp/allvms.tmp | grep vCLS | awk '{print "\$\1"}')" >> /opt/vmware/patch/chgvcls.sh echo "vstate=\\\$(vim-cmd vmsvc/power.getstate \\\$vid | grep Powered | awk '{print "\$\2"}')" >> /opt/vmware/patch/chgvcls.sh echo 'if [[ "\$vstate" == "off" ]]; then vim-cmd vmsvc/power.on "\$vid"; fi' >> /opt/vmware/patch/chgvcls.sh EOF fi if [ "$V" == "8.0.0" -o "$V" == "8.0.1" -o "$V" == "8.0.2" -o "$V" == "7.0.1" -o "$V" == "7.0.2" -o "$V" == "7.0.3" -a "${G4:1:1}" -lt "4" ]; then echo ========================================================================== echo " " tee -a /etc/rc.local.d/local.sh <<-EOF > /dev/null echo \\#\\!\/bin\/sh > /opt/vmware/patch/chgvmx.sh echo "touch /tmp/listvmx.old" >>/opt/vmware/patch/chgvmx.sh echo "grep -E 'vmx-(8|9|10|11)' /tmp/allvms.tmp | awk -F' *' '{print \\\$3}' >/tmp/listvmx.new" >>/opt/vmware/patch/chgvmx.sh echo "diff -q /tmp/listvmx.new /tmp/listvmx.old > /dev/null && tmp=true || tmp=false" >>/opt/vmware/patch/chgvmx.sh echo "if [ \\\$tmp == false ] ; then" >>/opt/vmware/patch/chgvmx.sh echo "cat /tmp/listvmx.new >/tmp/listvmx.txt" >>/opt/vmware/patch/chgvmx.sh echo 'sed -i -e "s#\[#/vmfs/volumes/#g" -e "s#\] #/#g" -e "s#(#\\\\\(#g" -e "s#)#\\\\\)#g" -e "s# #\\\\\ #g" /tmp/listvmx.txt' >> /opt/vmware/patch/chgvmx.sh echo awk \''{print "sed -i -e \\047s#virtualHW.version =.*#virtualHW.version = \"18\" #g\\047 " \$0}'\' /tmp/listvmx.txt \>/tmp/tmpvmx.sh >> /opt/vmware/patch/chgvmx.sh echo "cat /tmp/listvmx.new > /tmp/listvmx.old" >>/opt/vmware/patch/chgvmx.sh echo "sh /tmp/tmpvmx.sh" >>/opt/vmware/patch/chgvmx.sh echo "fi" >>/opt/vmware/patch/chgvmx.sh echo "rm -f /tmp/listvmx.new && rm -f /tmp/listvmx.txt && rm -f /tmp/tmpvmx.sh" >>/opt/vmware/patch/chgvmx.sh echo \\#\\!\/bin\/sh > /opt/vmware/patch/chgvbs.sh echo "touch /tmp/listwin.new" >>/opt/vmware/patch/chgvbs.sh echo "cat /tmp/listwin.new > /tmp/listwin.old" >>/opt/vmware/patch/chgvbs.sh echo "grep -E 'windows2019|windows9|windows10|windows11' /tmp/allvms.tmp | awk -F' *' '{print "\$\3"}' > /tmp/listwin.new" >> /opt/vmware/patch/chgvbs.sh echo "diff /tmp/listwin.new /tmp/listwin.old >/tmp/listwin.txt" >> /opt/vmware/patch/chgvbs.sh echo "sed -i -e '1,3d' -e '/+\[/d' -e '/\ \[/d' /tmp/listwin.txt" >> /opt/vmware/patch/chgvbs.sh echo 'sed -i -e "s#\-\[#/vmfs/volumes/#g" -e "s#\] #/#g" -e "s#(#\\\\\(#g" -e "s#)#\\\\\)#g" -e "s# #\\\\\ #g" /tmp/listwin.txt' >> /opt/vmware/patch/chgvbs.sh echo "/bin/awk '{print \"sed -i -e '/vhv.enable/d' -e '/vvtd.enable/d' -e '/uefi.secureBoot.enabled/d' -e '/windows.vbs.enabled/d' \" "\$\0"}' /tmp/listwin.txt |sh" >>/opt/vmware/patch/chgvbs.sh echo "rm -f /tmp/listwin.old /tmp/listwin.txt" >>/opt/vmware/patch/chgvbs.sh echo \\#\\!\/bin\/sh > /opt/vmware/patch/chgid.sh echo "grep -E 'winXP|winNet|winLong|windows7Server|windows8|centos64Guest' /tmp/allvms.tmp | awk -F' *' '{print \\\$3}' >/tmp/listoldwin1.txt" >>/opt/vmware/patch/chgid.sh echo 'sed -i -e "s#\[#/vmfs/volumes/#g" -e "s#\] #/#g" -e "s#(#\\\\\(#g" -e "s#)#\\\\\)#g" -e "s# #\\\\\ #g" /tmp/listoldwin1.txt' >>/opt/vmware/patch/chgid.sh echo "awk '{print \"if grep -q cpuid.0 \" \\\$0}' /tmp/listoldwin1.txt >/tmp/listoldwin2.txt" >>/opt/vmware/patch/chgid.sh echo awk \''{print "; then : ; else echo -e \"cpuid.0.ebx = \\\\\"0111:0101:0110:1110:0110:0101:0100:0111\\\\\" \\\ncpuid.0.ecx = \\\\\"0110:1100:0110:0101:0111:0100:0110:1110\\\\\" \\\ncpuid.0.edx = \\\\\"0100:1001:0110:0101:0110:1110:0110:1001\\\\\" \"\>> " \$0}'\' /tmp/listoldwin1.txt \>/tmp/listoldwin3.txt >>/opt/vmware/patch/chgid.sh echo "awk '{print \\\$0 \"; fi\"}' /tmp/listoldwin3.txt >/tmp/listoldwin4.txt" >>/opt/vmware/patch/chgid.sh echo "awk 'NR==FNR{a[i]=\\\$0;i++}NR>FNR{print a[j]\" \"\\\$0;j++}' /tmp/listoldwin2.txt /tmp/listoldwin4.txt |sh" >>/opt/vmware/patch/chgid.sh echo "rm -f /tmp/listoldwin*.txt" >>/opt/vmware/patch/chgid.sh echo \\#\\!\/bin\/sh > /opt/vmware/patch/chgload.sh echo "touch /tmp/allvms.old" >> /opt/vmware/patch/chgload.sh echo "vim-cmd vmsvc/getallvms > /tmp/allvms.tmp" >> /opt/vmware/patch/chgload.sh echo "if (grep -qE 'vmx-(8|9|10|11)' /tmp/allvms.tmp) ; then sh /opt/vmware/patch/chgvmx.sh ; fi" >> /opt/vmware/patch/chgload.sh echo "diff -q /tmp/allvms.tmp /tmp/allvms.old > /dev/null && tmp=true || tmp=false" >> /opt/vmware/patch/chgload.sh echo "if [ \\\$tmp == false ] ; then" >> /opt/vmware/patch/chgload.sh echo " if (grep -q 'vCLS' /tmp/allvms.tmp) ; then sh /opt/vmware/patch/chgvcls.sh ; fi" >> /opt/vmware/patch/chgload.sh echo " if (grep -qE 'windows2019|windows9|windows10|windows11' /tmp/allvms.tmp) ; then sh /opt/vmware/patch/chgvbs.sh ; fi" >> /opt/vmware/patch/chgload.sh echo " if (grep -qE 'winXP|winNet|winLong|windows7Server|windows8|centos64Guest' /tmp/allvms.tmp) ; then sh /opt/vmware/patch/chgid.sh ; fi" >> /opt/vmware/patch/chgload.sh echo " if (grep -qE 'centos8|centos9|rhel8|rhel9|almalinux|rockylinux|ubuntu' /tmp/allvms.tmp) ; then sh /opt/vmware/patch/chgusb.sh ; fi" >> /opt/vmware/patch/chgload.sh echo " cat /tmp/allvms.tmp > /tmp/allvms.old" >> /opt/vmware/patch/chgload.sh echo "fi" >> /opt/vmware/patch/chgload.sh echo "rm -f /tmp/allvms.tmp" >> /opt/vmware/patch/chgload.sh echo "echo Hygon-VMware patch installed v$ver on ESXi $V > /tmp/ver.txt" >> /opt/vmware/patch/chgver.sh echo 'grep -q "vCLS" /tmp/allvms.old && echo "Include vCLS Agent VM on Current ESXi $V" >> /tmp/ver.txt' >> /opt/vmware/patch/chgver.sh echo "rm -f $SCRIPT_DIR/hygon-vmware_patch*.sh" >> /opt/vmware/patch/chgver.sh echo "rm -fr /tmp/vim-cmd-*.txt" >> /opt/vmware/patch/chgver.sh echo "rm -f /tmp/allvms.old" >> /opt/vmware/patch/chgver.sh echo "rm -f /tmp/listvmx.old" >> /opt/vmware/patch/chgver.sh echo "rm -f /tmp/listusb.new" >> /opt/vmware/patch/chgver.sh echo "exit 0" >> /opt/vmware/patch/chgver.sh echo \\#\\!\/bin\/sh > /opt/vmware/patch/chgsup.sh echo "mkdir -p /opt/vmware/vm-support" >> /opt/vmware/patch/chgsup.sh echo "cp -ru /etc/vmware/vm-support/* /opt/vmware/vm-support/" >> /opt/vmware/patch/chgsup.sh echo "sed -i -e '/vsi_traverse/d' /opt/vmware/vm-support/base-minimal.mfx" >> /opt/vmware/patch/chgsup.sh echo "sed -i -e '/vsi_traverse/d' /opt/vmware/vm-support/base.mfx" >> /opt/vmware/patch/chgsup.sh echo "sed -i -e '/vsi_traverse/d' /opt/vmware/vm-support/performance-end.mfx" >> /opt/vmware/patch/chgsup.sh echo "echo \\#\\!\/bin\/sh >/usr/bin/vm-support2" >> /opt/vmware/patch/chgsup.sh echo 'echo read -p \\"请选择运行vm-support精简版[S],或进入维护模式运行vm-support完整版[F]?回车默认为vm-support精简版[S] \\" input >>/usr/bin/vm-support2' >> /opt/vmware/patch/chgsup.sh echo 'echo case "\\\$input" in >>/usr/bin/vm-support2' >> /opt/vmware/patch/chgsup.sh echo 'echo "[sS]) /bin/vm-support --manifestdir /opt/vmware/vm-support/ \\\$1 \\\$2 \\\$3 ;; " >>/usr/bin/vm-support2' >> /opt/vmware/patch/chgsup.sh echo 'echo [fF]\) \echo \"系统将自动进入维护模式执行vm-support,执行完毕则自动退出维护模式。如果尝试10次后还无法进入维护模式则自动退出! \" \\&\\& vim-cmd hostsvc/maintenance_mode_enter \\>/dev/null 2\\>\\&1 >>/usr/bin/vm-support2' >> /opt/vmware/patch/chgsup.sh echo 'echo "elapsed_time=1" >>/usr/bin/vm-support2' >> /opt/vmware/patch/chgsup.sh echo 'echo "while [ \\"\\\$elapsed_time\\" -le 10 ]; do" >>/usr/bin/vm-support2' >> /opt/vmware/patch/chgsup.sh echo "echo mstate=\\\\$\(vim-cmd /hostsvc/hostsummary \| grep inMaintenanceMode \| awk \\'\\{print \\\$\3\\}\\' \| sed \\'s/,\s*$//\\'\) >>/usr/bin/vm-support2" >> /opt/vmware/patch/chgsup.sh echo "echo [ \\\\\"\\\\$\mstate\\\\\" = \\\\\"true\\\\\" ] \&\& /bin/vm-support \\\$\\1 \\\$\\2 \\\$\\3 \&\& vim-cmd hostsvc/maintenance_mode_exit \&\& exit 0 >>/usr/bin/vm-support2" >> /opt/vmware/patch/chgsup.sh echo 'echo \echo -n \"\\\$elapsed_time \\" >>/usr/bin/vm-support2' >> /opt/vmware/patch/chgsup.sh echo "echo \"vim-cmd hostsvc/maintenance_mode_enter >/dev/null 2>&1 \" >>/usr/bin/vm-support2" >> /opt/vmware/patch/chgsup.sh echo 'echo "elapsed_time=\\\$((elapsed_time + 1)) " >>/usr/bin/vm-support2' >> /opt/vmware/patch/chgsup.sh echo "echo \"done \" >>/usr/bin/vm-support2" >> /opt/vmware/patch/chgsup.sh echo 'echo "echo \"等待超时,请手动确认进入维护模式再继续执行该命令!\" ; exit 1 ;; " >>/usr/bin/vm-support2' >> /opt/vmware/patch/chgsup.sh echo 'echo "*) echo \\"输入无效,退出!\\"; exit 1 ;; " >>/usr/bin/vm-support2' >> /opt/vmware/patch/chgsup.sh echo 'echo "esac " >>/usr/bin/vm-support2' >> /opt/vmware/patch/chgsup.sh echo "chmod +x /usr/bin/vm-support2" >> /opt/vmware/patch/chgsup.sh echo \\#\\!\/bin\/sh > /opt/vmware/patch/chghw.sh echo "echo 'HBA卡VID:DID信息:'" >> /opt/vmware/patch/chghw.sh echo "for name in \\\`vmkchdev -l | grep vmhba | awk '{print\\\$5}'\\\`;\\\\">> /opt/vmware/patch/chghw.sh echo "do echo \\\$name ; echo \"VID :DID SVID:SDID\";\\\\">> /opt/vmware/patch/chghw.sh echo "vmkchdev -l | grep \\\$name | awk '{print \\\$2 , \\\$3}';\\\\">> /opt/vmware/patch/chghw.sh echo "printf \"Driver: \" ;\\\\" >> /opt/vmware/patch/chghw.sh echo "echo \\\`esxcfg-scsidevs -a | grep \\\$name |awk '{print \\\$2}'\\\`|grep -v ahci;\\\\">> /opt/vmware/patch/chghw.sh echo "vmkload_mod -s \\\`esxcfg-scsidevs -a | grep \\\$name|awk '{print \\\$2}'\\\` |grep -i version;\\\\">> /opt/vmware/patch/chghw.sh echo "echo \\\`lspci -vvv | grep \\\$name | awk '{print \\\$1=\\\$NF=\"\",\\\$0}'\\\`;\\\\">> /opt/vmware/patch/chghw.sh echo "printf \"\\n\";done" >> /opt/vmware/patch/chghw.sh echo "echo '网卡VID:DID信息:'" >> /opt/vmware/patch/chghw.sh echo "for name in \\\`vmkchdev -l | grep vmnic | awk '{print\\\$5}'\\\`;\\\\">> /opt/vmware/patch/chghw.sh echo "do echo \\\$name ; echo \"VID :DID SVID:SDID\";\\\\">> /opt/vmware/patch/chghw.sh echo "vmkchdev -l | grep \\\$name | awk '{print \\\$2 , \\\$3}';\\\\">> /opt/vmware/patch/chghw.sh echo "printf \"Driver: \" ;\\\\" >> /opt/vmware/patch/chghw.sh echo "echo \\\`esxcfg-scsidevs -a | grep \\\$name |awk '{print \\\$2}'\\\`;\\\\">> /opt/vmware/patch/chghw.sh echo "vmkload_mod -s \\\`esxcfg-scsidevs -a | grep \\\$name|awk '{print \\\$2}'\\\` |grep -i version;\\\\">> /opt/vmware/patch/chghw.sh echo "echo \\\`lspci -vvv | grep \\\$name | awk '{print \\\$1=\\\$NF=\"\",\\\$0}'\\\`;\\\\">> /opt/vmware/patch/chghw.sh echo "printf \"\\n\";done" >> /opt/vmware/patch/chghw.sh echo \\#\\!\/bin\/sh > /opt/vmware/patch/chgusb.sh echo "touch /tmp/listusb.new" >>/opt/vmware/patch/chgusb.sh echo "cat /tmp/listusb.new > /tmp/listusb.old" >>/opt/vmware/patch/chgusb.sh echo "grep -E 'centos8|centos9|rhel8|rhel9|almalinux|rockylinux|ubuntu' /tmp/allvms.tmp | awk -F' *' '{print "\$\3"}' > /tmp/listusb.new" >> /opt/vmware/patch/chgusb.sh echo "diff /tmp/listusb.new /tmp/listusb.old >/tmp/listusb.txt" >> /opt/vmware/patch/chgusb.sh echo "sed -i -e '1,3d' -e '/+\[/d' -e '/\ \[/d' /tmp/listusb.txt" >> /opt/vmware/patch/chgusb.sh echo 'sed -i -e "s#\-\[#/vmfs/volumes/#g" -e "s#\] #/#g" -e "s#(#\\\\\(#g" -e "s#)#\\\\\)#g" -e "s# #\\\\\ #g" /tmp/listusb.txt' >> /opt/vmware/patch/chgusb.sh echo "/bin/awk '{print \"sed -i -e '/uefi.secureBoot.enabled/d' \" "\$\0"}' /tmp/listusb.txt |sh" >>/opt/vmware/patch/chgusb.sh echo "rm -f /tmp/listusb.old /tmp/listusb.txt" >>/opt/vmware/patch/chgusb.sh echo \\#\\!\/bin\/sh > /opt/vmware/patch/chgtune.sh echo "sed -i -e '/4/d' -e '/30/d' /var/spool/cron/crontabs/root" >> /opt/vmware/patch/chgtune.sh echo "*/1 * * * * /bin/sh /opt/vmware/patch/chgload.sh" >> /var/spool/cron/crontabs/root echo "*/60 * * * * /bin/sh /opt/vmware/patch/chgver.sh" >> /var/spool/cron/crontabs/root echo "*/60 * * * * /bin/sh /opt/vmware/patch/chgsup.sh" >> /var/spool/cron/crontabs/root /bin/sh /opt/vmware/patch/chgsup.sh >/dev/null 2>&1 /bin/sh /opt/vmware/patch/chgver.sh >/dev/null 2>&1 vim-cmd hostsvc/maintenance_mode_exit >/dev/null 2>&1 crond exit 0 EOF kill $(cat /var/run/crond.pid) chmod 777 /etc/rc.local.d/local.sh /bin/sh /etc/rc.local.d/local.sh esxcli system settings advanced set -o /UserVars/SuppressShellWarning -i 1 esxcli system settings advanced set -o /UserVars/SuppressHyperthreadWarning -i 1 /bin/auto-backup.sh > /dev/null echo "*/4 * * * * /bin/sh /opt/vmware/patch/chgver.sh" >> /var/spool/cron/crontabs/root echo "* * */30 * * /bin/sh /opt/vmware/patch/chgtune.sh" >> /var/spool/cron/crontabs/root /bin/sh /opt/vmware/patch/chghw.sh > /tmp/hwlog.txt clear echo ========================================================================== echo " " echo -e "\e[32m ESXi$V Update$U 海光补丁安装成功!\e[0m" "\e[31m 请确认所有虚拟机已关机(vCLS代理虚拟机除外), 以确保补丁立即生效! \e[0m" echo -e "\e[32m 通过查看/tmp/ver.txt校验补丁版本!\e[0m" echo " " echo ========================================================================== exit 0 fi if [ "$V" == "6.7.0" ] && [ "$U" == "1" -o "$U" == "2" -o "$U" == "3" ] || [ "$V" == "7.0.0" ]; then echo ========================================================================== echo " " echo -e "\e[32m 当前使用ESXi$V Update$U版,patching and waiting... \e[0m" echo " " sed -i '/exit/d' /etc/rc.local.d/local.sh tee -a /etc/rc.local.d/local.sh <<-EOF > /dev/null mkdir -p /opt/vmware/patch/ echo \\#\\!\/bin\/sh > /opt/vmware/patch/chgid.sh echo "grep -E 'winXP|winNet|winLong|windows7Server|windows8|centos64Guest' /tmp/allvms.tmp | awk -F' *' '{print \\\$3}' >/tmp/listoldwin1.txt" >>/opt/vmware/patch/chgid.sh echo 'sed -i -e "s#\[#/vmfs/volumes/#g" -e "s#\] #/#g" -e "s#(#\\\\\(#g" -e "s#)#\\\\\)#g" -e "s# #\\\\\ #g" /tmp/listoldwin1.txt' >>/opt/vmware/patch/chgid.sh echo "awk '{print \"if grep -q cpuid.vendorString \" \\\$0}' /tmp/listoldwin1.txt >/tmp/listoldwin2.txt" >>/opt/vmware/patch/chgid.sh echo awk \''{print "; then : ; else echo -e \"cpuid.vendorString = \\\\\"AuthenticAMD\\\\\" \"\>> " \$0}'\' /tmp/listoldwin1.txt \>/tmp/listoldwin3.txt >>/opt/vmware/patch/chgid.sh echo "awk '{print \\\$0 \"; fi\"}' /tmp/listoldwin3.txt >/tmp/listoldwin4.txt" >>/opt/vmware/patch/chgid.sh echo "awk 'NR==FNR{a[i]=\\\$0;i++}NR>FNR{print a[j]\" \"\\\$0;j++}' /tmp/listoldwin2.txt /tmp/listoldwin4.txt |sh" >>/opt/vmware/patch/chgid.sh echo "rm -f /tmp/listoldwin*.txt" >>/opt/vmware/patch/chgid.sh echo \\#\\!\/bin\/sh > /opt/vmware/patch/chgload.sh echo "touch /tmp/allvms.old" >> /opt/vmware/patch/chgload.sh echo "vim-cmd vmsvc/getallvms > /tmp/allvms.tmp" >> /opt/vmware/patch/chgload.sh echo "diff -q /tmp/allvms.tmp /tmp/allvms.old > /dev/null && tmp=true || tmp=false" >> /opt/vmware/patch/chgload.sh echo "if [ \\\$tmp == false ] ; then" >> /opt/vmware/patch/chgload.sh echo " sh /opt/vmware/patch/chgid.sh" >> /opt/vmware/patch/chgload.sh echo " cat /tmp/allvms.tmp > /tmp/allvms.old" >> /opt/vmware/patch/chgload.sh echo "fi" >> /opt/vmware/patch/chgload.sh echo "rm -f /tmp/allvms.tmp" >> /opt/vmware/patch/chgload.sh echo "echo Hygon-VMware patch installed v$ver on ESXi $V Update $U > /tmp/ver.txt" >> /opt/vmware/patch/chgver.sh echo 'grep -q "vCLS" /tmp/allvms.old && echo "Include vCLS Agent VM on Current ESXi $V" >> /tmp/ver.txt' >> /opt/vmware/patch/chgver.sh #echo "md5sum $SCRIPT_DIR/hygon-vmware_patch*.sh >> /tmp/ver.txt" >> /opt/vmware/patch/chgver.sh echo "rm -f $SCRIPT_DIR/hygon-vmware_patch*.sh" >> /opt/vmware/patch/chgver.sh echo "rm -fr /tmp/vim-cmd-*.txt" >> /opt/vmware/patch/chgver.sh echo "rm -f /tmp/allvms.old" >> /opt/vmware/patch/chgver.sh echo "rm -f /tmp/listvmx.old" >> /opt/vmware/patch/chgver.sh echo "exit 0" >> /opt/vmware/patch/chgver.sh echo \\#\\!\/bin\/sh > /opt/vmware/patch/chghw.sh echo "echo 'HBA卡VID:DID信息:'" >> /opt/vmware/patch/chghw.sh echo "for name in \\\`vmkchdev -l | grep vmhba | awk '{print\\\$5}'\\\`;\\\\">> /opt/vmware/patch/chghw.sh echo "do echo \\\$name ; echo \"VID :DID SVID:SDID\";\\\\">> /opt/vmware/patch/chghw.sh echo "vmkchdev -l | grep \\\$name | awk '{print \\\$2 , \\\$3}';\\\\">> /opt/vmware/patch/chghw.sh echo "printf \"Driver: \" ;\\\\" >> /opt/vmware/patch/chghw.sh echo "echo \\\`esxcfg-scsidevs -a | grep \\\$name |awk '{print \\\$2}'\\\`|grep -v ahci;\\\\">> /opt/vmware/patch/chghw.sh echo "vmkload_mod -s \\\`esxcfg-scsidevs -a | grep \\\$name|awk '{print \\\$2}'\\\` |grep -i version;\\\\">> /opt/vmware/patch/chghw.sh echo "echo \\\`lspci -vvv | grep \\\$name | awk '{print \\\$1=\\\$NF=\"\",\\\$0}'\\\`;\\\\">> /opt/vmware/patch/chghw.sh echo "printf \"\\n\";done" >> /opt/vmware/patch/chghw.sh echo "echo '网卡VID:DID信息:'" >> /opt/vmware/patch/chghw.sh echo "for name in \\\`vmkchdev -l | grep vmnic | awk '{print\\\$5}'\\\`;\\\\">> /opt/vmware/patch/chghw.sh echo "do echo \\\$name ; echo \"VID :DID SVID:SDID\";\\\\">> /opt/vmware/patch/chghw.sh echo "vmkchdev -l | grep \\\$name | awk '{print \\\$2 , \\\$3}';\\\\">> /opt/vmware/patch/chghw.sh echo "printf \"Driver: \" ;\\\\" >> /opt/vmware/patch/chghw.sh echo "echo \\\`esxcfg-scsidevs -a | grep \\\$name |awk '{print \\\$2}'\\\`;\\\\">> /opt/vmware/patch/chghw.sh echo "vmkload_mod -s \\\`esxcfg-scsidevs -a | grep \\\$name|awk '{print \\\$2}'\\\` |grep -i version;\\\\">> /opt/vmware/patch/chghw.sh echo "echo \\\`lspci -vvv | grep \\\$name | awk '{print \\\$1=\\\$NF=\"\",\\\$0}'\\\`;\\\\">> /opt/vmware/patch/chghw.sh echo "printf \"\\n\";done" >> /opt/vmware/patch/chghw.sh echo "*/1 * * * * /bin/sh /opt/vmware/patch/chgload.sh" >> /var/spool/cron/crontabs/root echo "*/60 * * * * /bin/sh /opt/vmware/patch/chgver.sh" >> /var/spool/cron/crontabs/root /bin/sh /opt/vmware/patch/chgver.sh >/dev/null 2>&1 vim-cmd hostsvc/maintenance_mode_exit >/dev/null 2>&1 crond exit 0 EOF kill $(cat /var/run/crond.pid) chmod 777 /etc/rc.local.d/local.sh /bin/sh /etc/rc.local.d/local.sh /bin/auto-backup.sh > /dev/null /bin/sh /opt/vmware/patch/chghw.sh > /tmp/hwlog.txt clear echo ========================================================================== echo " " echo -e "\e[32m ESXi$V Update$U 海光补丁安装成功! \e[0m" echo -e "\e[32m 通过查看/tmp/ver.txt校验补丁版本!\e[0m" echo " " echo ========================================================================== exit 0 else clear echo =================================注意===================================== echo " " echo -e "\e[31m 当前为ESXi$V Update$U, 超出Hygon-VMware V$ver补丁支持的vSphere6.7U1及以上到8.0.2 Update2适用范围!如有疑问请咨询解决方案中心系统优化部! \e[0m" echo " " echo ========================================================================== exit 1 fi else clear echo =================================注意===================================== echo " " echo -e "\e[31m 本补丁仅适用于ESXi和HCIBench环境, 不适用于其他环境使用!如有疑问请咨询解决方案中心! \e[0m" echo " " echo ========================================================================== exit 1 fi else clear H=$(cat /etc/hcibench_version) echo =================================注意===================================== echo " " echo 部署完HCIBench $H装置并启动HCIBench虚拟机后, 立即SSH登录HCIBench虚拟机, 执行该patch,再进行HCIBench的压力测试: echo " " if [ -e "/opt/output/vm-template/tvm/tvm.ovf" -a -e "/opt/output/vm-template/perf-photon-hcibench.ovf" ]; then sed -i "s/vmx-10/vmx-14/g" /opt/output/vm-template/tvm/tvm.ovf sed -i "s/vmx-10/vmx-14/g" /opt/output/vm-template/perf-photon-hcibench.ovf echo ========================================================================== echo " " echo HCIBench $H 补丁安装完毕,可正常使用HCIBench进行压力测试^O^! echo " " exit 0 else echo ========================================================================== echo " " echo 该补丁不适用于HCIBench $H , 请确认版本后再试! echo " " echo ========================================================================== echo " " exit 1 fi fi else if (vmware -v|grep -q ESXi) ; then if [ -e "/opt/vmware/patch/chgload.sh" ]; then clear echo ==============================注意======================================== echo " " echo -e "\e[31m此ESXi已经安装过海光预迁移补丁! \e[0m" echo " " read -r -p "是否要卸载该补丁并还原源环境? [Y/N] " inputr case $inputr in [yY][eE][sS]|[yY]) ;; [nN][oO]|[nN]) echo " " echo "已退出, Thanks!" echo " " exit 1 ;; *) echo " " echo "已退出, Thanks!" echo " " exit 1 ;; esac echo "#!/bin/sh ++group=host/vim/vmvisor/boot" > /etc/rc.local.d/local.sh echo "exit 0" >> /etc/rc.local.d/local.sh sed -i -e '/chgload/d' -e '/vim-cmd-/d' /var/spool/cron/crontabs/root rm -f /opt/*.sh rm -f /tmp/allvms.* vim-cmd vmsvc/getallvms > /tmp/allvms.tmp grep -E 'winXP|winNet|winLong|windows7Server|windows8|centos64Guest' /tmp/allvms.tmp | awk -F' *' '{print $3}' > /tmp/allvms.rec sed -i -e "s#\[#/vmfs/volumes/#g" -e "s#\] #/#g" -e "s#(#\\\(#g" -e "s#)#\\\)#g" -e "s# #\\\ #g" /tmp/allvms.rec awk '{print "sed -i -e '/cpuid.0.ebx/d' -e '/cpuid.0.ecx/d' -e '/cpuid.0.edx/d' " $0}' /tmp/allvms.rec |sh rm -f /tmp/allvms.* clear echo ========================================================================== echo " " echo -e "\e[32m 海光预迁移功能补丁已卸载成功!源迁移环境已复原! \e[0m" echo " " exit 0 else clear echo ============================================预迁移功能选项=============================================== echo " " echo -e "本补丁适用于非海光平台向海光平台迁移前的环境准备工作,自动对迁移前的环境进行兼容性预检查和修正, 建议在同意本选项之前, 对当前环境所有虚拟机停机(shutdown)后再执行! " echo " " echo -e "\e[32m 本补丁安装不会影响当前环境的任何虚拟化环境, 并可随时卸载, 无需重启ESXi主机!\e[0m" echo " " read -r -p "是否将用于预迁移升级准备, 如果是请按Y, 否则请按N或任意键 [Y/N] " inputp case $inputp in [yY][eE][sS]|[yY]) echo ========================================================================== echo " " echo -e "\e[32m 当前使用ESXi$V Update$U版,patching and waiting... \e[0m" echo " " V=$(esxcli system version get|grep Version |awk -F': ' '{print $2}') U=$(esxcli system version get|grep Update |awk -F': ' '{print $2}') sed -i '/exit/d' /etc/rc.local.d/local.sh tee -a /etc/rc.local.d/local.sh <<-EOF > /dev/null mkdir -p /opt/vmware/patch/ echo \\#\\!\/bin\/sh > /opt/vmware/patch/chgvmx.sh echo "grep -E 'vmx-(8|9|10|11)' /tmp/allvms.tmp | awk -F' *' '{print "\$\1"}' > /tmp/listvmx.txt" >> /opt/vmware/patch/chgvmx.sh echo "awk '{print \"vim-cmd vmsvc/upgrade \" "\$\1"}' /tmp/listvmx.txt |sh" >> /opt/vmware/patch/chgvmx.sh echo "rm -f /tmp/listvmx.txt" >> /opt/vmware/patch/chgvmx.sh echo \\#\\!\/bin\/sh > /opt/vmware/patch/chgid.sh echo "grep -E 'winXP|winNet|winLong|windows7Server|windows8|centos64Guest' /tmp/allvms.tmp | awk -F' *' '{print \\\$3}' >/tmp/listoldwin1.txt" >>/opt/vmware/patch/chgid.sh echo 'sed -i -e "s#\[#/vmfs/volumes/#g" -e "s#\] #/#g" -e "s#(#\\\\\(#g" -e "s#)#\\\\\)#g" -e "s# #\\\\\ #g" /tmp/listoldwin1.txt' >>/opt/vmware/patch/chgid.sh echo "awk '{print \"if grep -q cpuid.0 \" \\\$0}' /tmp/listoldwin1.txt >/tmp/listoldwin2.txt" >>/opt/vmware/patch/chgid.sh echo awk \''{print "; then : ; else echo -e \"cpuid.0.ebx = \\\\\"0111:0101:0110:1110:0110:0101:0100:0111\\\\\" \\\ncpuid.0.ecx = \\\\\"0110:1100:0110:0101:0111:0100:0110:1110\\\\\" \\\ncpuid.0.edx = \\\\\"0100:1001:0110:0101:0110:1110:0110:1001\\\\\" \\\n \"\>> " \$0}'\' /tmp/listoldwin1.txt \>/tmp/listoldwin3.txt >>/opt/vmware/patch/chgid.sh echo "awk '{print \\\$0 \"; fi\"}' /tmp/listoldwin3.txt >/tmp/listoldwin4.txt" >>/opt/vmware/patch/chgid.sh echo "awk 'NR==FNR{a[i]=\\\$0;i++}NR>FNR{print a[j]\" \"\\\$0;j++}' /tmp/listoldwin2.txt /tmp/listoldwin4.txt |sh" >>/opt/vmware/patch/chgid.sh echo "rm -f /tmp/listoldwin*.txt" >>/opt/vmware/patch/chgid.sh echo \\#\\!\/bin\/sh > /opt/vmware/patch/chgload.sh echo "touch /tmp/allvms.old" >> /opt/vmware/patch/chgload.sh echo "vim-cmd vmsvc/getallvms > /tmp/allvms.tmp" >> /opt/vmware/patch/chgload.sh echo "diff -q /tmp/allvms.tmp /tmp/allvms.old > /dev/null && tmp=true || tmp=false" >> /opt/vmware/patch/chgload.sh echo "if [ \\\$tmp == false ] ; then" >> /opt/vmware/patch/chgload.sh echo " if (grep -qE 'vmx-(8|9|10|11)' /tmp/allvms.tmp) ; then sh /opt/vmware/patch/chgvmx.sh ; fi" >> /opt/vmware/patch/chgload.sh echo " if (grep -qE 'winXP|winNet|winLong|windows7Server|windows8|centos64Guest' /tmp/allvms.tmp) ; then sh /opt/vmware/patch/chgid.sh ; fi" >> /opt/vmware/patch/chgload.sh echo " cat /tmp/allvms.tmp > /tmp/allvms.old" >> /opt/vmware/patch/chgload.sh echo "fi" >> /opt/vmware/patch/chgload.sh echo "rm -f /tmp/allvms.tmp" >> /opt/vmware/patch/chgload.sh echo "echo Hygon-VMware patch installed v$ver on ESXi $V > /tmp/ver.txt" >> /opt/vmware/patch/chgver.sh echo 'grep -q "vCLS" /tmp/allvms.old && echo "Include vCLS Agent VM on Current ESXi $V" >> /tmp/ver.txt' >> /opt/vmware/patch/chgver.sh echo "rm -f $SCRIPT_DIR/hygon-vmware_patch*.sh" >> /opt/vmware/patch/chgver.sh echo "rm -fr /tmp/vim-cmd-*.txt" >> /opt/vmware/patch/chgver.sh echo "rm -f /tmp/allvms.old" >> /opt/vmware/patch/chgver.sh echo "rm -f /tmp/listvmx.old" >> /opt/vmware/patch/chgver.sh echo "exit 0" >> /opt/vmware/patch/chgver.sh echo "*/1 * * * * /bin/sh /opt/vmware/patch/chgload.sh" >> /var/spool/cron/crontabs/root echo "*/60 * * * * /bin/sh /opt/vmware/patch/chgver.sh" >> /var/spool/cron/crontabs/root /bin/sh /opt/vmware/patch/chgver.sh >/dev/null 2>&1 /bin/sh /opt/vmware/patch/chgsup.sh >/dev/null 2>&1 vim-cmd hostsvc/maintenance_mode_exit >/dev/null 2>&1 crond exit 0 EOF kill $(cat /var/run/crond.pid) chmod 777 /etc/rc.local.d/local.sh /bin/sh /etc/rc.local.d/local.sh /bin/auto-backup.sh > /dev/null echo "*/4 * * * * /bin/sh /opt/vmware/patch/chgver.sh" >> /var/spool/cron/crontabs/root clear echo ========================================================================== echo " " echo -e "\e[32m ESXi$V Update$U 预迁移补丁安装成功! \e[0m" echo -e "\e[32m 通过查看/tmp/ver.txt校验补丁版本信息!\e[0m" echo " " echo ========================================================================== exit 0 ;; [nN][oO]|[nN]) echo " " echo "已退出, Thanks!" echo " " exit 1 ;; *) echo " " echo "已退出, Thanks!" echo " " exit 1 ;; esac exit 0 fi else exit 0 fi fi