CentOSのalternativesでJavaのバージョン管理

スポンサーリンク

alternativesを使用したJavaのバージョン管理です。ただし、alternatives自体はJava専用のものではないので汎用的に使えます。

alternativesとは

alternatives とは、同時にインストールされた、同機能を提供するソフトや、 バージョンの異なるソフトを管理するためのユーティリティです。

ユーザが実際に使用するコマンド等はシンボリックリンクになっており、 そのシンボリックリンクの指す実体を切替えたりといったことを行います。

JDKのダウンロード

まずはJDKを用意しますが、OracleJDK を wget や curl で素直にダウンロードすることはできないので、ライセンス同意チェックの Cookie をつけてやる必要があります。

 Java SE - Downloads | Oracle Technology Network からJDKのダウンロードURLを確認します。

f:id:tasukujp:20150524235335p:plain

ライセンス規約に同意(Accept License Agreement)をチェックしてリンクアドレスをコピーします。同意してないとリンクがコピーできません。今回はrpmでのインストールではないのでtar.gzのファイルを選択して下さい。

f:id:tasukujp:20150524234930p:plain

wget の場合は次のように Cookie を渡すパラメータを付加します。

# wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u45-b14/jdk-8u45-linux-x64.tar.gz" -O jdk-8u45-linux-x64.tar.gz
# tar xzf jdk-8u45-linux-x64.tar.gz

切り替えを試すためにJDK1.7もダウンロードしておきましょう。

# wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/7u79-b15/jdk-7u79-linux-x64.tar.gz" -O jdk-7u79-linux-x64.tar.gz
# tar xzf jdk-7u79-linux-x64.tar.gz

alternativesに登録

alternativesに登録しておくことで簡単にバージョンを切り替える事ができます。登録には--installのコマンドを使用しますが、オプションは[作成するリンクパス] [管理名] [実体のパス] [優先度]です。

Java7の優先度を 1、Java8の優先度を 2 で登録します。

# alternatives --install /usr/bin/java java /opt/jdk1.7.0_79/bin/java 1
# alternatives --install /usr/bin/java java /opt/jdk1.8.0_45/bin/java 2
# alternatives --config java

There is 2 program that provides 'java'.

  Selection    Command
-----------------------------------------------
   1           /opt/jdk1.7.0_79/bin/java
** 2           /opt/jdk1.8.0_45/bin/java
Enter to keep the current selection[+], or type selection number:

デフォルトでは後に登録された方が有効になります。

# java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)

シンボリックリンクの流れ

alternativesの情報は/var/lib/alternatives/以下に保存されます。

# cat /var/lib/alternatives/java
manual
/usr/bin/java

/opt/jdk1.7.0_79/bin/java
1
/opt/jdk1.8.0_45/bin/java
2

/etc/alternatives/以下に上記と同名のシンボリックリンクが作成されます。

# ls -l /etc/alternatives/java
lrwxrwxrwx 1 root root 25 May 24 15:14 /etc/alternatives/java -> /opt/jdk1.8.0_45/bin/java

実際に使用するコマンドは上記の/etc/alternatives/javaを指しています。

# which java
/usr/bin/java
# ls -l /usr/bin/java
lrwxrwxrwx 1 root root 22 May 24 15:14 /usr/bin/java -> /etc/alternatives/java

バージョンの切り替え

--configを使用すると対話形式で選択することが出来ます。

# alternatives --config java

There is 2 program that provides 'java'.

  Auswahl    Befehl
-----------------------------------------------
   1           /opt/jdk1.7.0_79/bin/java
*+  2           /opt/jdk1.8.0_45/bin/java

Eingabe um die vorgegebene Auswahl[+] zu behalten oder geben Sie die Nummer an:1

Java7に変わりました。

# java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)

シンボリックリンクも変わってます。

# ls -l /etc/alternatives/java
lrwxrwxrwx 1 root root 25 May 25 14:18 /etc/alternatives/java -> /opt/jdk1.7.0_79/bin/java

--displayオプションではインストール済みのJavaや、ステータス、優先度などが確認できます。

# alternatives --display java
java - status is manual.
 link currently points to /opt/jdk1.7.0_79/bin/java
/opt/jdk1.8.0_45/bin/java - priority 2
/opt/jdk1.7.0_79/bin/java - priority 1
Current `best' version is /opt/jdk1.8.0_45/bin/java.

ステータスが manual の場合は、手動で使用するバージョンを選択する必要があります。もうひとつ auto というステータスがありますが、auto の場合は優先度(priority)の高い方が選択されます。

auto に切り替えるには--autoオプションを使用します。

# alternatives --auto java

優先度(priority)の高い Java8 が選択されました。

# java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)

ステータスも auto に切り替わってます。

# alternatives --display java
java - Status ist automatisch.
 Link verweist auf /opt/jdk1.8.0_45/bin/java
...

--setオプションを使用すると非対話形式で変更できます。

# alternatives --set java /opt/jdk1.8.0_45/bin/java

ステータスを auto から manual に戻したい場合は、--config--setでバージョンを変えると自動で manual に戻ります。

alternativesから除外

alternativesの管理から除外したい場合は--removeを使用します。

# alternatives --remove java /opt/jdk1.7.0_79/bin/java

JAVA_HOMEの設定

コマンドだけではなく JAVA_HOME にも当然使用できます。むしろこっちの方が利用頻度高いですね。

# alternatives --install /usr/local/java_home java_home /opt/jdk1.7.0_79 1
# alternatives --install /usr/local/java_home java_home /opt/jdk1.8.0_45 2
# alternatives --config java_home

Es gibt 2 Programme, welche 'java_home' zur Verfügung stellen.

  Auswahl    Befehl
-----------------------------------------------
   1           /opt/jdk1.7.0_79
*+ 2           /opt/jdk1.8.0_45

...

# /usr/local/java_home/bin/java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)

/etc/profile.d/に登録しておけば JAVA_HOME の切り替えも簡単になります。

# echo 'export JAVA_HOME=/usr/local/java_home' >> /etc/profile.d/jdk.sh

参考リンク

 alternatives でいろんなものを共存させる - いますぐ実践! Linuxシステム管理 / Vol.150

 Java - wget/curlでOracleJDKをダウンロード - Qiita