Sophie

Sophie

distrib > Mandriva > 10.2 > x86_64 > by-pkgid > ff3ee324c0567e1c25614ef618e7dd7f > files > 23

clusterautosetup-2.1-5mdk.src.rpm

#!/bin/sh
# version 2.1 
# simple script to quickly setup a dns server for cluster
# so you can find some error. plz report: clic-dev-public@mandrakesoft.com
# 

##########
WORKDIR="/tmp/serverdns"
##########
CONFFILE="/etc/clusterserver.conf"
if  [ ! -f ${CONFFILE} ]; then
	echo "Cant find ${CONFFILE} !"
	exit 1
fi
. ${CONFFILE}


##############################################################
##############################################################
##	  !!!!!! DONT TOUCH BEHIND THOSE LINE !!!!!
##        (execpt you know waht you are doing.....)
##############################################################
##############################################################

# check server is not in RANGE ip
check_range_ip() {
echo " - Checking IP of SERVER in RANGE IP"
for i in `seq ${STARTNODE} ${FINISHNODE}` ; do
	if [ "$i" = "${IPSERVERREVERSE}" ]; then 
	echo "!!!! WARNING !!!!"
	echo "IP of DNS Server found twice in DNS !!"
	echo "change the range ip of nodes in ${CONFFILE}"
	exit 1
	fi
done
if [ "${STARTNODE}" -ge "${FINISHNODE}" ]; then 
	echo "FINISHNODE is greater than STARTNODE !!"
	echo "check ${CONFFILE}"
	exit 1
fi 
if [ "${FINISHNODE}" -gt "254" ]; then
	echo "Be carefull ! IP out of 1 to 254 RANGE"
	exit 1
fi
}

check_hostname() {
if [ ${NAMEOFSERVER} = "localhost" ]; then
	echo "Strange name for a DNS server ?"
	echo "cant configure a DNS server with such a name !"
	echo "EXITING ! "
	exit 1 
fi
}

check_domain() {
if [ ${DOMAINNAME} = "localdomain" ]; then
        echo "Strange DOMAIN for a DNS server ?"
        echo "cant configure a DNS server with such a DOMAINNAME !"
	echo "please edit /etc/sysconfig/network"
	echo "and choose a corect DOMAINNAME"
        echo "EXITING ! "
        exit 1
fi
}

# check service named
start_service() {
CHECK_NAMED_STAT=`pidof named`
if [ -z "${CHECK_NAMED_STAT}" ]; then
        echo " - Starting NAMED service:"
        /etc/rc.d/init.d/named start
else
        echo " - Restarting NAMED service:"
        /etc/rc.d/init.d/named restart
fi
}
				
# check Work dir
check_workdir() {
if [ -d "${WORKDIR}" ]; then
        echo " - ${WORKDIR} directory exist"
	rm -rf ${WORKDIR}
	
	mkdir ${WORKDIR}
        else
        echo " - Creating ${WORKDIR} directory"
        mkdir ${WORKDIR}
fi
}

# check zone dir
check_zonedir() {
if [ -d "${ZONE_DIR}" ]; then
        echo " - ${ZONE_DIR} directory exist"
        else
        echo " - Creating ${ZONE_DIR} directory"
        mkdir -p ${ZONE_DIR}
fi
}

