Explicitly mark perms.sh-dist as a bash script.
[mir.git] / scripts / mir-setup / mir-choose-java
1 #!/bin/sh
2 # ianb@erislabs.net 20081202
3 # configure a mir system for sun or gcj java
4 # checkpoint code taken from zak's mir-setup
5
6 set -e
7
8 # NAME is used when called from mir-prepare
9 NAME=""
10
11 CUR_CHECKPOINT=0
12 checkpoint()
13 {
14   CUR_CHECKPOINT=$(($CUR_CHECKPOINT + 1))
15   if [ -n "$START_CHECKPOINT" ]; then
16     if [ "$CUR_CHECKPOINT" -lt "$START_CHECKPOINT" ]; then
17       echo "${NAME}Skipping checkpoint $CUR_CHECKPOINT: $@"
18       unset RUNNING
19     else
20       echo "${NAME}Running from checkpoint $CUR_CHECKPOINT: $@"
21       RUNNING=1
22     fi
23   else
24     echo "${NAME}Checkpoint $CUR_CHECKPOINT: $@"
25     RUNNING=1
26   fi
27 }
28
29 optdie()
30 {
31   echo >&2 "$@";
32   echo >&2 "Try $PROG --help";
33   exit 1;
34 }
35
36 usage() {
37     echo >&2 "Usage: $PROG [options] sun|gcj"
38     echo >&2 "  Configures java implementation to use with mir"
39     echo >&2 "    -d|--debug                Debugging output, including 'set -x' shell trace"
40     echo >&2 "    -p|--checkpoint <start>   Run from specified checkpoint after failed run"
41     echo >&2 "    sun                       Use Sun Java (non-free)" 
42     echo >&2 "    gcj                       Use the GNU Java Compiler"
43 }
44
45 if [ $# -lt 1 ]
46 then
47     usage
48     exit 1
49 fi
50
51 while [ $# != 0 ]; do
52     case "$1" in
53         -d|--debug)  set -x; DEBUG=1 ;;
54         -p|--checkpoint) shift; START_CHECKPOINT="$1" ;;
55         --subprocess) NAME="[mir-choose-java] " ;;
56         -h|-?|--help) usage; exit 0 ;;
57         -*) optdie "$PROG: unknown option $1" ;;
58         sun) JAVA=sun ; break;;
59         gcj) JAVA=gcj ; break;;
60         *) optdie "$PROG: unexpected argument '$1'" ;;
61     esac
62     shift
63 done
64
65 if [ $JAVA = sun ]
66 then
67     JAVANAME=java-6-sun
68     PACKAGES="sun-java6-jdk sun-java6-jre"
69     RTPATH=/usr/lib/jvm/java-6-sun/jre/lib/rt.jar
70 else
71     JAVANAME=java-gcj
72     PACKAGES=gcj
73     RTPATH=/usr/lib/jvm/java-1.5.0-gcj-4.3-1.5.0.0/jre/lib/rt.jar
74 fi
75
76 JAVAHOME="/usr/lib/jvm/$JAVANAME"
77
78 if [ $JAVA = sun ]
79 then
80     checkpoint "Adding non-free archive for sun java"
81     if [ -n "$RUNNING" ]
82     then
83         perl -pi.bak -e \
84             'if(/^deb/ && !/security\.debian\.org/ && !/non-free/) { s/(main)/$1 contrib non-free/; }' \
85             /etc/apt/sources.list
86         apt-get update
87     fi
88 else
89     # so checkpoint numbers don't differ
90     checkpoint "Skipping non-free archive configuration - gcj is in main"
91 fi
92
93 checkpoint "Installing packages"
94 if [ -n "$RUNNING" ]
95 then
96     apt-get install $PACKAGES
97     echo "You probably want to do 'apt-get clean'"
98 fi
99
100 checkpoint "Selecting JDK"
101 if [ -n "$RUNNING" ]
102 then
103     update-java-alternatives --set $JAVANAME || true
104 fi
105
106 checkpoint "Configuring apache jakarta JVM"
107 if [ -n "$RUNNING" ]
108 then
109     if grep -q '^workers.java_home' /etc/libapache2-mod-jk/workers.properties
110     then
111         perl -pi.bak -e 's,workers.java_home.*,workers.java_home='"$JAVAHOME"',;' \
112           /etc/libapache2-mod-jk/workers.properties
113     fi
114 fi
115
116 checkpoint "Configuring tomcat JVM"
117 if [ -n "$RUNNING" ]
118 then
119     TOMCATDEFAULTS=/etc/default/tomcat5.5
120     if grep -q '^#\?JAVA_HOME' $TOMCATDEFAULTS
121     then
122         perl -pi.bak -e 's,^\#?JAVA_HOME.*,JAVA_HOME='"$JAVAHOME"',;' $TOMCATDEFAULTS
123     else
124         echo "JAVA_HOME=$JAVAHOME" >> $TOMCATDEFAULTS
125     fi
126 fi
127
128 checkpoint "Configuring /etc/mir-setup/lib/rt.jar symlink"
129 if [ -n "$RUNNING" ]
130 then
131     mkdir -p /etc/mir-setup/lib
132     ln -sf $RTPATH /etc/mir-setup/lib/rt.jar
133 fi
134
135 checkpoint "Restarting tomcat and apache"
136 if [ -n "$RUNNING" ]
137 then
138     invoke-rc.d tomcat5.5 force-reload
139     invoke-rc.d apache2   force-reload
140 fi
141
142 checkpoint "Finished!"