Skip to content

Instantly share code, notes, and snippets.

@aruld
Forked from bric3/install_jdk5_post_lion.sh
Last active December 13, 2015 18:49
Show Gist options
  • Save aruld/4958226 to your computer and use it in GitHub Desktop.
Save aruld/4958226 to your computer and use it in GitHub Desktop.
This is a fork from https://gist.github.com/bric3/1163008 # 2013/06/10 Tested on Mountain Lion 10.8.4 # 2013/02/14 Updated to run on Mountain Lion 10.8.2
#!/bin/bash
# This script is edited by Brice Dutheil.
# See there in french http://blog.arkey.fr/2012/07/30/script-pour-installer-le-jdk-5-sur-macosx-lion/
# Translate button is broken for now, please use Google to translate this website.
# 2013/06/10 Tested on Mountain Lion 10.8.4
# 2013/02/14 Updated to run on Mountain Lion 10.8.2
#
# 2012/08/25 This script didn't behave correctly when ran on 10.8.1
# Added recommendation to always run this script after updates such as Java, XCode, OSX, etc.
#
# 2O12/07/29 Added Mountain Lion support => Choose the 64bit JVM !
# Can dowload the Java DMG itself if not present in same directory
# Colored the output a bit, works well on a black background
# Added tips for using the different JVMs
# Removed 32bit mode for Mountain Lion (Thanks to Henri Gomez for pointing me to 'ditto')
#
# 2011/12/04 Added warnings and some more information on gotchas
#
# 2011/08/25 Updated this very comments
#
# 2011/08/22 Initial version (Thanks to Benjamin Morin for his blog post)
# This script heavily inspired/copied from http://www.s-seven.net/java_15_lion
#some variables
javadmgurl='http://support.apple.com/downloads/DL1359/en_US/JavaForMacOSX10.5Update10.dmg'
javapkg='JavaForMacOSX10.5Update10'
jvmver='1.5.0_30'
jvms_path='/System/Library/Java/JavaVirtualMachines'
java_frmwk_path='/System/Library/Frameworks/JavaVM.framework/Versions'
pushd `dirname $0` > /dev/null
script_location=`pwd -P`
popd > /dev/null
# 12.0.0 = Mountain Lion = 10.8
# 12.1.0 = Mountain Lion = 10.8.1
# 12.2.0 = Mountain Lion = 10.8.2
# 12.3.0 = Mountain Lion = 10.8.3
# 12.4.0 = Mountain Lion = 10.8.4
# 11.0.0 = Lion = 10.7
darwin_version=`uname -r`
osx_version=`sw_vers -productVersion`
test ${darwin_version/12./} != $darwin_version && is_mountain_lion=true
# colors and style
RESET='\033[00m'
RED='\033[00;31m'
BLUE='\033[0;34m'
PURPLE='\033[0;35m'
LIGHT_PURPLE='\033[1;35m'
BROWN='\033[0;33m'
YELLOW='\033[1;33m'
UNDERLINED='\033[4m'
# escape aware echo
echo() { builtin echo -e $@; }
# Make sure only root can run the script
if [ $EUID -ne 0 ]; then
echo $RED'This script must be run as root!'$RESET 1>&2
exit 1
fi
# Make sure the user understand he is all alone if something goes wrong
if [ $is_mountain_lion ]; then
echo $YELLOW'=> You are using Mountain Lion, the script has been updated to work, however
Mountain Lion kernel works in 64bit. This shouldn'"'"'t be an issue, as the JDK 6 32bit is working,
however it actually doesn'"'"'t work for this hacky install of JDK 5. '$RED'It means that only
the 64bit version will work on your OS.'$RESET
echo
fi
echo '=> The present script has been tested on my current setup and is far from
bulletproof, it might not work at all on your system. And there is '$RED'*no
uninstall script*'$RESET' for now!'
echo
echo '=> Again '$RED'this script touches system files'$RESET', please be advised you are the sole
responsible to run or TO NOT run this script on your machine.'
echo
# Reminder about Apple JDK updates
echo $YELLOW$UNDERLINED'NOTES :'$RESET
echo $BROWN'=> Generally speaking it seems that applying updates on your system Java, XCode, OSX, etc.
might cause problems with your current install, '$RED'reapply this script after any update if you
experience issues with your Java 5 install.'$RESET
echo
echo $BROWN'=> When applying a Java update from Apple, some important
symbolic names that refer to this install are resetted to factory default
values, you can just re-apply this script.'$RESET
echo
echo $BROWN'=> For people that where upgrading OS X, it seems this scripts fail to open
Java Preferences at the end of the script, with an error like that:'
echo $PURPLE'\tLSOpenURLsWithRole() failed with error -10810 for the application /Applications/Utilities/Java Preferences.app.'
echo
echo $BROWN'If this is happening, '$RED'you have to (re)install Java 6 !'
echo $BROWN'You can enter these commands yourself in root mode :'
echo $BROWN'\tsudo rm -rf /System/Library/Java/JavaVirtualMachines/1.6.0.jdk'
echo '\tsudo rm -rf /System/Library/Java/JavaVirtualMachines'
echo '\tjava'
echo $BROWN'This last command will trigger the Java 6 install, then you can run again this script.'$RESET
echo
echo -n 'Do you still want to proceed ? (y/n) '
read answer
[ $answer != 'y' ] && echo 'JDK5 Lion / Mountain Lion Install script aborted' && exit 1
echo
echo
echo $UNDERLINED'Here we go'$RESET
# ================================
echo
if [ ! -f $javapkg.dmg ]; then
echo 'The "Java for Mac OS X 10.5 Update 10" DMG ('"$javapkg.dmg"') was not found.'
echo 'Now trying to download the DMG file from Apple website (http://support.apple.com/kb/DL1359).'
echo $javadmgurl' -> '$script_location/$javapkg.dmg
echo -n $BLUE
curl -C - -# -L $javadmgurl -o $script_location/$javapkg.dmg
echo -n $RESET
if [ ! -f $script_location/$javapkg.dmg ]; then
echo 'Couldn'"'"'t download the uptate. Please download it from Apple at :
http://support.apple.com/kb/DL1359'
echo 'And place it in the same folder as this script : '$script_location
exit 1
fi
else
echo 'Using '$javapkg'.dmg file as the "Java for Mac OS X 10.5 Update 10".'
fi
# Extracting the DMG content in temporary location
echo
echo 'Extracting Java for Mac OS X package'
mkdir /tmp/jdk5dmg
hdiutil attach -quiet -nobrowse -mountpoint /tmp/jdk5dmg/ $script_location/$javapkg.dmg
cd /tmp/jdk5dmg/
# too bad pkgutil nor xar cannot stream package content
pkgutil --expand $javapkg.pkg /tmp/jdk5pkg
cd ..
hdiutil detach -quiet -force /tmp/jdk5dmg/
rm -rf /tmp/jdk5dmg/
# Prepare the System JVM path
if [ ! -e $jvms_path ]; then
echo 'Create '$jvms_path', as it does not exist on your system (it might be because
you don'"'"' t have another Java install)'
mkdir -v -p $jvms_path
fi
echo
echo 'Removing previous Java 1.5 file / directory or symbolic links in :'
cd $jvms_path
pwd
rm -rf 1.5
rm -rf 1.5.0
cd $java_frmwk_path
pwd
rm 1.5/ > /dev/null 2>&1 || rm -rf 1.5 > /dev/null 2>&1
rm 1.5.0/ > /dev/null 2>&1 || rm -rf 1.5.0 > /dev/null 2>&1
rm -rf $jvmver 2>&1
echo
echo $UNDERLINED'Preparing JavaVM framework'$RESET
# ================================================
echo
echo 'Extracting JDK 1.5.0 from package payload in :'
cd $java_frmwk_path
pwd
gzip -cd /tmp/jdk5pkg/$javapkg.pkg/Payload | pax -r -s \
',.'$java_frmwk_path'/1.5.0,./'$jvmver',' \
'.'$java_frmwk_path'/1.5.0'
ls -Fld 1.5*
rm -rf /tmp/jdk5pkg/
echo
echo 'Recreating symbolic links to ./'"$jvmver"' for 1.5 and 1.5.0 :'
pwd
ln -svhF ./$jvmver 1.5
ln -svhF ./$jvmver 1.5.0
echo
echo 'Changing values in config files to make JDK work with Lion / Mountain Lion'
cd $jvmver
/usr/libexec/PlistBuddy -c "Set :JavaVM:JVMMaximumFrameworkVersion 14.*.*" ./Resources/Info.plist
/usr/libexec/PlistBuddy -c "Set :JavaVM:JVMMaximumSystemVersion "$osx_version".*" ./Resources/Info.plist
/usr/libexec/PlistBuddy -c "Add :CFBundleExecutable string libjava.jnilib" ./Resources/Info.plist
ln -siv ./Resources/Info.plist .
echo
echo 'Linking Apple native wrapper'
mkdir ./MacOS
ln -siv ../Libraries/libjava.jnilib ./MacOS
echo
echo $UNDERLINED'Preparing Java Virtual Machine'$RESET
# ====================================================
cd $jvms_path
mkdir -v 1.5.0
cd 1.5.0
pwd
ln -sivh $java_frmwk_path/$jvmver ./Contents
if [ $is_mountain_lion ]; then
echo
echo $YELLOW'REMINDER : You are using Mountain Lion which is running a 64 bit kernel, this causes segfaults
when the Java 5 JVM is run in 32 bit mode. For this reason this script removes 32bit mode on this JVM.'$RESET
ditto --arch x86_64 $java_frmwk_path/$jvmver $java_frmwk_path/$jvmver-x64
rm -rf $java_frmwk_path/$jvmver
mv $java_frmwk_path/$jvmver-x64 $java_frmwk_path/$jvmver
fi
echo
echo $UNDERLINED'Almost over...'$RESET
# ====================================
echo
echo $BROWN'TIP : If you are using applications that need Java 6, but some other command line apps that require JDK 5 :'
echo ' - keep the "Java SE 6" entry at the top in "Java Preferences"'
echo ' - use the Apple "/usr/libexec/java_home" tool, for example to choose the "J2SE 5.0 64-bit" version :'
echo $PURPLE'\texport JAVA_HOME=`/usr/libexec/java_home -F -v 1.5 -a x86_64 -d64`'$RESET
echo
echo -n 'Yeah I got it ! (Press Enter)'
read -s -n 0 key_press
echo
echo 'Now check that JDK 5 appears in Java Preference App, if yes the install is successful, otherwise
try asking the internet :-/'
echo '(starting here : https://gist.github.com/1163008#comments)'
echo
echo
echo $UNDERLINED'/usr/libexec/java_home says :'$RESET
# ===================================================
# listing JVMs on local machine
/usr/libexec/java_home -V
echo
echo $UNDERLINED'You can also try the java 5 command yourself'$RESET
# ==================================================================
# possible commands
echo '\t/usr/libexec/java_home -F -v 1.5 -a x86_64 --exec java -version'
echo '\t`/usr/libexec/java_home -F -v 1.5 -a x86_64`/bin/java -version'
# opening Java Preferences. This is no longer available with latest JDK 6 update.
# open -a "/Applications/Utilities/Java Preferences.app"
@aruld
Copy link
Author