# create all typical file
create_typical_file() {
# create db.DOMAINNAME.hosts
cd ${WORKDIR} 
echo " - Creating Typical files of a DNS server"
cat > ${WORKDIR}/db.DOMAINNAME.hosts <<EOF
\$TTL 3D
@       IN      SOA     NAMEOFSERVER.DOMAINNAME. root.NAMEOFSERVER.DOMAINNAME. (
               $SERIAL       ; Serial
               8H   ; Refresh
               2H   ; Retry
               4W  ; Expire
               1D)  ; Minimum TTL
               TXT     "TEXTINFO"
               IN      NS      NAMEOFSERVER.DOMAINNAME.
localhost              A       127.0.0.1
dns                    IN      CNAME   NAMEOFSERVER.DOMAINNAME.
NAMEOFSERVER.DOMAINNAME.        IN      A       $IPSERVER
EOF

# create named.conf
cat > ${WORKDIR}/named.conf <<EOF
key mykey {
        algorithm hmac-md5;
        secret "$DNSKEY";
};

controls {
       inet 127.0.0.1 port 953
       allow { 127.0.0.1; } keys { mykey; };
};

options {
        directory "$NAMED_DIR";
        pid-file "$NAMED_DIR/named.pid";
	allow-query { any; }; 
	forwarders { IPOFFORWARDER; };
};

zone "localhost" {
        type master;
        file "zone/db.localhost";
};

zone "0.0.127.in-addr.arpa" {
  type master;
  file "zone/db.127.0.0";
};

zone "REVERSEIP.in-addr.arpa" {
  type master;
  file "zone/db.REVERSEIP.hosts";
  forwarders { };
};

zone "DOMAINNAME" {
  type master;
  file "zone/db.DOMAINNAME.hosts";
  forwarders { };
};

zone "." {
        type hint;
        file "zone/root.hints";
};
EOF

# create db.REVERSEIP.hosts
cat > ${WORKDIR}/db.REVERSEIP.hosts <<EOF
\$TTL 3D
@       IN      SOA     NAMEOFSERVER.DOMAINNAME.        root.NAMEOFSERVER.DOMAINNAME. (
                $SERIAL ; serial
                10800   ; Refresh
                3600    ; Retry
                604800  ; Expire
                86400 ) ; Minimum TTL 
		NS      NAMEOFSERVER.DOMAINNAME.
$IPSERVERREVERSE       IN      PTR     NAMEOFSERVER.DOMAINNAME.
EOF

# create root.hints
cat > ${WORKDIR}/root.hints <<EOF
; <<>> DiG 8.1 <<>> @A.ROOT-SERVERS.NET. 
; (1 server found)
;; res options: init recurs defnam dnsrch
;; got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10
;; flags: qr aa rd; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 13
;; QUERY SECTION:
;;      ., type = NS, class = IN

;; ANSWER SECTION:
.                       6D IN NS        G.ROOT-SERVERS.NET.
.                       6D IN NS        J.ROOT-SERVERS.NET.
.                       6D IN NS        K.ROOT-SERVERS.NET.
.                       6D IN NS        L.ROOT-SERVERS.NET.
.                       6D IN NS        M.ROOT-SERVERS.NET.
.                       6D IN NS        A.ROOT-SERVERS.NET.
.                       6D IN NS        H.ROOT-SERVERS.NET.
.                       6D IN NS        B.ROOT-SERVERS.NET.
.                       6D IN NS        C.ROOT-SERVERS.NET.
.                       6D IN NS        D.ROOT-SERVERS.NET.
.                       6D IN NS        E.ROOT-SERVERS.NET.
.                       6D IN NS        I.ROOT-SERVERS.NET.
.                       6D IN NS        F.ROOT-SERVERS.NET.

;; ADDITIONAL SECTION:
G.ROOT-SERVERS.NET.     5w6d16h IN A    192.112.36.4
J.ROOT-SERVERS.NET.     5w6d16h IN A    198.41.0.10
K.ROOT-SERVERS.NET.     5w6d16h IN A    193.0.14.129
L.ROOT-SERVERS.NET.     5w6d16h IN A    198.32.64.12
M.ROOT-SERVERS.NET.     5w6d16h IN A    202.12.27.33
A.ROOT-SERVERS.NET.     5w6d16h IN A    198.41.0.4
H.ROOT-SERVERS.NET.     5w6d16h IN A    128.63.2.53
B.ROOT-SERVERS.NET.     5w6d16h IN A    128.9.0.107
C.ROOT-SERVERS.NET.     5w6d16h IN A    192.33.4.12
D.ROOT-SERVERS.NET.     5w6d16h IN A    128.8.10.90
E.ROOT-SERVERS.NET.     5w6d16h IN A    192.203.230.10
I.ROOT-SERVERS.NET.     5w6d16h IN A    192.36.148.17
F.ROOT-SERVERS.NET.     5w6d16h IN A    192.5.5.241

;; Total query time: 215 msec
;; FROM: roke.uio.no to SERVER: A.ROOT-SERVERS.NET.  198.41.0.4
;; WHEN: Sun Feb 15 01:22:51 1998
;; MSG SIZE  sent: 17  rcvd: 436
EOF

# create db.127.0.0
cat > ${WORKDIR}/db.127.0.0 <<EOF
\$TTL 3D
@               IN      SOA     DOMAINNAME. root.DOMAINNAME. (
                $SERIAL       ; Serial
                28800   ; Refresh
                7200    ; Retry
                604800  ; Expire
                86400)  ; Minimum TTL
                NS      NAMEOFSERVER.DOMAINNAME.
localhost      IN 	A     127.0.0.1
EOF

cat > ${WORKDIR}/db.localhost <<EOF
\$TTL 3D
@               IN      SOA     DOMAINNAME. root.DOMAINNAME. (
                $SERIAL       ; Serial
                28800   ; Refresh
                7200    ; Retry
                604800  ; Expire
                86400)  ; Minimum TTL
                NS      NAMEOFSERVER.DOMAINNAME.
1               IN        PTR     localhost.
EOF

# create rndc.conf
cat > ${WORKDIR}/rndc.conf <<EOF
/*
 * Copyright (C) 2000, 2001  Internet Software Consortium.
 *
 * Permission to use, copy, modify, and distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM
 * DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
 * INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT,
 * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
 * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
 * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
 * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/

/* $Id: setup_dns_server,v 1.3 2002/12/04 10:39:23 uid620 Exp $ */

/*
 * Sample rndc configuration file.
 */

options {
       default-server  localhost;
       default-key     "mykey";
};

server localhost {
        key     "mykey";
};

key "mykey" {
        algorithm       hmac-md5;
        secret "$DNSKEY";
};
EOF


}

