Home | History | Annotate | Line # | Download | only in ypinit
ypinit.sh revision 1.7
      1 #!/bin/sh
      2 #
      3 #	$NetBSD: ypinit.sh,v 1.7 1997/11/18 00:44: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 # Reworked by Luke Mewburn <lukem (at] netbsd.org>
     10 #
     11 
     12 PATH=/bin:/usr/sbin:/usr/bin:${PATH}
     13 DOMAINNAME=/bin/domainname
     14 HOSTNAME=/bin/hostname
     15 ID=/usr/bin/id
     16 MAKEDBM=/usr/sbin/makedbm
     17 YPWHICH=/usr/bin/ypwhich
     18 YPXFR=/usr/sbin/ypxfr
     19 
     20 progname=`basename $0`
     21 yp_dir=/var/yp
     22 error=usage				# assume usage error
     23 
     24 umask 077				# protect created directories
     25 
     26 if [ `${ID} -u` != 0 ]; then
     27 	echo 1>&2 "$progname: you must be root to run this"
     28 	exit 1
     29 fi
     30 
     31 case $# in
     32 1)
     33 	if [ $1 = "-m" ]; then		# ypinit -m
     34 		domain=`${DOMAINNAME}`
     35 		servertype=master
     36 		error=
     37 	fi
     38 	;;
     39 
     40 2)
     41 	if [ $1 = "-m" ]; then		# ypinit -m domainname
     42 		domain=${2}
     43 		servertype=master
     44 		error=
     45 	fi
     46 	if [ $1 = "-s" ]; then		# ypinit -s master_server
     47 		domain=`${DOMAINNAME}`
     48 		servertype=slave
     49 		master=${2}
     50 		error=
     51 	fi
     52 	;;
     53 
     54 3)
     55 	if [ $1 = "-s" ]; then		# ypinit -s master_server domainname
     56 		domain=${3}
     57 		servertype=slave
     58 		master=${2}
     59 		error=
     60 	fi
     61 	;;
     62 esac
     63 
     64 if [ "${error}" = "usage" ]; then
     65 	cat 1>&2 << __usage 
     66 usage: ${progname} -m [domainname]
     67        ${progname} -s master_server [domainname]
     68 
     69 The \`-m' flag builds a master YP server, and the \`-s' flag builds
     70 a slave YP server.  When building a slave YP server, \`master_server'
     71 must be an existing, reachable YP server.
     72 __usage
     73 
     74 	exit 1
     75 fi
     76 
     77 # Check if domainname is set, don't accept an empty domainname
     78 if [ -z "${domain}" ]; then
     79 	cat << __no_domain 1>&2
     80 $progname: The local host's YP domain name has not been set.
     81 	Please set it with the domainname(1) command or pass the domain as
     82 	an argument to ${progname}.
     83 __no_domain
     84 
     85 	exit 1
     86 fi
     87 
     88 # Check if hostname is set, don't accept an empty hostname
     89 host=`${HOSTNAME}`
     90 if [ -z "${host}" ]; then
     91 	cat 1>&2 << __no_hostname
     92 $progname: The local host's hostname has not been set.
     93 	Please set it with the hostname(1) command.
     94 __no_hostname
     95 
     96 	exit 1
     97 fi
     98 
     99 # Check if the YP directory exists.
    100 if [ ! -d ${yp_dir} -o -f ${yp_dir} ]; then
    101 	cat 1>&2 << __no_dir
    102 $progname: The directory ${yp_dir} does not exist.
    103 	Restore it from the distribution.
    104 __no_dir
    105 
    106 	exit 1
    107 fi
    108 
    109 echo "Server type: ${servertype}"
    110 echo "Domain:      ${domain}"
    111 if [ "${servertype}" != "master" ]; then
    112 	echo "Master:      ${master}"
    113 fi
    114 echo ""
    115 cat << __notice1
    116 
    117 Installing the YP database may require that you answer a few questions.
    118 Any configuration questions will be asked at the beginning of the procedure.
    119 
    120 __notice1
    121 
    122 if [ -d "${yp_dir}/${domain}" ]; then
    123 	echo	"Can we destroy the existing ${yp_dir}/${domain}"
    124 	echo -n	"and its contents? [y/n: n]  "
    125 	read KILL
    126 
    127 	error=
    128 	case ${KILL} in
    129 	y*|Y*)
    130 		error="delete"
    131 		;;
    132 
    133 	*)
    134 		error=
    135 		;;
    136 	esac
    137 
    138 	if [ "${error}" = "delete" ]; then
    139 		rm -rf ${yp_dir}/${domain}
    140 		if [ $? != 0 ]; then
    141 			echo 1>&2 \
    142 		"$progname: Can't clean up old directory ${yp_dir}/${domain}"
    143 			exit 1
    144 		fi
    145 	else
    146 		echo "OK, please clean it up by hand and start again."
    147 		exit 0
    148 	fi
    149 fi
    150 
    151 if ! mkdir "${yp_dir}/${domain}"; then
    152 	echo 1>&2 "$progname: Can't make new directory ${yp_dir}/${domain}"
    153 	exit 1
    154 fi
    155 
    156 case ${servertype} in
    157 master)
    158 	if [ ! -f ${yp_dir}/Makefile ];	then
    159 		if [ ! -f ${yp_dir}/Makefile.main ]; then
    160 			echo 1>&2 \
    161 			    "$progname: Can't find ${yp_dir}/Makefile.main"
    162 			exit 1
    163 		fi
    164 		cp ${yp_dir}/Makefile.main ${yp_dir}/Makefile
    165 	fi
    166 
    167 	subdir=`grep "^SUBDIR=" ${yp_dir}/Makefile`
    168 
    169 	if [ -z "${subdir}" ]; then
    170 		echo 1>&2 \
    171     "$progname: Can't find line starting with 'SUBDIR=' in ${yp_dir}/Makefile"
    172 		exit 1
    173 	fi
    174 
    175 	newsubdir="SUBDIR="
    176 	for dir in `echo ${subdir} | cut -c8-255`; do
    177 		if [ "${dir}" != "${domain}" ]; then
    178 			newsubdir="${newsubdir} ${dir}"
    179 		fi
    180 	done
    181 	newsubdir="${newsubdir} ${domain}"
    182 
    183 	if [ -f ${yp_dir}/Makefile.tmp ]; then 
    184 		rm ${yp_dir}/Makefile.tmp
    185 	fi
    186 
    187 	mv ${yp_dir}/Makefile ${yp_dir}/Makefile.tmp
    188 	sed -e "s/^${subdir}/${newsubdir}/" ${yp_dir}/Makefile.tmp > \
    189 	    ${yp_dir}/Makefile
    190 	rm ${yp_dir}/Makefile.tmp
    191 
    192 	if [ ! -f ${yp_dir}/Makefile.yp ]; then
    193 		echo 1>&2 "$progname: Can't find ${yp_dir}/Makefile.yp"
    194 		exit 1
    195 	fi
    196 
    197 	cp ${yp_dir}/Makefile.yp ${yp_dir}/${domain}/Makefile
    198 
    199 	# Create `ypservers' with own name, so that yppush won't
    200 	# lose when we run "make".
    201 	(
    202 		cd ${yp_dir}/${domain}
    203 		echo "$host $host" > ypservers
    204 		${MAKEDBM} ypservers ypservers
    205 	)
    206 
    207 	echo "Done.  Be sure to run \`make' in ${yp_dir}."
    208 
    209 	;;
    210 
    211 slave)
    212 	echo ""
    213 
    214 	maps=`${YPWHICH} -d ${domain} -h ${master} -f -m 2>/dev/null | \
    215 	    awk '{ if (substr($2, 1, length("'$master'")) == "'$master'") \
    216 		print $1; }'`
    217 
    218 	if [ -z "${maps}" ]; then
    219 		cat 1>&2 << __no_maps
    220 $progname: Can't find any maps for ${domain} on ${master}
    221 	Please check that the appropriate YP service is running.
    222 __no_maps
    223 		exit 1
    224 	fi
    225 
    226 	for map in ${maps}; do
    227 		echo "Transferring ${map}..."
    228 		if ! ${YPXFR} -h ${master} -c -d ${domain} ${map}; then
    229 			echo 1>&2 "$progname: Can't transfer map ${map}"
    230 			exit 1
    231 		fi
    232 	done
    233 
    234 	cat << __dont_forget
    235 
    236 Don't forget to update the \`ypservers' on ${master},
    237 by adding an entry similar to:
    238   ${host} ${host}
    239 
    240 __dont_forget
    241 	exit 0
    242 
    243 	;;
    244 
    245 *)
    246 	echo 1>&2 "$progname: unknown servertype \`${servertype}'"
    247 	exit 1
    248 esac
    249