#!/bin/sh
## /etc/dhcpd.conf
## /etc/dhcp/dhcpd.conf    ,  /var/lib/dhcpd/dhcpd.leases, /var/run/dhcpd.pid,
##       /var/lib/dhcpd/dhcpd.leases~.
##/etc/xinetd.d/tftp
##/etc/selinux/config
##/etc/sysconfig/network
##/etc/sysconfig/network-scripts/ifcfg-eth0
##/etc/inittab   #起動　3　　　5

##DNS----------------------------
## /etc/nsswitch.conf  
#/etc/resolv.conf
#search 192-168-1 192-168-11 192-168-10
#nameserver 192.168.1.254
#nameserver 192.168.11.254
#nameserver 192.168.10.254
## /etc/named.conf   /var/named 
. ./profile

HOST_IP_DAT_FILE="./host-ip.dat"

dns_server="net_server"

named_conf="/etc/named.conf"
var_named_dir="/var/named"
#####################################################
###
#####################################################
function create_named_conf {
    cp -p  ${named_conf}    ${named_conf}_tmp
    echo "" > ${named_conf}_tmp
    echo "// CREATED"  >>  ${named_conf}_tmp
    echo "// named.conf"  >>  ${named_conf}_tmp
    echo "//"  >>  ${named_conf}_tmp
    echo "// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS"  >>  ${named_conf}_tmp
    echo "// server as a caching only nameserver (as a localhost DNS resolver only)."  >>  ${named_conf}_tmp
    echo "//"  >>  ${named_conf}_tmp
    echo "// See /usr/share/doc/bind*/sample/ for example named configuration files."  >>  ${named_conf}_tmp
    echo "//"  >>  ${named_conf}_tmp
    echo "" >> ${named_conf}_tmp
    echo "options {"  >>  ${named_conf}_tmp
    echo "//      listen-on port 53 { 127.0.0.1;localnets; };"  >>  ${named_conf}_tmp
    echo "//        listen-on-v6 port 53 { ::1; };"  >>  ${named_conf}_tmp
    echo "        check-names master ignore;"  >>  ${named_conf}_tmp
    echo "        directory       \"/var/named\";"  >>  ${named_conf}_tmp
    echo "        dump-file       \"/var/named/data/cache_dump.db\";"  >>  ${named_conf}_tmp
    echo "        statistics-file \"/var/named/data/named_stats.txt\";"  >>  ${named_conf}_tmp
    echo "        memstatistics-file \"/var/named/data/named_mem_stats.txt\";"  >>  ${named_conf}_tmp
    echo "        allow-query     { localhost;"  >>  ${named_conf}_tmp
    echo "                localnets;"  >>  ${named_conf}_tmp
    echo "         };"  >>  ${named_conf}_tmp
    echo "        recursion yes;"  >>  ${named_conf}_tmp
    echo "        allow-transfer {"  >>  ${named_conf}_tmp
    echo "                // ( localhost )"  >>  ${named_conf}_tmp
    echo "                127.0.0.1;"  >>  ${named_conf}_tmp
    echo "                // 192.168.0.* ( Subnet 255.255.255.0 )"  >>  ${named_conf}_tmp
    #echo "                192.168.10.0/24;"  >>  ${named_conf}_tmp
    #echo "                192.168.11.0/24;"  >>  ${named_conf}_tmp
    #echo "                192.168.1.0/24;"  >>  ${named_conf}_tmp
    ind=1
    while (( ind < net_count )) 
    do
	echo "                ${host_net[$ind]}.0/24;"  >>  ${named_conf}_tmp
        let ind=ind+1
    done
    echo "        };"  >>  ${named_conf}_tmp
    echo "        forwarders      {"  >>  ${named_conf}_tmp
    echo "                192.168.1.1;"  >>  ${named_conf}_tmp
    echo "        };"  >>  ${named_conf}_tmp
    echo "" >> ${named_conf}_tmp
    echo "        //dnssec-enable yes;"  >>  ${named_conf}_tmp
    echo "        //dnssec-validation yes;"  >>  ${named_conf}_tmp
    echo "        //dnssec-lookaside auto;"  >>  ${named_conf}_tmp
    echo "" >> ${named_conf}_tmp
    echo "        /* Path to ISC DLV key */"  >>  ${named_conf}_tmp
    echo "        //bindkeys-file \"/etc/named.iscdlv.key\";"  >>  ${named_conf}_tmp
    echo "};"  >>  ${named_conf}_tmp
    echo "" >> ${named_conf}_tmp
    echo "logging {"  >>  ${named_conf}_tmp
    echo "        channel default_debug {"  >>  ${named_conf}_tmp
    echo "                file \"data/named.run\";"  >>  ${named_conf}_tmp
    echo "                severity dynamic;"  >>  ${named_conf}_tmp
    echo "        };"  >>  ${named_conf}_tmp
    echo "};"  >>  ${named_conf}_tmp
    echo "" >> ${named_conf}_tmp
    if [[ "$dns_server" = "Centos56_server" ]]
    then
         :
    else
        echo "zone \".\" IN {"  >>  ${named_conf}_tmp
        echo "        type hint;"  >>  ${named_conf}_tmp
        echo "        file \"named.ca\";"  >>  ${named_conf}_tmp
        echo "};"  >>  ${named_conf}_tmp
        echo "" >> ${named_conf}_tmp
    fi
    
    echo "include \"/etc/named.rfc1912.zones\";"  >>  ${named_conf}_tmp
    echo "" >> ${named_conf}_tmp
    echo "" >> ${named_conf}_tmp
    
    rm -f ${named_conf}
    mv ${named_conf}_tmp ${named_conf}
    chown root:named ${named_conf}

}
#####################################################
###
#####################################################
function fun_dns_add {
    IP1="$(echo ${host_net[${1}]} | sed 's/\([0-9][0-9]*\).\([0-9][0-9]*\).\([0-9][0-9]*\)/\1/g')"
    IP2="$(echo ${host_net[${1}]} | sed 's/\([0-9][0-9]*\).\([0-9][0-9]*\).\([0-9][0-9]*\)/\2/g')"
    IP3="$(echo ${host_net[${1}]} | sed 's/\([0-9][0-9]*\).\([0-9][0-9]*\).\([0-9][0-9]*\)/\3/g')"

    domain="$(echo ${host_net[${1}]} | sed 's/\./-/g')"
    dns_name_zone_path="${var_named_dir}/${domain}.zone"
    dns_name_zone="${domain}.zone"
    dns_ip_zone_path="${var_named_dir}/${IP3}.${IP2}.${IP1}.zone"
    dns_ip_zone="${IP3}.${IP2}.${IP1}.zone"
    echo "${dns_name_zone_path}-------"
    if [ -a $dns_name_zone_path ] && [[ "${2}" != r* ]]
    then
        :
    else
        rm -f   $dns_name_zone_path
        echo "\$TTL 1D"  >>   $dns_name_zone_path
        echo "@	IN SOA	${dns_server}.${domain}. root.${dns_server}.${domain}. ("  >>    $dns_name_zone_path
        echo "					0	; serial"  >>  $dns_name_zone_path
        echo "					1D	; refresh"  >>  $dns_name_zone_path
        echo "					1H	; retry"  >>  $dns_name_zone_path
        echo "					1W	; expire"  >>  $dns_name_zone_path
        echo "					3H )	; minimum"  >>  $dns_name_zone_path
        echo "	IN      NS      ${dns_server}.${domain}."  >>  $dns_name_zone_path
        echo "${dns_server}	IN	A	${host_ip[${1}]}"  >>  $dns_name_zone_path
	IFS=,
	cat ${HOST_IP_DAT_FILE} | grep -v "^#" | grep -v -E "^[[:space:]]*$" | \
	while read HOST_NAME HOST_MAC HOST_IP
	do
		echo "${HOST_NAME}	IN	A	${host_net[${1}]}.${HOST_IP}"  >>  $dns_name_zone_path
	done
        
        chown named:named $dns_name_zone_path
        
        dns_name_zone_exist=`cat $named_conf | grep "$dns_name_zone"`
        if [[ "${dns_name_zone_exist}" = "" ]]
        then
            echo "zone \"${domain}\" IN {"  >>  $named_conf
            echo "        type master;"  >>  $named_conf
            echo "        file \"${domain}.zone\";"  >>  $named_conf
            echo "        allow-update { none; };"  >>  $named_conf
            echo "};"  >>  $named_conf
        fi
    fi
    
    
    echo "${dns_ip_zone_path}-------"
    
    IP4="$(echo ${host_ip[${1}]} | sed 's/\([0-9][0-9]*\).\([0-9][0-9]*\).\([0-9][0-9]*\).\([0-9][0-9]*\)/\4/g')"
    if [ -a $dns_ip_zone_path ] && [[ "${2}" != r* ]]
    then
        :
    else
        rm -f   $dns_ip_zone_path
        echo "\$TTL 1D"  >>  $dns_ip_zone_path
        echo "@	IN SOA	${dns_server}.${domain}. root.${dns_server}.${domain}. ("  >>  $dns_ip_zone_path
        echo "					0	; serial"  >>  $dns_ip_zone_path
        echo "					1D	; refresh"  >>  $dns_ip_zone_path
        echo "					1H	; retry"  >>  $dns_ip_zone_path
        echo "					1W	; expire"  >>  $dns_ip_zone_path
        echo "					3H )	; minimum"  >>  $dns_ip_zone_path
        echo "	IN	NS	${dns_server}.${domain}."  >>  $dns_ip_zone_path
        echo "${IP4}	IN	PTR	${dns_server}.${domain}."  >>  $dns_ip_zone_path
	IFS=,
	cat ${HOST_IP_DAT_FILE} | grep -v "^#" | grep -v -E "^[[:space:]]*$" | \
	while read HOST_NAME HOST_MAC HOST_IP
	do
		echo "${HOST_IP}	IN	PTR	${HOST_NAME}.${domain}."  >>  $dns_ip_zone_path
	done

        chown named:named $dns_ip_zone_path
        
        dns_ip_zone_exist=`cat $named_conf | grep "${dns_ip_zone}"`
        if [[ "${dns_ip_zone_exist}" = "" ]]
        then
            echo "zone \"${IP3}.${IP2}.${IP1}.in-addr.arpa\" IN {"  >>  $named_conf
            echo "        type master;"  >>  $named_conf
            echo "        file \"${IP3}.${IP2}.${IP1}.zone\";"  >>  $named_conf
            echo "        allow-update { none; };"  >>  $named_conf
            echo "};"  >>  $named_conf
        fi
        
    fi
}

