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