OpenGrok/script

From CDOT Wiki
Revision as of 21:42, 12 November 2008 by John64 (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Here is the script to set up OpenGrok:


#!/bin/bash
#This script written by John Ford.
#I hope it is useful to you but I take no responsibility
#for any ensuing calamity. johnhford.gmail@com

#NOTE:
# There are logs in your BASEDIR

#Mercurial Repository to use
REPO=http://hg.mozilla.org/mozilla-central

#Base directory for contents
BASEDIR=/home/jhford/mozilla

#This is the name of the data directory for OpenGrok
DATADIR=data-dir

#This is the name of the source directory for OpenGrok
SRCDIR=src-dir

#OpenGrok install path - Where is opengrok.jar?
OGDIR="/home/jhford/opengrok/opengrok-0.7"

#OpenGrok source.war from opengrok tarball
OGCONTEXT="grokzilla"
OGWAR="${OGCONTEXT}.war"

#Your application server's .war deployment directory
WEBAPPDIR="/home/jhford/tomcat/apache-tomcat-6.0.18/webapps"

#TODO:
#  -Capture return values
#  -Log all output of opengrok.jar
#  -Test mercurial repo updates
#  -Test what happens if OGDIR is not writable
#  -Add option to download tomcat, opengrok to make it
#   easy for a developer to isntall on their machine
#  -Write gurus for each type of mozilla specific file

#This function prints some useful information
function printinfo {
  echo "Grokzilla Setup"
  echo "  Base Directory:       $BASEDIR"
  echo "  Data Directory:       $BASEDIR/$DATADIR"
  echo "  Source Directory:     $BASEDIR/$SRCDIR"
  echo "  Repository:           $REPO"
  echo "  OpenGrok Directory:   $OGDIR"
  echo "  OpenGrok Web Archive: `pwd`/${OGWAR}"
  echo "  Web App Directory:    $WEBAPPDIR"
}

#This function either checks out a new copy or
#updates an existing one
function checkout {
  echo "Now checking out source"
  mkdir -p $BASEDIR
  if [ ! -e $BASEDIR/$DATADIR/.repo-created ]; then
    echo "  New checkout"
    cd $BASEDIR
    echo "## CHECKOUT AT `date --rfc-3339=seconds`" > $BASEDIR/checkout.log
    rm -rf $BASEDIR/$DATADIR $BASEDIR/$SRCDIR
    mkdir -p $BASEDIR/$DATADIR
    hg clone $REPO $SRCDIR >> $BASEDIR/checkout.log
    touch $BASEDIR/$DATADIR/.repo-created
  else
    echo "  Updating hg repository"
    cd $BASEDIR/$SRCDIR
    echo "## UPDATE AT `date --rfc-3339=seconds`" >> $BASEDIR/checkout.log
    hg up >> $BASEDIR/checkout.log
  fi
}

#This function uses opengrok.jar to generate the data index
function generateOGData {
  echo "The gurus are groking"
  touch $BASEDIR/opengrok.jar.log
  nice java -Xmx1524m -jar $OGDIR/opengrok.jar -W $BASEDIR/$DATADIR/configuration.xml \
       -P -S -v -s $BASEDIR/$SRCDIR -d $BASEDIR/$DATADIR -w $OGCONTEXT   \
       >> $BASEDIR/opengrok.jar.log 2>>$BASEDIR/opengrok.jar.stderr.log
}

#Configure the WebApp to work with our src-dir and data-dir
function configureOGWar {
  echo "Copying in $OGDIR/source.war and saving as $OGWAR"
  #TODO: Maybe rename source.war to something if it is customized for mozilla
  cp $OGDIR/source.war ./$OGWAR
  unzip $OGWAR WEB-INF/web.xml > /dev/null
  echo "Modifying source.war configuration"
  echo "!! Warning !! This script uses sed to modify XML which is very hacky."
  echo "              if your deployed website isn't working it is likely the"
  echo "              'configureOGWar' function in this script"
  #echo "   SED SCRIPT:  s|/etc/opengrok|${BASEDIR}/${DATADIR}|"
  sed -i -e "s|/etc/opengrok|${BASEDIR}/${DATADIR}|" WEB-INF/web.xml
  sed -i -e "s|<!-- context-param>|<context-param>|" WEB-INF/web.xml
  sed -i -e "s|</context-param-->|</context-param>|" WEB-INF/web.xml
  sed -i -e "s|/directory/containing/data|$BASEDIR/$DATADIR|" WEB-INF/web.xml
  sed -i -e "s|/directory/containing/src|$BASEDIR/$SRCDIR|" WEB-INF/web.xml
  zip -u $OGWAR WEB-INF/web.xml > /dev/null
  rm -rf WEB-INF
  echo "Your WAR has been faught: `pwd`/$OGWAR"
}

#Deploy your war file to wherever you want it
function deployWar {
  echo "Deploying $OGCONTEXT to $WEBAPPDIR"
  cp $OGWAR $WEBAPPDIR
  echo "All Done!"
}

printinfo
checkout
generateOGData
configureOGWar
deployWar