# save old conffile if exist
save_old_conf() {
echo "	 - Saving old confile: ${CONFFILE}"
if [ -f ${CONFFILE} ]; then 
	cp -f ${CONFFILE} ${CONFFILE}.${DATE}.sauv
fi
}

# generate list nodes for db.REVERSE.HOSTS
gen_reverse_list() {
for i in `seq ${STARTNODE} ${FINISHNODE}`
	do echo "${i}	IN	PTR	${NODENAME}${i}.${DOMAINNAME}."
done
}

# generate list nodes for db.DOMAINNAME.hosts
gen_domain_list() {
for i in `seq ${STARTNODE} ${FINISHNODE}`
	do
	echo "${NODENAME}${i}	IN	A	${NORMIP}.${i}"
	echo "n${i}	IN	CNAME	${NODENAME}${i}.${DOMAINNAME}." 
done
}

# db.127.0.0
setup_127() {
echo " - Setting db.127.0.0 file"
CONF_127="${WORKDIR}/db.127.0.0"
perl -pi -e 's/DOMAINNAME/'$DOMAINNAME'/g' ${CONF_127}
perl -pi -e 's/NAMEOFSERVER/'$NAMEOFSERVER'/g' ${CONF_127}
}

# db.localhost
setup_localhost() {
echo " - Setting db.locahost file"
CONF_127="${WORKDIR}/db.localhost"
perl -pi -e 's/DOMAINNAME/'$DOMAINNAME'/g' ${CONF_127}
perl -pi -e 's/NAMEOFSERVER/'$NAMEOFSERVER'/g' ${CONF_127}
}

# named.conf
setup_named() {
CONF_NAMED="${WORKDIR}/named.conf"
echo " - Setting named.conf file"
if [ -z ${IPOFFORWARDER} ]; then
	perl -pi -e 's/IPOFFORWARDER\;//g' ${CONF_NAMED}
else	
	perl -pi -e 's/IPOFFORWARDER/'$IPOFFORWARDER'/g' ${CONF_NAMED}
fi

perl -pi -e 's/REVERSEIP/'$REVERSEIP'/g' ${CONF_NAMED}
perl -pi -e 's/DOMAINNAME/'$DOMAINNAME'/g' ${CONF_NAMED}
#perl -pi -e 's/DNSKEY/'$DNSKEY'/g' ${CONF_NAMED}
}

# update dnskey in rndc file
setup_rndc() {
CONF_RNDC="${WORKDIR}/rndc.conf"
# perl -pi -e 's/DNSKEY/'$DNSKEY'/g' ${CONF_NAMED}
}

# db.REVERSEIP.hosts
setup_dbreverse() {
CONF_REVERSE="${WORKDIR}/db.${REVERSEIP}.hosts"
echo " - Setting db.${REVERSEIP}.hosts file"
cp -f ${WORKDIR}/db.REVERSEIP.hosts ${WORKDIR}/db.${REVERSEIP}.hosts

perl -pi -e 's/DOMAINNAME/'$DOMAINNAME'/g' ${CONF_REVERSE}
perl -pi -e 's/REVERSEIP/'$REVERSEIP'/g' ${CONF_REVERSE}
perl -pi -e 's/NAMEOFSERVER/'$NAMEOFSERVER'/g' ${CONF_REVERSE}

echo " - Generating list nodes for db.${REVERSE}.HOSTS"
gen_reverse_list >> ${CONF_REVERSE}
}