#####################################################
###
#####################################################
function fun_subnet_add {
	##ind=0
	echo "subnet ${host_net[${1}]}.0 netmask 255.255.255.0 {"  >>    $dhcpd_conf
	echo "    range dynamic-bootp ${host_net[${1}]}.${net_start} ${host_net[${1}]}.${net_end};"  >>    $dhcpd_conf
	echo "    ##option broadcast-address 192.168.1.255;"  >>    $dhcpd_conf
	echo "    option domain-name \"$(echo ${host_net[${1}]} | sed 's/\./-/g')\";"  >>    $dhcpd_conf

	echo "    option domain-name-servers ${host_ip[${1}]};"  >>    $dhcpd_conf
	echo "    option routers           ${host_net[${1}]}.1;"  >>    $dhcpd_conf
	echo "    ##deny unknown-clients;"  >>    $dhcpd_conf
	echo "    allow  unknown-clients;"  >>    $dhcpd_conf
	echo ""  >>    $dhcpd_conf
	echo "    next-server ${host_ip[${1}]};"  >>    $dhcpd_conf
	echo "    filename \"pxelinux.0\";"  >>    $dhcpd_conf
	IFS=,
	cat ${HOST_IP_DAT_FILE} | grep -v "^#" | grep -v -E "^[[:space:]]*$" | \
	while read HOST_NAME HOST_MAC HOST_IP
	do
		echo "    host  ${HOST_NAME}_$(echo ${host_net[${1}]} | sed 's/\./-/g')_0 {"  >>    $dhcpd_conf
		echo "               hardware ethernet ${HOST_MAC};"  >>    $dhcpd_conf
		echo "               fixed-address      ${host_net[${1}]}.${HOST_IP};"  >>    $dhcpd_conf
		echo "     }"  >>    $dhcpd_conf
	done

	echo "}"  >>    $dhcpd_conf
}

