#!/bin/sh NET="/usr/sbin" NETMASK="255.255.255.0" # REPLACE with YOUR netmask! FORCEFQDN='y' MAKESEARCH='n' BOOTPC=/sbin/bootpc IFCONFIG=/sbin/ifconfig ROUTE=/sbin/route BINHOST=/bin/hostname DEV=eth0 ASKSERVER="255.255.255.255" TW="--timeoutwait 70" RIF="--returniffail" RIFMESSAGE="Bootp failed -- disabling network." RCONF=/etc/resolv.conf EHOSTS=/etc/hosts LHOSTS=/etc/hosts.local TMPFILE=/tmp/bootp-results.$$ setservers() { for i in $1 do echo "nameserver $i" >> ${RCONF} done } setresolv() { [ -f ${RCONF} ] && mv -f ${RCONF} ${RCONF}.old if [ "${MAKESEARCH}" = 'y' ]; then echo "search $2" > ${RCONF} else echo "domain $1" > ${RCONF} fi setservers "$3" } fakeresolv() { [ -f ${RCONF} ] && mv -f ${RCONF} ${RCONF}.fake echo "domain ." > ${RCONF} setservers "$1" } unfakeresolv() { [ -f ${RCONF}.fake ] && mv -f ${RCONF}.fake ${RCONF} } updateresolv() { [ -f ${RCONF} ] && mv -f ${RCONF} ${RCONF}.old egrep 'domain|search' ${RCONF}.old > ${RCONF} setservers "$1" } netdown() { ${ROUTE} del default ${IFCONFIG} ${DEV} down } ## End of the functions ## Start of the actual work ${IFCONFIG} ${DEV} up ${IFCONFOPTS1} 0.0.0.0 ${ROUTE} add default dev ${DEV} if ${BOOTPC} --dev ${DEV} --server ${ASKSERVER} ${RIF} ${TW} > ${TMPFILE} then netdown eval `cat ${TMPFILE}` rm ${TMPFILE} else netdown echo ${RIFMESSAGE} sleep 10 exit 1 fi ${IFCONFIG} lo 127.0.0.1 ${ROUTE} add -net 127.0.0.0 if [ -z "${NETMASK}" ] ; then ${IFCONFIG} ${DEV} up ${IPADDR} broadcast ${BROADCAST} `eval echo ${IFCONFOPTS2}` ${ROUTE} -n add -net ${NETWORK} dev ${DEV} else ${IFCONFIG} ${DEV} up ${IPADDR} broadcast ${BROADCAST} netmask ${NETMASK} `eval echo ${IFCONFOPTS2}` ${ROUTE} -n add -net ${NETWORK} dev ${DEV} fi if [ -z "${GATEWAYS}" ] ; then echo "No IP gateways defined in rc.bootp setup" else ( set - ${GATEWAYS} ; ${ROUTE} add default gw ${1} ) fi if [ ! -z "${DNSSRVS}" ]; then if [ ! -z "${DOMAIN}" ]; then setresolv "${DOMAIN}" "${SEARCH}" "${DNSSRVS}" else fakeresolv "${DNSSRVS}" eval `${BOOTPC} --in2host ${IPADDR}` unfakeresolv if [ ! -z "${HOSTDOMAIN}" ]; then setresolv "${HOSTDOMAIN}" "${HOSTSEARCH}" "${DNSSRVS}" else if [ -f ${RCONF} ] ; then # echo "Using old value from /etc/resolv.conf for domain/search" updateresolv "${DNSSRVS}" else echo "No BOOTP DOMAIN supplied" echo " reverse lookup failed" echo " and no existing resolver file" echo "=> resolver setup failed" fi fi fi else echo "No DNSSRVS supplied, resolver setup not possible" fi echo "127.0.0.1 loopback localhost">${EHOSTS} echo "128.83.129.225 darwin.as.utexas.edu darwin">>${EHOSTS} echo "192.168.1.225 master1.pvm.net master1">>${EHOSTS} echo "192.168.2.225 master2.pvm.net master2">>${EHOSTS} if [ ! -z "${HOSTNAME}" -a "${FORCEFQDN}" != 'y' ]; then ${BINHOST} "${HOSTNAME}" echo "${IPADDR} ${HOSTNAME}" >>${EHOSTS} else if [ -z "${DONEIN2HOST}" ] ; then eval `${BOOTPC} --in2host ${IPADDR}` fi if [ -z "${FORCEFQDN}" ]; then if [ ! -z "${HOSTLEAF}" ]; then ${BINHOST} "${HOSTLEAF}" echo "${IPADDR} ${HOSTLEAF} ${HOSTFULL}">>${EHOSTS} fi else if [ ! -z "${HOSTFULL}" ]; then ${BINHOST} "${HOSTFULL}" echo "${IPADDR} ${HOSTFULL} ${HOSTLEAF}">>${EHOSTS} fi fi fi if [ -f ${LHOSTS} ]; then cat ${LHOSTS} >> ${EHOSTS} fi printifhere() { [ ! -z "$2" ] && echo "$1 = $2" } printifhere TIMESRVS "${TIMESRVS}" printifhere IEN116SRVS "${IEN116SRVS}" printifhere LOGSRVS "${LOGSRVS}" printifhere QODSRVS "${QODSRVS}" printifhere LPRSRVS "${LPRSRVS}" printifhere IMPRESSSRVS "${IMPRESSSRVS}" printifhere RLPSRVS "${RLPSRVS}" printifhere SWAPSRVR "${SWAPSRVR}" printifhere BOOTFILE "${BOOTFILE}" printifhere TIMEOFFSET "${TIMEOFFSET}" printifhere BOOTSIZE "${BOOTSIZE}" printifhere YPDOMAIN "${YPDOMAIN}" printifhere YPSRVR "${YPSRVR}" printifhere NTPSRVS "${NTPSRVS}" # ## End of BOOTP stuff # echo -n "Starting daemons:" if [ -f ${NET}/syslogd ]; then echo -n " syslogd" ${NET}/syslogd & # Backgrounded to avoid an ugly notice from bash-2.0 echo -n " klogd" ${NET}/klogd fi if [ -f ${NET}/portmap ]; then echo -n " portmap" ${NET}/portmap fi if [ -f ${NET}/inetd ]; then echo -n " inetd" ${NET}/inetd else echo "no INETD found. INET cancelled!" exit 1 fi for server in ${IN_SERV} ; do if [ -f ${NET}/${server} ]; then echo -n " ${server}" ${NET}/${server} fi done if [ -f ${NET}/portmap ]; then # Start the NFS server daemons. if [ -f ${NET}/rpc.mountd ]; then echo -n " mountd" ${NET}/rpc.mountd fi if [ -f ${NET}/rpc.nfsd ]; then echo -n " nfsd" ${NET}/rpc.nfsd fi fi # Done starting various SUN RPC servers. echo # Done!