| #!/bin/sh |
| # ************************************************************* |
| # |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| # |
| # ************************************************************* |
| |
| 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" |
| is_64bit_arch="no" |
| arch64string="x86_64" |
| arch64string2="64-bit" |
| 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_jre_in_path() |
| { |
| # 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 |
| } |
| |
| check_linux_jre_version() |
| { |
| # check version of an installed JRE |
| javaoutput=`$java_runtime -version 2>&1 | head -1` |
| |
| for i in $java_versions_supported; do |
| versionmatch=`echo $javaoutput | grep $i` |
| if [ ! -z "$versionmatch" ]; then |
| java_runtime_sufficient="yes" |
| break |
| fi |
| done |
| } |
| |
| check_64bit_architecture() |
| { |
| # check system architecture using "uname -m" |
| # unameoutput=`uname -m 2>&1` |
| # x64str=`echo $unameoutput | grep $arch64string` |
| |
| # check system architecture using "file /usr/bin/file" |
| fileoutput=`file /usr/bin/file 2>&1` |
| x64str=`echo $fileoutput | grep $arch64string2` |
| |
| if [ ! -z "$x64str" ]; then |
| is_64bit_arch="yes" |
| echo "64-bit Linux" |
| 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 |
| check_64bit_architecture |
| if [ "$is_64bit_arch" = "no" ]; then |
| install_linux_rpm |
| else |
| find_jre_in_path |
| if [ "$java_runtime_found" = "yes" ]; then |
| check_linux_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="14" |
| do_exit |
| fi |
| else |
| errortext="Error: Did not find an installed Java Runtime Environment (JRE)." |
| errorcode="15" |
| do_exit |
| fi |
| fi |
| elif [ "`uname -s`" = "SunOS" ]; then |
| check_architecture |
| find_jre_in_path |
| 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 |