X7ROOT File Manager
Current Path:
/var/VMOptimizationToolsLinux
var
/
VMOptimizationToolsLinux
/
📁
..
📄
LinuxUpdate.XML
(645 B)
📄
SangforVMSTool
(3.11 KB)
📄
SangforVMSTool.service
(194 B)
📄
action_common.sh
(13.34 KB)
📄
busybox_cmd_ln.sh
(2.24 KB)
📄
collect_test_data.sh
(1.16 KB)
📄
common_config.sh
(278 B)
📄
data_test_tool.sh
(12.59 KB)
📄
debian_vmconfig.sh
(10.74 KB)
📄
guest_system_config.sh
(1.82 KB)
📄
log.sh
(1.36 KB)
📄
mod_test.sh
(3.69 KB)
📄
mod_test1.sh
(914 B)
📄
net_common.sh
(915 B)
📄
redhat_vmconfig.sh
(11.14 KB)
📄
sangfor_guest_datareport
(21.66 KB)
📄
sangfor_heartalive.sh
(2.37 KB)
📄
sangfor_module_update
(28.11 KB)
📄
sangfor_set_network.sh
(504 B)
📄
sangfor_sfping
(3.85 KB)
📄
sangfor_sshkey_gen
(1.29 KB)
📄
sangfor_update_ipc_callback
(5.29 KB)
📄
sangfor_vm_proxyd
(3.45 KB)
📄
sangfor_vm_proxyd_r
(4.4 KB)
📄
sangfor_vm_proxyd_w
(1.32 KB)
📄
sangfor_vmconfig
(2.4 KB)
📄
sangfor_vmconfig_common
(27.99 KB)
📄
sangfor_vmconfig_ipc_callback
(4.75 KB)
📄
sangfor_watchdog
(3.95 KB)
📄
sfping.c
(15.68 KB)
📄
sfping.pl
(6.15 KB)
📄
startall
(1.78 KB)
📄
stopall
(1.11 KB)
📄
suse_vmconfig.sh
(6.19 KB)
📁
tools_x64
📁
tools_x86
📄
uni_test.sh
(2.59 KB)
📄
update_common_func
(4.35 KB)
📄
update_common_header
(4.86 KB)
📄
update_config
(2.89 KB)
📄
update_install
(28.84 KB)
📄
virtio_nic_attr_set.sh
(2.42 KB)
📄
virtio_nic_compat.sh
(5.28 KB)
📄
vm_ip_recover.sh
(16.66 KB)
📄
vm_ipc.sh
(9.06 KB)
📄
vmconfig_common_func
(10.76 KB)
📄
vmconfig_common_header
(3.37 KB)
📄
vmconfig_config
(805 B)
📄
vmtools-install.sh
(31.16 KB)
📄
watch_test.sh
(313 B)
📄
watchdog.sh
(1.39 KB)
📁
x64
📁
x86
Editing: sangfor_vmconfig_common
#!/bin/bash shell_dir=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) . "${shell_dir}/log.sh" . "${shell_dir}/vmconfig_config" . "${shell_dir}/vm_ipc.sh" . "${shell_dir}/vmconfig_common_header" . "${shell_dir}/update_common_func" . "${shell_dir}/watchdog.sh" . "${shell_dir}/vmconfig_common_func" . "${shell_dir}/redhat_vmconfig.sh" . "${shell_dir}/suse_vmconfig.sh" . "${shell_dir}/debian_vmconfig.sh" . "${shell_dir}/action_common.sh" #current directory declare g_current_dir="" #temp directory declare g_temp_dir="" # Get vmconfig file function # $1 The file name in the host # $2 The file path to save in the guest # return 0 is success and 1 is failed get_vm_config_file(){ if [ $# -ne 2 ];then log_error "argument number is error!" return 1 fi test -z "${g_temp_dir}" && return 1 test -z "${g_get_file_flag}" && return 1 local file_name="$1" local save_file_path="$2" local exit_code=1 log_debug "get_file:file_name:${file_name},save_file_path:${save_file_path}" #init local request_get_file_data_header="${g_header_json}" local request_get_file_data_json="${g_file_data_request_json}" #assign request_get_file_data_header="${request_get_file_data_header/"${g_replace_version_name}"/8208}" request_get_file_data_header="${request_get_file_data_header/"${g_replace_type_name}"/${MESSAGE_GET_VM_IP_CONFIG_REQ_LINUX}}" request_get_file_data_header="${request_get_file_data_header/"${g_replace_number_name}"/0}" request_get_file_data_header="${request_get_file_data_header/"${g_replace_response_packages_name}"/0}" request_get_file_data_json="${request_get_file_data_json/"${g_replace_header_name}"/${request_get_file_data_header}}" request_get_file_data_json="${request_get_file_data_json/"${g_replace_filename_name}"/${file_name}}" request_get_file_data_json="${request_get_file_data_json/"${g_replace_offset_name}"/0}" log_debug "request_get_file_data_json:${request_get_file_data_json}" #send request vm_ipc_to_local_host ${g_mode_id} 0 ${MESSAGE_GET_VM_IP_CONFIG_REQ_LINUX} "${request_get_file_data_json}" || return 1 local time_out=${g_req_config_timeout} local use_time=0 while [ ! -e "${g_temp_dir}/${g_get_file_flag}" ] do log_debug "${g_temp_dir}/${g_get_file_flag} not exist!" if [ ${use_time} -ge ${time_out} ];then log_warn "get file time out!" break; fi sleep 1 use_time=$((use_time+1)) done if [ ! -e "${g_temp_dir}/${g_get_file_flag}" ];then log_error "get file:${file_name} failed!" return 1 fi log_debug "${g_temp_dir}/${g_get_file_flag} exist!" mv -f "${g_temp_dir}/${g_save_file_temp_name}" "${save_file_path}" >/dev/null 2>&1 exit_code=$? log_info "remove file ${g_temp_dir}/${g_get_file_flag}" rm -f "${g_temp_dir}/${g_get_file_flag}" 2>/dev/null if [ $? -ne 0 ];then log_warn "get_file:rm -f ${g_temp_dir}/${g_get_file_flag} failed!" fi if [ ${exit_code} -ne 0 ];then log_error "get_file:move file failed!src file is:${g_temp_dir}/${g_save_file_temp_name} des file is:${save_file_path}" return 1 fi return 0 } #Get the current directory. #failed 1 #success 0 get_current_dir(){ g_current_dir="${shell_dir}" if [ x"${g_current_dir}" = x"" ];then log_error "get_current_dir() failed!" return 1 fi return 0 } #Init environment. init_env(){ get_current_dir exit_code=$? if [ ${exit_code} -eq 1 ];then log_error "get_current_dir() failed! " return 1 fi #temp directory. g_temp_dir="$( cd "${g_current_dir}/../" && pwd )/${g_temp_dir_name}" test -z "${g_current_dir}" && return 1 test -z "${g_temp_dir}" && return 1 create_dir "${g_temp_dir}" exit_code=$? if [ ${exit_code} -ne 0 ];then log_error "create dir $g_temp_dir...failed" return 1 fi return 0 } # set hostname # param $1: hostname # return 0(success),1(fail) set_hostname() { local host_name=$1 local config_file="" test -z "$host_name" && return 1 if [ ${#host_name} -gt 64 ];then log_error "hostname is too long ${#host_name}" return 1 fi if [ -e "/etc/hostname" ];then echo "${host_name}" >/etc/hostname elif [ -e "/etc/HOSTNAME" ];then echo "${host_name}" >/etc/HOSTNAME else # centos6 config_file="/etc/sysconfig/network" # format: HOSTNAME=xxx sed -i "/^\s*HOSTNAME/d" $config_file echo "HOSTNAME=${host_name}" >>$config_file fi hostname "$host_name" log_info "set hostname $host_name...success" return 0 } # read config and set hostname # param $1: hostname config file # return 0(success),1(fail) host_config_hostname() { local config_file_name=$1 local hostname="" if [ ! -e $config_file_name ];then log_error "no such file ${config_file_name}" return 1 fi hostname=`cat $config_file_name | grep hostname | awk -F "," '{print $1}'|awk -F ":" '{print $2}'` log_info "###hostname=$hostname" if test -z "$hostname";then log_error "hostname is not set" return 1 fi set_hostname $hostname return $? } # read config and set password # param $1: password config file # return 0(success),1(fail) host_config_password() { local config_file_name=$1 local root_pwd="" if [ ! -e $config_file_name ];then log_error "no such file ${config_file_name}" return 1 fi root_pwd=`cat $config_file_name | grep pwd_info | awk -F, '{print $1}'` root_pwd=`expr "$root_pwd" : '.*guest_pwd=\(.*\).*'` if [ ! $root_pwd ];then log_error "root_pwd is not set" return 1 fi set_root_pwd $root_pwd return $? } update_vmconfig(){ local exit_code=1; #Clean the environment test -z "${g_temp_dir}" && return 1 log_info "clear dir ${g_temp_dir}" rm -rf "${g_temp_dir}"/* 2>/dev/null exit_code=$? if [ ${exit_code} -ne 0 ];then log_error "clear dir $g_temp_dir...failed" return 1 fi create_dir "${g_temp_dir}" exit_code=$? if [ ${exit_code} -ne 0 ];then log_error "create dir $g_temp_dir...failed" return 1 fi #Download the vmconfig file. get_vm_config_file "${g_vm_config_file_name}" "${g_temp_dir}/${g_vm_config_file_name}" exit_code=$? if [ ${exit_code} -eq 1 ];then log_error "get_vm_config_file failed!" return 1 fi return 0 } # 检测密码是否改变 # param: none # return 0(changed),1(not changed) check_passwd_config_changed(){ local vmconfig_file="${g_temp_dir}/${g_vm_config_file_name}" local password_file="${g_temp_dir}/${g_password_config_file_name}.readfile" local cur_password_file="${shell_dir}/${g_password_config_file_name}" if [ ! -e $vmconfig_file ];then log_error "no such file ${vmconfig_file}" return 1 fi echo "" > ${password_file} cat ${vmconfig_file} |awk 'BEGIN{RS="\n\n"}NR==1{print}' |grep pwd_info >> ${password_file} diff ${cur_password_file} ${password_file} >/dev/null 2>&1 if [ $? -ne 0 ];then if [ -e ${cur_password_file} ];then unlink ${cur_password_file} fi log_info "${password_file} and ${cur_password_file} is diff" cp ${password_file} ${cur_password_file} return 0 fi return 1 } # 检测hostname配置是否改变 # param: none # return 0(changed),1(not changed) check_hostname_config_changed(){ local vmconfig_file="${g_temp_dir}/${g_vm_config_file_name}" local hostname_file="${g_temp_dir}/${g_hostname_config_file_name}.readfile" local cur_hostname_file="${shell_dir}/${g_hostname_config_file_name}" if [ ! -e $vmconfig_file ];then log_error "no such file ${vmconfig_file}" return 1 fi echo "" > ${hostname_file} #get hostname config cat ${vmconfig_file} |awk 'BEGIN{RS="\n\n"}NR==1{print}' |grep hostname >> ${hostname_file} diff ${cur_hostname_file} ${hostname_file} >/dev/null 2>&1 if [ $? -ne 0 ];then if [ -e ${cur_hostname_file}} ];then unlink ${cur_hostname_file} fi cp ${hostname_file} ${cur_hostname_file} log_info "${hostname_file} and ${cur_hostname_file} is diff" return 0 fi return 1 } # Fix TD 92167 获取当前网卡和上次网卡之间的变化信息 # param: $1 新获取的网卡信息文件 # param: $2 当前系统正在使用的网卡信息文件 # param: $3 网卡信息变化信息的保存文件 # return 返回0表示没有发生变化,1表示发生了变化 get_network_config_changed(){ local new_network_file=$1 local cur_network_file=$2 local changed_network_file=$3 if [ -z $new_network_file ] || [ -z $cur_network_file ] || [ -z $changed_network_file ];then log_error "[get_network_config_changed]Param err" return 0 fi #如果当前网卡信息文件不存在,打印日志.当做网卡信息没有变化 if [ ! -e $new_network_file ];then log_error "[get_network_config_changed]no find cur network info file: ${new_network_file}" return 0 fi #如果上次的网卡信息文件不存在,打印日志。当做网卡信息全部有变化 if [ ! -e $cur_network_file ];then log_warn "[get_network_config_changed]no find last network info file: ${cur_network_file}" cp $new_network_file $changed_network_file return 1 fi #检查上次网卡信息和当前网卡信息是否发生变化 has_changed=$(diff $new_network_file $cur_network_file) if [ x"$has_changed" != x"" ];then #只获取修改或者新增的网卡信息 diff $new_network_file $cur_network_file | grep ip_net | grep '<' |awk -F '<' '{print $2}' |sed 's/^\s*//g' > $changed_network_file return 1 fi return 0 } # 检查虚拟机配置文件是否无效 # 这里通过检查虚拟机配置文件如果没有 memory 字眼,我们就认为虚拟机配置无效 # return 1表示valid,0表示not valid check_vmconf_valid() { local vmconfig_file=$1 if [ ! -f $vmconfig_file ];then log_error "[check_vmconf_valid] Not valid: no such file ${vmconfig_file}" return 0 fi local has_memory=$(cat $vmconfig_file |grep memory) if [ x"$has_memory" == x"" ];then log_error "[check_vmconf_valid] Not valid: no find memory: ${vmconfig_file}" return 0 fi return 1 } # 检测网络配置是否改变 # param: none # return 0(changed),1(not changed) check_network_config_changed(){ local vmconfig_file="${g_temp_dir}/${g_vm_config_file_name}" local network_file="${g_temp_dir}/${g_network_config_file_name}.readfile" local cur_network_file="${shell_dir}/${g_network_config_file_name}" local changed_network_file="${g_temp_dir}/${g_network_config_file_name}.changed" if [ ! -e $vmconfig_file ];then log_error "no such file ${vmconfig_file}" return 1 fi # 判断配置文件有效性,如果没有包含 memory 字眼我们就认为配置无效 check_vmconf_valid ${vmconfig_file} if [ $? -eq 0 ];then log_error "[check_network_config_changed]no valid config file: ${vmconfig_file}" return 1 fi echo "" > ${network_file} cat ${vmconfig_file} |awk 'BEGIN{RS="\n\n"}NR==1{print}' |grep ip_net >> ${network_file} #获取那些网卡的信息发生了变化,后面设置只对发生变化的网卡设置IP即可 get_network_config_changed ${network_file} ${cur_network_file} ${changed_network_file} if [ $? -ne 0 ];then if [ -e ${cur_network_file}} ];then unlink ${cur_network_file} fi log_info "${network_file} and ${cur_network_file} is diff" cp ${network_file} ${cur_network_file} return 0 fi return 1 } check_networkmanager_support_manage() { main_version=`NetworkManager --version|awk -F. '{print $1}'` test -z "$main_version" && return 1 if [ $main_version -ne 0 ];then return 0 fi sub_version=`NetworkManager --version|awk -F. '{if(NF>2) print $2"."$3}'` test -z "$sub_version" && return 1 log_debug "main=$main_version,sub=$sub_version" if [ `echo "$sub_version >= 9.8"| bc` -eq 1 ];then return 0 else return 1 fi } # param $1: config_type # return 0(success),1(fail) restart_network() { local config_type=$1 log_info "begin restart network,type=$config_type" if [ $config_type -eq $REDHAT_SERIES_CONFIG_TYPE ];then /etc/init.d/network restart >/dev/null 2>&1 elif [ $config_type -eq $DEBIAN_SERIES_CONFIG_TYPE ];then ifdown -a >/dev/null 2>&1 ifup -a >/dev/null 2>&1 elif [ $config_type -eq $SUSE_SERIES_CONFIG_TYPE ];then service network restart >/dev/null 2>&1 else log_error "invalid config type $config_type" return 1 fi sleep 10 update_dns "$config_type" log_info "restart network...ok" return 0 } # 等待进程列表完成,由于sangfor_vmconfig服务有常驻 # 子进程sangfor_vmconfig_callback, 不可以直接使用wait # param $1: pid list wait_pids_finished() { local pid_list=$1 for pid in ${pid_list} do log_debug "wait pid: $pid" wait $pid done } reload_interfaces() { local ifname_list=$1 local subproc_pid_list=() log_info "## reload interfaces,list=$ifname_list" test -z "$ifname_list" && return 1 # 避免多个网卡的ip交换使用,先全部down了再up for ifname in ${ifname_list} do { log_info "ifdown ifname=$ifname" ifdown "$ifname" >/dev/null 2>&1 } & subproc_pid=$! log_debug "ifdown ifname=$ifname, pid=$subproc_pid" subproc_pid_list=("${subproc_pid_list[@]}" "$subproc_pid") done wait_pids_finished "${subproc_pid_list[*]}" subproc_pid_list=() for ifname in ${ifname_list} do { log_info "ifup ifname=$ifname" ifup "$ifname">/dev/null 2>&1 } & subproc_pid=$! log_debug "ifup ifname=$ifname, pid=$subproc_pid" subproc_pid_list=("${subproc_pid_list[@]}" "$subproc_pid") done wait_pids_finished "${subproc_pid_list[*]}" log_info "## reload interfaces finished" sleep 10 update_dns "$config_type" return 0 } network_manager_handle() { local config_type=$1 local res="" log_info "network_manager_handle,type=$config_type" if [ $config_type -eq $DEBIAN_SERIES_CONFIG_TYPE ];then #如果安装了NetworkManager,需要取消接管 if [ -d "/etc/NetworkManager" ];then log_debug "##handle NetworkManager disable NetworkManager" disable_network_manager killall -9 NetworkManager >/dev/null 2>&1 fi #Fix TD 87612, 有些版本的NetworkManager启用存在下面两个问题: # 1、可能存在多个网卡设置同个IP的问题。 # 原因是我们虚拟化工具设置IP配置文件时候,没有设置HWADDR字段。存在问题的版本是centos6.x。例如centos6.5。 # 2: 链路不通的网卡,IP设置不上去的问题。但如果链路通的时候 NetwokManager 会重新自动设置上去。存在问题的版本是centos7.1。 #经过讨论,这里设置网卡配置时候添加HWADDR字段,NetwokManager服务就不停用了。所以这里注释掉 :<<EOF elif [ $config_type -eq $REDHAT_SERIES_CONFIG_TYPE ];then # TD69399 centos系统NetworkManager服务同network冲突,7.2以后无该影响 res=`cat /etc/redhat-release | grep -e "release 6" -e "release 7.1"` if [ x"" != x"${res}" ];then log_info "## stop network manager..." service NetworkManager stop >/dev/null 2>&1 /chkconfig |ststemctl fi EOF else log_debug "not need to handle networkmanager $config_type" return fi log_info "networkmanager handle...ok" } update_dns() { local config_type=$1 if [ $config_type -eq $SUSE_SERIES_CONFIG_TYPE ];then netconfig update -f >/dev/null 2>&1 else resolvconf -u >/dev/null 2>&1 fi } network_diagnose() { local file_name=$1 local macaddr="" local ip="" local cur_ip="" local config_type=0 local dns_num=0 local cur_dns_num=0 log_info "##begin network diagnose" get_network_config_type config_type=$? if [ $config_type -eq 255 ]; then log_error "error,system is not support" return 1 fi if [ ! -e ${file_name} ];then log_error "no such file ${file_name}" return 1 fi #format: ip_net1:net1=FE:FC:FE:13:B9:01,ip=192.168.1.10,mask=255.255.255.0,gateway=192.168.1.1,dns1=8.8.8.8,dns2= for i in `cat ${file_name} |awk 'BEGIN{RS="\n\n"}NR==1{print}' |grep ip |awk '{print $2}'` do macaddr=`echo $i|awk -F, '{print $1}'|awk -F= '{print $2}'` if [ x"${macaddr}" == x"" ];then log_error "invalid macaddr" continue fi ifname=$(get_ifname_by_mac ${macaddr}) if [ x"${ifname}" == x"" ];then log_error "invalid ifname" continue fi ip=`echo $i|awk -F, '{print $2}'|awk -F= '{print $2}'` cur_ip=`get_if_ip $ifname` if [ x"" != x"$ip" ] && [ x"$ip" != x"$cur_ip" ];then log_warn "ip is diff,{$ip,$cur_ip},restart network again" restart_network "$config_type" return 1 fi dns1=`echo $i|awk -F, '{print $5}'|awk -F= '{print $2}'` if [ x"$dns1" != x"" ];then dns_num=`expr $dns_num + 1` fi dns2=`echo $i|awk -F, '{print $6}'|awk -F= '{print $2}'` if [ x"$dns2" != x"" ];then dns_num=`expr $dns_num + 1` fi done cur_dns_num=`get_sys_dns_num` log_info "dns count=$dns_num,cur_dns=$cur_dns_num" # 考虑dhcp获取的dns,配置中的dns不一定全部更新到resolv.conf if [ $cur_dns_num -ne $dns_num ] && [ $cur_dns_num -lt 3 ];then log_warn "update dns.....again" update_dns "$config_type" return 1 fi return 0 } # return: 1(redhat series system) # 2(debian series system) # 3(suse series system) # 255(not support) get_network_config_type() { #redhat series cat /proc/version | grep -i "Red Hat" >/dev/null 2>&1 if [ $? -eq 0 ]; then log_info "redhat system" return $REDHAT_SERIES_CONFIG_TYPE fi #debian series cat /proc/version | grep -i "ubuntu" >/dev/null 2>&1 if [ $? -eq 0 ]; then log_info "ubuntu system" return $DEBIAN_SERIES_CONFIG_TYPE fi cat /proc/version | grep -i "suse" >/dev/null 2>&1 if [ $? -eq 0 ]; then log_info "suse system" return $SUSE_SERIES_CONFIG_TYPE fi #get type by check network config dir or file if [ -d $g_redhat_network_cfg_dir ];then log_info "redhat series system" return $REDHAT_SERIES_CONFIG_TYPE fi if [ -d $g_debian_network_cfg_dir ];then log_info "debian series system" return $DEBIAN_SERIES_CONFIG_TYPE fi if [ -d $g_suse_network_cfg_dir ];then log_info "redhat series system" return $SUSE_SERIES_CONFIG_TYPE fi log_error "system is not support." return 255 } address_validate() { local ipaddr=$1 local netmask=$2 local gateway=$3 local dns1=$4 local dns2=$5 if ! test -z "$ipaddr";then if [ x"$netmask" == x"" ];then log_error "netmask is none" return 1 fi else # 只配置dns if [ x"$netmask" != x"" ] || [ x"$gateway" != x"" ];then log_error "without ip,netmask and gateway should not be none{$netmask,$gateway}" return 1 fi if [ x"$dns1" == x"" ] && [ x"$dns2" == x"" ];then log_error "dns is none" return 1 fi fi for addr in $@; do if [ x"$addr" != x"" ];then is_valid_inet_address $addr if [ $? -ne 0 ];then log_error "invalid inet addr {$addr}" return 1 fi fi done return 0 } # 仅更新网口的DNS # param $1: ifname,eg:eth0 # param $2: primary dns,eg:192.168.100.1 # param $3: secondary dns,eg:8.8.8.8 config_ifaces_dns() { local ifaces=$1 local dns1=$2 local dns2=$3 if [ x"${ifname}" == x"" ];then log_error "invalid ifname" return 1 fi if [ $config_type -eq $REDHAT_SERIES_CONFIG_TYPE ];then log_info "redhat dns config" redhat_dns_cfg_handle "$ifaces" "$dns1" "$dns2" elif [ $config_type -eq $DEBIAN_SERIES_CONFIG_TYPE ];then log_info "debian dns config" debian_dns_cfg_handle "$ifaces" "$dns1" "$dns2" elif [ $config_type -eq $SUSE_SERIES_CONFIG_TYPE ];then log_info "suse dns config" suse_dns_cfg_handle "$ifaces" "$dns1" "$dns2" else log_error "error,system is not support." return 1 fi return 0 } # config network # param $1: ifname,eg:eth0 # param $2: ip,eg:192.168.100.100 # param $3: net mask,eg:255.255.255.0 # param $4: gateway,eg:192.168.100.1 # param $5: primary dns,eg:192.168.100.1 # param $6: secondary dns,eg:8.8.8.8 # param $7: system network config type 1(redhat) 2(debian) 3(suse) # param $8: macaddr, eg:FE:FC:FE:66:82:31. Fix TD87612,Centos6.5的NetworkManager根据macaddr设置指定网卡IP,如果不设置可能导致其他网卡都设置为同一个IP # return 0(success),1(fail) config_network() { local ifname=$1 local ipaddr=$2 local netmask=$3 local gateway=$4 local dns1=$5 local dns2=$6 local config_type=$7 local macaddr=$8 if [ x"${ifname}" == x"" ];then log_error "invalid ifname" return 1 fi if [ $config_type -eq $REDHAT_SERIES_CONFIG_TYPE ];then redhat_network_cfg_handle "$ifname" "$ipaddr" "$netmask" "$gateway" "$dns1" "$dns2" "$macaddr" log_info "redhat config" elif [ $config_type -eq $DEBIAN_SERIES_CONFIG_TYPE ];then debian_network_cfg_handle "$ifname" "$ipaddr" "$netmask" "$gateway" "$dns1" "$dns2" log_info "debian config" elif [ $config_type -eq $SUSE_SERIES_CONFIG_TYPE ];then suse_network_cfg_handle "$ifname" "$ipaddr" "$netmask" "$gateway" "$dns1" "$dns2" log_info "suse config" else log_error "error,system is not support." return 1 fi # sync防止修改配置的时候断电丢数据 log_info "sync data" sync return 0 } # param $1: network config file # return 0(success),1(fail) host_config_network() { local file_name=$1 local macaddr="" local ip="" local mask="" local gateway="" local config_type=0 local valid_ifname_list=() get_network_config_type config_type=$? if [ $config_type -eq 255 ]; then log_error "error,system is not support" return 1 fi if [ ! -e ${file_name} ];then log_error "no such file ${file_name}" return 1 fi #format: ip_net1:net1=FE:FC:FE:13:B9:01,ip=192.168.1.10,mask=255.255.255.0,gateway=192.168.1.1,dns1=8.8.8.8,dns2= for i in `cat ${file_name} |awk 'BEGIN{RS="\n\n"}NR==1{print}' |grep ip |awk '{print $2}'` do log_info "[host_config_network]read from file ${file_name}: $i" macaddr=`echo $i|awk -F, '{print $1}'|awk -F= '{print $2}'` if [ x"${macaddr}" == x"" ];then log_error "invalid macaddr" continue fi ifname=$(get_ifname_by_mac ${macaddr}) if [ x"${ifname}" == x"" ];then log_error "invalid ifname" continue fi ip=`echo $i|awk -F, '{print $2}'|awk -F= '{print $2}'` mask=`echo $i|awk -F, '{print $3}'|awk -F= '{print $2}'` gateway=`echo $i|awk -F, '{print $4}'|awk -F= '{print $2}'` dns1=`echo $i|awk -F, '{print $5}'|awk -F= '{print $2}'` dns2=`echo $i|awk -F, '{print $6}'|awk -F= '{print $2}'` address_validate "$ip" "$mask" "$gateway" "$dns1" "$dns2" if [ $? -ne 0 ]; then log_error "address is invalid {$ip,$mask,$gateway,$dns1,$dns2}" continue fi # 判断ip等信息是否改变,如果改变加入改变列表中 check_if_config_changed "$ifname" "$ip" "$mask" "$gateway" "$dns1" "$dns2" if [ $? -eq 0 ]; then config_network "$ifname" "$ip" "$mask" "$gateway" "$dns1" "$dns2" "$config_type" "$macaddr" valid_ifname_list=("${valid_ifname_list[@]}" "$ifname") fi done log_info "valid ifname list=${valid_ifname_list}" test -z "$valid_ifname_list" && return 0 # 需要等写入配置文件后操作networkmanager network_manager_handle "$config_type" reload_interfaces "${valid_ifname_list[*]}" return 0 } update_all_if_dns() { log_info "##update dns handle" local file_name="${g_temp_dir}/${g_network_config_file_name}.changed" local macaddr="" local ip="" local mask="" local gateway="" local config_type=0 local valid_ifname_list=() local target_dns1="" local target_dns2="" # 获取系统类型 get_network_config_type config_type=$? if [ $config_type -eq 255 ]; then log_error "error,system is not support" return 1 fi if [ ! -e ${file_name} ];then log_error "no such file ${file_name}" return 1 fi #format: ip_net1:net1=FE:FC:FE:13:B9:01,ip=192.168.1.10,mask=255.255.255.0,gateway=192.168.1.1,dns1=8.8.8.8,dns2= for i in `cat ${file_name} |awk 'BEGIN{RS="\n\n"}NR==1{print}' |grep ip |awk '{print $2}'` do macaddr=`echo $i|awk -F, '{print $1}'|awk -F= '{print $2}'` if [ x"${macaddr}" == x"" ];then log_error "invalid macaddr" continue fi ifname=$(get_ifname_by_mac ${macaddr}) if [ x"${ifname}" == x"" ];then log_error "invalid ifname" continue fi ip=`echo $i|awk -F, '{print $2}'|awk -F= '{print $2}'` mask=`echo $i|awk -F, '{print $3}'|awk -F= '{print $2}'` gateway=`echo $i|awk -F, '{print $4}'|awk -F= '{print $2}'` dns1=`echo $i|awk -F, '{print $5}'|awk -F= '{print $2}'` dns2=`echo $i|awk -F, '{print $6}'|awk -F= '{print $2}'` # 校验配置合法性,如果IP不合法,该网口配置dns也是无效的 address_validate "$ip" "$mask" "$gateway" "$dns1" "$dns2" if [ $? -ne 0 ]; then log_error "update_dns: $ifname address is invalid {$ip,$mask,$gateway,$dns1,$dns2}" continue fi target_dns1=$dns1 target_dns2=$dns2 valid_ifname_list=("${valid_ifname_list[@]}" "$ifname") done log_info "valid ifname list=${valid_ifname_list[*]}, target_dns1: $target_dns1; target_dns2: $target_dns2" test -z "$valid_ifname_list" && return 0 config_ifaces_dns "${valid_ifname_list[*]}" "$target_dns1" "$target_dns2" } network_config() { log_info "##network config changed" local changed_network_file="${g_temp_dir}/${g_network_config_file_name}.changed" host_config_network ${changed_network_file} # 检测网络是否正常 while true do #防止超时 watchdog_check_once network_diagnose ${changed_network_file} if [ $? -eq 0 ] || [ $check_network_count -ge $g_vmconfig_check_count ];then check_network_count=0 log_info "diagnose network.......ok" echo "1" > "$g_current_dir/update_network.flag" break fi sleep ${g_vmconfig_check_time} check_network_count=`expr $check_network_count + 1` log_info "diagnose count = $check_network_count" done } immediately_set_network() { log "start immediately_set_network!" update_vmconfig if [ $? -ne 0 ];then log "update_vmconfig failed" return 1 fi log "start immediately_set_network! check_network_config_changed" check_network_config_changed if [ $? -eq 0 ];then log "immediately_set_network! check_network_config_changed end" if [ "$1" == "dns" ]; then update_all_if_dns else network_config fi fi log "immediately_set_network! end" return 0 }
Upload File
Create Folder