]>
Commit | Line | Data |
---|---|---|
b7080c8e | 1 | #!/bin/sh |
7ba0088d | 2 | # $Id: ypinit.sh,v 1.2 2002/03/26 14:38:48 epeyton Exp $ |
b7080c8e A |
3 | # |
4 | # ypinit.sh - setup an master or slave server. | |
5 | # | |
6 | DOMAINNAME=/bin/domainname | |
7 | HOSTNAME=/bin/hostname | |
8 | YPWHICH=/usr/bin/ypwhich | |
9 | YPXFR=/usr/sbin/ypxfr | |
10 | YP_DIR=/var/yp | |
11 | MAKEDBM=/usr/sbin/makedbm | |
12 | ERROR_EXISTS="NO" | |
7ba0088d | 13 | MAKE=bsdmake |
b7080c8e A |
14 | umask 077 |
15 | ||
16 | #set -xv | |
17 | ||
18 | ERROR=USAGE # assume usage error | |
19 | ||
20 | if [ $# -eq 1 ] | |
21 | then | |
22 | if [ $1 = "-m" ] # ypinit -m | |
23 | then | |
24 | DOMAIN=`${DOMAINNAME}` | |
25 | SERVERTYPE=MASTER | |
26 | ERROR= | |
27 | fi | |
28 | ||
29 | if [ $1 = "-u" ] # ypinit -u | |
30 | then | |
31 | DOMAIN=`${DOMAINNAME}` | |
32 | SERVERTYPE=UPDATE | |
33 | ERROR= | |
34 | fi | |
35 | fi | |
36 | ||
37 | if [ $# -eq 2 ] | |
38 | then | |
39 | if [ $1 = "-m" ] # ypinit -m domainname | |
40 | then | |
41 | DOMAIN=${2} | |
42 | SERVERTYPE=MASTER | |
43 | ERROR= | |
44 | fi | |
45 | ||
46 | if [ $1 = "-s" ] # ypinit -s master_server | |
47 | then | |
48 | DOMAIN=`${DOMAINNAME}` | |
49 | SERVERTYPE=SLAVE | |
50 | MASTER=${2} | |
51 | ERROR= | |
52 | fi | |
53 | ||
54 | if [ $1 = "-u" ] # ypinit -u domainname | |
55 | then | |
56 | DOMAIN=${2} | |
57 | SERVERTYPE=UPDATE | |
58 | ERROR= | |
59 | fi | |
60 | fi | |
61 | ||
62 | if [ $# -eq 3 ] | |
63 | then | |
64 | if [ $1 = "-s" ] # ypinit -s master_server domainname | |
65 | then | |
66 | DOMAIN=${3} | |
67 | SERVERTYPE=SLAVE | |
68 | MASTER=${2} | |
69 | ERROR= | |
70 | fi | |
71 | fi | |
72 | ||
73 | if [ "${ERROR}" = "USAGE" ]; then | |
74 | cat << \__usage 1>&2 | |
75 | usage: ypinit -m [domainname] | |
76 | ypinit -s master_server [domainname] | |
77 | ypinit -u [domainname] | |
78 | ||
79 | The `-m' flag builds a master YP server, and the `-s' flag builds | |
80 | a slave YP server. When building a slave YP server, `master_server' | |
81 | must be an existing, reachable YP server. | |
82 | The `-u' is for updating the ypservers map on a master server. | |
83 | __usage | |
84 | ||
85 | exit 1 | |
86 | fi | |
87 | ||
88 | # Check if domainname is set, don't accept an empty domainname | |
89 | if [ -z "${DOMAIN}" ]; then | |
90 | cat << \__no_domain 1>&2 | |
91 | The local host's YP domain name has not been set. Please set it with | |
92 | the domainname(8) command or pass the domain as an argument to ypinit(8). | |
93 | __no_domain | |
94 | ||
95 | exit 1 | |
96 | fi | |
97 | ||
98 | # Check if hostname is set, don't accept an empty hostname | |
99 | HOST=`${HOSTNAME}` | |
100 | if [ -z "${HOST}" ]; then | |
101 | cat << \__no_hostname 1>&2 | |
102 | The local host's hostname has not been set. Please set it with the | |
103 | hostname(8) command. | |
104 | __no_hostname | |
105 | ||
106 | exit 1 | |
107 | fi | |
108 | ||
109 | # Check if we have contact with master. | |
110 | if [ "${SERVERTYPE}" = "SLAVE" ]; | |
111 | then | |
112 | COUNT=`${YPWHICH} -d ${DOMAIN} -m 2>/dev/null | grep -i ${MASTER} | wc -l | tr -d " "` | |
113 | if [ "$COUNT" = "0" ] | |
114 | then | |
115 | echo "Can't enumerate maps from ${MASTER}. Please check that it is running." 1>&2 | |
116 | exit 1 | |
117 | fi | |
118 | fi | |
119 | ||
120 | # Check if user is root | |
121 | ID=`id -u` | |
122 | if [ "${ID}" != "0" ]; then | |
123 | echo "You have to be the superuser to run this. Please login as root." 1>&2 | |
124 | exit 1 | |
125 | fi | |
126 | ||
127 | # Check if the YP directory exists. | |
128 | ||
129 | if [ ! -d ${YP_DIR} -o -f ${YP_DIR} ] | |
130 | then | |
131 | echo "The directory ${YP_DIR} doesn't exist. Restore it from the distribution." 1>&2 | |
132 | exit 1 | |
133 | ||
134 | fi | |
135 | ||
136 | echo -n "Server Type: ${SERVERTYPE} Domain: ${DOMAIN}" | |
137 | if [ "${SERVERTYPE}" = "SLAVE" ]; then | |
138 | echo -n " Master: ${MASTER}" | |
139 | fi | |
140 | echo "" | |
141 | ||
142 | if [ "${SERVERTYPE}" != "UPDATE" ]; | |
143 | then | |
144 | cat << \__notice1 | |
145 | ||
146 | Creating an YP server will require that you answer a few questions. | |
147 | Questions will all be asked at the beginning of the procedure. | |
148 | ||
149 | __notice1 | |
150 | ||
151 | echo -n "Do you want this procedure to quit on non-fatal errors? [y/n: n] " | |
152 | read DOEXIT | |
153 | ||
154 | case ${DOEXIT} in | |
155 | y*|Y*) | |
156 | ERROR_EXIT="YES" | |
157 | ;; | |
158 | ||
159 | *) ERROR_EXIT="NO" | |
160 | echo "" | |
161 | echo "Ok, please remember to go back and redo manually whatever fails." | |
162 | echo "If you don't, something might not work. " | |
163 | ;; | |
164 | esac | |
165 | ||
166 | if [ -d "${YP_DIR}/${DOMAIN}" ]; then | |
167 | echo "" | |
168 | echo -n "Can we destroy the existing ${YP_DIR}/${DOMAIN} and its contents? [y/n: n] " | |
169 | read KILL | |
170 | ||
171 | ERROR= | |
172 | case ${KILL} in | |
173 | y*|Y*) | |
174 | ERROR="DELETE" | |
175 | ;; | |
176 | ||
177 | *) ERROR= | |
178 | ;; | |
179 | esac | |
180 | ||
181 | if [ "${ERROR}" = "DELETE" ]; then | |
182 | if ! rm -rf ${YP_DIR}/${DOMAIN}; then | |
183 | echo "Can't clean up old directory ${YP_DIR}/${DOMAIN}." 1>&2 | |
184 | exit 1 | |
185 | fi | |
186 | else | |
187 | echo "OK, please clean it up by hand and start again. Bye" | |
188 | exit 0 | |
189 | fi | |
190 | ||
191 | fi | |
192 | ||
193 | if ! mkdir "${YP_DIR}/${DOMAIN}"; then | |
194 | echo "Can't make new directory ${YP_DIR}/${DOMAIN}." 1>&2 | |
195 | exit 1 | |
196 | fi | |
197 | fi | |
198 | ||
199 | if [ "${SERVERTYPE}" = "MASTER" ]; | |
200 | then | |
201 | ||
202 | if [ ! -f ${YP_DIR}/Makefile ] | |
203 | then | |
204 | if [ ! -f ${YP_DIR}/Makefile.main ] | |
205 | then | |
206 | echo "Can't find ${YP_DIR}/Makefile.main. " 1>&2 | |
207 | exit 1 | |
208 | fi | |
209 | cp ${YP_DIR}/Makefile.main ${YP_DIR}/Makefile | |
210 | fi | |
211 | ||
212 | SUBDIR=`grep "^SUBDIR=" ${YP_DIR}/Makefile` | |
213 | ||
214 | if [ -z "${SUBDIR}" ] | |
215 | then | |
216 | echo "Can't find line starting with 'SUBDIR=' in ${YP_DIR}/Makefile. " 1>&2 | |
217 | exit 1 | |
218 | fi | |
219 | ||
220 | NEWSUBDIR="SUBDIR=" | |
221 | for DIR in `echo ${SUBDIR} | cut -c8-255`; do | |
222 | if [ ${DIR} != ${DOMAIN} ]; then | |
223 | NEWSUBDIR="${NEWSUBDIR} ${DIR}" | |
224 | fi | |
225 | done | |
226 | NEWSUBDIR="${NEWSUBDIR} ${DOMAIN}" | |
227 | ||
228 | if [ -f ${YP_DIR}/Makefile.tmp ]; then | |
229 | rm ${YP_DIR}/Makefile.tmp | |
230 | fi | |
231 | ||
232 | mv ${YP_DIR}/Makefile ${YP_DIR}/Makefile.tmp | |
233 | sed -e "s/^${SUBDIR}/${NEWSUBDIR}/" ${YP_DIR}/Makefile.tmp > \ | |
234 | ${YP_DIR}/Makefile | |
235 | rm ${YP_DIR}/Makefile.tmp | |
236 | ||
237 | if [ ! -f ${YP_DIR}/Makefile.yp ]; then | |
238 | echo "Can't find ${YP_DIR}/Makefile.yp. " 1>&2 | |
239 | exit 1 | |
240 | fi | |
241 | ||
242 | cp ${YP_DIR}/Makefile.yp ${YP_DIR}/${DOMAIN}/Makefile | |
243 | ||
244 | fi | |
245 | ||
246 | if [ "${SERVERTYPE}" = "SLAVE" ]; | |
247 | then | |
248 | ||
249 | echo "There will be no further questions. The remainder of the procedure" | |
250 | echo "should take a few minutes, to copy the databases from ${MASTER}." | |
251 | ||
252 | for MAP in `${YPWHICH} -d ${DOMAIN} -m | cut -d\ -f1` | |
253 | do | |
254 | echo "Transfering ${MAP}..." | |
255 | if ! ${YPXFR} -h ${MASTER} -c -d ${DOMAIN} ${MAP}; then | |
256 | echo "Can't transfer map ${MAP}." 1>&2 | |
257 | ERROR_EXISTS="YES" | |
258 | if [ "${ERROR_EXIT}" = "YES" ]; then | |
259 | exit 1 | |
260 | fi | |
261 | fi | |
262 | done | |
263 | ||
264 | echo "" | |
265 | if [ "${ERROR_EXISTS}" = "YES" ]; then | |
266 | echo "${HOST} has been setup as an YP slave server with errors. " 1>&2 | |
267 | echo "Please remember fix any problem that occurred." 1>&2 | |
268 | else | |
269 | echo "${HOST} has been setup as an YP slave server without any errors. " | |
270 | fi | |
271 | ||
272 | echo "Don't forget to update map ypservers on ${MASTER}." | |
273 | exit 0 | |
274 | fi | |
275 | ||
276 | LIST_OK="NO" | |
277 | ||
278 | while [ "${LIST_OK}" = "NO" ]; | |
279 | do | |
280 | ||
281 | if [ "${SERVERTYPE}" = "MASTER" ]; | |
282 | then | |
283 | HOST_LIST="${HOST}" | |
284 | echo "" | |
285 | echo "At this point, we have to construct a list of this domains YP servers." | |
286 | echo "${HOST} is already known as master server." | |
287 | echo "Please continue to add any slave servers, one per line. When you are" | |
288 | echo "done with the list, type a <control D>." | |
289 | echo " master server : ${HOST}" | |
290 | fi | |
291 | ||
292 | if [ "${SERVERTYPE}" = "UPDATE" ]; | |
293 | then | |
294 | HOST_LIST="${HOST}" | |
295 | NEW_LIST="" | |
296 | MASTER_NAME="" | |
297 | SHORT_HOST=`echo ${HOST} | cut -d. -f1` | |
298 | if [ -f ${YP_DIR}/${DOMAIN}/ypservers.db ]; | |
299 | then | |
300 | for srv in `${MAKEDBM} -u ${YP_DIR}/${DOMAIN}/ypservers | grep -v "^YP" | tr "\t" " " | cut -d\ -f1`; | |
301 | do | |
302 | short_srv=`echo ${srv} | cut -d. -f1` | |
303 | if [ "${SHORT_HOST}" != "${short_srv}" ] | |
304 | then | |
305 | if [ "${NEW_LIST}" = "" ]; | |
306 | then | |
307 | NEW_LIST="${srv}" | |
308 | else | |
309 | NEW_LIST="${NEW_LIST} ${srv}" | |
310 | fi | |
311 | fi | |
312 | done; | |
313 | MASTER_NAME=`${MAKEDBM} -u ${YP_DIR}/${DOMAIN}/ypservers | grep "^YP_MASTER_NAME" | tr "\t" " " | cut -d\ -f2` | |
314 | fi | |
315 | echo "" | |
316 | echo "Update the list of hosts running YP servers in domain ${DOMAIN}." | |
317 | echo "Master for this domain is ${MASTER_NAME}." | |
318 | echo "" | |
319 | echo "First verify old servers, type \\ to remove a server." | |
320 | echo "Then add new servers, one per line. When done type a <control D>." | |
321 | echo "" | |
322 | echo " master server : ${HOST}" | |
323 | if [ "${NEW_LIST}" != "" ]; then | |
324 | for node in $NEW_LIST; do | |
325 | echo -n " verify host : [${node}] " | |
326 | read verify | |
327 | if [ "${verify}" != "\\" ]; then | |
328 | HOST_LIST="${HOST_LIST} ${node}" | |
329 | fi | |
330 | done; | |
331 | fi | |
332 | fi | |
333 | ||
334 | echo -n " next host to add: " | |
335 | ||
336 | while read h | |
337 | do | |
338 | echo -n " next host to add: " | |
339 | HOST_LIST="${HOST_LIST} ${h}" | |
340 | done | |
341 | ||
342 | echo "" | |
343 | echo "The current list of NIS servers looks like this:" | |
344 | echo "" | |
345 | ||
346 | for h in `echo ${HOST_LIST}`; | |
347 | do | |
348 | echo ${h} | |
349 | done | |
350 | ||
351 | echo "" | |
352 | echo -n "Is this correct? [y/n: y] " | |
353 | read hlist_ok | |
354 | ||
355 | case $hlist_ok in | |
356 | n*) echo "Let's try the whole thing again...";; | |
357 | N*) echo "Let's try the whole thing again...";; | |
358 | *) LIST_OK="YES";; | |
359 | esac | |
360 | ||
361 | done | |
362 | ||
363 | echo "Building ${YP_DIR}/${DOMAIN}/ypservers..." | |
364 | for host in ${HOST_LIST}; | |
365 | do | |
366 | echo "${host} ${host}" | |
367 | done | ${MAKEDBM} - ${YP_DIR}/${DOMAIN}/ypservers | |
368 | ||
369 | if [ $? -ne 0 ]; then | |
370 | echo "" 1>&2 | |
371 | echo "Couldn't build yp data base ${YP_DIR}/${DOMAIN}/ypservers." 1>&2 | |
372 | ERROR_EXISTS="YES" | |
373 | if [ "${ERROR_EXIT}" = "YES" ]; then | |
374 | exit 1 | |
375 | fi | |
376 | fi | |
377 | ||
378 | if [ "${SERVERTYPE}" = "MASTER" ]; then | |
379 | ||
380 | CUR_PWD=`pwd` | |
381 | cd ${YP_DIR}/${DOMAIN} | |
382 | echo "Running ${YP_DIR}/${DOMAIN}/Makefile..." | |
383 | if ! ${MAKE} NOPUSH=1; then | |
384 | echo "" 1>&2 | |
385 | echo "Error running Makefile." 1>&2 | |
386 | ERROR_EXISTS="YES" | |
387 | if [ "${ERROR_EXIT}" = "YES" ]; then | |
388 | exit 1 | |
389 | fi | |
390 | fi | |
391 | ||
392 | cd ${CUR_PWD} | |
393 | ||
394 | echo "" | |
395 | if [ "${ERROR_EXISTS}" = "YES" ]; then | |
396 | echo "${HOST} has been setup as an YP master server with errors. " 1>&2 | |
397 | echo "Please remember fix any problem that occurred." 1>&2 | |
398 | else | |
399 | echo "${HOST} has been setup as an YP master server without any errors. " | |
400 | fi | |
401 | ||
402 | fi |