summaryrefslogtreecommitdiff
path: root/setup_native/scripts/javaloader.sh
diff options
context:
space:
mode:
Diffstat (limited to 'setup_native/scripts/javaloader.sh')
-rw-r--r--setup_native/scripts/javaloader.sh498
1 files changed, 498 insertions, 0 deletions
diff --git a/setup_native/scripts/javaloader.sh b/setup_native/scripts/javaloader.sh
new file mode 100644
index 000000000000..e23505f586b0
--- /dev/null
+++ b/setup_native/scripts/javaloader.sh
@@ -0,0 +1,498 @@
+#!/bin/sh
+
+jarfilename="JavaSetup.jar"
+tempdir=/var/tmp/install_$$
+java_runtime="java"
+java_runtime_set="no"
+java_runtime_found="no"
+java_runtime_sufficient="no"
+java_versions_supported="1.4 1.5 1.6"
+rpm2cpio_found="no"
+rpm_found="no"
+sunjavahotspot="HotSpot"
+errortext=""
+errorcode=""
+
+start_java()
+{
+ umask 022
+
+ echo "Using $java_runtime"
+ echo `$java_runtime -version`
+ echo "Running installer"
+
+ # looking for environment variables
+
+ home=""
+ if [ "x" != "x$HOME" ]; then
+ home=-DHOME=$HOME
+ fi
+
+ log_module_states=""
+ if [ "x" != "x$LOG_MODULE_STATES" ]; then
+ log_module_states=-DLOG_MODULE_STATES=$LOG_MODULE_STATES
+ fi
+
+ getuid_path=""
+ if [ "x" != "x$GETUID_PATH" ]; then
+ getuid_path=-DGETUID_PATH=$GETUID_PATH
+ fi
+
+ if [ "x" != "x$jrefile" ]; then
+ jrecopy=-DJRE_FILE=$jrefile
+ fi
+
+ # run the installer class file
+ echo $java_runtime $home $log_module_states $getuid_path $jrecopy -jar $jarfilename
+ $java_runtime $home $log_module_states $getuid_path $jrecopy -jar $jarfilename
+}
+
+cleanup()
+{
+ if [ "x$tempdir" != "x" -a -d "$tempdir" ]; then
+ rm -rf $tempdir
+ fi
+}
+
+do_exit()
+{
+ exitstring=$errortext
+ if [ "x" != "x$errorcode" ]; then
+ exitstring="$exitstring (exit code $errorcode)"
+ fi
+
+ # simply echo the exitstring or open a xterm
+ # -> dependent from tty
+
+ if tty ; then
+ echo $exitstring
+ else
+ mkdir $tempdir
+
+ # creating error file
+ errorfile=$tempdir/error
+
+ cat > $errorfile << EOF
+echo "$exitstring"
+echo "Press return to continue ..."
+read a
+EOF
+
+ chmod 755 $errorfile
+
+ # searching for xterm in path
+ xtermname="xterm"
+ xtermfound="no";
+ for i in `echo $PATH | sed -e 's/^:/.:/g' -e 's/:$/:./g' -e 's/::/:.:/g' -e 's/:/ /g'`; do
+ if [ -x "$i/$xtermname" -a ! -d "$i/$xtermname" ]; then
+ xtermname="$i/$xtermname"
+ xtermfound="yes"
+ break
+ fi
+ done
+
+ if [ $xtermfound = "no" -a "`uname -s`" = "SunOS" ]; then
+ if [ -x /usr/openwin/bin/xterm ]; then
+ xtermname=/usr/openwin/bin/xterm
+ xtermfound="yes"
+ fi
+ fi
+
+ if [ $xtermfound = "yes" ]; then
+ $xtermname -e $errorfile
+ fi
+ fi
+
+ cleanup
+
+ exit $errorcode
+}
+
+set_jre_for_uninstall()
+{
+ # if "uninstalldata" exists, this is not required
+ if [ ! -d "uninstalldata" ]; then
+ packagepath="RPMS"
+ jrefile=`find $packagepath -type f -name "jre*.rpm" -print`
+ jrefile=`basename $jrefile`
+ if [ -z "$jrefile" ]; then
+ jrefile="notfound"
+ fi
+
+ # check existence of jre rpm
+ if [ ! -f $packagepath/$jrefile ]; then
+ errortext="Error: Java Runtime Environment (JRE) not found in directory: $packagepath"
+ errorcode="4"
+ do_exit
+ fi
+ fi
+}
+
+install_linux_rpm()
+{
+ # Linux requires usage of rpm2cpio to install JRE with user privileges
+ # 1. --relocate /usr/java=/var/tmp does not work, because not all files are
+ # relocatable. Some are always installed into /etc
+ # 2. --root only works with root privileges. With user privileges only the
+ # database is shifted, but not the files.
+
+ # On Linux currently rpm2cpio is required (and rpm anyhow)
+
+ find_rpm2cpio()
+
+ if [ ! "$rpm2cpio_found" = "yes" ]; then
+ errortext="Error: Did not find rpm2cpio. rpm2cpio is currently required for installations on Linux."
+ errorcode="11"
+ do_exit
+ fi
+
+ find_rpm()
+
+ if [ ! "$rpm_found" = "yes" ]; then
+ errortext="Error: Did not find rpm. rpm is currently required for installations on Linux."
+ errorcode="12"
+ do_exit
+ fi
+
+ # jrefile=jre-6-linux-i586.rpm
+ # javahome=usr/java/jre1.6.0
+
+ packagepath="RPMS"
+
+ # using "uninstalldata" for uninstallation
+ if [ -d "uninstalldata" ]; then
+ packagepath="uninstalldata/jre"
+ fi
+
+ jrefile=`find $packagepath -type f -name "jre*.rpm" -print`
+ jrefile=`basename $jrefile`
+ if [ -z "$jrefile" ]; then
+ jrefile="notfound"
+ fi
+
+ # check existence of jre rpm
+ if [ ! -f $packagepath/$jrefile ]; then
+ errortext="Error: Java Runtime Environment (JRE) not found in directory: $packagepath"
+ errorcode="4"
+ do_exit
+ fi
+
+ PACKED_JARS="lib/rt.jar lib/jsse.jar lib/charsets.jar lib/ext/localedata.jar lib/plugin.jar lib/javaws.jar lib/deploy.jar"
+
+ mkdir $tempdir
+
+ trap 'rm -rf $tempdir; exit 1' HUP INT QUIT TERM
+
+ tempjrefile=$tempdir/$jrefile
+ cp $packagepath/$jrefile $tempjrefile
+
+ if [ ! -f "$tempjrefile" ]; then
+ errortext="Error: Failed to copy Java Runtime Environment (JRE) temporarily."
+ errorcode="5"
+ do_exit
+ fi
+
+ # check if copy was successful
+ if [ -x /usr/bin/sum ]; then
+
+ echo "Checksumming..."
+
+ sumA=`/usr/bin/sum $packagepath/$jrefile`
+ index=1
+ for s in $sumA; do
+ case $index in
+ 1)
+ sumA1=$s;
+ index=2;
+ ;;
+ 2)
+ sumA2=$s;
+ index=3;
+ ;;
+ esac
+ done
+
+ sumB=`/usr/bin/sum $tempjrefile`
+ index=1
+ for s in $sumB; do
+ case $index in
+ 1)
+ sumB1=$s;
+ index=2;
+ ;;
+ 2)
+ sumB2=$s;
+ index=3;
+ ;;
+ esac
+ done
+
+ # echo "Checksum 1: A1: $sumA1 B1: $sumB1"
+ # echo "Checksum 2: A2: $sumA2 B2: $sumB2"
+
+ if [ $sumA1 -ne $sumB1 ] || [ $sumA2 -ne $sumB2 ]; then
+ errortext="Error: Failed to install Java Runtime Environment (JRE) temporarily."
+ errorcode="6"
+ do_exit
+ fi
+ else
+ echo "Can't find /usr/bin/sum to do checksum. Continuing anyway."
+ fi
+
+ # start to install jre
+ echo "Extracting ..."
+ olddir=`pwd`
+ cd "$tempdir"
+ rpm2cpio $tempjrefile | cpio -i --make-directories
+ rm -f $tempjrefile # we do not need it anymore, so conserve discspace
+
+ javahomeparent=usr/java
+ javahomedir=`find $javahomeparent -maxdepth 1 -type d -name "jre*" -print`
+ javahomedir=`basename $javahomedir`
+ if [ -z "$javahomedir" ]; then
+ javahomedir="notfound"
+ fi
+
+ javahome=$javahomeparent/$javahomedir
+
+ if [ ! -d ${javahome} ]; then
+ errortext="Error: Failed to extract the Java Runtime Environment (JRE) files."
+ errorcode="7"
+ do_exit
+ fi
+
+ UNPACK_EXE=$javahome/bin/unpack200
+ if [ -f $UNPACK_EXE ]; then
+ chmod +x $UNPACK_EXE
+ packerror=""
+ for i in $PACKED_JARS; do
+ if [ -f $javahome/`dirname $i`/`basename $i .jar`.pack ]; then
+ # printf "Creating %s\n" $javahome/$i
+ $UNPACK_EXE $javahome/`dirname $i`/`basename $i .jar`.pack $javahome/$i
+ if [ $? -ne 0 ] || [ ! -f $javahome/$i ]; then
+ printf "ERROR: Failed to unpack JAR file:\n\n\t%s\n\n" $i
+ printf "Installation failed. Please refer to the Troubleshooting Section of\n"
+ printf "the Installation Instructions on the download page.\n"
+ packerror="1"
+ break
+ fi
+
+ # remove the old pack file
+ rm -f $javahome/`dirname $i`/`basename $i .jar`.pack
+ fi
+ done
+ if [ "$packerror" = "1" ]; then
+ if [ -d $javahome ]; then
+ /bin/rm -rf $javahome
+ fi
+
+ errortext="Error: Failed to extract the Java Runtime Environment (JRE) files."
+ errorcode="8"
+ do_exit
+ fi
+ fi
+
+ PREFS_LOCATION="`echo \"${javahome}\" | sed -e 's/^jdk.*/&\/jre/'`/.systemPrefs"
+
+ if [ ! -d "${PREFS_LOCATION}" ]; then
+ mkdir -m 755 "${PREFS_LOCATION}"
+ fi
+ if [ ! -f "${PREFS_LOCATION}/.system.lock" ]; then
+ touch "${PREFS_LOCATION}/.system.lock"
+ chmod 644 "${PREFS_LOCATION}/.system.lock"
+ fi
+ if [ ! -f "${PREFS_LOCATION}/.systemRootModFile" ]; then
+ touch "${PREFS_LOCATION}/.systemRootModFile"
+ chmod 644 "${PREFS_LOCATION}/.systemRootModFile"
+ fi
+
+ if [ x$ARCH = "x32" ] && [ -f "$javahome/bin/java" ]; then
+ "$javahome/bin/java" -client -Xshare:dump > /dev/null 2>&1
+ fi
+
+ java_runtime=$tempdir/$javahome/bin/java
+
+ # Make symbolic links to all TrueType font files installed in the system
+ # to avoid garbles for Japanese, Korean or Chinese
+ language=`printenv LANG | cut -c 1-3`
+ if [ x$language = "xja_" -o x$language = "xko_" -o x$language = "xzh_" ]; then
+ font_fallback_dir=$javahome/lib/fonts/fallback
+ echo "Making symbolic links to TrueType font files into $font_fallback_dir."
+ mkdir -p $font_fallback_dir
+ ttf_files=`locate "*.ttf" | xargs`
+ if [ x$ttf_files = "x" ]; then
+ ttf_files=`find /usr/share/fonts/ -name "*ttf"`
+ if [ x$ttf_files = "x" ]; then
+ ttf_files=`find /usr/X11R6/lib/ -name "*ttf"`
+ fi
+ fi
+ ln -s $ttf_files $font_fallback_dir
+ fi
+
+ echo "Done."
+ cd "$olddir"
+}
+
+find_rpm2cpio()
+{
+ # searching for rpm2cpio in path
+ for i in `echo $PATH | sed -e 's/^:/.:/g' -e 's/:$/:./g' -e 's/::/:.:/g' -e 's/:/ /g'`; do
+ if [ -x "$i/rpm2cpio" -a ! -d "$i/$rpm2cpio" ]; then
+ rpm2cpio_found="yes"
+ break
+ fi
+ done
+}
+
+find_rpm()
+{
+ # searching for rpm in path
+ for i in `echo $PATH | sed -e 's/^:/.:/g' -e 's/:$/:./g' -e 's/::/:.:/g' -e 's/:/ /g'`; do
+ if [ -x "$i/rpm" -a ! -d "$i/$rpm" ]; then
+ rpm_found="yes"
+ break
+ fi
+ done
+}
+
+check_architecture()
+{
+ # Check, if system and installation set fit together (x86 and sparc).
+ # If not, throw a warning.
+ # Architecture of the installation set is saved in file "installdata/xpd/setup.xpd"
+ # <architecture>sparc</architecture> or <architecture>i386</architecture>
+ # Architecture of system is determined with "uname -p"
+
+ setupxpdfile="installdata/xpd/setup.xpd"
+
+ if [ -f $setupxpdfile ]; then
+ platform=`uname -p` # valid values are "sparc" or "i386"
+ searchstring="<architecture>$platform</architecture>"
+ match=`cat $setupxpdfile | grep $searchstring`
+
+ if [ -z "$match" ]; then
+ # architecture does not fit, warning required
+ if [ "$platform" = "sparc" ]; then
+ echo "Warning: This is an attempt to install Solaris x86 packages on Solaris Sparc."
+ else
+ echo "Warning: This is an attempt to install Solaris Sparc packages on Solaris x86."
+ fi
+ fi
+ fi
+}
+
+find_solaris_jre()
+{
+ # searching for java runtime in path
+ for i in `echo $PATH | sed -e 's/^:/.:/g' -e 's/:$/:./g' -e 's/::/:.:/g' -e 's/:/ /g'`; do
+ if [ -x "$i/$java_runtime" -a ! -d "$i/$java_runtime" ]; then
+ java_runtime="$i/$java_runtime"
+ java_runtime_found="yes"
+ break
+ fi
+ done
+}
+
+check_jre_version()
+{
+ # check version of an installed JRE
+ javaoutput=`$java_runtime -version 2>&1 | tail ${tail_args} -1`
+ hotspot=`echo $javaoutput | grep $sunjavahotspot`
+ if [ ! -z "$hotspot" ]; then
+ for i in $java_versions_supported; do
+ versionmatch=`echo $javaoutput | grep $i`
+ if [ ! -z "$versionmatch" ]; then
+ java_runtime_sufficient="yes"
+ break
+ fi
+ done
+
+ # check new version format, where version number is not part of line 3 (1.6)
+ if [ ! "$java_runtime_sufficient" = "yes" ]; then
+ javaoutput=`$java_runtime -version 2>&1 | head ${tail_args} -3`
+ for i in $java_versions_supported; do
+ versionmatch=`echo $javaoutput | grep $i`
+ if [ ! -z "$versionmatch" ]; then
+ java_runtime_sufficient="yes"
+ break
+ fi
+ done
+ fi
+ fi
+}
+
+# the user might want to specify java runtime on the commandline
+USAGE="Usage: $0 [ -j <java_runtime> ]"
+while getopts hj: opt; do
+ echo "Parameter: $opt"
+ case $opt in
+ j) java_runtime_set="yes";
+ java_runtime="${OPTARG}"
+ if [ ! -f "$java_runtime" ]; then
+ errortext="Error: Invalid java runtime $java_runtime, file does not exist."
+ errorcode="2"
+ do_exit
+ fi
+ if [ ! -x "$java_runtime" ]; then
+ errortext="Error: Invalid java runtime $java_runtime, not an executable file."
+ errorcode="3"
+ do_exit
+ fi
+ java_runtime_found="yes";
+ ;;
+ h) echo ${USAGE}
+ errortext=""
+ errorcode=""
+ do_exit
+ ;;
+ \?) echo ${USAGE}
+ errortext=""
+ errorcode=""
+ do_exit
+ ;;
+ esac
+done
+
+# changing into setup directory
+cd "`dirname "$0"`"
+
+# prepare jre, if not set on command line
+if [ "$java_runtime_set" != "yes" ]; then
+ platform=`uname -s`
+ if [ "`uname -s`" = "Linux" ]; then
+ install_linux_rpm
+ elif [ "`uname -s`" = "SunOS" ]; then
+ check_architecture
+ find_solaris_jre
+ if [ "$java_runtime_found" = "yes" ]; then
+ check_jre_version
+ if [ ! "$java_runtime_sufficient" = "yes" ]; then
+ errortext="Error: Did not find a valid Java Runtime Environment (JRE). Required JRE versions: $java_versions_supported"
+ errorcode="9"
+ do_exit
+ fi
+ else
+ errortext="Error: Did not find an installed Java Runtime Environment (JRE)."
+ errorcode="10"
+ do_exit
+ fi
+ else
+ errortext="Error: Platform $platform not supported for Java Runtime Environment (JRE) installation."
+ errorcode="1"
+ do_exit
+ fi
+fi
+
+# jre for Linux is also required, if java runtime is set (for uninstallation mode)
+if [ "$java_runtime_set" = "yes" ]; then
+ platform=`uname -s`
+ if [ "`uname -s`" = "Linux" ]; then
+ set_jre_for_uninstall
+ fi
+fi
+
+start_java
+
+cleanup
+
+exit 0