#!/bin/sh
# setup basic parameters
JBOSS_VER=5.1.0.GA
JBOSS_NAME=jboss
JBOSS_USER=jboss
JBOSS_SERVER=nvt
JAVA_OPTS="-server -XX:MaxPermSize=256m -Xmx512m -Xms128m"
# setup variables
JBOSS_ARC=/usr/src/$JBOSS_NAME-$JBOSS_VER.zip
JBOSS_DIR=$JBOSS_NAME-$JBOSS_VER
JBOSS_HOME=/usr/share/$JBOSS_NAME
JBOSS_VAR=/var/lib/$JBOSS_NAME
JBOSS_LOG=/var/log/$JBOSS_NAME
JBOSS_DOC=/usr/share/doc/$JBOSS_NAME-$JBOSS_VER
JBOSS_PID=/var/run/$JBOSS_NAME.pid
JBOSS_RC=/etc/init.d/$JBOSS_NAME
JBOSS_CONF=/etc/default/$JBOSS_NAME
JBOSS_INST=/var/tmp/$JBOSS_NAME-$JBOSS_VER

# prepare installation environment
rm -rf $JBOSS_HOME > /dev/null
rm -rf $JBOSS_DOC > /dev/null
mkdir -p $JBOSS_VAR > /dev/null
mkdir -p $JBOSS_LOG > /dev/nul

# prepare installation source
unzip $JBOSS_ARC -d /usr/src
mv /usr/src/$JBOSS_NAME-$JBOSS_VER $JBOSS_HOME

# install files
mv -f $JBOSS_HOME/docs $JBOSS_DOC > /dev/null
ln -s $JBOSS_DOC $JBOSS_HOME/docs > /dev/null
mv -f $JBOSS_HOME/server $JBOSS_VAR > /dev/null
ln -s $JBOSS_VAR/server $JBOSS_HOME/server > /dev/null

# create default server
if [ "${JBOSS_SERVER}" != "default" ]; then
    [ -d $JBOSS_VAR/server/$JBOSS_SERVER ] || cp -fR $JBOSS_VAR/server/all $JBOSS_VAR/server/$JBOSS_SERVER > /dev/null
rm -rf $JBOSS_VAR/server/$JBOSS_SERVER/deploy/ROOT.war
fi

# add jboss user
useradd $JBOSS_USER > /dev/null

# setup owner & rights
chown -R $JBOSS_USER:$JBOSS_USER $JBOSS_VAR > /dev/null
chown -R $JBOSS_USER:$JBOSS_USER $JBOSS_LOG > /dev/null
chmod -R o-w $JBOSS_HOME > /dev/null
chmod -R ug+rwX $JBOSS_HOME > /dev/null
chmod -R o+rX $JBOSS_HOME > /dev/null
chmod -R o-rwx $JBOSS_VAR > /dev/null
chmod -R ug+rwX $JBOSS_VAR > /dev/null
chmod -R o-rwx $JBOSS_LOG > /dev/null
chmod -R ug+rwX $JBOSS_LOG > /dev/null
chmod ugo+rx $JBOSS_HOME/bin/*.sh > /dev/null

# setup jboss command-line config
if [ ! -f $JBOSS_CONF ]; then
    echo "JBOSS_HOME="$JBOSS_HOME >> $JBOSS_CONF
    echo "JBOSS_LOG="$JBOSS_LOG >> $JBOSS_CONF
    echo "JBOSS_PID="$JBOSS_PID >> $JBOSS_CONF
    echo "JAVA_OPTS=\""$JAVA_OPTS"\"" >> $JBOSS_CONF
    echo "JBOSS_USER="$JBOSS_USER >> $JBOSS_CONF
    echo "JBOSS_SERVER="$JBOSS_SERVER >> $JBOSS_CONF
    echo "LAUNCH_JBOSS_IN_BACKGROUND=yes" >> $JBOSS_CONF
    echo "JBOSS_BIND_ADDRESS=0.0.0.0" >> $JBOSS_CONF
fi

# setup init script
cat > $JBOSS_RC << "EOF"
#!/bin/sh

DEFAULT_CONFIG=/etc/default/jboss
LAUNCH_JBOSS_IN_BACKGROUND=yes
JBOSS_PID=/var/run/jboss.pid
[ -f $DEFAULT_CONFIG ] && . $DEFAULT_CONFIG
[ -z "$JBOSS_HOME" ] || export JBOSS_HOME
[ -z "$JAVA_OPTS" ] || export JAVA_OPTS
[ -z "$JBOSS_SERVER" ] || export JBOSS_SERVER
[ -z "$JBOSS_LOG" ] || export JBOSS_LOG 
[ -z "$JBOSS_BIND_ADDRESS" ] || export JBOSS_BIND_ADDRESS
[ -z "$JBOSS_IN_BACKGROUND" ] || export JBOSS_IN_BACKGROUND
[ -z "$JBOSS_USER" ] || export JBOSS_USER

#make sure java is in your path
JAVAPTH=${JAVAPTH:-"/usr/bin"}

#define what will be done with the console log
JBOSS_CONSOLE=${JBOSS_CONSOLE:-"/dev/null"}

if [ -z "`echo $PATH | grep $JAVAPTH`" ]; then
  export PATH=$PATH:$JAVAPTH
fi

if [ ! -d "$JBOSS_HOME" ]; then
  echo JBOSS_HOME does not exist as a valid directory : $JBOSS_HOME
  exit 1
fi

mklogsymlinks() {
    [ -d $JBOSS_HOME/server/$JBOSS_SERVER/log ] && mv -f $JBOSS_HOME/server/$JBOSS_SERVER/log $JBOSS_HOME/server/$JBOSS_SERVER/log.invalid
    [ -h $JBOSS_HOME/server/$JBOSS_SERVER/log ] || ln -s /var/log/jboss $JBOSS_HOME/server/$JBOSS_SERVER/log
}

case "$1" in
start)
    mklogsymlinks
    chown -R jboss:jboss /var/lib/jboss/server/nvt/deploy/webapps*
    chmod g+rwX -R /var/lib/jboss/server/nvt/deploy/webapps*
    cd $JBOSS_HOME/bin
    su -p -l $JBOSS_USER -c "$JBOSS_HOME/bin/run.sh -c $JBOSS_SERVER -u 239.255.100.100 -Djboss.messaging.ServerPeerID=1 -b $JBOSS_BIND_ADDRESS" &
    PID=$!
    echo "Jboss PID: $PID"
    echo $PID > $JBOSS_PID
    rm -rf /var/log/jboss/log
    ;;
stop)
    su -p -l $JBOSS_USER -c "$JBOSS_HOME/bin/shutdown.sh -S -s jnp://$JBOSS_BIND_ADDRESS:1099" &
    PID=`cat $JBOSS_PID`
    echo "Jboss PID: $PID"
    rm -f $JBOSS_PID > /dev/null
    rm -rf /var/lib/jboss/server/nvt/work/jboss.web/* > /dev/null
    ;;
*)
    echo "usage: $0 (start|stop)"
esac
EOF

chmod ug+x $JBOSS_RC > /dev/null
update-rc.d $JBOSS_NAME defaults