#!/bin/sh # ianb@erislabs.net 20081202 # configure a mir system for sun or gcj java # checkpoint code taken from zak's mir-setup set -e # NAME is used when called from mir-prepare NAME="" CUR_CHECKPOINT=0 checkpoint() { CUR_CHECKPOINT=$(($CUR_CHECKPOINT + 1)) if [ -n "$START_CHECKPOINT" ]; then if [ "$CUR_CHECKPOINT" -lt "$START_CHECKPOINT" ]; then echo "${NAME}Skipping checkpoint $CUR_CHECKPOINT: $@" unset RUNNING else echo "${NAME}Running from checkpoint $CUR_CHECKPOINT: $@" RUNNING=1 fi else echo "${NAME}Checkpoint $CUR_CHECKPOINT: $@" RUNNING=1 fi } optdie() { echo >&2 "$@"; echo >&2 "Try $PROG --help"; exit 1; } usage() { echo >&2 "Usage: $PROG [options] sun|gcj" echo >&2 " Configures java implementation to use with mir" echo >&2 " -d|--debug Debugging output, including 'set -x' shell trace" echo >&2 " -p|--checkpoint Run from specified checkpoint after failed run" echo >&2 " sun Use Sun Java (non-free)" echo >&2 " gcj Use the GNU Java Compiler" } if [ $# -lt 1 ] then usage exit 1 fi while [ $# != 0 ]; do case "$1" in -d|--debug) set -x; DEBUG=1 ;; -p|--checkpoint) shift; START_CHECKPOINT="$1" ;; --subprocess) NAME="[mir-choose-java] " ;; -h|-?|--help) usage; exit 0 ;; -*) optdie "$PROG: unknown option $1" ;; sun) JAVA=sun ; break;; gcj) JAVA=gcj ; break;; *) optdie "$PROG: unexpected argument '$1'" ;; esac shift done if [ $JAVA = sun ] then JAVANAME=java-6-sun PACKAGES="sun-java6-jdk sun-java6-jre" RTPATH=/usr/lib/jvm/java-6-sun/jre/lib/rt.jar else JAVANAME=java-gcj PACKAGES=gcj RTPATH=/usr/lib/jvm/java-1.5.0-gcj-4.3-1.5.0.0/jre/lib/rt.jar fi JAVAHOME="/usr/lib/jvm/$JAVANAME" if [ $JAVA = sun ] then checkpoint "Adding non-free archive for sun java" if [ -n "$RUNNING" ] then perl -pi.bak -e \ 'if(/^deb/ && !/security\.debian\.org/ && !/non-free/) { s/(main)/$1 contrib non-free/; }' \ /etc/apt/sources.list apt-get update fi else # so checkpoint numbers don't differ checkpoint "Skipping non-free archive configuration - gcj is in main" fi checkpoint "Installing packages" if [ -n "$RUNNING" ] then apt-get install $PACKAGES echo "You probably want to do 'apt-get clean'" fi checkpoint "Selecting JDK" if [ -n "$RUNNING" ] then update-java-alternatives --set $JAVANAME || true fi checkpoint "Configuring apache jakarta JVM" if [ -n "$RUNNING" ] then if grep -q '^workers.java_home' /etc/libapache2-mod-jk/workers.properties then perl -pi.bak -e 's,workers.java_home.*,workers.java_home='"$JAVAHOME"',;' \ /etc/libapache2-mod-jk/workers.properties fi fi checkpoint "Configuring tomcat JVM" if [ -n "$RUNNING" ] then TOMCATDEFAULTS=/etc/default/tomcat6 if grep -q '^#\?JAVA_HOME' $TOMCATDEFAULTS then perl -pi.bak -e 's,^\#?JAVA_HOME.*,JAVA_HOME='"$JAVAHOME"',;' $TOMCATDEFAULTS else echo "JAVA_HOME=$JAVAHOME" >> $TOMCATDEFAULTS fi fi checkpoint "Configuring /etc/mir-setup/lib/rt.jar symlink" if [ -n "$RUNNING" ] then mkdir -p /etc/mir-setup/lib ln -sf $RTPATH /etc/mir-setup/lib/rt.jar fi checkpoint "Restarting tomcat and apache" if [ -n "$RUNNING" ] then invoke-rc.d tomcat6 force-reload invoke-rc.d apache2 force-reload fi checkpoint "Finished!"