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

📄 gentapes

📁 <B>Digital的Unix操作系统VAX 4.2源码</B>
💻
📖 第 1 页 / 共 3 页
字号:
	    rm -f /tmp/RTLDD$$	    return 0	else	    echo 1>&2 "Cannot read from $DEV:"	    cat 1>&2 /tmp/RTLDD$$; echo 1>&2 " "	    rm -f /tmp/RTLDD$$	    return 1	fi	;;esacecho 1>&2 "?$FUNC: Unexpected return."return 1)}GT_Get_Arguments(){(FUNC=GT_Get_Argumentstest $DEBUG && echo 1>&2 "DEBUG: $FUNC($*)"WRITE=0 VFY=0 CHECK_ONLY=0 HOST= KITCODE= DEV= DEVTYPE= STAT=while : truedo    case "$1" in	-verify|-v*)	    VFY=1	    shift	    ;;	-write|-w*)	    WRITE=1	    shift	    ;;	-check_only|-c*)	    CHECK_ONLY=1	    shift	    ;;	-help|-h*)	    echo "${GENTAPES_USAGE}" | more 1>&2	    return 1	    ;;	-*)	    (echo "$PROG.$FUNC: Invalid flag-- '$1'\n"	     echo "${GENTAPES_USAGE}") | more 1>&2	    return 1	    ;;	*)	    break	    ;;    esacdonecase "$WRITE$VFY" in    00)	WRITE=1 VFY=1	;;esacif [ $CHECK_ONLY -ne 0 ]then	WRITE=1 VFY=0ficase $# in    2)	        DEV=$2	if file $DEV | grep -s "TK.*" > /dev/null || test "$DEV" = "/dev/null"	then	    DEVTYPE="TK"	else	    DEVTYPE="MT"	fi	test "$DEBUG" && echo 1>&2 "DEBUG: DEVTYPE=$DEVTYPE"	eval `_U_Get_Hostname "$1"` || return 1	KITCODE="$REMAINDER"	;;    *)  (echo "?Invalid number of arguments ($#): $*\n"	 echo 1>&2 "${GENTAPES_USAGE}" ) | more 1>&2	return 1	;;esacecho WRITE='"'$WRITE'"' VFY='"'$VFY'"' CHECK_ONLY='"'$CHECK_ONLY'"' \	HOST='"'$HOST'"' KITCODE='"'$KITCODE'"'\	 DEV='"'$DEV'"' DEVTYPE='"'$DEVTYPE'"'return 0)}GT_Create_Kit()    {    (test $DEBUG && echo 1>&2 "DEBUG: GT_Create_Kit($*)")    VERIFYLIST=    OPNAME="Generating"    if [ $CHECK_ONLY -ne 0 ]    then	OPNAME="Checking"    fi	    DISPHOST=`echo $HOST | sed 's=\(.*/.*\)/.*=\1/password::='`    case $THISVOL in	"" | 0)	    echo 1>&2 "$OPNAME $KITCODE kit from $DISPHOST on $DEV"	    ;;	*)	    echo 1>&2 "$OPNAME volume $THISVOL of $KITCODE from $DISPHOST on $DEV"	    ;;    esac    if [ $CHECK_ONLY -ne 0 ]    then	echo 1>&2 "Note: component existence check only. No kit will be made."    fi    if test ! "$DEV" = /dev/null    then	mt -f $DEV rew &	echo 1>&2 rewind.    fi    if [ $CHECK_ONLY -eq 0 ]    then        echo 1>&2 "Write."    fi    PREVSUBSET=    for K in $SUBSETLIST    do	case $K in	    %%*)		# volume change		if [ "$VFY" -ne 0 ]		then		    NEXTVOL=`expr $K : '%%\(.*\)'`		    THISVOL=`expr $NEXTVOL - 1`		    GT_Verify_Tape		fi		VERIFYLIST=		_U_Request_Device_Load $DEV "tape" \		       "Mount $KITCODE volume $NEXTVOL on $DEV" write || exit 1		echo 1>&2 "Generating volume $NEXTVOL of $KITCODE" \			"from $DISPHOST on $DEV"		continue		;;	esac	if [ $CHECK_ONLY -ne 0 ]	then	    if [ "$PREVSUBSET" = "$K" ]	    then	        PREVSUBSET="$K"		continue	    fi	    PREVSUBSET="$K"	fi	OFS="$IFS"	IFS='|'	set $K	IFS="$OFS"	IMAGE=$1	case "$2" in	   "")	BS=20		;;	    *)  BS=$2		;;	esac	echo 1>&2 "Image $IMAGE...\c"	VERIFYLIST="$VERIFYLIST $K"	wait	case $PRODLIST in	    "" )		;;	    * )		case $IMAGE in		    INSTCTRL )			FILEDIR=$MERGEDIR			;;		    * )			eval `_U_Find_Dir $HOST $IMAGE "$DIRELIST"`			case $FILEDIR in			    "")				echo 1>&2 "Cannot find $IMAGE in any of the" \					  "following directories:"				echo 1>&2 "$DIRELIST"				case $HOST in				    *:) ;;				    *) exit 1				esac				echo 1>&2 "\nTrying again. . ."				eval `_U_Find_Dir $HOST $IMAGE "$DIRELIST"`				case $FILEDIR in				    "")					echo 1>&2 "\07 $IMAGE not found in" \						  "any of the following" \						  "directories:"					echo 1>&2 "$DIRELIST"					exit 1					;;				esac				;;			esac			;;		esac		;;	esac	if [ $CHECK_ONLY -eq 0 ]	then	    if [ "$FILEDIR" = "$MERGEDIR" ]	    then		echo "dd if=$FILEDIR/$IMAGE of=$DEV bs=${BS}b" > $DD_ERRS		dd if=$FILEDIR/$IMAGE of=$DEV bs=${BS}b 2>> $DD_ERRS	    else		for try in 1 2 3 4 0		do		    echo "_U_Remote_dd $DISPHOST $FILEDIR/$IMAGE" \			    " $DEV 'obs=${BS}b'" > $DD_ERRS		    _U_Remote_dd $HOST $FILEDIR/$IMAGE \			    $DEV "obs=${BS}b" 2>> $DD_ERRS ||			{			echo 1>&2 "\nError on copy:"			sed 1>&2 's/^/    /' $DD_ERRS			if [ ! "$DEV" = /dev/null ]			then			    mt -f $DEV bsf			    mt -f $DEV fsf			    echo 1>&2 "\nRepositioning tape to retry write."			fi			if [ $try -ne 0 ]			then			   sleep `expr $try \* 5`			   echo 1>&2 "Retrying $IMAGE...\c"			else			    try="error"			    echo 1>&2 "giving up."			fi			continue			}		    break		done		test "$try" != "error"	    fi ||		{		echo 1>&2 "\07Failed:"		sed 1>&2 's/^/	/' $DD_ERRS		rm $DD_ERRS		exit 1		}	    if [ "$DEBUG" ]	    then		cat $DD_ERRS	    fi	    rm $DD_ERRS	    echo 1>&2 "done.\n"	else	    echo 1>&2 "exists.\n"	fi    done    THISVOL=$NEXTVOL		# Done with this volume    STAT=0    }GT_Verify_Tape()    {    (test $DEBUG && echo 1>&2 "DEBUG: GT_Verify_Tape($*)")    if [ "$VERIFYLIST" = "" ]    then	return 0    fi    DISPHOST=`echo $HOST | sed 's=\(.*/.*\)/.*=\1/password::='`    case $THISVOL in	"" | 0)	    echo 1>&2 "Verifying $KITCODE kit from $DISPHOST on $DEV"	    ;;	*)	    echo 1>&2 "Verifying volume $THISVOL of $KITCODE from $DISPHOST on $DEV"	    ;;    esac    if test ! "$DEV" = "/dev/null"    then	mt -f $DEV rew &	echo 1>&2 rewind.    fi    STAT=1	# reset to failure, will set to success at end    case $PRODLIST in	"")	    FILELOC=$HOST	    ;;	* )	    FILEDIR=$MERGEDIR	    FILELOC=local	    ;;    esac    CODE=`expr $KITCODE : '\([A-Z0-9][A-Z0-9][A-Z0-9]\)'`    _U_Remote_Copy $FILELOC $FILEDIR/$CODE.image \	    $LCL_DIR/lcl_$CODE.image$$ ||	{	echo 1>&2 "\07$PROG: error accessing checksum file."	exit 1	}    for V in $VERIFYLIST    do	case $V in	    %%*)		# volume change		NEXTVOL=`expr $V : '%%\(.*\)'`		THISVOL=`expr $NEXTVOL - 1`		_U_Request_Device_Load $DEV "tape" \			"Mount $KITCODE volume $NEXTVOL on $DEV" read || exit 1		echo 1>&2 "Verifying volume $THISVOL of $KITCODE" \			"from $DISPHOST on $DEV"		continue		;;	esac	OFS="$IFS"	IFS='|'	set $V	IFS="$OFS"	IMAGE=$1	case "$2" in	    "") BS=20		;;	    *)  BS=$2		;;	esac	echo 1>&2 "Image $IMAGE...\c"	wait	case $IMAGE in	    *TK50* )		case $PRODLIST in		    "") ;;		    * )			eval `_U_Find_Dir $HOST $IMAGE "$DIRELIST"`\							 2> $LCL_DIR/finderrs$$			;;		esac		case $FILEDIR in		    "" )			echo 1>&2 "\n$PROG: source ${IMAGE} not found. Reason:"			sed 's/^/    /' $LCL_DIR/finderrs$$			rm $LCL_DIR/finderrs$$			if test ! "$DEV" = "/dev/null"			then			    mt -f $DEV fsf ||				{				echo 1>&2 "\07Tape positioning error."				exit 1				}			fi			;;		    * )			rm $LCL_DIR/finderrs$$			SUM1=$LCL_DIR/sum_a$$			SUM2=$LCL_DIR/sum_b$$			echo "dd if=$DEV bs=${BS}b" > ${DD_ERRS}-b			dd if=$DEV bs=${BS}b 2>> ${DD_ERRS}-b |				sum > $SUM2 &			for try in 1 2 3 4 0			do			    echo "_U_Remote_dd $DISPHOST $FILEDIR/$IMAGE" \				 "obs=${BS}b" > $DD_ERRS			    _U_Remote_dd $HOST $FILEDIR/$IMAGE "" \				    "obs=${BS}b" 2>> $DD_ERRS |				sum > $SUM1 &			    if grep "dcp:" $DD_ERRS			    then			        echo 1>&2 "\nError in checksum calculation:"				sed 1>&2 's/^/    /' $SUM1 $DD_ERRS				if [ $try -ne 0 ]				then				    sleep `expr $try \* 5`				    echo 1>&2 "Retrying calculation. . ."				else				    try="error"				    echo 1>&2 "giving up."				    break				fi				continue			    else			        break # checksum is correct			    fi			done			wait			if [ "$DEBUG" ]			then			    echo "IMAGE DD_ERRS:"			    cat $DD_ERRS			    echo "\nDEV DD_ERRS:"			    cat $DD_ERRS-b			fi			    			set -- xxx `cat $SUM1`			shift			ISUM=$1 ISIZE=$2			set -- xxx `cat $SUM2`			shift			DSUM=$1 DSIZE=$2			case "$ISUM$ISIZE" in			    $DSUM$DSIZE)				;;			    *)				echo 1>&2 "\n\07$PROG: Image $IMAGE checksum" \					  "does not match device checksum:\n" \					  "    $ISUM != $DSUM or\n" \					  "    $ISIZE != $DSIZE"				echo 1>&2 "Verify failed!!\nExtra info:" \					  "\nImage:"				sed 1>&2 's/^/    /' $DD_ERRS				echo 1>&2 "\nDevice:"				sed 1>&2 's/^/    /' ${DD_ERRS}-b				rm $DD_ERRS ${DD_ERRS}-b $SUM1 $SUM2				exit 1				;;			esac			rm $DD_ERRS ${DD_ERRS}-b $SUM1 $SUM2			;;		esac		echo 1>&2 "done."		continue		;;	esac	grep $V $LCL_DIR/lcl_$CODE.image$$ > $LCL_DIR/sum$V$$ ||	    {	    case $V in		ROOT | [A-Z0-9][A-Z0-9][A-Z0-9]*[0-9][0-9][0-9])		    echo 1>&2 "\nWarning: No checksum entry found for" \		    		"subset $V"		    ;;	    esac	    if test ! "$DEV" = "/dev/null"	    then		mt -f $DEV fsf ||		    {		    echo 1>&2 "\n\07Tape positioning error."		    exit		    }	    fi	    echo 1>&2 "done."	    continue	    }	set XXX `cat $LCL_DIR/sum$V$$`	shift	SUM=$1	SIZE=$2	dd if=$DEV bs=${BS}b rbuf=0 2> $DD_ERRS |	    sum > $LCL_DIR/SUM$$ ||		{		echo 1>&2 "\n\07$PROG: checksum error image $V."		cat 1>&2 $DD_ERRS		rm $DD_ERRS		exit		}        test "$DEBUG" &&	    {	    echo "\nDD_ERRS$$ file:"	    cat $DD_ERRS	    echo "\nDEBUG: kit sum file, $LCL_DIR/sum$V$$ is:"	    cat $LCL_DIR/sum$V$$	    echo "DEBUG: sum file, $LCL_DIR/SUM$$ is:"	    cat $LCL_DIR/SUM$$	    }	rm $DD_ERRS	set XXX `cat $LCL_DIR/SUM$$`	shift	DEVSUM=$1 DEVSIZE=$2	case "$DEVSUM$DEVSIZE" in	$SUM$SIZE)		;;	*)		echo 1>&2 "\n\07$PROG: Image file checksum for $IMAGE does" \			  "not match device checksum:\n" \			  "    $SUM != $DEVSUM or\n" \			  "    $SIZE != $DEVSIZE"		exit	esac	rm -f $LCL_DIR/sum$V$$	rm -f $LCL_DIR/SUM$$	echo 1>&2 "done.\n"    done    echo 1>&2 rewind.    if test ! "$DEV" = "/dev/null"    then	mt -f $DEV rew    fi    STAT=0	# Successful, conclusion    }Gentapes_Mainline(){PROG=`basename $0`umask 022	# allow no group or world write accessSTAT=1		# assume failure, unless explicitly set to successTAPEDEV="mt"	# for DEC: productionTHISVOL=0 NEXTVOL=LCL_DIR=/usr/tmpLCL_KITCAP=$LCL_DIR/lcl_kitcap$$DD_ERRS=$LCL_DIR/dd_errors$$MERGEDIR=${GENTAPE_MERGEDIR:-"/usr/tmp/merge"$$}WORKDIR=${GENTAPE_WORKDIR:-"$MERGEDIR/instctrl"}REM_KITCAP=${KITCAP_LOCATION:-"/etc/kitcap"}KITROOT=${KITCAP_KITROOT:-""}DEBUG=${GENTAPE_DEBUG-""}COMPLIST=PRODLIST=PRODCODE=DIRELIST=SUBSETLIST=STAT=1	# assume failuretrap '	exit $STAT' 0 1 2 3 15WRITE=0 VFY=0 HOST= KITCODE= DEV= DEVTYPE=eval `GT_Get_Arguments $*` || exit 1	# exit on failuretrap '  echo 1>&2 "Cleaning up. . ."	rm -rf $MERGEDIR $WORKDIR $LCL_DIR/*$$	case $STAT in	    0)		echo 1>&2 "Operation successfully concluded"		;;	    *)		echo 1>&2 "Error during operation"		;;	esac	exit $STAT' 0 1 2 3 15_K_Get_Local_Kitcap $HOST $REM_KITCAP $LCL_KITCAP $KITROOT || exit 1test -w $DEV ||    {    echo 1>&2 "\07No write access to $DEV"    exit 1    }case $DEV in    /dev/null) ;;    *)	UD=`expr $DEV : '.*'${TAPEDEV}'\([0-9][0-9]*.*\)'`	DEV=/dev/nr${TAPEDEV}$UD        ;;esactest $DEBUG && echo 1>&2 "DEBUG: UD=$UD DEV=$DEV"if [ "$WRITE" -eq 1 ]then    echo "Writeable?" | dd of=$DEV bs=1b conv=sync 2> /dev/null ||	{	_U_Request_Device_Load $DEV "tape" \		"\nPlease mount a write-enabled volume 1 of $KITCODE on $DEV" \		write || exit 1	}else    dd if=$DEV of=/dev/null bs=1b 2> /dev/null ||	{	_U_Request_Device_Load $DEV "tape" \		"\nPlease mount volume 1 of $KITCODE on $DEV" read || exit 1	}fiK_NAME= NEWIMAGE= KITDESC= PRODLIST= KITDIRS= SUBSETLIST= NVOLS=eval `_K_Interpret_Kitcap "${KITCODE}${DEVTYPE}" "$LCL_KITCAP"` || exit 1set xxx $PRODLISTcase $# in    1 )	test $DEBUG && echo 1>&2 "DEBUG: we are a single product"	PRODLIST=$KITCODE	;;    * )	test $DEBUG && echo 1>&2 "DEBUG: we are a multiple products"	;;esacmkdir $MERGEDIRmkdir $WORKDIRcd $WORKDIRDIRELIST=if eval `_K_Unpack_Instctrls $HOST $KITCODE $LCL_KITCAP $DEVTYPE "$PRODLIST"`then    if test "$DIRELIST"    then	_K_Image_Merge $NEWIMAGE "$SUBSETLIST" || exit 1    else	echo 1>&2 "$PROG: DIRELIST is null.  Internal error."	exit 1    fielse    exit 1ficase $WRITE$VFY in    01 )		# Verify only, set VERIFYLIST to all subsets	VERIFYLIST=$SUBSETLIST	GT_Verify_Tape || exit 1	;;    10)			# Create only, skip verify pass	_K_Product_Merge $NEWIMAGE "$K_NAME" "$SUBSETLIST" || exit 1	GT_Create_Kit || exit 1	;;    11)			# Create & Verify, verify the current VERIFYLIST only	_K_Product_Merge $NEWIMAGE "$K_NAME" "$SUBSETLIST" || exit 1	GT_Create_Kit || exit 1	GT_Verify_Tape || exit 1	;;    *)	echo 1>&2 "$PROG: Internal error. " \		"Unexpected values for WRITE (=$WRITE) and/or VFY (=$VFY)"	exit 1	;;esacif [ $CHECK_ONLY -ne 0 ]then    echo 1>&2 "Check of \c"fiecho 1>&2 "\07Kit $KITCODE done."exit $STAT}case $GENTAPES_NO_EXECUTE in    "") Gentapes_Mainline $* ;;esac

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -