#!/bin/sh
#
# JTL /etc/rc
#
# Bring up multi-user (normal) mode. Run after /etc/rc.sysinit.

if [ -x /etc/sysconfig ]; then
	. /etc/sysconfig
fi

# Configure network devices
if [ -f /proc/net/dev ] ; then
	ifconfig lo inet 127.0.0.1 netmask 255.0.0.0
	for interface in eth0 eth1 eth2 ; do
		if grep -q $interface /proc/net/dev ; then
			# What we want is ${ip_${interface}}, but bash doesn't
			# like it
		        cmd="echo \$ip_$interface"
			ip=`export ip_eth0 ip_eth1 ip_eth2 ; sh -c "$cmd"`
			cmd="echo \$netmask_$interface"
			netmask=`export netmask_eth0 netmask_eth1 netmask_eth2 ; sh -c "$cmd"`
			#echo ip=$ip
			#echo netmask=$netmask
			if [ "$ip" = "dhcp" ] ; then
				echo Starting DHCP for $interface

				# Only set hostname and domain for primary
				# interface
				if [ "$interface" = "eth0" ]; then
				    dhcpcd -R -h $hostname $interface
				else
				    dhcpcd -R -H -D -h $hostname $interface &
				fi
			elif [ -n "$ip" -a -n "$netmask" ]; then
				echo -n Setting address of $interface...
				ifconfig $interface inet $ip netmask $netmask
				rc=$?
				if [ $rc = 0 ] ; then
					echo " "$ip
				else
					echo " failed."
				fi
			fi
		fi
	done
fi

echo -n "Initialising random number generator..."
if [ -f /var/run/random-seed ]; then
	cat /var/run/random-seed > /dev/urandom
else
	mkdir -p /var/run
	touch /var/run/random-seed
fi
chmod 600 /var/run/random-seed
dd if=/dev/urandom of=/var/run/random-seed bs=512 count=1 2>/dev/null
echo " done."

# Bring up daemons
echo -n "Starting daemons..."

# System logger
if [ -x /usr/sbin/syslogd ]; then
	echo -n " syslogd"
	/usr/sbin/syslogd -m 0
fi

# Kernel logger
if [ -x /usr/sbin/klogd ]; then
	echo -n " klogd"
	/usr/sbin/klogd
fi

# RPC port mapper (for NFS)
if [ -x /sbin/portmap -a -f /proc/net/dev -a -f /etc/exports ]; then
	echo -n " portmap"
	/sbin/portmap
fi

# Scheduled execution manager
if [ -x /usr/sbin/crond ]; then
	echo -n " crond"
	/usr/sbin/crond
fi

# IP services manager
if [ -x /usr/sbin/inetd -a -f /proc/net/dev -a -f /etc/inetd.conf ]; then
	echo -n " inetd"
	/usr/sbin/inetd
fi

# Lockd (for NFS)
if [ -f /proc/net/dev -a -f /etc/exports -a -x /usr/sbin/rpc.lockd ]; then
	echo -n " lockd"
	/usr/sbin/rpc.lockd
fi

# Statd (for NFS)
if [ -f /proc/net/dev -a -f /etc/exports -a -x /usr/sbin/rpc.statd ]; then
	echo -n " statd"
	/usr/sbin/rpc.statd
fi

# Mounter (for NFS)
if [ -f /proc/net/dev -a -f /etc/exports -a -x /usr/sbin/rpc.mountd ]; then
	echo -n " mountd"
	/usr/sbin/rpc.mountd
fi

# NFS
if [ -f /proc/net/dev -a -f /etc/exports -a -x /usr/sbin/rpc.nfsd ]; then
	echo -n " nfsd"
	/usr/sbin/rpc.nfsd 4
	if [ -x /usr/sbin/exportfs ]; then
	    /usr/sbin/exportfs -a
	fi
fi

# DHCP (Automatic IP address assignment)
if [ -f /proc/net/dev -a -f /etc/dhcpd.conf -a -x /usr/sbin/dhcpd ]; then
	echo -n " dhcpd"
	/usr/sbin/dhcpd -q
fi

# Web server
if [ -f /proc/net/dev -a -f /usr/sbin/apachectl -a -f /etc/httpd/httpd.conf ]; then
	echo -n " httpd"
	# Change to start-ssl if cert present
	/usr/sbin/apachectl start > /dev/null
fi

# Samba (Windows file sharing) name server
if [ -f /proc/net/dev -a -f /etc/smb.conf -a -x /usr/sbin/nmbd ]; then
	echo -n " nmbd"
	/usr/sbin/nmbd -D
fi

# Samba (Windows file sharing) file server
if [ -f /proc/net/dev -a -f /etc/smb.conf -a -x /usr/sbin/smbd ]; then
	echo -n " smbd"
	/usr/sbin/smbd -D
fi

echo " done."

# Copied from Red Hat Linux 5.2(ish)
arch=$(uname -m)
a="a"
case "_$arch" in
	    _a*) a="an";;
	    _i*) a="an";;
esac

SMP=`egrep -c "^cpu[0-9]+" /proc/stat`
if [ "$SMP" -gt "1" ]; then
    SMP=${SMP}x
else
    SMP=""
fi

echo "$(uname -snvr) $SMP$(uname -m)" > /etc/issue


if [ -x /etc/rc.local ]; then
	echo "Starting local services."
	. /etc/rc.local
fi
