root / conf / init.d / nfdhcpd @ cf51ea5b
History | View | Annotate | Download (6.5 kB)
1 | cf51ea5b | Dimitris Aragiorgis | #!/bin/sh |
---|---|---|---|
2 | cf51ea5b | Dimitris Aragiorgis | # |
3 | cf51ea5b | Dimitris Aragiorgis | # This is free software; you may redistribute it and/or modify |
4 | cf51ea5b | Dimitris Aragiorgis | # it under the terms of the GNU General Public License as |
5 | cf51ea5b | Dimitris Aragiorgis | # published by the Free Software Foundation; either version 2, |
6 | cf51ea5b | Dimitris Aragiorgis | # or (at your option) any later version. |
7 | cf51ea5b | Dimitris Aragiorgis | # |
8 | cf51ea5b | Dimitris Aragiorgis | # This is distributed in the hope that it will be useful, but |
9 | cf51ea5b | Dimitris Aragiorgis | # WITHOUT ANY WARRANTY; without even the implied warranty of |
10 | cf51ea5b | Dimitris Aragiorgis | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
11 | cf51ea5b | Dimitris Aragiorgis | # GNU General Public License for more details. |
12 | cf51ea5b | Dimitris Aragiorgis | # |
13 | cf51ea5b | Dimitris Aragiorgis | # You should have received a copy of the GNU General Public License with |
14 | cf51ea5b | Dimitris Aragiorgis | # the Debian operating system, in /usr/share/common-licenses/GPL; if |
15 | cf51ea5b | Dimitris Aragiorgis | # not, write to the Free Software Foundation, Inc., 59 Temple Place, |
16 | cf51ea5b | Dimitris Aragiorgis | # Suite 330, Boston, MA 02111-1307 USA |
17 | cf51ea5b | Dimitris Aragiorgis | # |
18 | cf51ea5b | Dimitris Aragiorgis | ### BEGIN INIT INFO |
19 | cf51ea5b | Dimitris Aragiorgis | # Provides: nfdhcpd |
20 | cf51ea5b | Dimitris Aragiorgis | # Required-Start: $network $local_fs $remote_fs |
21 | cf51ea5b | Dimitris Aragiorgis | # Required-Stop: $remote_fs |
22 | cf51ea5b | Dimitris Aragiorgis | # Should-Start: |
23 | cf51ea5b | Dimitris Aragiorgis | # Should-Stop: |
24 | cf51ea5b | Dimitris Aragiorgis | # Default-Start: 2 3 4 5 |
25 | cf51ea5b | Dimitris Aragiorgis | # Default-Stop: 0 1 6 |
26 | cf51ea5b | Dimitris Aragiorgis | # Short-Description: NFQueue DHCP/RA server |
27 | cf51ea5b | Dimitris Aragiorgis | ### END INIT INFO |
28 | cf51ea5b | Dimitris Aragiorgis | |
29 | cf51ea5b | Dimitris Aragiorgis | PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin |
30 | cf51ea5b | Dimitris Aragiorgis | |
31 | cf51ea5b | Dimitris Aragiorgis | DAEMON=/usr/sbin/nfdhcpd |
32 | cf51ea5b | Dimitris Aragiorgis | NAME=nfdhcpd |
33 | cf51ea5b | Dimitris Aragiorgis | DESC="NFQUEUE-based DHCP/RA server" |
34 | cf51ea5b | Dimitris Aragiorgis | LOGDIR=/var/log/nfdhcpd |
35 | cf51ea5b | Dimitris Aragiorgis | |
36 | cf51ea5b | Dimitris Aragiorgis | PIDFILE=/var/run/$NAME.pid |
37 | cf51ea5b | Dimitris Aragiorgis | |
38 | cf51ea5b | Dimitris Aragiorgis | test -x $DAEMON || exit 0 |
39 | cf51ea5b | Dimitris Aragiorgis | |
40 | cf51ea5b | Dimitris Aragiorgis | . /lib/lsb/init-functions |
41 | cf51ea5b | Dimitris Aragiorgis | |
42 | cf51ea5b | Dimitris Aragiorgis | # Default options, these can be overriden by the information |
43 | cf51ea5b | Dimitris Aragiorgis | # at /etc/default/$NAME |
44 | cf51ea5b | Dimitris Aragiorgis | DAEMON_OPTS="" # Additional options given to the server |
45 | cf51ea5b | Dimitris Aragiorgis | |
46 | cf51ea5b | Dimitris Aragiorgis | DIETIME=2 # Time to wait for the server to die, in seconds |
47 | cf51ea5b | Dimitris Aragiorgis | # If this value is set too low you might not |
48 | cf51ea5b | Dimitris Aragiorgis | # let some servers to die gracefully and |
49 | cf51ea5b | Dimitris Aragiorgis | # 'restart' will not work |
50 | cf51ea5b | Dimitris Aragiorgis | |
51 | cf51ea5b | Dimitris Aragiorgis | STARTTIME=1 # Time to wait for the server to start, in seconds |
52 | cf51ea5b | Dimitris Aragiorgis | # If this value is set each time the server is |
53 | cf51ea5b | Dimitris Aragiorgis | # started (on start or restart) the script will |
54 | cf51ea5b | Dimitris Aragiorgis | # stall to try to determine if it is running |
55 | cf51ea5b | Dimitris Aragiorgis | # If it is not set and the server takes time |
56 | cf51ea5b | Dimitris Aragiorgis | # to setup a pid file the log message might |
57 | cf51ea5b | Dimitris Aragiorgis | # be a false positive (says it did not start |
58 | cf51ea5b | Dimitris Aragiorgis | # when it actually did) |
59 | cf51ea5b | Dimitris Aragiorgis | |
60 | cf51ea5b | Dimitris Aragiorgis | LOGFILE=$LOGDIR/$NAME.log # Server logfile |
61 | cf51ea5b | Dimitris Aragiorgis | #DAEMONUSER=nfdhcp # Users to run the daemons as. If this value |
62 | cf51ea5b | Dimitris Aragiorgis | # is set start-stop-daemon will chuid the server |
63 | cf51ea5b | Dimitris Aragiorgis | |
64 | cf51ea5b | Dimitris Aragiorgis | # Include defaults if available |
65 | cf51ea5b | Dimitris Aragiorgis | if [ -f /etc/default/$NAME ] ; then |
66 | cf51ea5b | Dimitris Aragiorgis | . /etc/default/$NAME |
67 | cf51ea5b | Dimitris Aragiorgis | fi |
68 | cf51ea5b | Dimitris Aragiorgis | |
69 | cf51ea5b | Dimitris Aragiorgis | # Use this if you want the user to explicitly set 'RUN' in |
70 | cf51ea5b | Dimitris Aragiorgis | # /etc/default/ |
71 | cf51ea5b | Dimitris Aragiorgis | if [ "x$RUN" != "xyes" ] ; then |
72 | cf51ea5b | Dimitris Aragiorgis | log_failure_msg "$NAME disabled, please adjust the configuration to your needs " |
73 | cf51ea5b | Dimitris Aragiorgis | log_failure_msg "and then set RUN to 'yes' in /etc/default/$NAME to enable it." |
74 | cf51ea5b | Dimitris Aragiorgis | exit 1 |
75 | cf51ea5b | Dimitris Aragiorgis | fi |
76 | cf51ea5b | Dimitris Aragiorgis | |
77 | cf51ea5b | Dimitris Aragiorgis | # Check that the user exists (if we set a user) |
78 | cf51ea5b | Dimitris Aragiorgis | # Does the user exist? |
79 | cf51ea5b | Dimitris Aragiorgis | set -e |
80 | cf51ea5b | Dimitris Aragiorgis | |
81 | cf51ea5b | Dimitris Aragiorgis | running_pid() { |
82 | cf51ea5b | Dimitris Aragiorgis | # Check if a given process pid's cmdline matches a given name |
83 | cf51ea5b | Dimitris Aragiorgis | pid=$1 |
84 | cf51ea5b | Dimitris Aragiorgis | name=$2 |
85 | cf51ea5b | Dimitris Aragiorgis | [ -z "$pid" ] && return 1 |
86 | cf51ea5b | Dimitris Aragiorgis | [ ! -d /proc/$pid ] && return 1 |
87 | cf51ea5b | Dimitris Aragiorgis | cmd=`cat /proc/$pid/cmdline | tr "\000" "\n"|head -n 1 |cut -d : -f 1` |
88 | cf51ea5b | Dimitris Aragiorgis | # Is this the expected server |
89 | cf51ea5b | Dimitris Aragiorgis | [ "$cmd" != "$name" ] && return 1 |
90 | cf51ea5b | Dimitris Aragiorgis | return 0 |
91 | cf51ea5b | Dimitris Aragiorgis | } |
92 | cf51ea5b | Dimitris Aragiorgis | |
93 | cf51ea5b | Dimitris Aragiorgis | running() { |
94 | cf51ea5b | Dimitris Aragiorgis | # Check if the process is running looking at /proc |
95 | cf51ea5b | Dimitris Aragiorgis | # (works for all users) |
96 | cf51ea5b | Dimitris Aragiorgis | |
97 | cf51ea5b | Dimitris Aragiorgis | # No pidfile, probably no daemon present |
98 | cf51ea5b | Dimitris Aragiorgis | [ ! -f "$PIDFILE" ] && return 1 |
99 | cf51ea5b | Dimitris Aragiorgis | pid=`cat $PIDFILE` |
100 | cf51ea5b | Dimitris Aragiorgis | running_pid $pid python || return 1 |
101 | cf51ea5b | Dimitris Aragiorgis | return 0 |
102 | cf51ea5b | Dimitris Aragiorgis | } |
103 | cf51ea5b | Dimitris Aragiorgis | |
104 | cf51ea5b | Dimitris Aragiorgis | start_server() { |
105 | cf51ea5b | Dimitris Aragiorgis | start_daemon -p $PIDFILE $DAEMON $DAEMON_OPTS |
106 | cf51ea5b | Dimitris Aragiorgis | errcode=$? |
107 | cf51ea5b | Dimitris Aragiorgis | return $errcode |
108 | cf51ea5b | Dimitris Aragiorgis | } |
109 | cf51ea5b | Dimitris Aragiorgis | |
110 | cf51ea5b | Dimitris Aragiorgis | stop_server() { |
111 | cf51ea5b | Dimitris Aragiorgis | killproc -p $PIDFILE $DAEMON |
112 | cf51ea5b | Dimitris Aragiorgis | rrcode=$? |
113 | cf51ea5b | Dimitris Aragiorgis | return $errcode |
114 | cf51ea5b | Dimitris Aragiorgis | } |
115 | cf51ea5b | Dimitris Aragiorgis | |
116 | cf51ea5b | Dimitris Aragiorgis | reload_server() { |
117 | cf51ea5b | Dimitris Aragiorgis | [ ! -f "$PIDFILE" ] && return 1 |
118 | cf51ea5b | Dimitris Aragiorgis | pid=pidofproc $PIDFILE # This is the daemon's pid |
119 | cf51ea5b | Dimitris Aragiorgis | # Send a SIGHUP |
120 | cf51ea5b | Dimitris Aragiorgis | kill -1 $pid |
121 | cf51ea5b | Dimitris Aragiorgis | return $? |
122 | cf51ea5b | Dimitris Aragiorgis | } |
123 | cf51ea5b | Dimitris Aragiorgis | |
124 | cf51ea5b | Dimitris Aragiorgis | force_stop() { |
125 | cf51ea5b | Dimitris Aragiorgis | # Force the process to die killing it manually |
126 | cf51ea5b | Dimitris Aragiorgis | [ ! -e "$PIDFILE" ] && return |
127 | cf51ea5b | Dimitris Aragiorgis | if running ; then |
128 | cf51ea5b | Dimitris Aragiorgis | kill -15 $pid |
129 | cf51ea5b | Dimitris Aragiorgis | # Is it really dead? |
130 | cf51ea5b | Dimitris Aragiorgis | sleep "$DIETIME"s |
131 | cf51ea5b | Dimitris Aragiorgis | if running ; then |
132 | cf51ea5b | Dimitris Aragiorgis | kill -9 $pid |
133 | cf51ea5b | Dimitris Aragiorgis | sleep "$DIETIME"s |
134 | cf51ea5b | Dimitris Aragiorgis | if running ; then |
135 | cf51ea5b | Dimitris Aragiorgis | echo "Cannot kill $NAME (pid=$pid)!" |
136 | cf51ea5b | Dimitris Aragiorgis | exit 1 |
137 | cf51ea5b | Dimitris Aragiorgis | fi |
138 | cf51ea5b | Dimitris Aragiorgis | fi |
139 | cf51ea5b | Dimitris Aragiorgis | fi |
140 | cf51ea5b | Dimitris Aragiorgis | rm -f $PIDFILE |
141 | cf51ea5b | Dimitris Aragiorgis | } |
142 | cf51ea5b | Dimitris Aragiorgis | |
143 | cf51ea5b | Dimitris Aragiorgis | |
144 | cf51ea5b | Dimitris Aragiorgis | case "$1" in |
145 | cf51ea5b | Dimitris Aragiorgis | start) |
146 | cf51ea5b | Dimitris Aragiorgis | log_daemon_msg "Starting $DESC " "$NAME" |
147 | cf51ea5b | Dimitris Aragiorgis | # Check if it's running first |
148 | cf51ea5b | Dimitris Aragiorgis | if running ; then |
149 | cf51ea5b | Dimitris Aragiorgis | log_progress_msg "apparently already running" |
150 | cf51ea5b | Dimitris Aragiorgis | log_end_msg 0 |
151 | cf51ea5b | Dimitris Aragiorgis | exit 0 |
152 | cf51ea5b | Dimitris Aragiorgis | fi |
153 | cf51ea5b | Dimitris Aragiorgis | if start_server ; then |
154 | cf51ea5b | Dimitris Aragiorgis | # NOTE: Some servers might die some time after they start, |
155 | cf51ea5b | Dimitris Aragiorgis | # this code will detect this issue if STARTTIME is set |
156 | cf51ea5b | Dimitris Aragiorgis | # to a reasonable value |
157 | cf51ea5b | Dimitris Aragiorgis | [ -n "$STARTTIME" ] && sleep $STARTTIME # Wait some time |
158 | cf51ea5b | Dimitris Aragiorgis | if running ; then |
159 | cf51ea5b | Dimitris Aragiorgis | # It's ok, the server started and is running |
160 | cf51ea5b | Dimitris Aragiorgis | log_end_msg 0 |
161 | cf51ea5b | Dimitris Aragiorgis | else |
162 | cf51ea5b | Dimitris Aragiorgis | # It is not running after we did start |
163 | cf51ea5b | Dimitris Aragiorgis | log_end_msg 1 |
164 | cf51ea5b | Dimitris Aragiorgis | fi |
165 | cf51ea5b | Dimitris Aragiorgis | else |
166 | cf51ea5b | Dimitris Aragiorgis | # Either we could not start it |
167 | cf51ea5b | Dimitris Aragiorgis | log_end_msg 1 |
168 | cf51ea5b | Dimitris Aragiorgis | fi |
169 | cf51ea5b | Dimitris Aragiorgis | ;; |
170 | cf51ea5b | Dimitris Aragiorgis | stop) |
171 | cf51ea5b | Dimitris Aragiorgis | log_daemon_msg "Stopping $DESC" "$NAME" |
172 | cf51ea5b | Dimitris Aragiorgis | if running ; then |
173 | cf51ea5b | Dimitris Aragiorgis | # Only stop the server if we see it running |
174 | cf51ea5b | Dimitris Aragiorgis | errcode=0 |
175 | cf51ea5b | Dimitris Aragiorgis | stop_server || errcode=$? |
176 | cf51ea5b | Dimitris Aragiorgis | log_end_msg $errcode |
177 | cf51ea5b | Dimitris Aragiorgis | else |
178 | cf51ea5b | Dimitris Aragiorgis | # If it's not running don't do anything |
179 | cf51ea5b | Dimitris Aragiorgis | log_progress_msg "apparently not running" |
180 | cf51ea5b | Dimitris Aragiorgis | log_end_msg 0 |
181 | cf51ea5b | Dimitris Aragiorgis | exit 0 |
182 | cf51ea5b | Dimitris Aragiorgis | fi |
183 | cf51ea5b | Dimitris Aragiorgis | ;; |
184 | cf51ea5b | Dimitris Aragiorgis | force-stop) |
185 | cf51ea5b | Dimitris Aragiorgis | # First try to stop gracefully the program |
186 | cf51ea5b | Dimitris Aragiorgis | $0 stop |
187 | cf51ea5b | Dimitris Aragiorgis | if running; then |
188 | cf51ea5b | Dimitris Aragiorgis | # If it's still running try to kill it more forcefully |
189 | cf51ea5b | Dimitris Aragiorgis | log_daemon_msg "Stopping (force) $DESC" "$NAME" |
190 | cf51ea5b | Dimitris Aragiorgis | errcode=0 |
191 | cf51ea5b | Dimitris Aragiorgis | force_stop || errcode=$? |
192 | cf51ea5b | Dimitris Aragiorgis | log_end_msg $errcode |
193 | cf51ea5b | Dimitris Aragiorgis | fi |
194 | cf51ea5b | Dimitris Aragiorgis | ;; |
195 | cf51ea5b | Dimitris Aragiorgis | restart|force-reload) |
196 | cf51ea5b | Dimitris Aragiorgis | log_daemon_msg "Restarting $DESC" "$NAME" |
197 | cf51ea5b | Dimitris Aragiorgis | errcode=0 |
198 | cf51ea5b | Dimitris Aragiorgis | stop_server || errcode=$? |
199 | cf51ea5b | Dimitris Aragiorgis | # Wait some sensible amount, some server need this |
200 | cf51ea5b | Dimitris Aragiorgis | [ -n "$DIETIME" ] && sleep $DIETIME |
201 | cf51ea5b | Dimitris Aragiorgis | start_server || errcode=$? |
202 | cf51ea5b | Dimitris Aragiorgis | [ -n "$STARTTIME" ] && sleep $STARTTIME |
203 | cf51ea5b | Dimitris Aragiorgis | running || errcode=$? |
204 | cf51ea5b | Dimitris Aragiorgis | log_end_msg $errcode |
205 | cf51ea5b | Dimitris Aragiorgis | ;; |
206 | cf51ea5b | Dimitris Aragiorgis | status) |
207 | cf51ea5b | Dimitris Aragiorgis | |
208 | cf51ea5b | Dimitris Aragiorgis | log_daemon_msg "Checking status of $DESC" "$NAME" |
209 | cf51ea5b | Dimitris Aragiorgis | if running ; then |
210 | cf51ea5b | Dimitris Aragiorgis | log_progress_msg "running" |
211 | cf51ea5b | Dimitris Aragiorgis | log_end_msg 0 |
212 | cf51ea5b | Dimitris Aragiorgis | else |
213 | cf51ea5b | Dimitris Aragiorgis | log_progress_msg "apparently not running" |
214 | cf51ea5b | Dimitris Aragiorgis | log_end_msg 1 |
215 | cf51ea5b | Dimitris Aragiorgis | exit 1 |
216 | cf51ea5b | Dimitris Aragiorgis | fi |
217 | cf51ea5b | Dimitris Aragiorgis | ;; |
218 | cf51ea5b | Dimitris Aragiorgis | reload) |
219 | cf51ea5b | Dimitris Aragiorgis | log_warning_msg "Reloading $NAME daemon: not implemented, as the daemon" |
220 | cf51ea5b | Dimitris Aragiorgis | log_warning_msg "cannot re-read the config file (use restart)." |
221 | cf51ea5b | Dimitris Aragiorgis | ;; |
222 | cf51ea5b | Dimitris Aragiorgis | *) |
223 | cf51ea5b | Dimitris Aragiorgis | N=/etc/init.d/$NAME |
224 | cf51ea5b | Dimitris Aragiorgis | echo "Usage: $N {start|stop|force-stop|restart|force-reload|status}" >&2 |
225 | cf51ea5b | Dimitris Aragiorgis | exit 1 |
226 | cf51ea5b | Dimitris Aragiorgis | ;; |
227 | cf51ea5b | Dimitris Aragiorgis | esac |
228 | cf51ea5b | Dimitris Aragiorgis | |
229 | cf51ea5b | Dimitris Aragiorgis | exit 0 |