OS X 10.10 YosemiteでJava7をインストールする方法

## アジェンダ

Oracleやbrew-caskから落としたpkgは、OS X 10.10 YosemiteだとOSバージョンチェックによってインストールできません。

ただ、使いたい時もあるはず。
私はRubyMineをJava7で動かしたかったので、なんとかバージョンチェック回避できないか探したら出来たのでメモ。

## pkgutilでexpandして加工

pkgが入ったdmgをダウンロード。

[Oracle - jdk-7u67-macosx-x64.dmg](http://download.oracle.com/otn-pub/java/jdk/7u67-b01/jdk-7u67-macosx-x64.dmg)

中の`JDK 7 Update 67.pkg`をDesktopなどにコピー。

または

```bash
cd ~/tmp
wget http://download.oracle.com/otn-pub/java/jdk/7u67-b01/jdk-7u67-macosx-x64.dmg
open jdk-7u67-macosx-x64.dmg
cp /Volumes/JDK\ 7\ Update\ 67/JDK\ 7\ Update\ 67.pkg ~/tmp
```

そして、pkgutilコマンドでアンパッケージ。
中を加工します。

```
pkgutil --expand JDK\ 7\ Update\ 67.pkg JDK\ 7\ Update\ 67.unpkg
vi JDK\ 7\ Update\ 67.unpkg/Distribution
```

6行から93行目辺り（以下の部分）を削除。

```xml
    <installation-check script="pm_install_check();"/>
    <script>// check if this is a downgrade from current version installed, return true
function isDowngrade() {
    try {
        var tInstallVersion = "1.7.67.01";
        // get current installed JavaAppletPlugin bundle
        var bundle = system.files.bundleAtPath("/Library/Internet Plug-Ins/JavaAppletPlugin.plugin");
        if(bundle != null) {
            // check if Info.plist file is present, we need this in case the plugin was not installed properly
            if(!system.files.plistAtPath("/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Info.plist")) {
                return false;
            }
            // check if Oracle JRE is installed not by someone else
            if (bundle.CFBundleIdentifier == 'com.oracle.java.JavaAppletPlugin') {
                var tCurrentVersion = bundle.CFBundleShortVersionString;
                // check if current plugin being installed is a downgrade
                var tVersionResult = system.compareVersions(bundle.CFBundleVersion, tInstallVersion);
                if(tVersionResult > 0) {
                    // This is a downgrade return true
                    return true;
                }
            }
        }
    } catch(e) {
        // an exception just occurred
        return (true);
    }
    return false;
}
// Check is current MAC OS X version less than supportedVersion
function checkForMacOSX(supportedVersion) {
    try {
        // Get current ProductVersion
        var tProductVersion = system.version.ProductVersion;
        // Get current ProductName
        var tProductName = system.version.ProductName;

        // Check if current version is less than supportedVersion, if yes Set the result type to Fatal, and give correct message to user

        if(tProductVersion &lt; supportedVersion)
        {
            // Set result values
            var osCheckTitle = system.localizedStringWithFormat('OSCHECK_TITLE');
            osCheckTitle = osCheckTitle.replace("%1$@", tProductName);
            osCheckTitle = osCheckTitle.replace("%2$@", supportedVersion);
    
            var osCheckMessage = system.localizedStringWithFormat('OSCHECK_MESSAGE');
            osCheckMessage = osCheckMessage.replace("%1$@", tProductName);
            osCheckMessage = osCheckMessage.replace("%2$@", tProductVersion);
            osCheckMessage = osCheckMessage.replace("%3$@", supportedVersion);
    
            my.result.title = osCheckTitle;
            my.result.message = osCheckMessage;
            my.result.type = 'Fatal';
        }
    } catch (e) {
        // an exception just occurred
        return (false);
    }
    // return true
    return (true);
}
    

function pm_install_check() {
  if(!(checkForMacOSX('10.7.3') == true)) {
    my.result.title = 'OS X Lion required';
    my.result.message = 'This Installer is supported only on OS X 10.7.3 or Later.';
    my.result.type = 'Fatal';
    return false;
  }
  return true;
}



function pm_choice1_selected() {
  result = true;
  result = result &amp;&amp; (isDowngrade() == false);
  return result;
}


function pm_choice1_enabled() {
  result = true;
  result = result &amp;&amp; (isDowngrade() == false);
  return result;
}</script>

```

## pkgutil flattenで元に戻す

```
pkgutil --flatten JDK\ 7\ Update\ 67.unpkg JDK\ 7\ Update\ 67-nocheck.pkg
```

その後、`JDK Update67-nocheck.pkg`を開いてインストールに進むと、バージョンチェックなくインストール可能です。

## 注意
常識的な知識なのかもしれませんが、困っている方はどうぞ。

ただおすすめはしません！
私はRubyMineを軽くしたくて遊んでみただけですので、責任は持ちません！