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

📄 postinstall

📁 Solaris系统的tip(1)工具实现上存在漏洞
💻
字号:
# This script creates the backout package for a patch package## directory format options.## @(#) postinstall 1.13 01/01/12 SMI## Copyright (c) 1995 by Sun Microsystems, Inc.# All rights reserved## Description:#       Set the TYPE parameter for the remote file## Parameters:#       none## Globals set:#	TYPEset_TYPE_parameter () {	if [ ${PATCH_UNDO_ARCHIVE:?????} = "/dev" ]; then		# handle device specific stuff		TYPE="removable"	else		TYPE="filesystem"	fi}## Description:#       Build the remote file that points to the backout data## Parameters:#       $1:	the un/compressed undo archive## Globals set:#	UNDO, STATEbuild_remote_file () {	remote_path=$PKGSAV/$SUNW_PATCHID/remote	set_TYPE_parameter	STATE="active"	if [ $1 = "undo" ]; then		UNDO="undo"	else		UNDO="undo.Z"	fi	cat > $remote_path << EOF# Backout data stored remotelyTYPE=$TYPEFIND_AT=$ARCHIVE_DIR/$UNDOSTATE=$STATEEOF}PATH=/usr/sadm/bin:$PATHif [ "$PKG_INSTALL_ROOT" = "/" ]; then	PKG_INSTALL_ROOT=""fiif [ -n "$PATCH_BUILD_DIR" -a -d "$PATCH_BUILD_DIR" ]; then	BUILD_DIR="$PATCH_BUILD_DIR/$SUNW_PATCHID.$PKGINST"else	BUILD_DIR="$PKG_INSTALL_ROOT/var/tmp/$SUNW_PATCHID.$PKGINST"fiif [ ! -n "$PATCH_UNDO_ARCHIVE" ]; then	PATCH_UNDO_ARCHIVE="none"fiFILE_DIR=$BUILD_DIR/filesRELOC_DIR=$FILE_DIR/relocROOT_DIR=$FILE_DIR/rootBO_Deletes=$FILE_DIR/deletesTHIS_DIR=`dirname $0`PROTO_FILE=$BUILD_DIR/prototypeTEMP_REMOTE=$PKGSAV/$SUNW_PATCHID/tempif [ "$PATCH_PROGRESSIVE" = "true" ]; then        # remove the scripts that are left behind        install_scripts=`dirname $0`        rm $install_scripts/checkinstall $install_scripts/patch_checkinstall $install_scripts/patch_postinstall	# If this is being used in an old-style patch, insert	# the old-style script commands here.	#XXXOld_CommandsXXX#	exit 0fi## At this point we either have a deletes file or we don't. If we do,# we create a prototype entry.#if [ -f $BO_Deletes ]; then	echo "i deletes=$BO_Deletes" >> $BUILD_DIR/prototypefi## Now delete everything in the deletes list after transferring# the file to the backout package and the entry to the prototype# file. Remember that the pkgmap will get the CLIENT_BASEDIR path# but we have to actually get at it using the BASEDIR path. Also# remember that removef will import our PKG_INSTALL_ROOT#Our_Deletes=$THIS_DIR/deletesif [ -f $Our_Deletes ]; then	cd $BASEDIR	cat $Our_Deletes | while read path; do		Reg_File=0		if valpath -l $path; then			Client_Path="$CLIENT_BASEDIR/$path"			Build_Path="$RELOC_DIR/$path"			Proto_Path=$BASEDIR/$path		else	# It's an absolute path			Client_Path=$path			Build_Path="$ROOT_DIR$path"			Proto_Path=$PKG_INSTALL_ROOT$path		fi		# If BASEDIR/CLIENTBASEDIR = "/", then the previous prepends		# an extra / i.e. //. The sed command later can't find a		# Proto_Path with // and therefore will not substitute the		# correct build_Path resulting in the backout pkg not being		# created.		if [ "$CLIENT_BASEDIR" = "/" ]; then			Client_Path=`echo $Client_Path | sed 's|^\/\/|\/|'`			Proto_Path=`echo $Proto_Path | sed 's|^\/\/|\/|'`		fi					# Note: If the file isn't really there, pkgproto		# doesn't write anything but displays an error		# so check for the file before processing.		if [ -f "$Proto_Path" ]; then			LINE=`pkgproto $Proto_Path=$path`		else			continue		fi		ftype=`echo $LINE | nawk '{ print $1 }'`		if [ "$ftype" = "f" ]; then			Reg_File=1		fi		if [ $Reg_File = 1 ]; then			# Add source file to the prototype entry			if [ "$Proto_Path" = "$path" ]; then				LINE=`echo $LINE | sed -e "s|$Proto_Path|$Build_Path|2"`			else				LINE=`echo $LINE | sed -e "s|$Proto_Path|$Build_Path|"`			fi			DirName=`dirname $Build_Path`			# make room in the build tree			mkdir -p $DirName			cp -p $Proto_Path $Build_Path		fi		# Insert it into the prototype file		echo $LINE 1>>$PROTO_FILE 2>/dev/null		# Remove the file only if it's OK'd by removef		rm `removef $PKGINST $Client_Path` 1>/dev/null 2>&1	done	removef -f $PKGINST	rm $Our_Deletesfi## Unless specifically denied, make the backout package.#if [ "$PATCH_NO_UNDO" != "true" ]; then	cd $BUILD_DIR	# We have to build from here.	if [ "$PATCH_UNDO_ARCHIVE" != "none" ]; then		STAGE_DIR="$PATCH_UNDO_ARCHIVE"		ARCHIVE_DIR="$PATCH_UNDO_ARCHIVE/$SUNW_PATCHID/$PKGINST"		mkdir -p $ARCHIVE_DIR		mkdir -p $PKGSAV/$SUNW_PATCHID	else		if [ -d $PKGSAV/$SUNW_PATCHID ]; then			rm -r $PKGSAV/$SUNW_PATCHID		fi		STAGE_DIR=$PKGSAV		ARCHIVE_DIR=$PKGSAV/$SUNW_PATCHID		mkdir $ARCHIVE_DIR	fi	pkgmk -o -d $STAGE_DIR 1>/dev/null 2>&1	pkgtrans -s $STAGE_DIR $ARCHIVE_DIR/undo $PKG 1>/dev/null 2>&1	compress $ARCHIVE_DIR/undo	retcode=$?	if [ "$retcode" != 0 ]; then		echo "compress(1) returned error code $retcode"		echo "The $PKGINST backout package will not be compressed."		echo "Continuing to process backout package."	fi	if [ "$PATCH_UNDO_ARCHIVE" != "none" ]; then		if [ $retcode != 0 ]; then			build_remote_file "undo"		else			build_remote_file "undo.Z"		fi	fi	rm -r $STAGE_DIR/$PKG	cd ..	rm -r $BUILD_DIR	# remove the scripts that are left behind	install_scripts=`dirname $0`	rm $install_scripts/checkinstall $install_scripts/patch_checkinstall $install_scripts/patch_postinstallfi## Since this apparently worked, we'll mark as obsoleted the prior# versions of this patch - installpatch deals with explicit obsoletions.#cd ${PKG_INSTALL_ROOT:-/}cd var/sadm/pkgactive_base=`echo $SUNW_PATCHID | nawk '	{ print substr($0, 1, match($0, "-")-1) } '`List=`ls -d $PKGINST/save/${active_base}* 2>/dev/null`if [ $? -ne 0 ]; then	List=""fifor savedir in $List; do        patch=`basename $savedir`         if [ $patch = $SUNW_PATCHID ]; then		break	fi        # If we get here then the previous patch gets deleted	if [ -f $savedir/undo ]; then		mv $savedir/undo $savedir/obsolete		echo $SUNW_PATCHID >> $savedir/obsoleted_by	elif [ -f $savedir/undo.Z ]; then		mv $savedir/undo.Z $savedir/obsolete.Z		echo $SUNW_PATCHID >> $savedir/obsoleted_by        elif  [ -f $savedir/remote ]; then                `grep . $PKGSAV/$patch/remote | sed 's|STATE=.*|STATE=obsolete|' > $TEMP_REMOTE`                 rm -f $PKGSAV/$patch/remote                 mv $TEMP_REMOTE $PKGSAV/$patch/remote                  rm -f $TEMP_REMOTE                 echo $SUNW_PATCHID >> $savedir/obsoleted_by	elif  [ -f $savedir/obsolete -o -f $savedir/obsolete.Z ]; then		echo $SUNW_PATCHID >> $savedir/obsoleted_by	fidone# If additional operations are required for this package, place# those package-specific commands here.#XXXSpecial_CommandsXXX#exit 0

⌨️ 快捷键说明

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