diff options
Diffstat (limited to 'setup_native/scripts/javaloader.sh')
-rw-r--r-- | setup_native/scripts/javaloader.sh | 498 |
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 |