I could not find any non-commercial IP Address overtaking solution for
FreeBSD so I wrote this simple shell script. If you find it useful you can
use it.
-----------
#!/usr/local/bin/ksh
#
# Node v0.01
#
# purpose:
# - very simple ip address overtaking for FreeBSD systems
# - can be used as simple apache clustering solution if used
# with mod_backhand
#
# tested to work on:
# - FreeBSD v4.1.1
# - pdksh v5.2.14
# - fping v2.2b1
#
# command line arguments:
# - node_name: resolvable name of the virtual node
#
# instructions:
# - configure config section in the script
# - run the same scipt on two or more cluster nodes using nohup
# - for more virtual nodes run same script many times
#
# signals:
# - send INT or TERM signal to stop the virtual node
# - send HUP signal to switch virtual node to another node,
# if another node don't take over the virtual node in 5 seconds
# virtual node is switched back
#
# versions:
#
# v0.01 - 01.19.2001 - Dejvid Zaninovic ([EMAIL PROTECTED])
# - initial version
#
# config section
NETWORK_INTERFACE=xl0
TMPDIR=/tmp
# command line arguments
SCRIPT_NAME=$0
NODE_ADDRESS=$1
# global vars init
NODE_ETHER=$(ifconfig $NETWORK_INTERFACE | grep ether | cut -d" " -f2)
LOCKFILE=$TMPDIR/$SCRIPT_NAME.$NODE_ADDRESS.lock
MASTER=false
# functions
usage()
{
print -u2 "usage: $SCRIPT_NAME node_name"
exit 1
}
node_up()
{
print $SCRIPT_NAME: $NODE_ADDRESS: up
ifconfig $NETWORK_INTERFACE alias $NODE_ADDRESS netmask 0xffffffff
arp -S $NODE_ADDRESS $NODE_ETHER pub > /dev/null 2>&1
}
node_down()
{
if $MASTER
then
print $SCRIPT_NAME: $NODE_ADDRESS: down
ifconfig $NETWORK_INTERFACE -alias $NODE_ADDRESS netmask 0xffffffff
arp -d $NODE_ADDRESS > /dev/null 2>&1
route delete $NODE_ADDRESS > /dev/null 2>&1
fi
}
node_check()
{
fping -q $NODE_ADDRESS
}
node_kill()
{
node_down
rm $LOCKFILE
print $SCRIPT_NAME: $NODE_ADDRESS: exit
exit 0
}
node_switch()
{
print $SCRIPT_NAME: $NODE_ADDRESS: switch
node_down
sleep 5
}
# main
trap node_kill INT TERM
trap node_switch HUP
if [[ $# -ne 1 ]]
then
usage
fi
if [[ -f $LOCKFILE ]]
then
print -u2 "$SCRIPT_NAME: $NODE_ADDRESS node is already running"
exit 1
fi
touch $LOCKFILE
print $SCRIPT_NAME: $NODE_ADDRESS: started
while true
do
node_check
if [[ $? -ne 0 ]]
then
MASTER=true
node_up
fi
sleep 1
done
To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-hackers" in the body of the message