mirror of
https://github.com/pi-hole/dnsmasq.git
synced 2025-12-19 18:28:25 +00:00
Support multiple daemon instances with systemd in Debian.
This commit is contained in:
1
debian/changelog
vendored
1
debian/changelog
vendored
@@ -3,6 +3,7 @@ dnsmasq (2.81-1) unstable; urgency=low
|
|||||||
* New upstream.
|
* New upstream.
|
||||||
* Fix nodocs/nodoc confusion in rules. (closes: #922758)
|
* Fix nodocs/nodoc confusion in rules. (closes: #922758)
|
||||||
* Add Vcs-* fields to control. (closes: #922422)
|
* Add Vcs-* fields to control. (closes: #922422)
|
||||||
|
* Add systemd support for multiple daemon instances. (closes: #914305)
|
||||||
|
|
||||||
-- Simon Kelley <simon@thekelleys.org.uk> Fri, 1 Mar 2019 17:19:25 +0000
|
-- Simon Kelley <simon@thekelleys.org.uk> Fri, 1 Mar 2019 17:19:25 +0000
|
||||||
|
|
||||||
|
|||||||
11
debian/default
vendored
11
debian/default
vendored
@@ -1,5 +1,5 @@
|
|||||||
# This file has five functions:
|
# This file has six functions:
|
||||||
# 1) to completely disable starting dnsmasq,
|
# 1) to completely disable starting this dnsmasq instance
|
||||||
# 2) to set DOMAIN_SUFFIX by running `dnsdomainname`
|
# 2) to set DOMAIN_SUFFIX by running `dnsdomainname`
|
||||||
# 3) to select an alternative config file
|
# 3) to select an alternative config file
|
||||||
# by setting DNSMASQ_OPTS to --conf-file=<file>
|
# by setting DNSMASQ_OPTS to --conf-file=<file>
|
||||||
@@ -7,6 +7,8 @@
|
|||||||
# more configuration variables.
|
# more configuration variables.
|
||||||
# 5) to stop the resolvconf package from controlling dnsmasq's
|
# 5) to stop the resolvconf package from controlling dnsmasq's
|
||||||
# idea of which upstream nameservers to use.
|
# idea of which upstream nameservers to use.
|
||||||
|
# 6) to avoid using this dnsmasq instance as the system's default resolver
|
||||||
|
# by setting DNSMASQ_EXCEPT="lo"
|
||||||
# For upgraders from very old versions, all the shell variables set
|
# For upgraders from very old versions, all the shell variables set
|
||||||
# here in previous versions are still honored by the init script
|
# here in previous versions are still honored by the init script
|
||||||
# so if you just keep your old version of this file nothing will break.
|
# so if you just keep your old version of this file nothing will break.
|
||||||
@@ -31,3 +33,8 @@ CONFIG_DIR=/etc/dnsmasq.d,.dpkg-dist,.dpkg-old,.dpkg-new
|
|||||||
# /etc/dnsmasq.conf is not enough to override resolvconf if it is
|
# /etc/dnsmasq.conf is not enough to override resolvconf if it is
|
||||||
# installed: the line below must be uncommented.
|
# installed: the line below must be uncommented.
|
||||||
#IGNORE_RESOLVCONF=yes
|
#IGNORE_RESOLVCONF=yes
|
||||||
|
|
||||||
|
# If the resolvconf package is installed, dnsmasq will tell resolvconf
|
||||||
|
# to use dnsmasq under 127.0.0.1 as the system's default resolver.
|
||||||
|
# Uncommenting this line inhibits this behaviour.
|
||||||
|
#DNSMASQ_EXCEPT="lo"
|
||||||
|
|||||||
156
debian/init
vendored
156
debian/init
vendored
@@ -15,12 +15,13 @@ PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
|
|||||||
DAEMON=/usr/sbin/dnsmasq
|
DAEMON=/usr/sbin/dnsmasq
|
||||||
NAME=dnsmasq
|
NAME=dnsmasq
|
||||||
DESC="DNS forwarder and DHCP server"
|
DESC="DNS forwarder and DHCP server"
|
||||||
|
INSTANCE="${2}"
|
||||||
|
|
||||||
# Most configuration options in /etc/default/dnsmasq are deprecated
|
# Most configuration options in /etc/default/dnsmasq are deprecated
|
||||||
# but still honoured.
|
# but still honoured.
|
||||||
ENABLED=1
|
ENABLED=1
|
||||||
if [ -r /etc/default/$NAME ]; then
|
if [ -r /etc/default/${NAME}${INSTANCE:+.${INSTANCE}} ]; then
|
||||||
. /etc/default/$NAME
|
. /etc/default/${NAME}${INSTANCE:+.${INSTANCE}}
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Get the system locale, so that messages are in the correct language, and the
|
# Get the system locale, so that messages are in the correct language, and the
|
||||||
@@ -35,7 +36,7 @@ fi
|
|||||||
# package is still in place.
|
# package is still in place.
|
||||||
test -e /usr/share/dnsmasq/installed-marker || exit 0
|
test -e /usr/share/dnsmasq/installed-marker || exit 0
|
||||||
|
|
||||||
test -x $DAEMON || exit 0
|
test -x ${DAEMON} || exit 0
|
||||||
|
|
||||||
# Provide skeleton LSB log functions for backports which don't have LSB functions.
|
# Provide skeleton LSB log functions for backports which don't have LSB functions.
|
||||||
if [ -f /lib/lsb/init-functions ]; then
|
if [ -f /lib/lsb/init-functions ]; then
|
||||||
@@ -50,13 +51,13 @@ else
|
|||||||
}
|
}
|
||||||
|
|
||||||
log_daemon_msg () {
|
log_daemon_msg () {
|
||||||
echo -n "${1}: $2"
|
echo -n "${1}: ${2}"
|
||||||
}
|
}
|
||||||
|
|
||||||
log_end_msg () {
|
log_end_msg () {
|
||||||
if [ $1 -eq 0 ]; then
|
if [ "${1}" -eq 0 ]; then
|
||||||
echo "."
|
echo "."
|
||||||
elif [ $1 -eq 255 ]; then
|
elif [ "${1}" -eq 255 ]; then
|
||||||
/bin/echo -e " (warning)."
|
/bin/echo -e " (warning)."
|
||||||
else
|
else
|
||||||
/bin/echo -e " failed!"
|
/bin/echo -e " failed!"
|
||||||
@@ -77,22 +78,22 @@ fi
|
|||||||
# override it just by configuration in /etc/dnsmasq.conf, it is necessary
|
# override it just by configuration in /etc/dnsmasq.conf, it is necessary
|
||||||
# to set IGNORE_RESOLVCONF=yes in /etc/default/dnsmasq.
|
# to set IGNORE_RESOLVCONF=yes in /etc/default/dnsmasq.
|
||||||
|
|
||||||
if [ ! "$RESOLV_CONF" ] &&
|
if [ ! "${RESOLV_CONF}" ] &&
|
||||||
[ "$IGNORE_RESOLVCONF" != "yes" ] &&
|
[ "${IGNORE_RESOLVCONF}" != "yes" ] &&
|
||||||
[ -x /sbin/resolvconf ]
|
[ -x /sbin/resolvconf ]
|
||||||
then
|
then
|
||||||
RESOLV_CONF=/run/dnsmasq/resolv.conf
|
RESOLV_CONF=/run/dnsmasq/resolv.conf
|
||||||
fi
|
fi
|
||||||
|
|
||||||
for INTERFACE in $DNSMASQ_INTERFACE; do
|
for INTERFACE in ${DNSMASQ_INTERFACE}; do
|
||||||
DNSMASQ_INTERFACES="$DNSMASQ_INTERFACES -i $INTERFACE"
|
DNSMASQ_INTERFACES="${DNSMASQ_INTERFACES} -i ${INTERFACE}"
|
||||||
done
|
done
|
||||||
|
|
||||||
for INTERFACE in $DNSMASQ_EXCEPT; do
|
for INTERFACE in ${DNSMASQ_EXCEPT}; do
|
||||||
DNSMASQ_INTERFACES="$DNSMASQ_INTERFACES -I $INTERFACE"
|
DNSMASQ_INTERFACES="${DNSMASQ_INTERFACES} -I ${INTERFACE}"
|
||||||
done
|
done
|
||||||
|
|
||||||
if [ ! "$DNSMASQ_USER" ]; then
|
if [ ! "${DNSMASQ_USER}" ]; then
|
||||||
DNSMASQ_USER="dnsmasq"
|
DNSMASQ_USER="dnsmasq"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -102,15 +103,15 @@ fi
|
|||||||
# have no effect, but for otherwise-unconfigured installations, it stops dnsmasq
|
# have no effect, but for otherwise-unconfigured installations, it stops dnsmasq
|
||||||
# from being vulnerable to DNS-reflection attacks.
|
# from being vulnerable to DNS-reflection attacks.
|
||||||
|
|
||||||
DNSMASQ_OPTS="$DNSMASQ_OPTS --local-service"
|
DNSMASQ_OPTS="${DNSMASQ_OPTS} --local-service"
|
||||||
|
|
||||||
# If the dns-root-data package is installed, then the trust anchors will be
|
# If the dns-root-data package is installed, then the trust anchors will be
|
||||||
# available in $ROOT_DS, in BIND zone-file format. Reformat as dnsmasq
|
# available in ROOT_DS, in BIND zone-file format. Reformat as dnsmasq
|
||||||
# --trust-anchor options.
|
# --trust-anchor options.
|
||||||
|
|
||||||
ROOT_DS="/usr/share/dns/root.ds"
|
ROOT_DS="/usr/share/dns/root.ds"
|
||||||
|
|
||||||
if [ -f $ROOT_DS ]; then
|
if [ -f ${ROOT_DS} ]; then
|
||||||
DNSMASQ_OPTS="$DNSMASQ_OPTS `env LC_ALL=C sed -rne "s/^([.a-zA-Z0-9]+)([[:space:]]+[0-9]+)*([[:space:]]+IN)*[[:space:]]+DS[[:space:]]+/--trust-anchor=\1,/;s/[[:space:]]+/,/gp" $ROOT_DS | tr '\n' ' '`"
|
DNSMASQ_OPTS="$DNSMASQ_OPTS `env LC_ALL=C sed -rne "s/^([.a-zA-Z0-9]+)([[:space:]]+[0-9]+)*([[:space:]]+IN)*[[:space:]]+DS[[:space:]]+/--trust-anchor=\1,/;s/[[:space:]]+/,/gp" $ROOT_DS | tr '\n' ' '`"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -124,24 +125,24 @@ start()
|
|||||||
# /run may be volatile, so we need to ensure that
|
# /run may be volatile, so we need to ensure that
|
||||||
# /run/dnsmasq exists here as well as in postinst
|
# /run/dnsmasq exists here as well as in postinst
|
||||||
if [ ! -d /run/dnsmasq ]; then
|
if [ ! -d /run/dnsmasq ]; then
|
||||||
mkdir /run/dnsmasq || return 2
|
mkdir /run/dnsmasq || { [ -d /run/dnsmasq ] || return 2 ; }
|
||||||
chown dnsmasq:nogroup /run/dnsmasq || return 2
|
chown dnsmasq:nogroup /run/dnsmasq || return 2
|
||||||
fi
|
fi
|
||||||
[ -x /sbin/restorecon ] && /sbin/restorecon /run/dnsmasq
|
[ -x /sbin/restorecon ] && /sbin/restorecon /run/dnsmasq
|
||||||
|
|
||||||
start-stop-daemon --start --quiet --pidfile /run/dnsmasq/$NAME.pid --exec $DAEMON --test > /dev/null || return 1
|
start-stop-daemon --start --quiet --pidfile /run/dnsmasq/${NAME}${INSTANCE:+.${INSTANCE}}.pid --exec ${DAEMON} --test > /dev/null || return 1
|
||||||
start-stop-daemon --start --quiet --pidfile /run/dnsmasq/$NAME.pid --exec $DAEMON -- \
|
start-stop-daemon --start --quiet --pidfile /run/dnsmasq/${NAME}${INSTANCE:+.${INSTANCE}}.pid --exec ${DAEMON} -- \
|
||||||
-x /run/dnsmasq/$NAME.pid \
|
-x /run/dnsmasq/${NAME}${INSTANCE:+.${INSTANCE}}.pid \
|
||||||
${MAILHOSTNAME:+ -m $MAILHOSTNAME} \
|
${MAILHOSTNAME:+ -m ${MAILHOSTNAME}} \
|
||||||
${MAILTARGET:+ -t $MAILTARGET} \
|
${MAILTARGET:+ -t ${MAILTARGET}} \
|
||||||
${DNSMASQ_USER:+ -u $DNSMASQ_USER} \
|
${DNSMASQ_USER:+ -u ${DNSMASQ_USER}} \
|
||||||
${DNSMASQ_INTERFACES:+ $DNSMASQ_INTERFACES} \
|
${DNSMASQ_INTERFACES:+ ${DNSMASQ_INTERFACES}} \
|
||||||
${DHCP_LEASE:+ -l $DHCP_LEASE} \
|
${DHCP_LEASE:+ -l ${DHCP_LEASE}} \
|
||||||
${DOMAIN_SUFFIX:+ -s $DOMAIN_SUFFIX} \
|
${DOMAIN_SUFFIX:+ -s ${DOMAIN_SUFFIX}} \
|
||||||
${RESOLV_CONF:+ -r $RESOLV_CONF} \
|
${RESOLV_CONF:+ -r ${RESOLV_CONF}} \
|
||||||
${CACHESIZE:+ -c $CACHESIZE} \
|
${CACHESIZE:+ -c ${CACHESIZE}} \
|
||||||
${CONFIG_DIR:+ -7 $CONFIG_DIR} \
|
${CONFIG_DIR:+ -7 ${CONFIG_DIR}} \
|
||||||
${DNSMASQ_OPTS:+ $DNSMASQ_OPTS} \
|
${DNSMASQ_OPTS:+ ${DNSMASQ_OPTS}} \
|
||||||
|| return 2
|
|| return 2
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -150,18 +151,17 @@ start_resolvconf()
|
|||||||
# If interface "lo" is explicitly disabled in /etc/default/dnsmasq
|
# If interface "lo" is explicitly disabled in /etc/default/dnsmasq
|
||||||
# Then dnsmasq won't be providing local DNS, so don't add it to
|
# Then dnsmasq won't be providing local DNS, so don't add it to
|
||||||
# the resolvconf server set.
|
# the resolvconf server set.
|
||||||
for interface in $DNSMASQ_EXCEPT
|
for interface in ${DNSMASQ_EXCEPT}; do
|
||||||
do
|
[ ${interface} = lo ] && return
|
||||||
[ $interface = lo ] && return
|
|
||||||
done
|
done
|
||||||
|
|
||||||
# Also skip this if DNS functionality is disabled in /etc/dnsmasq.conf
|
# Also skip this if DNS functionality is disabled in /etc/dnsmasq.conf
|
||||||
if grep -qs '^port=0' /etc/dnsmasq.conf; then
|
if grep -qs '^port=0' /etc/dnsmasq.conf; then
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -x /sbin/resolvconf ] ; then
|
if [ -x /sbin/resolvconf ] ; then
|
||||||
echo "nameserver 127.0.0.1" | /sbin/resolvconf -a lo.$NAME
|
echo "nameserver 127.0.0.1" | /sbin/resolvconf -a lo.${NAME}${INSTANCE:+.${INSTANCE}}
|
||||||
fi
|
fi
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
@@ -173,13 +173,13 @@ stop()
|
|||||||
# 1 if daemon was already stopped
|
# 1 if daemon was already stopped
|
||||||
# 2 if daemon could not be stopped
|
# 2 if daemon could not be stopped
|
||||||
# other if a failure occurred
|
# other if a failure occurred
|
||||||
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile /run/dnsmasq/$NAME.pid --name $NAME
|
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile /run/dnsmasq/${NAME}${INSTANCE:+.${INSTANCE}}.pid --name ${NAME}
|
||||||
}
|
}
|
||||||
|
|
||||||
stop_resolvconf()
|
stop_resolvconf()
|
||||||
{
|
{
|
||||||
if [ -x /sbin/resolvconf ] ; then
|
if [ -x /sbin/resolvconf ] ; then
|
||||||
/sbin/resolvconf -d lo.$NAME
|
/sbin/resolvconf -d lo.${NAME}${INSTANCE:+.${INSTANCE}}
|
||||||
fi
|
fi
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
@@ -191,20 +191,20 @@ status()
|
|||||||
# 1 if daemon is dead and pid file exists
|
# 1 if daemon is dead and pid file exists
|
||||||
# 3 if daemon is not running
|
# 3 if daemon is not running
|
||||||
# 4 if daemon status is unknown
|
# 4 if daemon status is unknown
|
||||||
start-stop-daemon --start --quiet --pidfile /run/dnsmasq/$NAME.pid --exec $DAEMON --test > /dev/null
|
start-stop-daemon --start --quiet --pidfile /run/dnsmasq/${NAME}${INSTANCE:+.${INSTANCE}}.pid --exec ${DAEMON} --test > /dev/null
|
||||||
case "$?" in
|
case "${?}" in
|
||||||
0) [ -e "/run/dnsmasq/$NAME.pid" ] && return 1 ; return 3 ;;
|
0) [ -e "/run/dnsmasq/${NAME}${INSTANCE:+.${INSTANCE}}.pid" ] && return 1 ; return 3 ;;
|
||||||
1) return 0 ;;
|
1) return 0 ;;
|
||||||
*) return 4 ;;
|
*) return 4 ;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
case "$1" in
|
case "${1}" in
|
||||||
start)
|
start)
|
||||||
test "$ENABLED" != "0" || exit 0
|
test "${ENABLED}" != "0" || exit 0
|
||||||
log_daemon_msg "Starting $DESC" "$NAME"
|
log_daemon_msg "Starting ${DESC}" "${NAME}${INSTANCE:+.${INSTANCE}}"
|
||||||
start
|
start
|
||||||
case "$?" in
|
case "${?}" in
|
||||||
0)
|
0)
|
||||||
log_end_msg 0
|
log_end_msg 0
|
||||||
start_resolvconf
|
start_resolvconf
|
||||||
@@ -222,40 +222,45 @@ case "$1" in
|
|||||||
;;
|
;;
|
||||||
stop)
|
stop)
|
||||||
stop_resolvconf
|
stop_resolvconf
|
||||||
if [ "$ENABLED" != "0" ]; then
|
if [ "${ENABLED}" != "0" ]; then
|
||||||
log_daemon_msg "Stopping $DESC" "$NAME"
|
log_daemon_msg "Stopping ${DESC}" "${NAME}${INSTANCE:+.${INSTANCE}}"
|
||||||
fi
|
fi
|
||||||
stop
|
stop
|
||||||
RETVAL="$?"
|
RETVAL="${?}"
|
||||||
if [ "$ENABLED" = "0" ]; then
|
if [ "${ENABLED}" = "0" ]; then
|
||||||
case "$RETVAL" in
|
case "${RETVAL}" in
|
||||||
0) log_daemon_msg "Stopping $DESC" "$NAME"; log_end_msg 0 ;;
|
0) log_daemon_msg "Stopping ${DESC}" "${NAME}${INSTANCE:+.${INSTANCE}}"; log_end_msg 0 ;;
|
||||||
esac
|
esac
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
case "$RETVAL" in
|
case "${RETVAL}" in
|
||||||
0) log_end_msg 0 ; exit 0 ;;
|
0) log_end_msg 0 ; exit 0 ;;
|
||||||
1) log_warning_msg "(not running)" ; exit 0 ;;
|
1) log_warning_msg "(not running)" ; exit 0 ;;
|
||||||
*) log_end_msg 1; exit 1 ;;
|
*) log_end_msg 1; exit 1 ;;
|
||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
|
checkconfig)
|
||||||
|
${DAEMON} --test ${CONFIG_DIR:+ -7 ${CONFIG_DIR}} ${DNSMASQ_OPTS:+ ${DNSMASQ_OPTS}} >/dev/null 2>&1
|
||||||
|
RETVAL="${?}"
|
||||||
|
exit ${RETVAL}
|
||||||
|
;;
|
||||||
restart|force-reload)
|
restart|force-reload)
|
||||||
test "$ENABLED" != "0" || exit 1
|
test "${ENABLED}" != "0" || exit 1
|
||||||
$DAEMON --test ${CONFIG_DIR:+ -7 $CONFIG_DIR} ${DNSMASQ_OPTS:+ $DNSMASQ_OPTS} >/dev/null 2>&1
|
${DAEMON} --test ${CONFIG_DIR:+ -7 ${CONFIG_DIR}} ${DNSMASQ_OPTS:+ ${DNSMASQ_OPTS}} >/dev/null 2>&1
|
||||||
if [ $? -ne 0 ]; then
|
if [ ${?} -ne 0 ]; then
|
||||||
NAME="configuration syntax check"
|
NAME="configuration syntax check"
|
||||||
RETVAL="2"
|
RETVAL="2"
|
||||||
else
|
else
|
||||||
stop_resolvconf
|
stop_resolvconf
|
||||||
stop
|
stop
|
||||||
RETVAL="$?"
|
RETVAL="${?}"
|
||||||
fi
|
fi
|
||||||
log_daemon_msg "Restarting $DESC" "$NAME"
|
log_daemon_msg "Restarting ${DESC}" "${NAME}${INSTANCE:+.${INSTANCE}}"
|
||||||
case "$RETVAL" in
|
case "${RETVAL}" in
|
||||||
0|1)
|
0|1)
|
||||||
sleep 2
|
sleep 2
|
||||||
start
|
start
|
||||||
case "$?" in
|
case "${?}" in
|
||||||
0)
|
0)
|
||||||
log_end_msg 0
|
log_end_msg 0
|
||||||
start_resolvconf
|
start_resolvconf
|
||||||
@@ -274,9 +279,9 @@ case "$1" in
|
|||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
status)
|
status)
|
||||||
log_daemon_msg "Checking $DESC" "$NAME"
|
log_daemon_msg "Checking ${DESC}" "${NAME}${INSTANCE:+.${INSTANCE}}"
|
||||||
status
|
status
|
||||||
case "$?" in
|
case "${?}" in
|
||||||
0) log_success_msg "(running)" ; exit 0 ;;
|
0) log_success_msg "(running)" ; exit 0 ;;
|
||||||
1) log_success_msg "(dead, pid file exists)" ; exit 1 ;;
|
1) log_success_msg "(dead, pid file exists)" ; exit 1 ;;
|
||||||
3) log_success_msg "(not running)" ; exit 3 ;;
|
3) log_success_msg "(not running)" ; exit 3 ;;
|
||||||
@@ -284,7 +289,7 @@ case "$1" in
|
|||||||
esac
|
esac
|
||||||
;;
|
;;
|
||||||
dump-stats)
|
dump-stats)
|
||||||
kill -s USR1 `cat /run/dnsmasq/$NAME.pid`
|
kill -s USR1 `cat /run/dnsmasq/${NAME}${INSTANCE:+.${INSTANCE}}.pid`
|
||||||
;;
|
;;
|
||||||
systemd-start-resolvconf)
|
systemd-start-resolvconf)
|
||||||
start_resolvconf
|
start_resolvconf
|
||||||
@@ -293,29 +298,28 @@ case "$1" in
|
|||||||
stop_resolvconf
|
stop_resolvconf
|
||||||
;;
|
;;
|
||||||
systemd-exec)
|
systemd-exec)
|
||||||
# /run may be volatile, so we need to ensure that
|
# /run may be volatile, so we need to ensure that
|
||||||
# /run/dnsmasq exists here as well as in postinst
|
# /run/dnsmasq exists here as well as in postinst
|
||||||
if [ ! -d /run/dnsmasq ]; then
|
if [ ! -d /run/dnsmasq ]; then
|
||||||
mkdir /run/dnsmasq || return 2
|
mkdir /run/dnsmasq || { [ -d /run/dnsmasq ] || return 2 ; }
|
||||||
chown dnsmasq:nogroup /run/dnsmasq || return 2
|
chown dnsmasq:nogroup /run/dnsmasq || return 2
|
||||||
fi
|
fi
|
||||||
exec $DAEMON -x /run/dnsmasq/$NAME.pid \
|
exec ${DAEMON} -x /run/dnsmasq/${NAME}${INSTANCE:+.${INSTANCE}}.pid \
|
||||||
${MAILHOSTNAME:+ -m $MAILHOSTNAME} \
|
${MAILHOSTNAME:+ -m ${MAILHOSTNAME}} \
|
||||||
${MAILTARGET:+ -t $MAILTARGET} \
|
${MAILTARGET:+ -t ${MAILTARGET}} \
|
||||||
${DNSMASQ_USER:+ -u $DNSMASQ_USER} \
|
${DNSMASQ_USER:+ -u ${DNSMASQ_USER}} \
|
||||||
${DNSMASQ_INTERFACES:+ $DNSMASQ_INTERFACES} \
|
${DNSMASQ_INTERFACES:+ ${DNSMASQ_INTERFACES}} \
|
||||||
${DHCP_LEASE:+ -l $DHCP_LEASE} \
|
${DHCP_LEASE:+ -l ${DHCP_LEASE}} \
|
||||||
${DOMAIN_SUFFIX:+ -s $DOMAIN_SUFFIX} \
|
${DOMAIN_SUFFIX:+ -s ${DOMAIN_SUFFIX}} \
|
||||||
${RESOLV_CONF:+ -r $RESOLV_CONF} \
|
${RESOLV_CONF:+ -r ${RESOLV_CONF}} \
|
||||||
${CACHESIZE:+ -c $CACHESIZE} \
|
${CACHESIZE:+ -c ${CACHESIZE}} \
|
||||||
${CONFIG_DIR:+ -7 $CONFIG_DIR} \
|
${CONFIG_DIR:+ -7 ${CONFIG_DIR}} \
|
||||||
${DNSMASQ_OPTS:+ $DNSMASQ_OPTS}
|
${DNSMASQ_OPTS:+ ${DNSMASQ_OPTS}}
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
echo "Usage: /etc/init.d/$NAME {start|stop|restart|force-reload|dump-stats|status}" >&2
|
echo "Usage: /etc/init.d/${NAME} {start|stop|restart|force-reload|dump-stats|status}" >&2
|
||||||
exit 3
|
exit 3
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
|
|
||||||
|
|||||||
5
debian/rules
vendored
5
debian/rules
vendored
@@ -129,6 +129,8 @@ define add_docs
|
|||||||
gzip -9n $1/usr/share/doc/$(package)/changelog.archive
|
gzip -9n $1/usr/share/doc/$(package)/changelog.archive
|
||||||
install -m 644 dbus/DBus-interface $1/usr/share/doc/$(package)/.
|
install -m 644 dbus/DBus-interface $1/usr/share/doc/$(package)/.
|
||||||
gzip -9n $1/usr/share/doc/$(package)/DBus-interface
|
gzip -9n $1/usr/share/doc/$(package)/DBus-interface
|
||||||
|
install -m 644 debian/systemd_howto $1/usr/share/doc/$(package)/.
|
||||||
|
gzip -9n $1/usr/share/doc/$(package)/systemd_howto
|
||||||
gzip -9n $1/usr/share/man/man8/dnsmasq.8
|
gzip -9n $1/usr/share/man/man8/dnsmasq.8
|
||||||
for f in $1/usr/share/man/*; do \
|
for f in $1/usr/share/man/*; do \
|
||||||
if [ -f $$f/man8/dnsmasq.8 ]; then \
|
if [ -f $$f/man8/dnsmasq.8 ]; then \
|
||||||
@@ -161,7 +163,7 @@ binary-indep: checkroot
|
|||||||
rm -rf debian/trees/daemon
|
rm -rf debian/trees/daemon
|
||||||
install -m 755 \
|
install -m 755 \
|
||||||
-d debian/trees/daemon/DEBIAN \
|
-d debian/trees/daemon/DEBIAN \
|
||||||
-d debian/trees/daemon/usr/share/doc \
|
-d debian/trees/daemon/usr/share/doc/dnsmasq \
|
||||||
-d debian/trees/daemon/etc/init.d \
|
-d debian/trees/daemon/etc/init.d \
|
||||||
-d debian/trees/daemon/etc/dnsmasq.d \
|
-d debian/trees/daemon/etc/dnsmasq.d \
|
||||||
-d debian/trees/daemon/etc/resolvconf/update.d \
|
-d debian/trees/daemon/etc/resolvconf/update.d \
|
||||||
@@ -181,6 +183,7 @@ binary-indep: checkroot
|
|||||||
install -m 644 dnsmasq.conf.example debian/trees/daemon/etc/dnsmasq.conf
|
install -m 644 dnsmasq.conf.example debian/trees/daemon/etc/dnsmasq.conf
|
||||||
install -m 644 debian/readme.dnsmasq.d debian/trees/daemon/etc/dnsmasq.d/README
|
install -m 644 debian/readme.dnsmasq.d debian/trees/daemon/etc/dnsmasq.d/README
|
||||||
install -m 644 debian/systemd.service debian/trees/daemon/lib/systemd/system/dnsmasq.service
|
install -m 644 debian/systemd.service debian/trees/daemon/lib/systemd/system/dnsmasq.service
|
||||||
|
install -m 644 debian/systemd@.service debian/trees/daemon/lib/systemd/system/dnsmasq@.service
|
||||||
install -m 644 debian/tmpfiles.conf debian/trees/daemon/usr/lib/tmpfiles.d/dnsmasq.conf
|
install -m 644 debian/tmpfiles.conf debian/trees/daemon/usr/lib/tmpfiles.d/dnsmasq.conf
|
||||||
install -m 644 debian/insserv debian/trees/daemon/etc/insserv.conf.d/dnsmasq
|
install -m 644 debian/insserv debian/trees/daemon/etc/insserv.conf.d/dnsmasq
|
||||||
ln -s $(package) debian/trees/daemon/usr/share/doc/dnsmasq
|
ln -s $(package) debian/trees/daemon/usr/share/doc/dnsmasq
|
||||||
|
|||||||
4
debian/systemd.service
vendored
4
debian/systemd.service
vendored
@@ -10,7 +10,7 @@ Type=forking
|
|||||||
PIDFile=/run/dnsmasq/dnsmasq.pid
|
PIDFile=/run/dnsmasq/dnsmasq.pid
|
||||||
|
|
||||||
# Test the config file and refuse starting if it is not valid.
|
# Test the config file and refuse starting if it is not valid.
|
||||||
ExecStartPre=/usr/sbin/dnsmasq --test
|
ExecStartPre=/etc/init.d/dnsmasq checkconfig
|
||||||
|
|
||||||
# We run dnsmasq via the /etc/init.d/dnsmasq script which acts as a
|
# We run dnsmasq via the /etc/init.d/dnsmasq script which acts as a
|
||||||
# wrapper picking up extra configuration files and then execs dnsmasq
|
# wrapper picking up extra configuration files and then execs dnsmasq
|
||||||
@@ -20,7 +20,7 @@ ExecStart=/etc/init.d/dnsmasq systemd-exec
|
|||||||
# The systemd-*-resolvconf functions configure (and deconfigure)
|
# The systemd-*-resolvconf functions configure (and deconfigure)
|
||||||
# resolvconf to work with the dnsmasq DNS server. They're called like
|
# resolvconf to work with the dnsmasq DNS server. They're called like
|
||||||
# this to get correct error handling (ie don't start-resolvconf if the
|
# this to get correct error handling (ie don't start-resolvconf if the
|
||||||
# dnsmasq daemon fails to start.
|
# dnsmasq daemon fails to start).
|
||||||
ExecStartPost=/etc/init.d/dnsmasq systemd-start-resolvconf
|
ExecStartPost=/etc/init.d/dnsmasq systemd-start-resolvconf
|
||||||
ExecStop=/etc/init.d/dnsmasq systemd-stop-resolvconf
|
ExecStop=/etc/init.d/dnsmasq systemd-stop-resolvconf
|
||||||
|
|
||||||
|
|||||||
31
debian/systemd@.service
vendored
Normal file
31
debian/systemd@.service
vendored
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
[Unit]
|
||||||
|
Description=dnsmasq (%i) - A lightweight DHCP and caching DNS server
|
||||||
|
Requires=network.target
|
||||||
|
Wants=nss-lookup.target
|
||||||
|
Before=nss-lookup.target
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=forking
|
||||||
|
PIDFile=/run/dnsmasq/dnsmasq.%i.pid
|
||||||
|
|
||||||
|
# Test the config file and refuse starting if it is not valid.
|
||||||
|
ExecStartPre=/etc/init.d/dnsmasq checkconfig "%i"
|
||||||
|
|
||||||
|
# We run dnsmasq via the /etc/init.d/dnsmasq script which acts as a
|
||||||
|
# wrapper picking up extra configuration files and then execs dnsmasq
|
||||||
|
# itself, when called with the "systemd-exec" function.
|
||||||
|
ExecStart=/etc/init.d/dnsmasq systemd-exec "%i"
|
||||||
|
|
||||||
|
# The systemd-*-resolvconf functions configure (and deconfigure)
|
||||||
|
# resolvconf to work with the dnsmasq DNS server. They're called like
|
||||||
|
# this to get correct error handling (ie don't start-resolvconf if the
|
||||||
|
# dnsmasq daemon fails to start).
|
||||||
|
ExecStartPost=/etc/init.d/dnsmasq systemd-start-resolvconf "%i"
|
||||||
|
ExecStop=/etc/init.d/dnsmasq systemd-stop-resolvconf "%i"
|
||||||
|
|
||||||
|
|
||||||
|
ExecReload=/bin/kill -HUP $MAINPID
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
41
debian/systemd_howto
vendored
Normal file
41
debian/systemd_howto
vendored
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
HOWTO
|
||||||
|
=====
|
||||||
|
dnsmasq comes with the possibility to run multiple systemd service instances on the same machine.
|
||||||
|
There is the main service which is enabled by default via `systemctl enable dnsmasq.service` and uses the configuration from `/etc/default/dnsmasq`.
|
||||||
|
|
||||||
|
Additional service instances can be enabled via `systemctl enable dnsmasq@<instance name>.service` that use the configuration from `/etc/default/dnsmasq.<instance name>`.
|
||||||
|
It is recommended to use a separate configuration file and directory for each instance.
|
||||||
|
Additionally make sure that all instances use either different ports and/or ip addresses to avoid binding collisions.
|
||||||
|
|
||||||
|
Example setup for an instance called "alt"
|
||||||
|
#1 File `/etc/dnsmasq.alt.conf` copied from `/etc/dnsmasq.conf`
|
||||||
|
#2 Directory `/etc/dnsmasq.alt.d`
|
||||||
|
#3 File `/etc/default/dnsmasq.alt` copied from `/etc/default/dnsmasq` with following adaptions:
|
||||||
|
* The options DNSMASQ_OPTS and CONFIG_DIR point to the correct configuration file and directory.
|
||||||
|
DNSMASQ_OPTS="... --conf-file=/etc/dnsmasq.alt.conf ..."
|
||||||
|
CONFIG_DIR=/etc/dnsmasq.alt.d,.dpkg-dist,.dpkg-old,.dpkg-new
|
||||||
|
* The option DNSMASQ_EXCEPT must contain "lo" to avoid that an instance becomes the machine's DNS resolver.
|
||||||
|
DNSMASQ_EXCEPT="lo"
|
||||||
|
* If the additional instance should bind to all IP addresses of a specific interface, e.g. "dnsalt01", then the following addition could be used:
|
||||||
|
DNSMASQ_OPTS="... --bind-dynamic --interface=dnsalt01 ..."
|
||||||
|
Additionally the main instance must be stopped from binding to interfaces that are used by other instances:
|
||||||
|
DNSMASQ_OPTS="... --bind-dynamic --except-interface=dnsalt* ..."
|
||||||
|
* If the additional instance should not use the machine's DNS resolver, normally that's the dnsmasq main instance, as upstream server, then the following addition could be used:
|
||||||
|
IGNORE_RESOLVCONF=yes
|
||||||
|
#4 Enable additional instance via `systemctl enable dnsmasq@alt.service`
|
||||||
|
#5 Start additional instance without reboot via `systemctl start dnsmasq@alt.service`
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
TODO
|
||||||
|
====
|
||||||
|
#1 - Found shortcoming on 2019-03-10
|
||||||
|
Only the option DNSMASQ_EXCEPT="lo" avoids that an DNS instance will be set as the machine's DNS resolver.
|
||||||
|
This may interfere with the wish to run an additional instance on a different port on the localhost addresses.
|
||||||
|
My suggestion in the initial Debian report [1] was to specify a explicit variable for this.
|
||||||
|
|
||||||
|
[1] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=914305#5
|
||||||
|
|
||||||
|
|
||||||
|
#2 - Preferred configuration way
|
||||||
|
Should the variables DNSMASQ_INTERFACE and DNSMASQ_EXCEPT be used instead of --interface and --except-interface? (while "lo" still has to be in DNSMASQ_EXCEPT as of now)
|
||||||
Reference in New Issue
Block a user