#####################################
###DHCP (net1~net2 )

###
###    main 
###
vsftp_conf="/etc/vsftpd/vsftpd.conf"
tftp_dir="/tftpboot/pxelinux.cfg"
ftp_home_dir="/home/ftp"
net_start="20"
net_end="200"

dns_server=$(cat /etc/sysconfig/network | grep HOSTNAME | sed 's/HOSTNAME=\(.*\)/\1/g' )

dhcp_ver=`rpm -q dhcp`
if [[ "$dhcp_ver" < "dhcp-4.1.1-12.P1.el6.i686" ]]
then
    dhcpd_conf="/etc/dhcpd.conf"
        echo "$dhcp_ver--$dhcpd_conf"
else
    dhcpd_conf="/etc/dhcp/dhcpd.conf"
        echo "$dhcp_ver--$dhcpd_conf"
fi


name_ver=`rpm -q caching-nameserver`
if [[ "$name_ver" = "" ]] || [[ "$name_ver" > "caching-nameserver-9.3.6-16.P1.el5" ]]
then
    named_conf="/etc/named.conf"
        echo "$name_ver--$named_conf"
else
    dns_server="Centos56_server"
    var_named_dir="/var/named/chroot/var/named"
    named_conf="/var/named/chroot/etc/named.caching-nameserver.conf"
        echo "$name_ver--$named_conf"
