#!/bin/sh # (c) Copyright 2002, 2003, 2005 Stichting Wireless Leiden, all # rights reserved. More information can be found on # http://wwww.wirelessleiden.nl and the license is at: # http://wleiden.webweaving.org:8080/svn/node-config/LICENSE # # Marten Vijn 24-03-03 # new version 14-11-2003 # If there is a global system configuration file, suck it in. # PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin TMPDIR=${TMPDIR:-/tmp} TMPPREFIX=${TMPDIR}/wl-tmp-$$ WHOST=${WHOST:-rambo.wleiden.net} HTTP_PROXY=${HTTP_PROXY:-http://proxy.wleiden.net:3128} HTTP_USER_AGENT=${HTTP_USER_AGENT:-curl.faked.fetch/0.0} VERSION=1.00 QUIET=${QUIET:-} if [ ${QUIET} ]; then echo "Using..." echo "no proxy" echo "no dhclient" echo "config `hostname -s`" sleep 1 fi echo "do we need a proxy ?" echo echo "just hit enter to go on without proxy settings" echo "otherwise type y for this proxy ${HTTP_PROXY} or enter your own proxy" echo "if don't want a proxy enter n " if [ -z ${QUIET} ]; then read proxyset else proxyset="n" fi case $proxyset in n) echo no proxy is set ;; y) echo this the proxy ${HTTP_PROXY} export HTTP_PROXY ;; *) ${HTTP_PROXY}=${proxyset} echo this the proxy $HTTP_PROXY export HTTP_PROXY ;; esac export HTTP_USER_AGENT export TMPDIR # Genesis master location. link=${GENESIS:-http://${WHOST}/cgi-bin/g_list.pl/} list=filelist # Location for private config lcd=${LCDIR:-/lcd} # Make sure we clean up our mess when needed. trap "rm -f ${TMPPREFIX}.?; echo Failed; exit 1;" 2 3 # connection test function connset() { if [ `ps ax | grep -c dhclient` != "1" ] ; then killall dhclient fi echo "enter the ipadress to resolv dns" echo 1 for cope as dns on wirelessleiden echo 2 for xs4all dns server echo 3 if you are at LCPL echo or type your on dns read dns_list case $dns_list in 1) resolver="172.17.8.1" ;; 2) resolver="194.109.9.99" ;; 3) resolver="10.0.0.1" ;; *) resolver=$dns_list ;; esac echo "/etc/resolv.conf has been changed from:" echo `cat /etc/resolv.conf` echo to echo $resolver echo "nameserver ${resolver}" > /etc/resolv.conf for nic in `ifconfig -l` do case ${nic} in lo0) echo ;; wi*) echo ;; *) if ping -qnoc ${WHOST}; then echo Connection on interface ${nic} ok else killall dhclient echo Trying to get a DHCP lease on ${nic} dhclient -1 ${nic} fi ;; esac done } echo "do we need network on a nic by dhcp ?" echo "enter n to not use dhclient for configuration ! " if [ -z ${QUIET} ]; then read nic_dhcp else nic_dhcp="n" fi if [ "x${nic_dhcp}" = "xn" ] ; then echo proceding... else echo running dhclient connset fi # Logging function # log() { echo $* } cleanse() { rm -f ${TMPPREFIX}.? } # Normal exit; but make sure # we also clean up any tmp files # cleanexit() { E=1 if [ $# -gt 0 ]; then E=$1 fi cleanse log Exit exit $E # Trap any weird exit codes. exit 1 } safefetch() { url=$1 file=$2 fetch -q -o - ${link}${nodename} > ${TMPPREFIX}.x \ || cleanexit 1 cp ${TMPPREFIX}.x ${dir}/${list} \ || cleanexit 1 rm -f ${TMPPREFIX}.x return 0 } getvalidnodename() { log " " log " " log " " log Fetching list of nodes from ${link} fetch -q -o - ${link} > ${nlist} || cleanexit 1 while ! grep -q "^${nodename}\$" ${nlist} do echo Nodes: cat ${nlist} echo echo -n enter nodename \[default: ${default}\]: if [ -z ${QUIET} ]; then read nodename else nodename=${default} fi if [ "x${nodename}" = "x" ]; then nodename=${default} fi done echo Node Selected: ${nodename} } do_diff() { diff -uwbB ${symdir}/${i} ${dir}/${i}.new } do_move() { if [ -e ${dir}/${i}.bak ]; then rm ${dir}/${i}.bak fi if [ -e ${dir}/${i} ]; then mv ${dir}/${i} ${dir}/${i}.bak || cleanexit 1 log backup ${dir}/${i} to ${dir}/${i}.bak fi mv ${dir}/${i}.new ${dir}/${i} || cleanexit 1 log updated ${dir}/${i} } bink() { $CMD } dir=${lcd} echo Config Node -- Version: $VERSION #check config dir # if [ ! -d ${dir} ]; then mkdir -p ${dir} || cleanexit 1 fi if [ -z ${HTTP_PROXY} ]; then # checking connection - and only fiddle # with interfaces if we need to. # ( echo no proxy defined - checking connection. host ${WHOST} > /dev/null || exit 1 ping -qnoc 1 ${WHOST} > /dev/null || exit 1 exit 0 ) || connset fi CMD=do_move if [ "x$1" = "x-d" ]; then CMD=do_diff dir=${TMPDIR} shift fi # Use the cmd line argument, of any # if [ $# = 1 ]; then nodename=$1 else if [ -r ${lcd}/myname ]; then default=`cat ${lcd}/myname` else default=`hostname -s` test -z $default && default=none fi fi nlist=${TMPPREFIX}.l test -z $default && default=$nodename test -z $nodename && getvalidnodename log Fetching file list from $link for $nodename safefetch ${link}${nodename} ${dir}/${list} for i in `cat ${dir}/${list}` do log getting ${i} for ${nodename} from ${link} fetch -q -o - ${link}${nodename}/${i} > ${dir}/${i}.new \ || cleanexit 1 done for i in `cat ${dir}/${list}` do case $i in txtconfig|rc.local|rc.node.local|snmpd.local.conf|resolv.conf|dhcpd.conf|named.conf) bink ;; *) echo Script cannot cope with ${i} - ignoring.. ;; esac done if [ -e /etc/rc.local ]; then # See if we are in rc.local if grep -q /config-node.sh /etc/rc.local; then echo As this node now has real configs - do enter a root password echo passwd \ || cleanexit 1 echo Removing /etc/rc.local rm -f /etc/rc.local echo Will drop write perms on the next reboot. fi fi # Record our name. echo ${nodename} > ${dir}/myname # Rebuild reverse lookups H=`cat /etc/rc.node.local | grep hostname | sed -e s/hostname=// | sed -e s/[\"\']//g` hostname $H if [ -r /etc/namedb/make-localhost ]; then ( cd /etc/namedb || exit 1 sh /etc/namedb/make-localhost || exit 1 ) || exit 1 fi cleanse if [ -e /etc/rc.empty.conf ] ; then rm /etc/rc.empty.conf || exit echo removed /etc/rc.empty.conf - and rebooting in 30 seconds \(or press ctrl-C to abort\) read -t 30 DUMMY reboot fi exit 0