# db.DOMAINNAME.hosts
setup_dbdomain() {
CONF_DOMAIN="${WORKDIR}/db.${DOMAINNAME}.hosts"
echo " - Setting db.${DOMAINNAME}.hosts file" 
cp -f ${WORKDIR}/db.DOMAINNAME.hosts ${WORKDIR}/db.${DOMAINNAME}.hosts

perl -pi -e 's/DOMAINNAME/'$DOMAINNAME'/g' ${CONF_DOMAIN}
perl -pi -e 's/NAMEOFSERVER/'$NAMEOFSERVER'/g' ${CONF_DOMAIN}
perl -pi -e 's/TEXTINFO/'$TEXTINFO'/g' ${CONF_DOMAIN}
# perl -pi -e 's/IPSERVER/'$IPSERVER'/g' ${CONF_DOMAIN}

echo " - Generating list nodes for db.${DOMAINNAME}.HOSTS"
gen_domain_list >> ${CONF_DOMAIN}
}

# configuration of /etc/resolv.conf
setup_resolv() {
echo " - Setting resolv.conf file"
cat > /etc/resolv.conf <<EOF
domain $DOMAINNAME
search $DOMAINNAME $ADDSEARCH
nameserver $IPSERVER
EOF
}

setup_hosts() {
echo " - Setting hosts"
cat > /etc/hosts <<EOF
127.0.0.1               localhost.localdomain localhost
$IPSERVER		$HOSTNAME	
EOF
}

# install file in correct place
install_file() {
echo " - Installing files in correct place"
CONFFILE="/etc/named.conf"
save_old_conf 
cp -f ${CONF_NAMED} /etc/named.conf 

CONFFILE="/etc/hosts"
save_old_conf 

CONFFILE="${ZONE_DIR}/db.${DOMAINNAME}.hosts"
save_old_conf
cp -f ${CONF_DOMAIN} ${ZONE_DIR}/db.${DOMAINNAME}.hosts

CONFFILE="${ZONE_DIR}/db.${REVERSEIP}.hosts"
save_old_conf
cp -f ${CONF_REVERSE} ${ZONE_DIR}/db.${REVERSEIP}.hosts

cp -f ${WORKDIR}/root.hints ${ZONE_DIR}/root.hints

CONFFILE="${ZONE_DIR}/db.127.0.0"
save_old_conf
cp -f ${CONF_127} ${ZONE_DIR}/db.127.0.0

CONFFILE="${ZONE_DIR}/db.localhost"
save_old_conf
cp -f ${CONF_127} ${ZONE_DIR}/db.localhost

CONFFILE="/etc/rndc.conf"
save_old_conf
cp -f ${WORKDIR}/rndc.conf /etc/rndc.conf
}

# launch all functions
launch_all()  {
check_range_ip
check_hostname
check_domain
check_workdir
check_zonedir
create_typical_file
setup_named
setup_dbdomain
setup_dbreverse
setup_127
setup_localhost
setup_rndc
setup_resolv
setup_hosts
install_file
}

# check config of DNS 
check_all() {
echo " - Checking config file"
named-checkconf
echo
named-checkzone db.127.0.0 /var/named/zone/db.127.0.0
echo
named-checkzone db.localhost /var/named/zone/db.localhost
echo
named-checkzone ${REVERSEIP} /var/named/zone/db.${REVERSEIP}.hosts
echo
named-checkzone ${DOMAINNAME} /var/named/zone/db.${DOMAINNAME}.hosts
}

####################################################
# main program 
####################################################
echo 
echo " Setting up DNS server with default configuration !"
echo " Look in ${CONFFILE} to adjust DNS config"
echo 
echo " Using those values to setup the DNS:"
echo " |-----------------------------------------------------------"
echo " | Hostname		| ${NAMEOFSERVER}"
echo " |-----------------------------------------------------------"
echo " | IP of DNS server:	| ${IPSERVER}"
echo " |-----------------------------------------------------------"
echo " | Domainname:		| ${DOMAINNAME}"
echo " |-----------------------------------------------------------"
echo " | Forwarder:		| ${IPOFFORWARDER}"
echo " |-----------------------------------------------------------"
echo " | IP range in DNS: 	| ${NORMIP}.${STARTNODE} - ${NORMIP}.${FINISHNODE}"
echo " |-----------------------------------------------------------"
echo " | First node: 		| ${NODENAME}${STARTNODE}"
echo " |-----------------------------------------------------------"
echo " | Last node: 		| ${NODENAME}${FINISHNODE}"
echo " |-----------------------------------------------------------"
echo " | File of DNS server: 	| ${ZONE_DIR}"
echo " |-----------------------------------------------------------"
echo 
sleep 3

launch_all
check_all
start_service