4 # Required-Start: $network $remote_fs $syslog
5 # Required-Stop: $network $remote_fs $syslog
6 # Default-Start: 2 3 4 5
8 # Description: DHCP and DNS server
11 set +e
# Don't exit on error status
13 PATH
=/usr
/local
/sbin
:/usr
/local
/bin
:/sbin
:/bin
:/usr
/sbin
:/usr
/bin
14 DAEMON
=/usr
/sbin
/dnsmasq
16 DESC
="DNS forwarder and DHCP server"
18 # Most configuration options in /etc/default/dnsmasq are deprecated
21 if [ -r /etc
/default
/$NAME ]; then
25 # Get the system locale, so that messages are in the correct language, and the
26 # charset for IDN is correct
27 if [ -r /etc
/default
/locale
]; then
32 test -x $DAEMON ||
exit 0
34 # Provide skeleton LSB log functions for backports which don't have LSB functions.
35 if [ -f /lib
/lsb
/init-functions
]; then
36 .
/lib
/lsb
/init-functions
53 elif [ $1 -eq 255 ]; then
54 /bin
/echo -e " (warning)."
56 /bin
/echo -e " failed!"
62 # If the resolvconf package is installed then use the resolv conf file
63 # that it provides as the default. Otherwise use /etc/resolv.conf as
66 # If IGNORE_RESOLVCONF is set in /etc/default/dnsmasq or an explicit
67 # filename is set there then this inhibits the use of the resolvconf-provided
70 # Note that if the resolvconf package is installed it is not possible to
71 # override it just by configuration in /etc/dnsmasq.conf, it is necessary
72 # to set IGNORE_RESOLVCONF=yes in /etc/default/dnsmasq.
74 if [ ! "$RESOLV_CONF" ] &&
75 [ "$IGNORE_RESOLVCONF" != "yes" ] &&
76 [ -x /sbin
/resolvconf
]
78 RESOLV_CONF
=/var
/run
/dnsmasq
/resolv.conf
81 for INTERFACE
in $DNSMASQ_INTERFACE; do
82 DNSMASQ_INTERFACES
="$DNSMASQ_INTERFACES -i $INTERFACE"
85 for INTERFACE
in $DNSMASQ_EXCEPT; do
86 DNSMASQ_INTERFACES
="$DNSMASQ_INTERFACES -I $INTERFACE"
89 if [ ! "$DNSMASQ_USER" ]; then
90 DNSMASQ_USER
="dnsmasq"
96 # 0 if daemon has been started
97 # 1 if daemon was already running
98 # 2 if daemon could not be started
100 # /var/run may be volatile, so we need to ensure that
101 # /var/run/dnsmasq exists here as well as in postinst
102 if [ ! -d /var
/run
/dnsmasq
]; then
103 mkdir
/var
/run
/dnsmasq ||
return 2
104 chown dnsmasq
:nogroup
/var
/run
/dnsmasq ||
return 2
107 start-stop-daemon
--start --quiet --pidfile /var
/run
/dnsmasq
/$NAME.pid
--exec $DAEMON --test > /dev
/null ||
return 1
108 start-stop-daemon
--start --quiet --pidfile /var
/run
/dnsmasq
/$NAME.pid
--exec $DAEMON -- \
109 -x /var
/run
/dnsmasq
/$NAME.pid \
110 ${MAILHOSTNAME:+ -m $MAILHOSTNAME} \
111 ${MAILTARGET:+ -t $MAILTARGET} \
112 ${DNSMASQ_USER:+ -u $DNSMASQ_USER} \
113 ${DNSMASQ_INTERFACES:+ $DNSMASQ_INTERFACES} \
114 ${DHCP_LEASE:+ -l $DHCP_LEASE} \
115 ${DOMAIN_SUFFIX:+ -s $DOMAIN_SUFFIX} \
116 ${RESOLV_CONF:+ -r $RESOLV_CONF} \
117 ${CACHESIZE:+ -c $CACHESIZE} \
118 ${CONFIG_DIR:+ -7 $CONFIG_DIR} \
119 ${DNSMASQ_OPTS:+ $DNSMASQ_OPTS} \
125 # If interface "lo" is explicitly disabled in /etc/default/dnsmasq
126 # Then dnsmasq won't be providing local DNS, so don't add it to
127 # the resolvconf server set.
128 for interface
in $DNSMASQ_EXCEPT
130 [ $interface = lo
] && return
133 if [ -x /sbin
/resolvconf
] ; then
134 echo "nameserver 127.0.0.1" |
/sbin
/resolvconf
-a lo.
$NAME
142 # 0 if daemon has been stopped
143 # 1 if daemon was already stopped
144 # 2 if daemon could not be stopped
145 # other if a failure occurred
146 start-stop-daemon
--stop --quiet --retry=TERM
/30/KILL
/5 --pidfile /var
/run
/dnsmasq
/$NAME.pid
--name $NAME
148 [ "$RETVAL" = 2 ] && return 2
154 if [ -x /sbin
/resolvconf
] ; then
155 /sbin
/resolvconf
-d lo.
$NAME
163 # 0 if daemon is running
164 # 1 if daemon is dead and pid file exists
165 # 3 if daemon is not running
166 # 4 if daemon status is unknown
167 start-stop-daemon
--start --quiet --pidfile /var
/run
/dnsmasq
/$NAME.pid
--exec $DAEMON --test > /dev
/null
169 0) [ -e "/var/run/dnsmasq/$NAME.pid" ] && return 1 ; return 3 ;;
177 test "$ENABLED" != "0" ||
exit 0
178 log_daemon_msg
"Starting $DESC" "$NAME"
187 log_success_msg
"(already running)"
198 if [ "$ENABLED" != "0" ]; then
199 log_daemon_msg
"Stopping $DESC" "$NAME"
203 if [ "$ENABLED" = "0" ]; then
205 0) log_daemon_msg
"Stopping $DESC" "$NAME"; log_end_msg
0 ;;
210 0) log_end_msg
0 ; exit 0 ;;
211 1) log_warning_msg
"(not running)" ; exit 0 ;;
212 *) log_end_msg
1; exit 1 ;;
215 restart|force-reload
)
216 test "$ENABLED" != "0" ||
exit 1
217 $DAEMON --test ${CONFIG_DIR:+ -7 $CONFIG_DIR} ${DNSMASQ_OPTS:+ $DNSMASQ_OPTS} >/dev
/null
2>&1
218 if [ $?
-ne 0 ]; then
219 NAME
="configuration syntax check"
226 log_daemon_msg
"Restarting $DESC" "$NAME"
250 log_daemon_msg
"Checking $DESC" "$NAME"
253 0) log_success_msg
"(running)" ; exit 0 ;;
254 1) log_success_msg
"(dead, pid file exists)" ; exit 1 ;;
255 3) log_success_msg
"(not running)" ; exit 3 ;;
256 *) log_success_msg
"(unknown)" ; exit 4 ;;
260 kill -s USR1
`cat /var/run/dnsmasq/$NAME.pid`
262 systemd-start-resolvconf
)
265 systemd-stop-resolvconf
)
269 # --pid-file without argument disables writing a PIDfile, we don't need one with sytemd.
270 # Enable DBus by default because we use DBus activation with systemd.
271 exec $DAEMON --keep-in-foreground --pid-file --enable-dbus \
272 ${MAILHOSTNAME:+ -m $MAILHOSTNAME} \
273 ${MAILTARGET:+ -t $MAILTARGET} \
274 ${DNSMASQ_USER:+ -u $DNSMASQ_USER} \
275 ${DNSMASQ_INTERFACES:+ $DNSMASQ_INTERFACES} \
276 ${DHCP_LEASE:+ -l $DHCP_LEASE} \
277 ${DOMAIN_SUFFIX:+ -s $DOMAIN_SUFFIX} \
278 ${RESOLV_CONF:+ -r $RESOLV_CONF} \
279 ${CACHESIZE:+ -c $CACHESIZE} \
280 ${CONFIG_DIR:+ -7 $CONFIG_DIR} \
281 ${DNSMASQ_OPTS:+ $DNSMASQ_OPTS}
284 echo "Usage: /etc/init.d/$NAME {start|stop|restart|force-reload|dump-stats|status}" >&2