:: Re: [DNG] dnsmaq on devuan
Top Page
Delete this message
Reply to this message
Author: Irrwahn
Date:  
To: dng
Subject: Re: [DNG] dnsmaq on devuan
John Crisp wrote on 23.03.2018 02:22:
> I have been having some struggles running dnsmasq on Devuan Jessie.
>
> After a lot of head scratching I started to realise the init file seems
> a touch out of whack. For starters, no pid file is generated when you
> start dnsmasq.
>
> There I was thinking I was stopping and starting it when in reality, I
> was just adding more instances ! That would then explain why the new
> settings I kept trying seemed to fail miserably. Doh <slapshead>
>
> I do not have resolvconf installed.
>
> dnsmasq 2.72-3+deb8u2
>
> I just wanted a simple caching nameserver for VPN clients with some
> simple static upstream DNS nameservers set.
>
> I can sit down and slowly debug my way through the init file but
> wondered if anyone else had any experiences with this?



Hi John,

I routinely have dnsmasq running on my Devuan ASCII box (was running
Debian testing/jessie before) and never observed any irregularities.
I checked and the PID file is correctly maintained, issuing service
start/stop/status commands works as expected. (dnsmasq 2.76-5+deb9u1)

For comparison I tested again on a Devuan Jessie VM (dnsmasq version
2.72-3+deb8u2, same as yours) with identical positive results. No
resolvconf installed on both systems.
The dnsmasq init scripts in Jessie and ASCII differ basically just in
the relocation /var/run --> /run. But since the former should be just
a symlink to the latter on both systems it should not have any
noticeable effect at all. For reference I attached a diff between the
two versions.

Whatever causes you trouble, I strongly believe it's not the dnsmasq
init script per se that is to blame.

Sorry I cannot provide you with an instant solution for your problem.

HTH, best regards
Urban

P.S.:
Yes, I too find the file time stamps in the diff slightly irritating,
but I double checked I was comparing the correct files. I did not
inspect the respective source packages though.

--
Sapere aude!
--- dnsmasq.jessie    2017-10-01 19:17:30.000000000 +0200
+++ dnsmasq.ascii    2017-10-01 17:20:45.000000000 +0200
@@ -8,7 +8,8 @@
 # Description:    DHCP and DNS server
 ### END INIT INFO


-set +e # Don't exit on error status
+# Don't exit on error status
+set +e

 PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
 DAEMON=/usr/sbin/dnsmasq
@@ -29,12 +30,11 @@
         export LANG
 fi


-# /etc/dnsmasq.d/README is a non-conffile installed by the dnsmasq package.
-# Should the dnsmasq package be removed, the following test ensures that
-# the daemon is no longer started, even if the dnsmasq-base package is
-# still in place.
-test -e /etc/dnsmasq.d/README || exit 0
-
+# The following test ensures the dnsmasq service is not started, when the
+# package 'dnsmasq' is removed but not purged, even if the dnsmasq-base
+# package is still in place.
+test -e /usr/share/dnsmasq/installed-marker || exit 0
+
test -x $DAEMON || exit 0

 # Provide skeleton LSB log functions for backports which don't have LSB functions.
@@ -81,7 +81,7 @@
    [ "$IGNORE_RESOLVCONF" != "yes" ] &&
    [ -x /sbin/resolvconf ]
 then
-    RESOLV_CONF=/var/run/dnsmasq/resolv.conf
+    RESOLV_CONF=/run/dnsmasq/resolv.conf
 fi


 for INTERFACE in $DNSMASQ_INTERFACE; do
@@ -121,16 +121,16 @@
     #   1 if daemon was already running
     #   2 if daemon could not be started


-        # /var/run may be volatile, so we need to ensure that
-        # /var/run/dnsmasq exists here as well as in postinst
-        if [ ! -d /var/run/dnsmasq ]; then
-           mkdir /var/run/dnsmasq || return 2
-           chown dnsmasq:nogroup /var/run/dnsmasq || return 2
+        # /run may be volatile, so we need to ensure that
+        # /run/dnsmasq exists here as well as in postinst
+        if [ ! -d /run/dnsmasq ]; then
+           mkdir /run/dnsmasq || return 2
+           chown dnsmasq:nogroup /run/dnsmasq || return 2
         fi


-    start-stop-daemon --start --quiet --pidfile /var/run/dnsmasq/$NAME.pid --exec $DAEMON --test > /dev/null || return 1
-    start-stop-daemon --start --quiet --pidfile /var/run/dnsmasq/$NAME.pid --exec $DAEMON -- \
-        -x /var/run/dnsmasq/$NAME.pid \
+    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.pid --exec $DAEMON -- \
+        -x /run/dnsmasq/$NAME.pid \
             ${MAILHOSTNAME:+ -m $MAILHOSTNAME} \
         ${MAILTARGET:+ -t $MAILTARGET} \
         ${DNSMASQ_USER:+ -u $DNSMASQ_USER} \
@@ -167,7 +167,7 @@
     #   1 if daemon was already stopped
     #   2 if daemon could not be stopped
     #   other if a failure occurred
-    start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile /var/run/dnsmasq/$NAME.pid --name $NAME
+    start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile /run/dnsmasq/$NAME.pid --name $NAME
 }


 stop_resolvconf()
@@ -185,9 +185,9 @@
     #   1 if daemon is dead and pid file exists
     #   3 if daemon is not running
     #   4 if daemon status is unknown
-    start-stop-daemon --start --quiet --pidfile /var/run/dnsmasq/$NAME.pid --exec $DAEMON --test > /dev/null
+    start-stop-daemon --start --quiet --pidfile /run/dnsmasq/$NAME.pid --exec $DAEMON --test > /dev/null
     case "$?" in
-        0) [ -e "/var/run/dnsmasq/$NAME.pid" ] && return 1 ; return 3 ;;
+        0) [ -e "/run/dnsmasq/$NAME.pid" ] && return 1 ; return 3 ;;
         1) return 0 ;;
         *) return 4 ;;
     esac
@@ -278,7 +278,7 @@
     esac
     ;;
   dump-stats)
-        kill -s USR1 `cat /var/run/dnsmasq/$NAME.pid`
+        kill -s USR1 `cat /run/dnsmasq/$NAME.pid`
     ;;
   systemd-start-resolvconf)
     start_resolvconf
@@ -287,13 +287,13 @@
     stop_resolvconf
     ;;
   systemd-exec)
-# /var/run may be volatile, so we need to ensure that
-        # /var/run/dnsmasq exists here as well as in postinst
-        if [ ! -d /var/run/dnsmasq ]; then
-           mkdir /var/run/dnsmasq || return 2
-           chown dnsmasq:nogroup /var/run/dnsmasq || return 2
+# /run may be volatile, so we need to ensure that
+        # /run/dnsmasq exists here as well as in postinst
+        if [ ! -d /run/dnsmasq ]; then
+           mkdir /run/dnsmasq || return 2
+           chown dnsmasq:nogroup /run/dnsmasq || return 2
         fi
-    exec $DAEMON -x /var/run/dnsmasq/$NAME.pid \
+    exec $DAEMON -x /run/dnsmasq/$NAME.pid \
         ${MAILHOSTNAME:+ -m $MAILHOSTNAME} \
         ${MAILTARGET:+ -t $MAILTARGET} \
         ${DNSMASQ_USER:+ -u $DNSMASQ_USER} \