⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 upgrade_client

📁 操作系统SunOS 4.1.3版本的源码
💻
📖 第 1 页 / 共 2 页
字号:
#!/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 + -