#!/bin/sh
# 
# -------------------------------------------------------------------
#                                   X-BONE
#
#                          http://www.isi.edu/xbone
#                USC Information Sciences Institute (USC/ISI)
#                   Marina del Rey, California 90292, USA
#                          Copyright (c) 1998-2005
# 
# -------------------------------------------------------------------
#
# Copyright (c) 1998-2005 by the University of Southern California.
# All rights reserved.
#
# Permission to use, copy, modify, and distribute this software and
# its documentation in source and binary forms for non-commercial
# purposes and without fee is hereby granted, provided that the above
# copyright notice appear in all copies and that both the copyright
# notice and this permission notice appear in supporting
# documentation, and that any documentation, advertising materials,
# and other materials related to such distribution and use acknowledge
# that the software was developed by the University of Southern
# California, Information Sciences Institute.  The name of the
# University may not be used to endorse or promote products derived
# from this software without specific prior written permission.
# 
# THE UNIVERSITY OF SOUTHERN CALIFORNIA MAKES NO REPRESENTATIONS ABOUT
# THE SUITABILITY OF THIS SOFTWARE FOR ANY PURPOSE.  THIS SOFTWARE IS
# PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES,
# INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
#
# Other copyrights might apply to parts of this software and are so
# noted when applicable.
#
# -------------------------------------------------------------------
#
# Effort partly sponsored by the Defense Advanced Research Projects
# Agency (DARPA) and Air Force Research Laboratory, Air Force Materiel
# Command, USAF, under agreement numbers F30602-98-1-0200 (X-Bone) and
# F30602-01-2-0529 (DynaBone). The views and conclusions contained
# herein are those of the authors and should not be interpreted as
# necessarily representing the official policies or endorsements,
# either expressed or implied, of the Defense Advanced Research
# Projects Agency (DARPA), the Air Force Research Laboratory, or the
# U.S. Government.
#
# This work was partly supported by the NSF STI-XTEND (ANI-0230789)
# and NETFS (ANI-0129689) projects. Any opinions, findings, and
# conclusions or recommendations expressed in this material are those
# of the authors and do not necessarily reflect the views of the
# National Science Foundation.
#
# -------------------------------------------------------------------
#  $RCSfile: abone-script,v $
#
# $Revision: 1.9 $
#   $Author: pingali $
#     $Date: 2005/03/31 07:03:42 $
#    $State: Exp $
# ----------------------------------------------------------------------------
#
# Primary Author: Yu-Shun Wang

# Script for deploying ABone (anetd) using XBone Application Deployment
# mechanism

#- Parameters: XBone Application Deployment processing [OM & RD] -------------

# Parameters to determine the availability of the application:
# APP_NAME= ABone
# APP_FILE= /usr/local/anetd/bin/ad.bsd44
# APP_VCMD=

VNAMES="ALL_NAMES"

# Parameters to be replaced by XBone OM & RD:
OVL_NAME="OVLNAME"
IP_ALL="IPLIST"
IP="IP1"
OVL="-$OVL_NAME"

#- Parameters for Deploying Anetd --------------------------------------------

# Parameters for add/delete users. See pw(8).
  HOME=/usr/testhome
  ADD=useradd
  AARG="-b $HOME -m"
  DEL=userdel
  DARG="-r"
  SHOW=usershow
# Signal used to kill anetd
  KILL="-INT"
# Anetd installation path
  INSTALL=/usr/local 
# Path & filename of the source tarball
  ANETDSRC=~yushunwa/projects/anetd/anetd-RELEASE_1_6_9-bsd44.tar.gz
  ASPEESRC=~yushunwa/projects/anetd/asp-1.5.tar.gz
# Anetd Directory
  ADDIR=$HOME/abocc$OVL/anetd
# Anetd Daemon Binary
  ANETD=$ADDIR/bin/ad.bsd44
# Anetd Client Binary
  SC=$ADDIR/bin/sc.bsd44
# Master Conf File
  MCONF=$ADDIR/etc/anetd.conf
# Local ACL File
  LACL=$ADDIR/etc/hosts.allow.local
