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