Home | History | Annotate | Line # | Download | only in ypinit
ypinit.sh revision 1.4
      1 #!/bin/sh
      2 #
      3 #	$NetBSD: ypinit.sh,v 1.4 1997/10/08 14:09:19 lukem Exp $
      4 #
      5 # ypinit.sh - setup a master or slave YP server
      6 #
      7 # Originally written by Mats O Jansson <moj (at] stacken.kth.se>
      8 # Modified by Jason R. Thorpe <thorpej (at] NetBSD.ORG>
      9 #
     10 
     11 DOMAINNAME=/bin/domainname
     12 HOSTNAME=/bin/hostname
     13 YPWHICH=/usr/bin/ypwhich
     14 YPXFR=/usr/sbin/ypxfr
     15 MAKEDBM=/usr/sbin/makedbm
     16 YP_DIR=/var/yp
     17 
     18 ERROR=USAGE				# assume usage error
     19 
     20 umask 077				# protect created directories
     21 
     22 if [ $# -eq 1 ]; then
     23 	if [ $1 = "-m" ]; then		# ypinit -m
     24 		DOMAIN=`${DOMAINNAME}`
     25 		SERVERTYPE=MASTER
     26 		ERROR=
     27 	fi
     28 fi
     29 
     30 if [ $# -eq 2 ]; then
     31 	if [ $1 = "-m" ]; then		# ypinit -m domainname
     32 		DOMAIN=${2}
     33 		SERVERTYPE=MASTER
     34 		ERROR=
     35 	fi
     36 	if [ $1 = "-s" ]; then		# ypinit -s master_server
     37 		DOMAIN=`${DOMAINNAME}`
     38 		SERVERTYPE=SLAVE
     39 		MASTER=${2}
     40 		ERROR=
     41 	fi
     42 fi
     43 
     44 if [ $# -eq 3 ]; then
     45 	if [ $1 = "-s" ]; then		# ypinit -s master_server domainname
     46 		DOMAIN=${3}
     47 		SERVERTYPE=SLAVE
     48 		MASTER=${2}
     49 		ERROR=
     50 	fi
     51 fi
     52 
     53 if [ X${ERROR} = X"USAGE" ]; then
     54 	cat << \__usage 1>&2
     55 usage: ypinit -m [domainname]
     56        ypinit -s master_server [domainname]
     57 
     58 The `-m' flag builds a master YP server, and the `-s' flag builds
     59 a slave YP server.  When building a slave YP server, `master_server'
     60 must be an existing, reachable YP server.
     61 __usage
     62 
     63 	exit 1
     64 fi
     65 
     66 # Check if domainname is set, don't accept an empty domainname
     67 if [ X${DOMAIN} = "X" ]; then
     68 	cat << \__no_domain 1>&2
     69 The local host's YP domain name has not been set.  Please set it with
     70 the domainname(8) command or pass the domain as an argument to ypinit(8).
     71 __no_domain
     72 
     73 	exit 1
     74 fi
     75 
     76 # Check if hostname is set, don't accept an empty hostname
     77 HOST=`${HOSTNAME}`
     78 if [ X${HOST} = "X" ]; then
     79 	cat << \__no_hostname 1>&2
     80 The local host's hostname has not been set.  Please set it with the
     81 hostname(8) command.
     82 __no_hostname
     83 
     84 	exit 1
     85 fi
     86 
     87 # Check if the YP directory exists.
     88 if [ ! -d ${YP_DIR} -o -f ${YP_DIR} ]
     89 then
     90 	echo "The directory ${YP_DIR} does not exist.  Restore it from the distribution." 1>&2
     91 	exit 1
     92 fi
     93 
     94 echo "Server type: ${SERVERTYPE}"
     95 echo "Domain:      ${DOMAIN}"
     96 if [ X${SERVERTYPE} = X"SLAVE" ]; then
     97 	echo "Master:      ${MASTER}"
     98 fi
     99 echo ""
    100 cat << \__notice1
    101 
    102 Installing the YP database will require that you answer a few questions.
    103 Questions will all be asked at the beginning of the procedure.
    104 
    105 __notice1
    106 
    107 if [ -d "${YP_DIR}/${DOMAIN}" ]; then
    108 	echo -n "Can we destroy the existing ${YP_DIR}/${DOMAIN} and its contents? [y/n: n]  "
    109 	read KILL
    110 
    111 	ERROR=
    112 	case ${KILL} in
    113 	y*|Y*)
    114 		ERROR="DELETE"
    115 		;;
    116 
    117 	*)
    118 		ERROR=
    119 		;;
    120 	esac
    121 
    122 	if [ X${ERROR} = X"DELETE" ]; then
    123 		if ! rm -rf ${YP_DIR}/${DOMAIN}; then
    124 			echo "Can't clean up old directory ${YP_DIR}/${DOMAIN}." 1>&2
    125 			exit 1
    126 		fi
    127 	else
    128 		echo "OK, please clean it up by hand and start again."
    129 		exit 0
    130 	fi
    131 fi
    132 
    133 if ! mkdir "${YP_DIR}/${DOMAIN}"; then
    134 	echo "Can't make new directory ${YP_DIR}/${DOMAIN}." 1>&2
    135 	exit 1
    136 fi
    137 
    138 if [ X${SERVERTYPE} = X"MASTER" ]; then
    139 	if [ ! -f ${YP_DIR}/Makefile ];	then
    140 		if [ ! -f ${YP_DIR}/Makefile.main ]; then
    141 			echo "Can't find ${YP_DIR}/Makefile.main. " 1>&2
    142 			exit 1
    143 		fi
    144 		cp ${YP_DIR}/Makefile.main ${YP_DIR}/Makefile
    145 	fi
    146 
    147 	SUBDIR=`grep "^SUBDIR=" ${YP_DIR}/Makefile`
    148 
    149 	if [ X"${SUBDIR}" = "X" ]; then
    150 		echo "Can't find line starting with 'SUBDIR=' in ${YP_DIR}/Makefile. " 1>&2
    151 		exit 1
    152 	fi
    153 
    154 	NEWSUBDIR="SUBDIR="
    155 	for DIR in `echo ${SUBDIR} | cut -c8-255`; do
    156 		if [ ${DIR} != ${DOMAIN} ]; then
    157 			NEWSUBDIR="${NEWSUBDIR} ${DIR}"
    158 		fi
    159 	done
    160 	NEWSUBDIR="${NEWSUBDIR} ${DOMAIN}"
    161 
    162 	if [ -f ${YP_DIR}/Makefile.tmp ]; then 
    163 		rm ${YP_DIR}/Makefile.tmp
    164 	fi
    165 
    166 	mv ${YP_DIR}/Makefile ${YP_DIR}/Makefile.tmp
    167 	sed -e "s/^${SUBDIR}/${NEWSUBDIR}/" ${YP_DIR}/Makefile.tmp > \
    168 	    ${YP_DIR}/Makefile
    169 	rm ${YP_DIR}/Makefile.tmp
    170 
    171 	if [ ! -f ${YP_DIR}/Makefile.yp ]; then
    172 		echo "Can't find ${YP_DIR}/Makefile.yp." 1>&2
    173 		exit 1
    174 	fi
    175 
    176 	cp ${YP_DIR}/Makefile.yp ${YP_DIR}/${DOMAIN}/Makefile
    177 
    178 	# Create an empty `ypservers' map so that yppush won't
    179 	# lose when we run "make".
    180 	(
    181 		cd ${YP_DIR}/${DOMAIN}
    182 		touch ypservers
    183 		cat ypservers | ${MAKEDBM} - ypservers
    184 	)
    185 
    186 	echo "Done.  Be sure to run \`make' in ${YP_DIR}."
    187 fi
    188 
    189 if [ X${SERVERTYPE} = X"SLAVE" ]; then
    190 	echo ""
    191 
    192 	for MAP in `${YPWHICH} -d ${DOMAIN} -m | cut -d\  -f1`; do
    193 		echo "Transfering ${MAP}..."
    194 		if ! ${YPXFR} -h ${MASTER} -c -d ${DOMAIN} ${MAP}; then
    195 			echo "Can't transfer map ${MAP}." 1>&2
    196 			exit 1
    197 		fi
    198 	done
    199 
    200 	echo ""
    201 	echo "Don't forget to update the \`ypservers' on ${MASTER}."
    202 	exit 0
    203 fi
    204