]> andersk Git - moira.git/blob - gen/hesiod.sh
use abstraction barriers (init script) for restarting named
[moira.git] / gen / hesiod.sh
1 #!/bin/sh
2 # This script performs updates of hesiod files on hesiod servers.
3 # $Header$
4
5 if [ -d /var/athena ] && [ -w /var/athena ]; then
6     exec >/var/athena/moira_update.log 2>&1
7 else
8     exec >/tmp/moira_update.log 2>&1 
9 fi
10
11 set -x 
12
13 PATH=/etc:/bin:/usr/bin:/usr/etc:/usr/athena/etc
14 export PATH
15
16 # The following exit codes are defined and MUST BE CONSISTENT with the
17 # error codes the library uses:
18 MR_HESFILE=47836472
19 MR_MISSINGFILE=47836473
20 MR_NAMED=47836475
21 MR_TARERR=47836476
22
23 umask 022
24
25 # File that will contain the necessary information to be updated
26 TARFILE=/var/tmp/hesiod.out
27 # Directory into which we will empty the tarfile
28 SRC_DIR=/etc/athena/_nameserver
29 # Directory into which we will put the final product
30 DEST_DIR=/etc/athena/nameserver
31
32 INIT=/etc/init.d/athena-bind
33 NAMED_PID=/var/athena/named.pid
34
35 # Create the destination directory if it doesn't exist
36 if test ! -d $DEST_DIR
37 then
38    rm -f $DEST_DIR
39    mkdir $DEST_DIR
40    chmod 755 $DEST_DIR
41 fi
42
43 # If $SRC_DIR does not already exist, make sure that it gets created
44 # on the same parition as $DEST_DIR.
45 if test ! -d $SRC_DIR
46 then
47         # Tell linux cd/pwd not to be so "helpful".
48         # This will generate an ignorable error on older platforms.
49         set -P
50
51         cd $DEST_DIR
52         mkdir ../_nameserver
53         cd ../_nameserver
54         if test $SRC_DIR != `pwd`
55         then
56                 ln -s `pwd` $SRC_DIR
57         fi
58 fi
59
60 # make sure SRC_DIR is empty
61 /bin/rm -rf $SRC_DIR/*
62
63 # Alert if tarfile doesn't exist
64 if test ! -r $TARFILE 
65 then
66         exit $MR_MISSINGFILE
67 fi
68
69 cd $SRC_DIR
70 tar xvf $TARFILE
71 # Don't put up with errors extracting the information
72 if test $? -ne 0
73 then
74    exit $MR_TARERR
75 fi
76 for file in *
77 do
78    # Make sure the file is not zero-length
79    if test ! -z $file
80    then
81       chmod o+r $file
82       mv -f $file $DEST_DIR
83       if test $? -ne 0
84       then
85           exit $MR_HESFILE
86       fi
87    else
88       rm -f $file
89       exit $MR_MISSINGFILE
90    fi
91 done
92
93 # Kill off the current named and remove the named.pid file.  It is
94 # important that this file be removed since the script uses its
95 # existance as evidence that named as has been successfully restarted.
96
97 # First, get statistics
98 /usr/athena/etc/rndc stats
99 sleep 1
100 $INIT stop
101 rm -f $NAMED_PID
102
103 # Restart named.
104 $INIT start
105 sleep 1
106 # This timeout is implemented by having the shell check TIMEOUT times
107 # for the existance of $NAMED_PID and to sleep INTERVAL seconds
108 # between each check.
109
110 TIMEOUT=60                      # number of INTERVALS until timeout
111 INTERVAL=60                     # number of seconds between checks
112 i=0
113 while test $i -lt $TIMEOUT
114 do
115    if test -f $NAMED_PID
116    then
117         break
118    fi
119    sleep $INTERVAL
120    i=`expr $i + 1`
121 done
122 echo out of timeout loop
123 # Did it time out?
124 if test $i -eq $TIMEOUT 
125 then
126         exit $MR_NAMED
127 fi
128 echo no timeout
129 # Clean up!
130 rm -f $TARFILE
131 echo removed tarfile
132 rm -f $0
133 echo removed self
134
135 exit 0
This page took 0.04845 seconds and 5 git commands to generate.