📄 upgrade_client
字号:
#!/bin/sh## @(#)upgrade_client 1.4 8/28/91 SMI## Copyright (c) 1990 Sun Microsystems, Inc.########################################################################### variables#INSDIR=/etc/installEXP_KVM_DIR=/export/exec/kvmKARCH1=sun4OLD_RELEASE_STR1=$AARCH.$KARCH1.sunos.$FROM_RELEASENEW_RELEASE_STR1=$AARCH.$KARCH1.sunos.$TO_RELEASESOFT_INFO1=$INSDIR/soft_info.$NEW_RELEASE_STR1SOFT_INFO_OLD1=$INSDIR/soft_info.$OLD_RELEASE_STR1[ -s $SOFT_INFO_OLD1 ] && \KVMPATH1=`$NAWK -F= ' {if ($1 == "kvm_path") print $2}' $SOFT_INFO_OLD1`EXP_KVM_DIR_K1=$EXP_KVM_DIR/$KARCH1KARCH2=sun4cOLD_RELEASE_STR2=$AARCH.$KARCH2.sunos.$FROM_RELEASENEW_RELEASE_STR2=$AARCH.$KARCH2.sunos.$TO_RELEASESOFT_INFO2=$INSDIR/soft_info.$NEW_RELEASE_STR2SOFT_INFO_OLD2=$INSDIR/soft_info.$OLD_RELEASE_STR2[ -s $SOFT_INFO_OLD2 ] && \KVMPATH2=`$NAWK -F= ' {if ($1 == "kvm_path") print $2}' $SOFT_INFO_OLD2`EXP_KVM_DIR_K2=$EXP_KVM_DIR/$KARCH2KARCH3=sun4mOLD_RELEASE_STR3=$AARCH.$KARCH3.sunos.$FROM_RELEASENEW_RELEASE_STR3=$AARCH.$KARCH3.sunos.$TO_RELEASESOFT_INFO3=$INSDIR/soft_info.$NEW_RELEASE_STR3SOFT_INFO_OLD3=$INSDIR/soft_info.$OLD_RELEASE_STR3[ -s $SOFT_INFO_OLD3 ] && \KVMPATH3=`$NAWK -F= ' {if ($1 == "kvm_path") print $2}' $SOFT_INFO_OLD3`EXP_KVM_DIR_K3=$EXP_KVM_DIR/$KARCH3CANDS=/tmp/clients$$########################################################################## utility functions### find_root client_name#find_root() { $NAWK -F= '{if ($1 == "root_path") print $2}' < $INSDIR/client.$1}## fix_kernel kernel_path root_directory#fix_kernel(){ if $VERBOSE; then log_tab; log_echo "Installing $2/vmunix" fi if $DUMMY ; then return fi if [ ! -s $1 ]; then log_echo "Can't find vmunix in $1!" return fi [ -f $2/vmunix ] && \ [ ! -s $2/vmunix.orig ] && \ $BACKUP && \ $MV $2/vmunix $2/vmunix.orig sum1=`$SUM $1` for i in 1 2; do $CP -p $1 $2/vmunix $SYNC; $SYNC sum2=`$SUM $2/vmunix` [ "$sum1" = "$sum2" ] && break if [ "$i" = 2 ]; then log_echo "Unable to install new kernel in $2!" [ ! -f $2/vmunix.orig ] && break log_echo "Restoring original kernel in $2" $MV $2/vmunix.orig $2/vmunix $SYNC; $SYNC fi done}## fix_kadb kadb_path root_directory#fix_kadb(){ if $VERBOSE; then log_tab; log_echo "Copy $1 to $2/kadb" fi if $DUMMY ; then return fi $CP $1 $2/kadb}## fix_fstab # Parameters: root_directory kvm_path# Replace the /usr/kvm mountpoint and add the pcfs line if not present.#fix_fstab() { FSTAB=$1/etc/fstab old_suffix=".`echo $2 | $SED "s/\.//g" | $TR '[A-Z]' '[a-z]'`" if [ x_$old_suffix = "x_" ]; then old_suffix=$OLD_SUFFIX fi if $VERBOSE; then log_tab; log_echo "$FSTAB SAVED TO" log_tab; log_echo "$FSTAB$old_suffix" fi if $DUMMY ; then return fi if [ ! -s $FSTAB ]; then log_echo "No $FSTAB ?" return 1 fi echo $FSTAB >> $COALESCE_LIST $MV $FSTAB $FSTAB$old_suffix $SED "s@sunos.$2@sunos.$TO_RELEASE@" \ $FSTAB$old_suffix > $FSTAB}## fix_tftpboot client_name client_karch#fix_tftpboot() { client_name=$1 client_karch=$2 CLIENT_KARCH=`echo $client_karch | $TR '[a-z]' '[A-Z]'` INET=`$NAWK ' {if (substr($1, 1, 1) != "#") if ($2 == "'$client_name'") print $1}' /etc/hosts |\ $NAWK -F. '{printf("%02x%02x%02x%02x\n", $1, $2, $3, $4);}' |\ $TR '[a-z]' '[A-Z]'` if [ -z "$INET" ]; then log_echo "Unable to fix tftpboot for the $client_name." return 1; fi BOOT=`echo boot.$client_karch.sunos.$TO_RELEASE` INET_CLIENT_KARCH=$INET.$CLIENT_KARCH if $VERBOSE; then log_tab; log_echo "client : $1 ($2)" log_tab; log_echo "BOOT : $BOOT" log_tab; log_echo "INET : $INET_CLIENT_KARCH" fi if $DUMMY ; then return fi $RM -f /tftpboot/$INET /tftpboot/$INET_CLIENT_KARCH $LN -s $BOOT /tftpboot/$INET $LN -s $BOOT /tftpboot/$INET_CLIENT_KARCH}## fix_installfiles client_name#fix_installfiles() { $DUMMY && return client_name=$1 kvmpath=$2 new_release_str=$3 $MV $INSDIR/client.$client_name $TMP $SED "s@^kvm_path.*@kvm_path=${kvmpath}@" $TMP |\ $SED "s@^arch_str.*@arch_str=${new_release_str}@" >\ $INSDIR/client.$client_name $RM $TMP}fix_again(){ $DUMMY && return client_name=$1 new_release_str=`$ECHO $2 | \ $NAWK -F. '{rel=""; for (i=3; i<NF; i++) rel=rel $i"."; rel=rel $NF; print rel}'` $MV $INSDIR/client.$client_name $TMP $SED "s@sunos.4.1.*@${new_release_str}@" $TMP > \ $INSDIR/client.$client_name $RM $TMP} get_yn() {while true; do log_echo -n $*' ? [yes] ' read answer case $answer in y | yes) log_echo yes; return 0;; "") return 0;; n | no) log_echo no; return 1;; *) log_echo $answer log_echo "Acceptable answers are: y/yes/n/no. Default is \"yes\". Retype, please." ;; esacdone}## what_karch client#what_karch(){ client=$1 arch_file=$INSDIR/client.$client arch_str0=`$CAT $arch_file | $GREP "^arch_str="` arch_str=`$EXPR $arch_str0 : 'arch_str=\(.*\)' '|' "1"` client_karch=`echo $arch_str | $NAWK -F. '{print $2}'` echo $client_karch}## what_release client#what_release(){ client=$1 arch_file=$INSDIR/client.$client arch_str0=`$CAT $arch_file | $GREP "^arch_str="` arch_str=`$EXPR $arch_str0 : 'arch_str=\(.*\)' '|' "1"` client_release=`echo $arch_str | $NAWK -F. '{rel=""; for (i=4; i<NF; i++) rel=rel $i"."; rel=rel $NF; print rel}'` echo $client_release}########################################################################## body of program##INTERACTIVE=true#ALL=falseALL=true# Find all the candidates. Take the union of# /etc/install/client_list.sun4.sun4.sunos.4.1.1*# /etc/install/client_list.sun4.sun4c.sunos.4.1.1*# /etc/install/client_list.sun4.sun4m.sunos.4.1.1*# /etc/install/client_list.sun4.sun4.sunos.4.1.2*# /etc/install/client_list.sun4.sun4c.sunos.4.1.2*# /etc/install/client_list.sun4.sun4m.sunos.4.1.2*#FROM_RELEASE_LIST=`$SORT -u $INSDIR/client_list.sun4.sun4*.sunos.4.1.* 2>/dev/null`for cand in $FROM_RELEASE_LIST; do client_file=$INSDIR/client.$cand if [ -f $client_file ]; then echo $cand fidone | $SORT -u > $CANDS## Are there any candidates?#if [ `wc -l < $CANDS` -eq 0 ]; then log_echo "No clients to upgrade."fi## Unless told otherwise, ask which ones we should do.#while $INTERACTIVE; do CLIENTS="" log_echo; log_echo "Upgrade the following clients to $TO_RELEASE?" for cand in `$CAT $CANDS`; do if get_yn $cand; then CLIENTS="$CLIENTS $cand" fi done if [ -z "$CLIENTS" ]; then $RM $CANDS exit 0 fi log_echo log_echo "These clients will be upgraded:" log_tab; log_echo " " $CLIENTS if get_yn Is this acceptable; then break fidone## If ALL, do all of them.#if $ALL; then CLIENTS=`$CAT $CANDS`fi$RM $CANDS# Fix the kvm and sysNEED1=falseNEED2=falseNEED3=falseif [ -s $CLIENT_UPGRADE_CANDIDATES ]; then$GREP "$AARCH:$KARCH1:4.1" $CLIENT_UPGRADE_CANDIDATES | $NAWK -F: '{print $NF}' | $SORT -u > $sun4_RELEASE_LSTfi if [ -s $sun4_RELEASE_LST ]; then NEED1=true $GREP "$FROM_RELEASE$" $sun4_RELEASE_LST > /dev/null rc=$? if [ $rc = 0 ]; then SUN4_RELEASE=$FROM_RELEASE if [ ! -s $SOFT_INFO_OLD1 ]; then log_echo "$SOFT_INFO_OLD1 is missing." cleanup 20 fi else SUN4_RELEASE=`$NAWK '{if (! one) {print $0; one=1}}' $sun4_RELEASE_LST` OLD_RELEASE_STR1_ADD="$KARCH1.sunos.$SUN4_RELEASE" SOFT_INFO_OLD1_ADD="$INSDIR/soft_info.$AARCH.$OLD_RELEASE_STR1_ADD" if [ ! -s $SOFT_INFO_OLD1_ADD ]; then log_echo "$SOFT_INFO_OLD1_ADD is missing." cleanup 20 fi KVMPATH1=`$NAWK -F= ' {if ($1 == "kvm_path") print $2}' $SOFT_INFO_OLD1_ADD` EXP_KVM_DIR_K1=$EXP_KVM_DIR/$OLD_RELEASE_STR1_ADD OLD_RELEASE_STR1="$AARCH.$OLD_RELEASE_STR1_ADD" fi $GREP -v "$SUN4_RELEASE$" $sun4_RELEASE_LST > $SUN4_REMOVE_LSTfi if [ -s $CLIENT_UPGRADE_CANDIDATES ]; then$GREP "$AARCH:$KARCH2:4.1" $CLIENT_UPGRADE_CANDIDATES | $NAWK -F: '{print $NF}' | $SORT -u > $sun4c_RELEASE_LSTfi if [ -s $sun4c_RELEASE_LST ]; then NEED2=true $GREP "$FROM_RELEASE$" $sun4c_RELEASE_LST > /dev/null rc=$? if [ $rc = 0 ]; then SUN4C_RELEASE=$FROM_RELEASE if [ ! -s $SOFT_INFO_OLD2 ]; then log_echo "$SOFT_INFO_OLD2 is missing." cleanup 20 fi else SUN4C_RELEASE=`$NAWK '{if (! one) {print $0; one=1}}' $sun4c_RELEASE_LST` OLD_RELEASE_STR2_ADD="$KARCH2.sunos.$SUN4C_RELEASE" SOFT_INFO_OLD2_ADD="$INSDIR/soft_info.$AARCH.$OLD_RELEASE_STR2_ADD" if [ ! -s $SOFT_INFO_OLD2_ADD ]; then log_echo "$SOFT_INFO_OLD2_ADD is missing." cleanup 20 fi KVMPATH2=`$NAWK -F= ' {if ($1 == "kvm_path") print $2}' $SOFT_INFO_OLD2_ADD` EXP_KVM_DIR_K2=$EXP_KVM_DIR/$OLD_RELEASE_STR2_ADD OLD_RELEASE_STR2="$AARCH.$OLD_RELEASE_STR2_ADD" fi $GREP -v "$SUN4C_RELEASE$" $sun4c_RELEASE_LST > $SUN4C_REMOVE_LSTfiif [ -s $CLIENT_UPGRADE_CANDIDATES ]; then$GREP "$AARCH:$KARCH3:4.1" $CLIENT_UPGRADE_CANDIDATES | $NAWK -F: '{print $NF}' | $SORT -u > $sun4m_RELEASE_LSTfi if [ -s $sun4m_RELEASE_LST ]; then NEED3=true $GREP "$FROM_RELEASE$" $sun4m_RELEASE_LST > /dev/null rc=$? if [ $rc = 0 ]; then SUN4M_RELEASE=$FROM_RELEASE if [ ! -s $SOFT_INFO_OLD3 ]; then log_echo "$SOFT_INFO_OLD3 is missing." cleanup 20 fi else SUN4M_RELEASE=`$NAWK '{if (! one) {print $0; one=1}}' $sun4m_RELEASE_LST` OLD_RELEASE_STR3_ADD="$KARCH3.sunos.$SUN4M_RELEASE" SOFT_INFO_OLD3_ADD="$INSDIR/soft_info.$AARCH.$OLD_RELEASE_STR3_ADD" if [ ! -s $SOFT_INFO_OLD3_ADD ]; then log_echo "$SOFT_INFO_OLD3_ADD is missing." cleanup 20 fi KVMPATH3=`$NAWK -F= ' {if ($1 == "kvm_path") print $2}' $SOFT_INFO_OLD3_ADD`
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -