#!/bin/sh 

######################
## TSnetconf
## Technologic Systems
## ver 1.0.02	liberty young	7.30.2002
##
## Script to automate the configuration a TS-Linux SBC
## This script relies on /etc/config and on the TS distributed
## start up scripts

clear

###################{CONFIGDIR} needs trailing slash
CONFIGDIR="/etc/sysconfig/"
NETWORK_F="network_cfg"
IFCFG_F="ifcfg-eth"
COUNTER=0

MAKE_IF=y

function sedreplace {
#1 argument is replace value (Regex)
#2 argument is replace + value tack on to it
#3 argument is file to work on
#4 argument is file to write to
	sed -n -e "/$1/c\\" -e "$1$2" $3 >> $4
}

function yesnoanswer {
#accept Y|y, N|n, or * in first argument
#sets yes or no or default (dflt=2nd argument) to $value
  case $1 in 
    "y"|"Y"|"yes")
    	echo "Value to change to:"
	read value
    ;;
     *)
     	value=$2
     ;;
   esac
}

function GrepAskandReplace {
# Arg 1 is $Item..item to grep for, ask about, and replace
Item="$1"
	dflt=$(grep "$Item=" ${CONFIGDIR}bak.$NETWORK_F| cut -d= -f2 )
	echo "Change $Item ? (default=$dflt)y/n)"
	read answer
	yesnoanswer "$answer" "$dflt"
	sedreplace "$Item=" "$value" "${CONFIGDIR}bak.$NETWORK_F" "${CONFIGDIR}$NETWORK_F"
}


if [ -f "${CONFIGDIR}$NETWORK_F" ];
then
	echo "network_cfg file exists..."
	cp ${CONFIGDIR}$NETWORK_F $(echo ${CONFIGDIR}bak.$NETWORK_F)
	echo "...backed up"
	rm -f $CONFIGDIR$NETWORK_F

	echo "### Technologic Systems 
### General Network Configuration File
###" >> ${CONFIGDIR}$NETWORK_F
	echo

	echo "Bring up Networking devices at startup?" 
	GrepAskandReplace "NETWORKING" 	

	echo "Enable IPV4 forwarding upon startup? "
	GrepAskandReplace "FORWARD_IPV4"

	echo "Enable IPV4 Defragmentation?" 
	GrepAskandReplace "DEFRAG_IPV4"

	dflt=$(grep "GATEWAY=" ${CONFIGDIR}bak.$NETWORK_F| cut -d= -f2 )
	GrepAskandReplace "GATEWAY"
	
	echo "Interface for Gateway"
	GrepAskandReplace "GW_DEV"

	echo "What is my hostname? "
	GrepAskandReplace "Hostname"	

else
	echo "NO network_cfg file!!!!!!!!!!!!"
	echo "Creating ${CONFIGDIR}$NETWORK_F with defaults"
	touch ${CONFIGDIR}$NETWORK_F
	echo "### Technologic Systems
### General Network Configuration File
###
	NETWORKING=yes
	GATEWAY=192.168.0.1
	GW_DEV=eth0
	Hostname=\"miniepc.embeddedx86.com\"
	BOOTPROTO=no
	DEFRAG_IPV4=no
	FORWARD_IPV4=no" >> $CONFIGDIR$NETWORK_F
fi


echo "
DEVICE=lo
IPADDR=127.0.0.1
NETMASK=255.0.0.0
NETWORK=127.0.0.0
BROADCAST=127.255.255.255
ENABLE=yes" >> /etc/sysconfig/ifcfg-lo

while [ $MAKE_IF = "y" ]
do
	echo "configuring $IFCFG_F$COUNTER" 
if [ ! -f $CONFIGDIR$IFCFG_F$COUNTER ];
then
	echo "$IFCFG_F$COUNTER file does NOT exists..creating..."
	touch $CONFIGDIR$IFCFG_F$(echo $COUNTER)
	echo "DEVICE=eth$COUNTER" >> $CONFIGDIR$IFCFG_F$(echo $COUNTER)
	echo "IPADDR=192.168.0.50" >> $CONFIGDIR$IFCFG_F$(echo $COUNTER)
	echo "NETMASK=255.255.255.0" >> $CONFIGDIR$IFCFG_F$(echo $COUNTER)
	echo "NETWORK=192.168.0.0" >> $CONFIGDIR$IFCFG_F$(echo $COUNTER)
	echo "BROADCAST=192.168.0.255" >> $CONFIGDIR$IFCFG_F$(echo $COUNTER)
	echo "ENABLE=yes" >> $CONFIGDIR$IFCFG_F$(echo $COUNTER)

	MAKE_IF=no	