# Local TCL File
  TCL=$ADDIR/etc/web.allow.local
# Anetd command-line arguments
  ANETD_ARG="-c $MCONF -m abocc$OVL"
# Anetd Client (sc) command-line arguements
  SCARGS="-t 5"
# JDK-1.2.2 location
  JDK122=/usr/local/jdk1.2.2
# JDK-1.1.8 location
  JDK118=/usr/local/jdk1.1.8

# ABone monitoring 
  STATUS_PATH=/usr/local/www/data/abone/results
  SCRIPT=query.pl

#- Script starts -------------------------------------------------------------

case "$1" in

  test)
     $SC $IP QUERY > /dev/null 2>&1 && echo "anetd running" || echo "no anetd"
#    pw $SHOW anee7$OVL > /dev/null 2>&1 \
#    && echo "        - anee7$OVL exists" \
#    || (pw $ADD anee7$OVL -c "Testing" $AARG && echo "        > anee7$OVL")
#    pw $SHOW anee7$OVL > /dev/null 2>&1 \
#    && (pw $DEL anee7$OVL $DARG && echo "        > delete anee7$OVL") \
#    || echo "        - anee6$OVL not exists"
#    pw usershow anee5$OVL > /dev/null && echo "anee5$OVL exists" \
#      || echo "anee5$OVL not exists" 
#    pw usershow anee6$OVL > /dev/null 2>&1 && echo "anee6$OVL exists" \
#      || echo "anee6$OVL not exists"
#    echo "HOME = $HOME"
    echo "End test"
    ;;

  conf)
    echo ">>> ABone Configuration"
    if [ ! -d $HOME ]; then
      mkdir -p $HOME
    fi
    chmod 0755 $HOME
    echo "    (1) Create ABone Account for Overlay $OVL_NAME"
    pw $SHOW abocc$OVL > /dev/null 2>&1 && echo "        - abocc$OVL exists" \
    || (pw $ADD abocc$OVL -c "Abone administrator" $AARG && \
	echo "        + abocc$OVL")
    pw $SHOW anee1$OVL > /dev/null 2>&1 && echo "        - anee1$OVL exists" \
    || (pw $ADD anee1$OVL -c "Abone EE account #1" $AARG && \
	echo "        + anee1$OVL")
    pw $SHOW anee2$OVL > /dev/null 2>&1 && echo "        - anee2$OVL exists" \
    || (pw $ADD anee2$OVL -c "Abone EE account #2" $AARG && \
	echo "        + anee2$OVL")
    pw $SHOW anee3$OVL > /dev/null 2>&1 && echo "        - anee3$OVL exists" \
    || (pw $ADD anee3$OVL -c "Abone EE account #3" $AARG && \
	echo "        + anee3$OVL")
    pw $SHOW anee4$OVL > /dev/null 2>&1 && echo "        - anee4$OVL exists" \
    || (pw $ADD anee4$OVL -c "Abone EE account #4" $AARG && \
	echo "        + anee4$OVL")
    pw $SHOW anee5$OVL > /dev/null 2>&1 && echo "        - anee5$OVL exists" \
    || (pw $ADD anee5$OVL -c "Abone EE account #5" $AARG && \
	echo "        + anee5$OVL")
    pw $SHOW anpub$OVL > /dev/null 2>&1 && echo "        - anpub$OVL exists" \
    || (pw $ADD anpub$OVL -c "Abone public account" $AARG && \
	echo "        + anpub$OVL")
    echo "    (2) Fix directory ACLs"
    chmod og+rx $HOME/abocc$OVL $HOME/anee1$OVL $HOME/anee2$OVL $HOME/anee3$OVL
    chmod og+rx $HOME/anee4$OVL $HOME/anee5$OVL $HOME/anpub$OVL
    echo -n "    (3) Copy anetd files to ~abocc$OVL: "
    su abocc$OVL -c 'cp -Rfp /usr/local/anetd ~' && echo "done"
    echo "    (3) Check/Generate keys for root"
    if [ -f ~root/.anetd/id_publickey ]; then
      echo "        Keys for root available"
    else
      echo "        Generating keys for root"
      date -u | /usr/local/anetd/bin/makekey.bsd44 -i root
    fi
    echo "    (4) Local ACL File: $LACL"
    if [ -f $LACL ]; then
      rm -f $LACL
    fi
    echo "`more ~root/.anetd/id_publickey` P"  > $LACL
    chmod 644 $LACL
    chown abocc$OVL $LACL
    echo "    (5) Master Configuration File:"
    echo "        $MCONF"
    rm -f $MCONF
    echo "# ABone Master Configuration File for Overlay $OVERLAY" > $MCONF
    echo "ip_addr $IP_ALL" >> $MCONF
    if [ -d $JDK122 ]; then
      echo "jdk1.2.2 $JDK122" >> $MCONF
      echo "java1.2.2 $JDK122/bin/java" >> $MCONF
    fi
    if [ -d $JDK118 ]; then
      echo "jdk1.1.8 $JDK118" >> $MCONF
      echo "java1.1.8 $JDK118/bin/java" >> $MCONF
    fi
    if [ -f $LACL ]; then
      echo "local_acl_file $LACL" >> $MCONF
    fi
    chmod 644 $MCONF
    chown abocc$OVL $MCONF
    echo "    (6) TCL File"
    if [ -d $STATUS_PATH ]; then
      echo "    (7) Status Files"
      rm -f $STATUS_PATH/$OVL_NAME.nodes
      touch $STATUS_PATH/$OVL_NAME.nodes
      for v in $VNAMES; do
        echo "$v.$OVL_NAME.xbone.net" >> $STATUS_PATH/$OVL_NAME.nodes
      done
      chmod 644 $STATUS_PATH/$OVL_NAME.nodes
    fi
    echo "<<< conf done"
    ;;

  run)
    echo ">>> Start anetd for $OVL_NAME"
    if [ -x $ANETD ]; then
      $SC $IP:3322 QUERY > /dev/null 2>&1 \
      && echo "    - anetd already running on anpub" \
      || (su - anpub$OVL -c "$ANETD $ANETD_ARG -a anpub" && \
	  echo "    + anpub" && sleep 2)
      $SC -f abocc $IP QUERY > /dev/null 2>&1 \
      && echo "    - anetd already running on abocc" \
      || (su - abocc$OVL -c "$ANETD $ANETD_ARG -a abocc" && \
	  echo "    + abocc" && sleep 2)
      $SC -f anee1 $IP QUERY > /dev/null 2>&1 \
      && echo "    - anetd already running on anee1" \
      || (su - anee1$OVL -c "$ANETD $ANETD_ARG -a anee1" && \
	  echo "    + anee1" && sleep 2)
      $SC -f anee2 $IP QUERY > /dev/null 2>&1 \
      && echo "    - anetd already running on anee2" \
      || (su - anee2$OVL -c "$ANETD $ANETD_ARG -a anee2" && \
	  echo "    + anee2" && sleep 2)
      $SC -f anee3 $IP QUERY > /dev/null 2>&1 \
      && echo "    - anetd already running on anee3" \
      || (su - anee3$OVL -c "$ANETD $ANETD_ARG -a anee3" && \
	  echo "    + anee3" && sleep 2)
      $SC -f anee4 $IP QUERY > /dev/null 2>&1 \
      && echo "    - anetd already running on anee4" \
      || (su - anee4$OVL -c "$ANETD $ANETD_ARG -a anee4" && \
	  echo "    + anee4" && sleep 2)
      $SC -f anee5 $IP QUERY > /dev/null 2>&1 \
      && echo "    - anetd already running on anee5" \
      || (su - anee5$OVL -c "$ANETD $ANETD_ARG -a anee5" && \
	  echo "    + anee5" && sleep 2)
      echo "<<< Anetd started"
      echo -n "PID "
      for ACC in anpub abocc anee1 anee2 anee3 anee4 anee5; do
	echo -n `$SC $SCARGS -f $ACC $IP QUERY pid | grep '^[0123456789]\+$'`
	echo -n " "
      done
      echo ""
      if [ -d $STATUS_PATH ]; then
	cd $STATUS_PATH && \
	$STATUS_PATH/$SCRIPT -f $OVL_NAME.nodes -o $OVL_NAME.data
	chmod 666 $STATUS_PATH/$OVL_NAME.data
      fi
    else
      echo "    ! Binary $ANETD not accessable."
    fi
    ;;

  pid)
    if [ -x $ANETD ]; then
      for ACC in anpub abocc anee1 anee2 anee3 anee4 anee5; do
	echo -n `$SC $SCARGS -f $ACC $IP QUERY pid | grep '^[0123456789]\+$'`
        echo -n " "
      done
      echo ""
    else
      echo "    ! Binary $ANETD not executable."
    fi
    ;;

  kill)
    echo ">>> Kill Anetd Processes"
    for ACCT in anee5 anee4 anee3 anee2 anee1 abocc anpub; do
      echo -n "    - $ACCT"
      RES=`ps -o pid -U $ACCT$OVL | grep '[0123456789]\+'`
      if [ ! -z $RES ]; then
	kill $KILL $RES && echo " [killed]" || echo " [failed]"
      else
        echo " [not found]"
      fi
    done
    echo "<<< Anetd stopped"
    ;;

  old_kill)
    echo ">>> Stop Anetd Processes"
    if [ -x $SC ]; then
      echo -n "    Stop Anetd:"
      for ACCT in anee5 anee4 anee3 anee2 anee1 abocc anpub; do
	$SC -q -f $ACCT $IP RAISE -SIGKILL force > /dev/null 2>&1 \
	&& ( echo -n " $ACCT" && sleep 2 ) \
	|| echo -n " $ACCT-x"
       done
       echo "."
       echo "<<< Anetd Stopped"
    else
      echo "    ! $SC not executable"
    fi
    ;;

  cleanup)
    echo ">>> Cleanup ABone Accounts & Directories for Overlay $OVL_NAME"
    pw $SHOW abocc$OVL > /dev/null 2>&1 \
    && (pw $DEL abocc$OVL $DARG && echo "    > abocc$OVL deleted") \
    || echo "    - abocc$OVL not exists"
    pw $SHOW anee1$OVL > /dev/null 2>&1 \
    && (pw $DEL anee1$OVL $DARG && echo "    > anee1$OVL deleted") \
    || echo "    - anee1$OVL not exists"
    pw $SHOW anee2$OVL > /dev/null 2>&1 \
    && (pw $DEL anee2$OVL $DARG && echo "    > anee2$OVL deleted") \
    || echo "    - anee2$OVL not exists"
    pw $SHOW anee3$OVL > /dev/null 2>&1 \
    && (pw $DEL anee3$OVL $DARG && echo "    > anee3$OVL deleted") \
    || echo "    - anee3$OVL not exists"
    pw $SHOW anee4$OVL > /dev/null 2>&1 \
    && (pw $DEL anee4$OVL $DARG && echo "    > anee4$OVL deleted") \
    || echo "    - anee4$OVL not exists"
    pw $SHOW anee5$OVL > /dev/null 2>&1 \
    && (pw $DEL anee5$OVL $DARG && echo "    > anee5$OVL deleted") \
    || echo "    - anee5$OVL not exists"
    pw $SHOW anpub$OVL > /dev/null 2>&1 \
    && (pw $DEL anpub$OVL $DARG && echo "    > anpub$OVL deleted") \
    || echo "    - anpub$OVL not exists"
    if [ -d $STATUS_PATH ]; then
      rm -f $STATUS_PATH/$OVL_NAME.nodes
      rm -f $STATUS_PATH/$OVL_NAME.data
    fi
    echo "<<< cleanup done"
    ;;

# Target "install" is not part of the official XBone application deployment
# mechanism. This is just an example and for our own convenience.

  install)
    echo ">>> Install anetd"
    cd $INSTALL && \
      tar xfz $ANETDSRC && tar xvfz $ASPEESRC
    echo "    - anetd installed under $INSTALL."
    ;;

esac

exit 0


syntax highlighted by Code2HTML, v. 0.9.1