概要
Teradata Studio, Teradata Studio ExpressはTeradataデータベースを操作するGUIソフトウェアですが、そのMac版のインストーラにはやや問題があり、インストールが失敗することがあります。
私の経験したのは、適切なJavaプログラムを見つける仕組みの問題でした。
結局、インストールした .pkg
ファイルを一度解凍して中のスクリプトを修正し、再度パッケージ化するという荒療治により解決することができました。この方法を紹介します。
参考:Studio Express Mac JDK installation issue | Teradata Forum
インストーラの取得
https://downloads.teradata.com からソフトウェアのインストーラをダウンロードします。
リンク切れの場合は検索すればすぐに見つかると思います。
Mac用には、.pkg
ファイルが用意されています。
インストーラが機能するかの確認
普通は.pkg
ファイルをダブルクリックしてウィザードに従っていれば完了なのですが、私の環境では失敗しました。
この失敗への対処を紹介します。
Javaのバージョンの確認
Teradata Studio (Express) は、Java Runtime Environmentのバージョン 1.8, 10, 11 のいずれかを必要とします。これが満たされないとエラーが生じます。悪いことに、たとえ指定のバージョンのJavaがインストールされていても、これが正しく検知されなければやはりエラーがでます。ですので、(1) 指定のJavaバージョンをインストールする (2) それが正しく検知されるようにスクリプトを書き換える、の2手順で対応します。
指定のJavaバージョンをインストールする
バージョン 1.8, 10, 11 のいずれかがインストールできれば良いのですが、ここでは AdoptOpenJDK
をHomebrew経由でインストールする方法を紹介します。
brew tap AdoptOpenJDK/openjdk
brew install adoptopenjdk8
インストールが完了すると、/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/bin/java
に、Javaプログラムがインストールされます。
下記はその確認コマンドです。
/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/bin/java -version
# openjdk version "1.8.0_252"
# OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_252-b09)
# OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.252-b09, mixed mode)
このバージョンを既定にするには、~/.bash_profile
に下記を記載します。
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
PATH=${JAVA_HOME}/bin:${PATH}
次回以降Terminalを開き直すと、次のようになります。
which java
# /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/bin/java
参考:HomeBrew で AdoptOpenJDK をインストールしてみた(訂正版)| qiita
Javaバージョン判定のスクリプトの修正
残念ながら、指定のJavaバージョンをインストールして既定に設定したとしても、まだTeradata Studio (Express) のインストールは成功しません。中で動いているJavaバージョンの判定スクリプトがあまり頑健でないためです。
そこで、エラー解消のため、スクリプトを直接修正します。
以下では、Expressの場合のコマンドを例として示しますが、適宜 Teradata Studioに読み替えてください。
まず、インストールした.pkg
ファイルを解凍します。
コマンド最後のTSE.unpkg
の部分は、解凍先フォルダで任意です。
pkgutil --expand TeradataStudioExpress.pkg TSE.unpkg
すると、Javaのバージョン判定をしているスクリプトが、TSE.unpkg/TeradataStudioExpComponent.pkg/Scripts/preinstall
に見つかります(紛らわしいですが、TeradataStudioExpComponent.pkg
はフォルダ名です)。
これは、以下のような短いPerlスクリプトです。
#!/usr/bin/perl
use strict;
use warnings;
my $javaversion = `java -XshowSettings:properties -version > /tmp/javaver 2>&1`;
my $javaversionhelp = `grep "java.specification.version" "/tmp/javaver"`;
my ($jdk, $version) = split /\s*=\s*/, $javaversionhelp;
my $retval = 0;
if ( $version != 10 && $version != 1.8 && $version != 11 ) {
$retval=system("/usr/bin/osascript -e 'tell application \"Finder\"' -e 'activate' -e 'display dialog \"Java Runtime Environment 1.8 or 10 or 11 is required and should be installed before installing Teradata Studio Express Application.\" buttons{\"OK\"} with title \"Teradata Studio Express Warning\"' -e 'end tell'") ;
exit(-1);
}
exit(0);
読み解くと、次のような構成のようです。
-
java
コマンドでバージョン情報を一時ファイルに書き出し - 一時ファイルの該当箇所からバージョン番号を取得
- バージョンが 10, 1.8, 11 のいずれかでなければ、警告を出した上でエラー終了
さて、このプログラムが失敗する理由ですが、どうやら使っているjava
コマンドのパスが意図と違っているためです。これは、おそらく.bash_profile
に記載した設定が反映されていないためです。したがって、既定バージョンを 1.8 にしたつもりでも、このプログラムではそう判定されません。
さて、プログラムの修正方法ですが、丁寧にやるなら、java
コマンド部分をフルパス /Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/bin/java
に書き換えることです。
しかし、実際のところこのプログラムがしているのはバージョン判定だけで、インストール作業とは関係ないので、無条件でパスさせてしまえば良さそうです。
そこで、プログラムの冒頭を以下のように書き換えます。そうすると、常に成功してプログラムが終了するはずです。
#!/usr/bin/perl
use strict;
use warnings;
exit(0);
上記の編集後、下記のコマンドでパッケージを再構築します。
新しくTSE.pkg
が作られます。
pkgutil --flatten TSE.unpkg TSE.pkg
TSE.unpkg
をダブルクリックしてウィザードに従うと、上手くいけばインストールが成功します。
プログラム実行時のJavaバージョンを設定
インストール時にはバージョン判定を回避することでパスさせましたが、ソフトウェア実行時には、正しく意図したバージョンのJavaを使わせる必要があります。そのためには、プログラムの設定ファイルを編集します(管理者権限が必要です)。
Vimを使っていますが、適宜別のエディタに読み替えてください。
sudo vim /Applications/TeradataStudioExpress.app/Contents/Info.plist
後半部分に 特定のJava version を指定するようにコメントされている部分があるので、そこへ下記を追加します。
<string>-vm</string><string>/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/bin/java</string>
終わりに
以上で設定変更は終わりです。あとは、ランチャーから起動すればソフトウェアが使えるようになっていると思います。