else
	echo "file exists..backing up..."
	cp $CONFIGDIR$IFCFG_F$COUNTER ${CONFIGDIR}bak.${IFCFG_F}${COUNTER}
	rm $CONFIGDIR$IFCFG_F$COUNTER

	NETWORK_F=$IFCFG_F$COUNTER	
	
	echo "DEVICE=eth$COUNTER" > $CONFIGDIR$IFCFG_F$COUNTER 

	echo "My IP address? "
	GrepAskandReplace "IPADDR" 
	
	echo "My Netmask address? "
	GrepAskandReplace "NETMASK"
	
	echo "My Network? "
	GrepAskandReplace "NETWORK" 

	echo "My Broadcast address? "
	GrepAskandReplace "BROADCAST"	

	echo "Enable $IFCFG_F ?"
	GrepAskandReplace "ENABLE" 
	
	COUNTER=$((COUNTER + 1))
	echo "Configure eth$COUNTER ? (y/n)"	
	read answer
	case "$answer" in 
		"y"|"Y"|"yes")
		;;
		*)
		   MAKE_IF="no"
		   ;;
	esac
fi

done	

## configure DNS
CONFIGDIR=/etc/
NETWORK_F=resolv.conf

if [ ! -f $CONFIGDIR$NETWORK_F ]; then
	echo "$CONFIGDIR$NETWORK_F does not exists, creating with defaults"
	touch $CONFIGDIR$NETWORK_F
	echo "nameserver 192.168.0.1" >> $CONFIGDIR$NETWORK_F
else
	echo "$CONFIGDIR$NETWORK_F exists..baking up"
	cp ${CONFIGDIR}$NETWORK_F $(echo ${CONFIGDIR}bak.$NETWORK_F)
	rm -f ${CONFIGDIR}$NETWORK_F
	
	echo "IP of DomainNameServer 1:"
	read answer
	echo "nameserver  $answer" >> $CONFIGDIR$NETWORK_F
	
	echo "IP of DomainNameServer 2:"
	read answer
	echo "nameserver  $answer" >> $CONFIGDIR$NETWORK_F
fi

## configure the hosts file
CONFIGDIR="/etc/"
NETWORK_F="hosts"

if [ ! -f $CONFIGDIR$NETWORK_F ] ; then
	echo "file does not exists, creating with defaults"
	touch $CONFIGDIR$NETWORK_F

echo "
# Listing of hostnames to ips
# A well maintained file should be sparse,
# using DNS for name lookups versus relying on /etc/hosts

# IP            FQD                     alias

localhost 127.0.0.1
## This s is the only thing i see flawed with proftpd..
## It requires a successful hostname lookup for machines hostname
" >> $CONFIGDIR$NETWORK_F

	echo "$(hostname) 127.0.0.1" >> $CONFIGDIR$NETWORK_F
else
	cp $CONFIGDIR$NETWORK_F ${CONFIGDIR}bak.$NETWORK_F
	rm -f  $CONFIGDIR$NETWORK_F
	echo "
# Listing of hostnames to ips
# A well maintained file should be sparse,
# using DNS for name lookups versus relying on /etc/hosts

# IP            FQD                     alias

127.0.0.1	localhost.localdomain	localhost
## This s is the only thing i see flawed with proftpd..
## It requires a successful hostname lookup for machines hostname
## It requires a successful hostname lookup for machines hostname" >> $CONFIGDIR$NETWORK_F
	echo "127.0.0.1		$(hostname) " >> $CONFIGDIR$NETWORK_F

      echo "Configure /etc/hosts file?"
      read answer 
      case $answer in 
	      "y"|"Y"|"yes")
	      MAKE_HNAMES="y"
	      ;;
	      *)
	      MAKE_HNAMES="n"
	      ;;
      esac

      while [ "$MAKE_HNAMES" = "y" ]
      do     
	
	echo "Hostname?"
	read answer
	echo "Hostname's IP?"
	read answer2
	echo "$answer2 $answer" >> $CONFIGDIR$NETWORK_F

	echo "Do another? (y/n)"
	read answer	
	case "$answer" in 
		"y"|"Y")
		;;
		*)
		   MAKE_HNAMES="no"
		   ;;
	esac
       done
fi
