Package: resolvconf
Version: 1.35
Severity: wishlist
Tags: patch

Hello again--

the /etc/resolvconf/update.d/dnscache script currently finds and
resets any forwarding dnscache instance managed by daemontools.

Gerrit Pape's runit package is a service supervision suite that is a
workalike replacement for daemontools, and it is GPLed,
well-documented, and fully in debian.  However, runit-controlled
dnscaches won't be managed by resolvconf at the moment.

The supplied patch enables resolvconf to find and reset
runit-controlled instances of dnscache in addition to
daemontools-controlled instances.

Thanks for maintaining resolvconf,

        --dkg

-- System Information:
Debian Release: testing/unstable
  APT prefers testing
  APT policy: (500, 'testing'), (200, 'unstable')
Architecture: i386 (i686)
Shell:  /bin/sh linked to /bin/bash
Kernel: Linux 2.6.16-2-686
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)

Versions of packages resolvconf depends on:
ii  coreutils                     5.96-5     The GNU core utilities
ii  debconf [debconf-2.0]         1.5.2      Debian configuration management sy
ii  lsb-base                      3.1-10     Linux Standard Base 3.1 init scrip

resolvconf recommends no packages.

-- debconf information excluded
--- dnscache.orig       2006-07-27 12:12:53.000000000 -0400
+++ dnscache    2006-07-27 12:56:21.000000000 -0400
@@ -5,8 +5,8 @@
 # Script to update every forwarding djbdns dnscache instance running
 # on the local machine
 #
-# this script sets up every FORWARDONLY dnscache managed by
-# daemontools on this machine to use the dynamically-offered
+# this script sets up every FORWARDONLY dnscache managed by either
+# daemontools or runit on this machine to use the dynamically-offered
 # nameservers for the default '@'
 # 
 # Assumption: On entry, PWD contains the resolv.conf-type files
@@ -25,17 +25,6 @@
 [ -x /usr/bin/dnscache ] || exit 0
 [ -x /lib/resolvconf/list-records ] || exit 1
 
-# We'll only manage caches actually managed by daemontools
-if [ -d /var/lib/svscan ] ; then
-       # daemontools is built "the debian way"
-       SERVICEDIR=/var/lib/svscan
-elif [ -d /service ] ; then
-       # It's built "the djb way"
-       SERVICEDIR=/service
-else
-       # We don't know where to look for the daemontools services
-       exit 0
-fi
 
 ETC=/etc
 ETCRESOLVCONF="${ETC}/resolvconf"
@@ -44,15 +33,26 @@
 
 
 CACHES=""
-for SVC in $SERVICEDIR/* ; do
-       if [ -f $SVC/run ] && \
+
+# which directories do we scan?
+# /var/lib/svscan: daemontools, built "the debian way" (LFS-compliant)
+# /service: daemontools, built "the djb way"
+# /var/service: runit
+
+for SERVICEDIR in /var/lib/svscan /service /var/service; do
+# We'll only manage caches actually managed by daemontools or runit.
+    if [ -d $SERVICEDIR ] && [ -z "`ls $SERVICEDIR`" ]; then
+       for SVC in $SERVICEDIR/* ; do
+           if  [ -d $SVC/ ] && [ -f $SVC/run ] && \
                (grep -q dnscache $SVC/run) && \
                [ -d $SVC/root ] && \
                [ -d $SVC/root/servers ] && \
                [ -d $SVC/root/ip ] && \
                [ -s $SVC/env/FORWARDONLY ] ; then
-                       CACHES="$SVC $CACHES"
-       fi
+               CACHES="$SVC $CACHES"
+           fi
+       done
+    fi
 done
 
 
@@ -92,13 +92,24 @@
        done
 fi
 
+# svc is the daemontools service controller
 SVC_CMD="$(which svc)" || :
 [ ! "$SVC_CMD" ] && [ -x /command/svc ] && SVC_CMD=/command/svc
 
+# sv is the runit service controller
+SV_CMD="$(which sv)" || :
+
+
 for CACHE in $CACHES ; do
        cp "$TMPFILE" "$CACHE/root/servers/@"
        # Restart the cache if it's already running:
-       [ "$SVC_CMD" ] && $SVC_CMD -t "$CACHE"
+       if [ `dirname $CACHE` == '/var/service' ]; then
+           # this is managed by runit
+           [ "SV_CMD" ] && "SV_CMD" t "$CACHE"
+       else
+           # this is probably managed by daemontools
+           [ "$SVC_CMD" ] && $SVC_CMD -t "$CACHE"
+       fi
 done
 
 rm -f "$TMPFILE"

Reply via email to