fi


service network restart
echo "---------------------------------------------------"
let ind=0
host_ips=`ifconfig | grep 'Mask:255.255.255.0'| awk '{print $2}' | sed 's/^addr:\(.*\)$/\1/g'`

for HOST_IP in  ${host_ips}
do
    let ind=ind+1
    host_ip[$ind]="$HOST_IP"

    host_net[$ind]=`echo $HOST_IP | awk '{print $1}' | sed 's/^\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\)\.[0-9][0-9]*/\1/g'`
    echo "$ind  ${host_ip[$ind]}      ${host_net[$ind]} "
done
echo "---------------------------------------------------"
let net_count=ind+1

echo "echo  $1"
if [ -a $dhcpd_conf ]
then
    domain_name_exist=`cat $dhcpd_conf | grep "domain-name-servers"`
    ##echo "dhcp_conf_exist--subnet ${host_net}.0"
    if [[ "$domain_name_exist" = *domain-name-servers* ]]
    then
        if [[ "${1}" = r* ]]
        then
            rm -f  $dhcpd_conf
            echo "#"    >>    $dhcpd_conf
            echo "# DHCP Server Configuration file."    >>    $dhcpd_conf
            echo "#   see /usr/share/doc/dhcp*/dhcpd.conf.sample"    >>    $dhcpd_conf
            echo "#   see 'man 5 dhcpd.conf'"    >>    $dhcpd_conf
            echo "#"    >>    $dhcpd_conf
            domain_name_exist=0
        else
            domain_name_exist=1
        fi
    else
        domain_name_exist=0
    fi
else
        domain_name_exist=0
fi
##echo "domain_name_exist----$domain_name_exist----"
###########################################################
if (( domain_name_exist == 0 ))
then

    echo ""  >>    $dhcpd_conf
    echo "option domain-name \"192-168-11\";"  >>    $dhcpd_conf
    ##echo "option domain-name-servers      ${host_net[1]}.1;"  >>    $dhcpd_conf
    ind=1
    while (( ind < net_count )) 
    do
        if [[ "${host_ip[$ind]}" = 192.168.11* ]]
        then
            echo "option domain-name-servers      ${host_ip[$ind]};"  >>    $dhcpd_conf
            break
        fi
        let ind=ind+1
    done
    echo "ddns-update-style interim;"  >>    $dhcpd_conf
    echo ""  >>    $dhcpd_conf
    echo "max-lease-time 7200;"  >>    $dhcpd_conf
    echo "server-name \"bootserver\";"  >>    $dhcpd_conf
    echo "default-lease-time 600;"  >>    $dhcpd_conf
    echo ""  >>    $dhcpd_conf
    echo "allow booting;"  >>    $dhcpd_conf
    echo "allow bootp;"  >>    $dhcpd_conf
    echo ""  >>    $dhcpd_conf
fi
###########################################################

named_conf_exist=`cat $named_conf | grep "CREATED"`
if [[ "${named_conf_exist}" = "" ]] || [[ "${2}" = r* ]]
then
    create_named_conf
fi

echo "---------------------------------------------------"
ind=1
while (( ind < net_count )) 
do

    dhcp_conf_exist=`cat $dhcpd_conf | grep "subnet ${host_net[$ind]}.0"`
    ##echo "dhcp_conf_exist--subnet ${host_net}.0"
    if [[ "$dhcp_conf_exist" = subnet* ]]
    then
        :
    else
        echo "fun_subnet_add  $ind"
        fun_subnet_add  $ind 
        echo "fun_dns_add $ind $1"
        fun_dns_add $ind $1
    fi
    let ind=ind+1
