]> gitweb.michael.orlitzky.com - mjo-overlay.git/blobdiff - net-dns/djbdns/files/dnscache-setup
Add djbdns from gx86.
[mjo-overlay.git] / net-dns / djbdns / files / dnscache-setup
diff --git a/net-dns/djbdns/files/dnscache-setup b/net-dns/djbdns/files/dnscache-setup
new file mode 100644 (file)
index 0000000..afe415a
--- /dev/null
@@ -0,0 +1,243 @@
+#!/bin/bash
+
+#for einfo, ewarn etc..
+. /etc/init.d/functions.sh
+
+setup() {
+       echo
+       echo
+       einfo "Dnscache Setup"
+       echo
+       echo
+       echo ">>> More information on this package can be found at"
+       echo ">>> http://cr.yp.to/djbdns.html and http://djbdns.org"
+       echo
+       echo "After this script completes, dnscache will be configured."
+       echo "Your /etc/resolv.conf will be updated so that all DNS"
+       echo "lookups will be directed to dnscache."
+       echo
+       echo "Your original /etc/resolv.conf will be backed up to "
+       echo "/etc/resolv.conf.orig."
+       echo
+       echo "If you have previously setup dnscache, those directories will"
+       echo "not be overwritten.  To redo setup, delete your dnscache"
+       echo "dirs first or choose a different install location."
+       echo
+       echo '(press enter to begin setup, or press control-C to abort)'
+       echo
+       read
+
+       echo
+       einfo "Install location"
+       echo
+       echo "Where do you want dnscache installed?"
+       echo "Ex. Default (/var) will install dnscache in /var/dnscache," 
+       echo "or an external cache in /var/dnscachex."
+       echo "!!No trailing slash!!"
+       echo
+       read -p "[/var]> " mypath
+       echo
+
+       if [ "$mypath" == "" ]
+       then
+               mypath="/var"
+       fi
+
+       if [ ! -e ${mypath} ]
+       then
+               echo ">>> Creating ${mypath}..."
+               mkdir $mypath
+       fi
+
+       echo
+       echo
+       einfo "Internal or external cache?"
+       echo
+       echo "Specify an address to which dnscache should bind."
+       echo "If this is the only machine accessing dnscache,"
+       echo "127.0.0.1 is a good start."
+       echo "Currently running IP addresses:"
+       echo
+
+       # grab interfaces
+       addrs=`ifconfig -a | grep "inet addr" | cut -f2 -d":" | cut -f1 -d" "`
+
+       echo $addrs
+       echo
+       read -p "IP to bind cache to [127.0.0.1]> " myip
+       echo
+
+       if [ "$myip" == "" ]
+       then
+               myip="127.0.0.1"
+               mycachedir="dnscache"
+       else 
+               mycachedir="dnscachex"
+       fi
+
+       # check for existance of users dnscache and dnslog:
+       echo
+       echo
+       einfo "Checking for dnscache and dnslog user accts ..."
+       echo
+       /usr/bin/grep nofiles /etc/group &> /dev/null
+       if [ $? -ne 0 ]
+       then
+               echo ">>> Adding group nofiles ..."
+               /usr/sbin/groupadd nofiles &> /dev/null
+       fi
+
+       /usr/bin/grep dnscache /etc/passwd &> /dev/null
+       if [ $? -ne 0 ]
+       then
+               echo ">>> Adding user dnscache ..."
+               /usr/sbin/useradd -d /dev/null -s /bin/false -g nofiles \
+                       dnscache &> /dev/null
+       fi
+
+       /usr/bin/grep dnslog /etc/passwd &> /dev/null
+       if [ $? -ne 0 ]
+       then
+               echo ">>> Adding user dnslog ..."
+               /usr/sbin/useradd -d /dev/null -s /bin/false -g nofiles \
+                       dnslog &> /dev/null
+       fi
+
+       if [ ! -e ${mypath}/${mycachedir} ]
+       then
+               /usr/bin/dnscache-conf dnscache dnslog \
+                       ${mypath}/${mycachedir} ${myip}
+       else
+               ewarn "*** dnscache directory currently exists, nothing done."
+       fi
+
+       echo
+       echo
+       einfo "Configure a forward for dnscache?"
+       echo
+       echo "dnscache can be configured to forward queries to another"
+       echo "nameserver (such as the nameserver of your ISP) rather than "
+       echo "perform the lookups itself.  If you would like to enable this "
+       echo "forwarding mode (a good idea most of the time), then enter the "
+       echo "IP's of your forwarding nameservers now,"
+       echo "otherwise just hit Enter."
+       echo
+       read -p "enter forward-to IP> " myforward
+       echo
+       if [ "$myforward" != "" ]
+       then
+               echo $myforward > ${mypath}/${mycachedir}/root/servers/\@
+               echo -n "1" > ${mypath}/${mycachedir}/env/FORWARDONLY
+
+               read -p "enter forward-to IP [hit Enter to stop]> " myforward
+               while [ "$myforward" != "" ]
+               do
+                       echo $myforward >> ${mypath}/${mycachedir}/root/servers/\@
+                       read -p "enter forward-to IP [hit Enter to stop]> " myforward
+               done
+               echo ">>> Setting up forwarding..."
+       fi
+
+       if [ "$myip" != "127.0.0.1" ]
+       then
+               echo
+               echo
+               einfo "Configuring clients"
+               echo
+               echo "dnscache by default only allows 127.0.0.1 to access it."
+               echo "You have to specify the IP addresses of the clients"
+               echo "that shall be allowed to use dnscache."
+               echo
+               echo "1.2.3.4 would allow host 1.2.3.4"
+               echo "1.2.3 would allow all hosts underneath 1.2.3.x"
+               echo
+               echo "Just hit Enter if you do not want to specify clients!"
+               echo
+
+               read -p "Enter IP> " myclientip
+
+               while [ "$myclientip" != "" ]
+               do
+                       touch ${mypath}/${mycachedir}/root/ip/${myclientip}
+                       read -p "Enter IP (hit Enter to stop)>" myclientip
+               done
+       fi
+
+       echo
+       echo
+       einfo "Misc"
+       echo
+       if [ ! -e /var/log/dnscache ]
+       then
+               echo ">>> linking /var/log/${mycachedir} to the $mycachedir log..."
+               ln -s ${mypath}/${mycachedir}/log/main /var/log/${mycachedir}
+       fi
+
+       if [ -e /etc/resolv.conf ]
+       then
+               /usr/bin/grep $myip /etc/resolv.conf &> /dev/null
+               if [ $? -ne 0 ]
+               then
+                       echo ">>> Backing up /etc/resolv.conf to resolv.conf.orig..."
+                       cp /etc/resolv.conf /etc/resolv.conf.orig
+                       cat /etc/resolv.conf.orig | grep -v nameserver > /etc/resolv.conf
+                       echo ">>> Removed nameserver entries from resolv.conf..."
+                       echo nameserver $myip >> /etc/resolv.conf
+                       echo
+                       echo ">>> Added \"nameserver ${myip}\" to /etc/resolv.conf!"
+               else
+                       echo ">>> ${myip} is already in /etc/resolv.conf - nothing done!"
+               fi
+       else
+               echo nameserver $myip >> /etc/resolv.conf
+               echo
+               echo ">>> Added \"nameserver ${myip}\" to /etc/resolv.conf!"
+       fi
+
+       #TODO
+       #configure cachsize - $mypath/env/CACHESIZE
+
+       #TODO
+       #configure datalimit - $mypath/env/DATALIMIT
+
+       echo
+       echo
+       einfo "Start service"
+       echo
+       echo "dnscache is ready for startup."
+       echo "Do you want dnscache to be started and"
+       echo "supervised by daemontools now?"
+
+       echo
+       echo "This requires svscan (daemontools) to be running currently and"
+       echo "monitoring /service !!"
+       echo
+       echo '(press control-C to abort)'
+       read
+
+       # check in /mnt/.init.d to find svscan link in running...
+       # if not running execute /etc/init.d/svscan start
+       # Don't make symbolic links to / !
+       # use ../ instead as it gives trouble in chrooted environments
+       # By Kalin KOZHUHAROV <kalin@ThinRope.net>
+       local fixedroot_path=`echo ${mypath} | sed -e 's#^/#../#'`
+       cd /service
+       ln -sf ${fixedroot_path}/${mycachedir} .
+
+       echo
+       echo
+       einfo "Installation successfull"
+       echo
+}
+
+# check for root user
+
+if [ `id -u` -ne 0 ]
+then
+        eerror "${0}: must be root."
+       exit 1
+fi
+               
+
+# run setup
+setup