aruld commented Feb 15, 2013

Here is the script output:

arul:bin arul$ sudo sh install_jdk5_mtn_lion.sh 
Password:
-e => You are using Mountain Lion, the script has been updated to work, however Mountain Lion kernel works in 64bit. This shouldn't be an issue, as the JDK 6 32bit is working, however it actually doesn't work for this hacky install of JDK 5. It means that only the 64bit version will work on your OS.
-e
-e => The present script has been tested on my current setup and is far from bulletproof, it might not work at all on your system. And there is *no uninstall script* for now!
-e
-e => Again this script touches system files, please be advised you are the sole responsible to run or TO NOT run this script on your machine.
-e
-e NOTES :
-e => Generally speaking it seems that applying updates on your system Java, XCode, OSX, etc. might cause problems with your current install, reapply this script after any update if you experience issues with your Java 5 install.
-e
-e => When applying a Java update from Apple, some important symbolic names that refer to this install are resetted to factory default values, you can just re-apply this script.
-e
-e => For people that where upgrading OS X, it seems this scripts fail to open Java Preferences at the end of the script, with an error like that:
-e  LSOpenURLsWithRole() failed with error -10810 for the application /Applications/Utilities/Java Preferences.app.
-e
-e If this is happening, you have to (re)install Java 6 !
-e You can enter these commands yourself in root mode :
-e  sudo rm -rf /System/Library/Java/JavaVirtualMachines/1.6.0.jdk
-e  sudo rm -rf /System/Library/Java/JavaVirtualMachines
-e  java
-e This last command will trigger the Java 6 install, then you can run again this script.
-e
-e -n Do you still want to proceed ? (y/n)
y
-e
-e
-e Here we go
-e
-e The "Java for Mac OS X 10.5 Update 10" DMG (JavaForMacOSX10.5Update10.dmg) was not found.
-e Now trying to download the DMG file from Apple website (http://support.apple.com/kb/DL1359).
-e http://support.apple.com/downloads/DL1359/en_US/JavaForMacOSX10.5Update10.dmg -> /Users/arul/bin/JavaForMacOSX10.5Update10.dmg
-e -n 
######################################################################## 100.0%
-e -n 
-e
-e Extracting Java for Mac OS X package
-e
-e Removing previous Java 1.5 file / directory or symbolic links in :
/System/Library/Java/JavaVirtualMachines
/System/Library/Frameworks/JavaVM.framework/Versions
-e
-e Preparing JavaVM framework
-e
-e Extracting JDK 1.5.0 from package payload in :
/System/Library/Frameworks/JavaVM.framework/Versions
lrwxr-xr-x  1 root  wheel   10 Feb 14 16:30 1.5@ -> CurrentJDK
drwxr-xr-x  7 root  wheel  238 Jun 21  2011 1.5.0_30/
-e
-e Recreating symbolic links to ./1.5.0_30 for 1.5 and 1.5.0 :
/System/Library/Frameworks/JavaVM.framework/Versions
1.5 -> ./1.5.0_30
1.5.0 -> ./1.5.0_30
-e
-e Changing values in config files to make JDK work with Lion / Mountain Lion
./Info.plist -> ./Resources/Info.plist
-e
-e Linking Apple native wrapper
./MacOS/libjava.jnilib -> ../Libraries/libjava.jnilib
-e
-e Preparing Java Virtual Machine
mkdir: created directory '1.5.0'
/System/Library/Java/JavaVirtualMachines/1.5.0
./Contents -> /System/Library/Frameworks/JavaVM.framework/Versions/1.5.0_30
-e
-e REMINDER : You are using Mountain Lion which is running a 64 bit kernel, this causes segfaults when the Java 5 JVM is run in 32 bit mode. For this reason this script removes 32bit mode on this JVM.
-e
-e Almost over...
-e
-e TIP : If you are using applications that need Java 6, but some other command line apps that require JDK 5 :
-e - keep the "Java SE 6" entry at the top in "Java Preferences"
-e - use the Apple "/usr/libexec/java_home" tool, for example to choose the "J2SE 5.0 64-bit" version :
-e  export JAVA_HOME=`/usr/libexec/java_home -F -v 1.5 -a x86_64 -d64`
-e
-e -n Yeah I got it ! (Press Enter)
-e
-e Now check that JDK 5 appears in Java Preference App, if yes the install is successful, otherwise try asking the internet :-/
-e (starting here : https://gist.github.com/1163008#comments)
-e
-e
-e /usr/libexec/java_home says :
Matching Java Virtual Machines (11):
    1.8.0, x86_64:  "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home
    1.7.0_13, x86_64:   "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_13.jdk/Contents/Home
    1.6.0_39-b04-443, x86_64:   "Java SE 6" /Library/Java/JavaVirtualMachines/1.6.0_39-b04-443.jdk/Contents/Home
    1.6.0_39-b04-443, i386: "Java SE 6" /Library/Java/JavaVirtualMachines/1.6.0_39-b04-443.jdk/Contents/Home
    1.6.0_38-b04-436, x86_64:   "Java SE 6" /Library/Java/JavaVirtualMachines/1.6.0_38-b04-436.jdk/Contents/Home
    1.6.0_38-b04-436, i386: "Java SE 6" /Library/Java/JavaVirtualMachines/1.6.0_38-b04-436.jdk/Contents/Home
    1.6.0_37-b06-434, x86_64:   "Java SE 6" /Library/Java/JavaVirtualMachines/1.6.0_37-b06-434.jdk/Contents/Home
    1.6.0_37-b06-434, i386: "Java SE 6" /Library/Java/JavaVirtualMachines/1.6.0_37-b06-434.jdk/Contents/Home
    1.6.0_37-b06-434, x86_64:   "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
    1.6.0_37-b06-434, i386: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
    1.5.0_30-b03, x86_64:   "J2SE 5.0"  /System/Library/Java/JavaVirtualMachines/1.5.0/Contents/Home

/Library/Java/JavaVirtualMachines/jdk1.8.0.jdk/Contents/Home
-e
-e You can also try the java 5 command yourself
-e  /usr/libexec/java_home -F -v 1.5 -a x86_64 --exec java -version
-e  `/usr/libexec/java_home -F -v 1.5 -a x86_64`/bin/java -version
arul:bin arul$ 

And, you are good to go:

arul:bin arul$ /usr/libexec/java_home -F -v 1.5 -a x86_64 --exec java -version
Cannot run Java in 32 bit mode. Continuing in 64 bit mode.
java version "1.5.0_30"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_30-b03-389-11M4102)
Java HotSpot(TM) 64-Bit Server VM (build 1.5.0_30-161, mixed mode)
arul:bin arul$ 

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment