import repository from arizona
[raven.git] / webpage / downloads / stopscript_stage2
1 #! /bin/sh
2
3 # <Program Name>
4 #   stopscript
5 #
6 # <Authors>
7 #    Scott Baker
8 #    Justin Cappos
9 #    Jeffry Johnston
10 #    Jeremy Plichta
11 #
12 # <Purpose>
13 #    Stops stork from running on a node
14
15 echo "Stopping Stork: Stage 2"
16
17 # logging: mark when the stage1 initscript started running
18 date > /tmp/stork_stopscript_stage2.log
19
20 # save original PWD
21 OLDPWD=$PWD
22
23 # ////////// common code shared with stopscript_stage2 ///////////
24
25 # this file is set if the stopscript has been run
26 STORK_STOPPED_FILE="/usr/local/stork/var/stork_stopped"
27
28 # mutual exclusion
29 # from: http://www.unixreview.com/documents/s=9040/ur0402g/
30 # note: there is a race condition because test & creation of the lock file is
31 # not atomic
32
33 LOCKFILE="/tmp/stork_initscript_lock"
34 LOCKED=""
35
36 # file to hold the pid of the initscript. Created while the initscript
37 # mutex is held. Used to prevent running of pacman.
38 PIDFILE=/var/run/stork_initscript.pid
39
40 mutex_lock()
41 {
42    if test -r $LOCKFILE
43    then # If a lock file exists, check if the process that created it
44         # is still running.
45       PROCESS=$(cat $LOCKFILE)
46    else
47       PROCESS=" "
48    fi
49    if (ps -p $PROCESS) > /dev/null 2>&1
50    then
51       echo "The Stork initscript is already running"
52       exit 1
53    else
54       # The process is not running, create new lock file containing PID.
55       rm -f $LOCKFILE
56       echo $$ > $LOCKFILE
57       LOCKED="true"
58    fi
59    echo $$ > $PIDFILE
60 }
61
62 mutex_unlock()
63 {
64    rm $PIDFILE
65    # remove the lock file if the mutex was locked
66    if [ -n "$LOCKED" ]
67    then
68       rm -f $LOCKFILE
69       LOCKED=""
70    fi
71 }
72
73
74 # error reporting function
75 error()
76 {
77    echo
78    echo "Please E-mail stork-support@cs.arizona.edu if you believe you have"
79    echo "received this message in error."
80
81    # restore original PWD
82    cd $OLDPWD
83    mutex_unlock
84    exit 1
85 }
86
87 stork_installed()
88 {
89     if (rpm -q stork-client)
90     then
91         return 1
92     else
93         return 0
94     fi
95 }
96
97 # //////////////// end common code ////////////////
98
99 # check for root user
100 if [ $UID -ne "0" ]
101 then
102    echo "You must run this program with root permissions..."
103    error
104 fi
105
106 # grab a mutex so only one initscript (or stopscript) can run at a time
107 mutex_lock
108
109 # XXX do our thing now
110
111 if [ ! $(stork_installed) ]
112 then
113    echo "Error: Stork is not installed"
114    error
115 fi
116
117 echo "Stopping Stork: Killing Pacmand"
118
119 /etc/init.d/pacman.init stop
120
121 # /usr/local/stork/var/stork_stopped is a hint to the initscript so that it
122 # can restart pacman    
123 date > $STORK_STOPPED_FILE
124
125 # logging: mark when the stage1 initscript completed
126 date > /tmp/stork_stopscript_stage2_complete.log
127
128 # logging: move the log files out of /tmp
129 mkdir -p /usr/local/stork/var/log/stopscript
130 mv --force /tmp/stork_stopscript*.log /usr/local/stork/var/log/stopscript
131
132 # remove this script, its signature, and publickey from /tmp
133 # XXX This should have been done in the the stage1 stopscript, but we'll
134 # defer until we have a valid reason to trouble PLC with new initscripts
135 rm -f /tmp/stork-stage2-stopscript.*
136 rm -f /tmp/stork-publickey.*
137
138 echo "Stopping Stork: Done"
139
140 # done
141 mutex_unlock
142 exit 0