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

📄 makeshlib

📁 被广泛使用的域名服务(DNS)软件
💻
字号:
#! /bin/sh:## makeshlib - installs libresolv_pic.a into SunOS 4.x or *BSD libc.so##ident	   "@(#)bind/shres/netbsd:$Name: rel-821 $:$Id: makeshlib,v 8.3 1995/12/29 07:16:23 vixie Exp $"## by Chris Davis <ckd@kei.com># based on code by Piete Brooks <pb@cl.cam.ac.uk>#              and Dave Morrison <drmorris@mit.edu># with additions by Greg A. Woods <woods@planix.com># NetBSD support added by Matt Ragan <matt@ibmoto.com># code cleanup and more error checking by Greg A. Woods <woods@planix.com>## NOTE:  BIND doesn't build a profiled libresolv_p.a, but probably should.## bindtree should be set to the root directory of the BIND distribution,# or you can have this script attempt to determine the location dynamically##bindtree=/usr/obj/local/bind## SHLIBDIR should be set to the location of your shared object file# (libc_pic.a and/or libcs5_pic.a).  If it is in the default location,# they will be found automatically.##SHLIBDIR=/usr/lib/shlib.etc## USELORDER will determine whether, under SunOS, that the lorder-sparc# file under SHLIBDIR will be user and modified (0), or whether the file# will be regenerated dynamically (1).  Purists would say that modifying the# lorder-sparc file will reduce paging, but regenerating the file with# lorder will do an adequate job of arranging the objects.  Under NetBSD,# this option doesn't do anything, since the shared libraries are# arranged using lorder when they are built, anyways.#USELORDER=0## END OF USER CONFIGURABLE OPTIONS#extract_arch (){	ARCHIVE=$1	DIRECTORY=$2	if [ ! -r $SHLIBDIR/$ARCHIVE ] ; then		echo "The shared object archive, $ARCHIVE, does not exist in the" >&2		echo "\$SHLIBDIR directory, $SHLIBDIR, or is not readable.  Please check" >&2		echo "the file and/or path and run this script again." >&2		exit 1	fi	if [ -r $DIRECTORY -a ! -d $DIRECTORY ] ; then		echo "Weird.  $DIRECTORY wasn't a directory..."		rm -f $DIRECTORY	elif [ -d $DIRECTORY ] ; then		echo "Cleaning up $DIRECTORY directory..."		rm -rf $DIRECTORY	fi	if mkdir $DIRECTORY; then		:	else		echo "Unable to create the \'$DIRECTORY\' directory under the current directory." >&2		exit 1	fi	# Extract the files to the tmp directory in a subshell	(		if cd $DIRECTORY ; then			:		else			echo "Unable to change directories to the \'$DIRECTORY\' directory." >&2			exit 1		fi		echo "Extracting object files from the shared object archive..."		ar x $SHLIBDIR/$ARCHIVE		# Patch up the files and filenames that need patching up.		case "${arch}" in		SunOS)			for i in *.; do				mv $i ${i}o			done			;;		esac		echo "Deleting old resolver files..."		rm -f $JUNKOBJS		# Extract the shared objects from the BIND distribution		echo "Unpacking new resolver files..."		if [ -f $bindtree/shres/netbsd/libresolv_pic.a ]; then			ar x $bindtree/shres/netbsd/libresolv_pic.a			rm -f __.SYMDEF		fi	)}generate_lorder (){	case "${arch}" in	SunOS)		if [ $USELORDER -eq 0 -a -f $SHLIBDIR/lorder-sparc ]; then			sed -f lorder-sparc.sed /usr/lib/shlib.etc/lorder-sparc >lorder.tmp			$SHLIBDIR/objsort lorder.tmp $1 > lorder.$1			rm -f lorder.tmp		else			lorder $1/*.o | tsort > lorder.$1 2>/dev/null		fi		;;	NetBSD|BSD/386)		lorder $1/*.so $1/*.o | tsort > lorder.$1 2>/dev/null		;;	esac}OPATH=$PATHPATH=/usr/bin:/usr/etc:/usr/sbin:/sbin:/usr/ucb:${PATH} ; export PATHarch=`uname -s`PATH=$OPATH ; export PATHcase "${arch}" inSunOS)	JUNKOBJS="gethostent.o"	PATH="/usr/bin:/usr/etc:/sbin:/usr/ucb:${PATH}" ; export PATH	;;BSD/386)	release=`uname -r`	if [ `expr "$release" - 2` -lt 0 ] ; then		echo "$0: can't work on $arch $release" >&2		exit 1	fi	# XXX: FIXME: this is may not be correct....	JUNKOBJS="gethostnamadr.so \		herror.so res_debug.so res_data.so \		res_comp.so res_init.so res_mkquery.so res_query.so res_send.so \		getnetbyaddr.so getnetbyname.so getnetent.so getnetnamadr.so \		gethnamaddr.so sethostent.so nsap_addr.so \		inet_addr.so"	PATH="/bin:/usr/bin:/usr/sbin:/sbin:${PATH}" ; export PATH	;;NetBSD)	JUNKOBJS="gethostnamadr.so \		herror.so res_debug.so res_data.so \		res_comp.so res_init.so res_mkquery.so res_query.so res_send.so \		getnetbyaddr.so getnetbyname.so getnetent.so getnetnamadr.so \		gethnamaddr.so sethostent.so nsap_addr.so \		inet_addr.so"	PATH="/bin:/usr/bin:/usr/sbin:/sbin:${PATH}" ; export PATH	;;FreeBSD)	echo "$0: Not yet tested on $arch `uname -r`...." >&2	exit 1	;;*)	echo "$0: cannot determine correct OS type, found '${arch}'." >&2	exit 1	;;esac# Try to determine where the root of the BIND tree is if $bindtree isn't# set.  First, see if it is one directory above wherever the script is# being run from, then check and see if it is around the current directory# somewherethisdir=`pwd`if [ -z "${bindtree}" ]; then	if [ -d "${thisdir}/shres/netbsd" ]; then		bindtree=$thisdir	elif [ -d "${thisdir}/../../shres" ]; then		bindtree=${thisdir}/../../	fifiif [ -z "${bindtree}" ]; then	echo "I can't find the bind tree, and you didn't set \$bindtree." >&2	echo "Please do so, and try again." >&2	exit 1fiif [ ! -d $bindtree ]; then	echo "Your \$bindtree variable is set incorrectly.  Please correct it" >&2	echo "and run this script again." >&2	exit 1fiif [ ! -f $bindtree/shres/netbsd/libresolv_pic.a ]; then	echo "Please build shres/netbsd/libresolv_pic.a before running this script." >&2	echo "See shres/INSTALL for more information." >&2	exit 1fi# Determine the directory to get the shared object archives from, if# $SHLIBDIR is not setcase "${arch}" inSunOS)	SHLIBDIR=${SHLIBDIR-/usr/lib/shlib.etc}	;;NetBSD|BSD/386)	SHLIBDIR=${SHLIBDIR-/usr/lib}	;;esac# Extract the UCB libraries on both SunOS and *BSDextract_arch libc_pic.a ucbtmp# Extract the SYSV libraries on SunOScase "${arch}" inSunOS)	extract_arch libcs5_pic.a sysvtmp	;;esac# Now that we have all of the objects we're going to need, generate an# lorder listing of the objects that we have, or modify the current# lorder-sparc file.echo "Generating new lorder file for UCB libc archive..."generate_lorder ucbtmpcase "${arch}" inSunOS)	echo "Generating new lorder file for SunOS SysV libc archive..."	generate_lorder sysvtmp	;;esacSHLIBNAME=libc.so.`/bin/ls /usr/lib/libc.so.* | awk -f shlibname.awk`echo "Generating new $SHLIBNAME shared library..."case "${arch}" inSunOS)	ld -o $SHLIBNAME -assert pure-text `cat lorder.ucbtmp` -ldl	if [ $? -ne 0 ] ; then		exit 1	fi	SH5LIBNAME=libcs5.so.`/bin/ls /usr/5lib/libc.so.* | awk -f shlibname.awk`	echo "Generating new $SH5LIBNAME shared library..."	ld -o $SH5LIBNAME -assert pure-text `cat lorder.sysvtmp` -ldl	if [ $? -ne 0 ] ; then		exit 1	fi	echo "WARNING:  not updating /usr/lib/libc.a or /usr/5lib/libc.a -- use -lresolv"	;;NetBSD|BSD/386)	VER=`/bin/ls /usr/lib/libresolv.so.* | awk -f shlibname.awk`	ld -x -o libresolv.so.$VER -Bshareable -Bforcearchive $bindtree/shres/netbsd/libresolv_pic.a	ld -x -o $SHLIBNAME -Bshareable -Bforcearchive `cat lorder.ucbtmp`	if [ $? -ne 0 ] ; then		exit 1	fi	echo "WARNING:  not updating /usr/lib/libc.a -- use -lresolve instead."	;;esacecho "Now we will test the new $SHLIBNAME..."# we won't bother testing the SunOS libcs5.so* -- it should be OK....LD_LIBRARY_PATH=`pwd` who am iecho -n 'Does the output of who shown above look normal? [n] 'read answer junkcase "$answer" in[yY]*)	echo "OK, we'll copy them into place!"	;;*)	echo "Something went wrong.  Try fixing it and re-running this script."	exit 1	;;esacset -xcp $SHLIBNAME /usr/libcp $bindtree/shres/netbsd/libresolv_pic.a $SHLIBDIRcase "${arch}" inSunOS)	cp $SH5LIBNAME /usr/5lib	;;NetBSD|BSD/386)	cp libresolv.so.$VER /usr/lib	;;esacset +xcase "${arch}" inSunOS)	echo 'OK, they are in place now...  updating libc.sa*, running ranlib...'	VUCB=`/bin/ls /usr/lib/libc.so.* | awk -f shlibname.awk`	VS5=`/bin/ls /usr/5lib/libc.so.* | awk -f shlibname.awk`	VUCB_OLD=`echo $VUCB | awk -F. '$3 > 1 {printf("%d.%d.%d", $1, $2, $3 - 1) }					$3 <= 1 {printf("%d.%d", $1, $2) }'`	VS5_OLD=`echo $VS5 | awk -F. '$3 > 1 {printf("%d.%d.%d", $1, $2, $3 - 1) }					$3 <= 1 {printf("%d.%d", $1, $2) }'`	cp /usr/lib/libc.sa.$VUCB_OLD /usr/lib/libc.sa.$VUCB	cp /usr/5lib/libc.sa.$VS5_OLD /usr/5lib/libc.sa.$VS5	ranlib -t /usr/lib/libc.sa.*	ranlib -t /usr/5lib/libc.sa.*	;;esacecho 'Running ldconfig...'LD_LIBRARY_PATH="" ldconfigcase "${arch}" inSunOS)	echo "For a simple test of $SHLIBNAME run 'trace /usr/bin/who'"	echo "and check which shared library is used."	echo "Run 'trace /usr/5bin/cat < /dev/null' to test $SH5LIBNAME."	;;esacecho 'You should now test a number of tools that do name resolution,'echo 'such as telnet, rlogin, ftp, etc.'echo ''echo 'If something breaks, remove the new shared libraries copied above and'echo 're-run "ldconfig".'exit 0

⌨️ 快捷键说明

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