/etc/resolv.conf else echo >/etc/resolv.conf fi echo nameserver 127.0.0.1 >>/etc/resolv.conf "> /etc/resolv.conf else echo >/etc/resolv.conf fi echo nameserver 127.0.0.1 >>/etc/resolv.conf "> /etc/resolv.conf else echo >/etc/resolv.conf fi echo nameserver 127.0.0.1 >>/etc/resolv.conf ">
#!/bin/sh 

echo This script will automatically configure your machine to run a 
echo DNS server. It will completely destroy /etc/resolv.conf, and 
echo either /etc/named.boot, or /etc/named.conf, as appropriate 
echo It may also modify /etc/nsswitch.conf if neccessary. 
echo "Continue? (y/n)" 

read ans 

if [ "$ans" != "y" -a "$ans" != "Y" ] ; then 
    echo Quitting 
    exit 0 
fi 

OSREV=`uname -r` 

case OSREV in 
     5.3|5.4|5.5|5.6|5.7|5.8) 
         NAMEDCF=/etc/named.boot 
    ;; 
     *) 
         NAMEDCF=/etc/named.conf 
    ;; 
esac 
     

if [ -f /etc/resolv.conf ] ; then 
    cp /etc/resolv.conf /etc/resolv.conf.pre-config 
    echo copied /etc/resolv.conf to /etc/resolv.conf.pre-config 
    DOMAIN=`grep domain /etc/resolv.conf | awk '{print $2}'` 
fi 
if [ "$DOMAIN" = "" ] ; then 
    DOMAIN=`domainname` 
fi 

if [ "$DOMAIN" != "" ] ; then 
    echo domain $DOMAIN >/etc/resolv.conf 
else 
    echo >/etc/resolv.conf 
fi 
echo nameserver 127.0.0.1 >>/etc/resolv.conf 

echo Made /etc/resolv.conf 

############################################################ 
#dump the old-style config file to stdout. 
# It belongs in /etc/named.boot 
############################################################ 
oldnamedcf(){ 
cat <<EOF 
; This is the config file for an old BIND4.9.1 name demon 
directory       /etc/named 
primary         0.0.127.in-addr.arpa    named.local 
cache           .                       named.cache 
EOF 
} 

############################################################ 
#dump the new-style config file to stdout. 
# It belongs in /etc/named.conf 
############################################################ 
namedcf() 
{ 
cat <<EOF 
options { 
        directory "/etc/named"; 
# use 127.0.0.1 if you are an isolated machine. Otherwise, either 
# comment out the "listen-on" line entirely, or supply the appropriate 
# internal or external address 
        listen-on { 127.0.0.1; }; 
    }; 
    zone "." in { 
                type hint; 
                file "named.cache"; 
    }; 

    zone "0.0.127.in-addr.arpa" in { 
        type master; 
        file "named.local"; 
    }; 

EOF 
} 

############################################################ 
# This is the list of all "root" namesservers. 
# Or in this case, enough of them for you to be okay 
############################################################ 
dumpcache() 
{ 
cat <<EOF 
;The latest version of this file can always be found at 
; <ftp://FTP.RS.INTERNIC.NET/domain/named.root> 
; 
.                        3600000  IN  NS    A.ROOT-SERVERS.NET. 
A.ROOT-SERVERS.NET.      3600000      A     198.41.0.4 
.                        3600000      NS    B.ROOT-SERVERS.NET. 
B.ROOT-SERVERS.NET.      3600000      A     128.9.0.107 
.                        3600000      NS    C.ROOT-SERVERS.NET. 
C.ROOT-SERVERS.NET.      3600000      A     192.33.4.12 
.                        3600000      NS    D.ROOT-SERVERS.NET. 
D.ROOT-SERVERS.NET.      3600000      A     128.8.10.90 
.                        3600000      NS    E.ROOT-SERVERS.NET. 
E.ROOT-SERVERS.NET.      3600000      A     192.203.230.10 
.                        3600000      NS    F.ROOT-SERVERS.NET. 
F.ROOT-SERVERS.NET.      3600000      A     192.5.5.241 

EOF 
} 

############################################################ 
# This just makes the reverse-lookup for "localhost" work 
# Put in named.local 
############################################################ 
dumplocal() 
{ 
cat <<EOF 
; 
;       Loopback to convert 127.0.0.1 to localhost 
; 
@                       IN      SOA     localhost. root.localhost. ( 
                                        94112201    ; serial (yymmddxx) 
                                        86400       ; refresh every day 
                                        3600        ; retry every 1 hour 
                                        3600000     ; expire after 1000 hours 
                                        3600000     ; default ttl is 1000 hours 
                                        ) 
; 
;       Name Server 
; 
                        IN      NS      localhost 
1            IN      PTR     localhost. 
localhost.        IN      A       127.0.0.1 

EOF 
} 

# Your /etc/nsswitch.conf may need tweaking. This routine takes 
# care of the details 
modswitch(){ 
    hosts=`grep '^hosts:' /etc/nsswitch.conf` 
    hasdns=`echo $hosts | grep 'hosts:.*dns'` 
    notfoundcheck=`echo $hasdns | grep NOTFOUND` 
    hasnis=`echo $hosts | grep nisplus` 
    if [ "$hasnis" != "" ] ; then 
        echo "" 
        echo "****WARNING****: your nsswitch.conf has nisplus for hosts" 
        echo "please add 'dns' by hand to the hosts line" 
        echo "In my opinion, best placement is" 
        echo "hosts: files nisplus dns" 
        echo "" 
        return 
    fi 
    if [ "$hasdns" != "" -a "$notfoundcheck" = "" ] ; then 
        echo nsswitch.conf already okay 
        return 
    fi 
    sed 's/(hosts:.*)/hosts: files dns/' /etc/nsswitch.conf >/tmp/ns.$$ 
    mv /tmp/ns.$$ /etc/nsswitch.conf 
    echo /etc/nswitch.conf updated 
} 

mkdir /etc/named 
dumplocal >/etc/named/named.local 
dumpcache >/etc/named/named.cache 

if [ -f $NAMEDCF -a ! -f $NAMEDCF.bak ] ; then 
    cp $NAMEDCF $NAMEDCF.bak 
    echo copied $NAMEDCF to $NAMEDCF.bak 
fi 

if [ "$NAMEDCF" = "/etc/named.boot" ] ; then 
    oldnamedcf >$NAMEDCF 
else 
    namedcf >$NAMEDCF 
fi 

modswitch 

echo Restarting namedemon 

kill `cat /etc/named.pid` 2>/dev/null 
sleep 1 

/usr/sbin/in.named 

echo 'As soon as your internet link is up, you should be set to go!' 
if [ "$NAMEDCF" = "/etc/named.conf" ] ; then 
 echo 'Please note: This script assumes you are setting up a single isolated' 
 echo 'machine. If this machine needs to allow others to query DNS through it,' 
 echo 'please read the comments in /etc/named.conf' 
fi 
echo ''