done
echo "---------------------------------------------------"
if [ -d $ftp_home_dir ]
then
    echo "$ftp_home_dir exists"
else
    mkdir ${ftp_home_dir}
    echo "listen_port=21"  >>    $vsftp_conf
    echo "ftp_username=ftp"  >>    $vsftp_conf
    echo "no_anon_password=YES"  >>    $vsftp_conf
    echo "anon_root=/home/ftp"  >>    $vsftp_conf
    echo "anon_world_readable_only=YES"  >>    $vsftp_conf
    
    mkdir    ${ftp_home_dir}/inst
    mkdir    ${ftp_home_dir}/kickstart
    chmod -R 555 ${ftp_home_dir}

    #####################################
    #####tftpd
    cat /etc/xinetd.d/tftp | \
    sed 's/^\([ 	]*server_args[ 	]*=[ 	]*-s[ 	]*\)\/var\/lib\(\/tftpboot\)[ 	]*$/\1\2/g' | \
    sed 's/^\([ 	]*disable[ 	]*=[ 	]*\)\(yes\)[ 	]*$/\1no/g' > /etc/xinetd.d/tftp.tmp

    cp /etc/xinetd.d/tftp.tmp /etc/xinetd.d/tftp

fi


if [ -d $tftp_dir ]
then
    echo "$tftp_dir exists"
else
    DIR_NOW=`pwd`
    cd /
    tar zxvf ${DIR_NOW}/tftpboot_${var_ymd}.tar.gz
    ##mkdir    /tftpboot
    ##mkdir    /tftpboot/pxelinux.cfg
    chmod -R 555 /tftpboot

    chmod -R 777 /tftpboot/tmp

    cp /tftpboot/tmp/*cfg  ${ftp_home_dir}/kickstart/
fi

echo 1 > /proc/sys/net/ipv4/ip_forward
sed  -i "s/net.ipv4.ip_forward[[:space:]]*=[[:space:]]*[01]/net.ipv4.ip_forward = 1/g"  /etc/sysctl.conf

#####
/sbin/chkconfig --level 345 ntpd on
/sbin/chkconfig --level 345 dhcpd on
/sbin/chkconfig --level 345 tftp on
/sbin/chkconfig --level 345 NetworkManager off

rm -f /etc/udev/rules.d/70-persistent-net.rules

# /etc/init.d/network reload

service dhcpd  restart 
service xinetd  restart


service vsftpd restart

service network restart
/etc/init.d/named restart

gateway_ip=`cat /etc/sysconfig/network-scripts/ifcfg-eth0 | grep GATEWAY|sed 's/^[^=]*=\(.*\)/\1/g'`
setting_internet=`cat /etc/rc.d/rc.local | grep "setting for internet"`
if [[ "${setting_internet}" = "" ]]
then
	echo "##setting for internet" >> /etc/rc.d/rc.local
	echo "route del default" >> /etc/rc.d/rc.local
	echo "route add default gw ${gateway_ip}" >> /etc/rc.d/rc.local
	echo "" >> /etc/rc.d/rc.local
	echo "iptables -F" >> /etc/rc.d/rc.local
	echo "iptables -P INPUT ACCEPT" >> /etc/rc.d/rc.local
	echo "iptables -P FORWARD ACCEPT" >> /etc/rc.d/rc.local
	echo "iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE" >> /etc/rc.d/rc.local
else
	sed -i "s/route add default gw.*$/route add default gw ${gateway_ip}/g"  /etc/rc.d/rc.local
fi

/etc/rc.local

echo "search 192-168-1 192-168-11 192-168-10" >> /etc/resolv.conf

if [ -d "/root/DISK" ]
then
    echo "/root/DISK exists"
else
   mkdir /root/DISK
fi

if [ -d "/share/DISK1" ]
then
    echo "/share/DISK1 exists"
else
   mkdir -p  /share/DISK1
fi

hosts_data="\
###for local setting
192.168.1.223 winxp-server-90
192.168.10.121  centos-jp
192.168.10.172   jin-i7-860
192.168.10.216  agw19
192.168.10.211   vn2-master
192.168.10.212   ut2-master
"
hosts_setting=`cat /etc/hosts | grep "for local setting"`
if [[ "${hosts_setting}" = "" ]]
then
	echo "${hosts_data}"  >> /etc/hosts
fi
