Gentoo Java アップグレードガイド
1.
始める前に
アップグレードを始める前に、いくつか知っておくと便利な用語があります。
- Generation
-
-
これは新しいコンセプトです。このアイデアでは、GenerationとはJavaのパッケージをビルドするためのツールとeclassのセットです。
ある時点で、現在のGenerationから新しいGenerationに移行を始めます。この間、両方のGenerationが共存します。
例えば、システムVMであるGeneration X とシステムVMである Generation X+1が共存することになります。
これにより、新しいGenerationへの移行を行っている間、Generation X とGeneration X+1を使用するパッケージが共存することができます。
- Generation 1
-
-
このGenerationは現存のjava-pkgやjava eclass、java-config-1.xを含みます。
- Generation 2
-
-
これは近年開発されてきた新しいGenerationです。
- Generation 1 システムVM
-
-
これはGeneration 1からeclassを使用するJavaパッケージをemergeするために、使用されるVMです。
これはjava-config-1 --set-system-vm <choice of vm>により設定します。
- Generation 2 システムVM
-
-
Generation 2では、システムVMはrootとユーザVMを設定していないユーザにより使用されます。
- Generation 2 ビルドVM
-
-
Generation 2 はVMに新しいクラスを導入しました。ビルドVMはJavaパッケージのビルドを行うときに使用されます。
デフォルトでは、パッケージは可能な限り低いバージョンのVMを使用するよう試みます。
使用されるベンダーはプラットフォームに依存します。
これらのデフォルトの動作は、/usr/share/java-config-2/config/jdk-defaults.confにより定義されます。
加えて、ビルドVMは/etc/java-config-2/build/jdk.confにより設定することができます。
2.
キーワード
もし、あなたがstable環境の場合(例えば~x86、~ppcまたは~amd64ではなくx86、ppcまたはamd64)、/etc/portage/package.keywordsにいくつか追加する必要があります。
Code Listing 2.1: package.keywords |
# Java パッケージのコア
dev-java/ant-core
dev-java/ant-tasks
dev-java/ant
dev-java/java-config
dev-java/java-config-wrapper
dev-java/javatoolkit
# JDK
dev-java/sun-jdk
dev-java/ibm-jdk-bin
dev-java/jrockit-jdk-bin
dev-java/blackdown-jdk
dev-java/kaffe
# JRE
dev-java/sun-jre-bin
dev-java/ibm-jre-bin
dev-java/blackdown-jre
# Virtual
virtual/jdk
virtual/jre
# コンパイラ
dev-java/eclipse-ecj
dev-java/jikes
# ドキュメント
dev-java/java-sdk-docs
# そのほかの、Generation 2にアップグレードされ、
# Generation 1 ではビルドや実行がちゃんとできないもの
dev-java/lucene
|
Important:
新しいJavaシステムに関するすべてのパッケージを追加することが重要です。
そうしないと、このガイドの後のステップで問題が発生するでしょう。
|
3.
java-configのアップデート
新しいパッケージである、java-config-wrapperは古いバージョンのjava-configにブロックされるので、まずはこれを削除します。
Code Listing 3.1: 古いjava-configを削除する |
# emerge -C java-config
|
これで新しいバージョンのjava-configをインストールできるでしょう。
Code Listing 3.2: 新しいjava-configをインストールする |
# emerge -1 =java-config-1* =java-config-2*
|
4.
環境をチェックする
我々は新しいスクリプト/usr/bin/java-check-environmentを提供しました。
これはその名が示すように、Java環境をチェックします。
これは次にどのようにすれば、見つかった問題を修正できるかを示します。実行してみましょう。
Code Listing 4.1: 環境をチェックする |
# /usr/bin/java-check-environment
|
Note:
このコマンドはrootではないユーザでも実行可能です。rootやシステムはGeneration 1 のVMのみ必要です。
ユーザアカウントで実行した場合は、このスクリプトはそれが欠けていることについてエラーを返すでしょう。
これは普通で、単にその部分は無視してください。
|
示される内容は以下です。
バーチャルマシンのアップデート
最初のセクションは、古い/etc/env.d/javaのjava-configファイルをチェックします。
指示は簡単です。ただそれが示すファイルを取り除いてください。その後、それが示すパッケージを再度emergeしてください。
古いユーザー設定を削除する
次のセクションでは、java-check-environmentがGeneration-1の設定をホームディレクトリにあることについて、丁寧に警告してくれます。
これらのファイルはもはや現在の形式ではサポートされません。
もしjava-check-environmentが問題を検出した場合は、アドバイスに従い、以下を実行します。
Note: これは非rootユーザにのみ適応されます。 |
Code Listing 4.2: 古いユーザー設定を削除する |
# java-config-2 --list-available-vms
# java-config-2 --set-user-vm <Choice of VM>
|
Generation-1のシステムVMが設定されていることを確認する
次に起こりうるエラーはGeneration-1システムVMがない場合です。
Code Listing 4.3: Generation1のVMをセットする |
# java-config-1 -L
# java-config-1 -S <system-vm-of-choice-here>
|
Important:
Generation-1のシステムVMは必ずJDK1.4である必要があります。まだない場合はemergeする必要があります。
|
Note:
いかなる場合もGeneration-1はJDK1.4である必要があります。
これはGeneration-1のパッケージをビルドする場合やJava1.5でコンパイルされていないGeneration-2パッケージのために必要です。
|
もちろん通常通り以下を実行する必要があります。
Code Listing 4.4: 環境変数をアップデートする |
# env-update && source /etc/profile
|
念のため正しい環境になったか確認して下さい。
JDK1.5をGeneration-1 VMとする
次のチェックは、もし、JDK1.5をGeneration-1のシステムVMとしている場合です。
この場合、JDK 1.4を代わりに使うようにすべきです。
この時点までこのガイドに従ってきたなら、上記の手順に従い、単純にGeneration-1の新しいシステムVMとして設定するだけです。
1.5のためにバイトコードをコンパイルしてきた可能性があります。
これは警告"UnsupportedClassVersionError"を引き起こします。これを修正したければ以下を実行してください。
Code Listing 4.5: java-1.5-fixerスクリプトを実行する |
# emerge --noreplace javatoolkit portage-utils
# /usr/bin/java-1.5-fixer
|
Important:
これまでJDK1.5を使用してきた場合、java-1.5-fixerを実行すべきです。
これは散在するJDK1.5バイトコードが存在しないことを確実にします。
|
Important:
java-1.5-fixerはJDK1.5でコンパイルされたパッケージをJDK1.4でリビルドする便利な機能を提供するだけです。
これは完全ではなくすべてのシステムのパッケージを修正できるわけではありません。
失敗した場合、失敗したパッケージをunmergeし、再度失敗したパッケージをemergeする必要があることがほとんどです。
|
5.
更新されたドキュメント
これらの変更を反映するため、以下のドキュメントが更新されました。
6.
共通の問題や質問
java-check-environmentは何度も同じVMについての問題を出力します。
また、java-config-1 -Lが何も出力しません。
これはunmaskするキーワードが間違っているために起こっています。
これを修正するには、新しいJavaシステムに関するすべてをunmaskするように設定する必要があります。
具体的には、たいていの場合、システムにインストールしたVMのすべてがunmaskされるよう設定されていないことが原因です。
なぜJDK1.5をGeneration-1のシステムVMとして使用できないのか
JDK1.5をGeneration-1のシステムVMとして用いる事で、最初の段階でpackege.maskとなった原因の、全ての問題に遭遇するでしょう。
しばらくの間何人かの人々は、JDK1.5をシステムVMとして用いることに問題はありませんでしたが、多くのパッケージでは問題を抱えていました。
特に新しいJavaシステムに変更されていない全てのパッケージを動作させるため、JDK1.4は必要です。
アプリケーションが使おうとするJAVA_HOMEはGeneration-1 VMに設定されます
いくつかのアプリケーションはJAVA_HOMEにより、javaを呼び出します。
そのため、JAVA_HOMEはGeneration-1のシステムVMが何なのか設定されています。(すなわち/etc/env.d/20java)
これは特定のアプリケーションが新しいeclassを使用するように変更されると問題となるでしょう。
回避方法は、下記に従いJAVA_HOMEを設定してください。
Code Listing 6.1: 環境をチェックする |
if [[ -L $HOME/.gentoo/java-config-2/current-user-vm ]]; then
export JAVA_HOME=$HOME/.gentoo/java-config-2/current-user-vm
elif [[ -L /etc/java-config-2/current-system-vm ]]; then
export JAVA_HOME=/etc/java-config-2/current-system-vm
fi
|
これを.bash_profileに含めることもできますが、推奨されていません。
これは新しいシステムが取り除いた余計な物について、環境につながりが残したままになるためです。
例えば、ユーザvmの設定がない場合システムVMが採用されます。
もし後でユーザVMを設定するなら、JAVA_HOMEを正しく取得できるように~/.bash_profileを読み込む必要があります。
Warning:
これらをrootユーザのbash_profileに使用しないでください。
もし JDK 1.5のVMをGeneration-2のシステムVMとしていた場合、Generation-1のパッケージを壊すことになります。
|
よいアプローチはアプリケーションの移行を新しいビルドシステム上で行い、適切に動くことを確実にする方法です。
もし、特定のアプリケーションの実行で問題に悩まされたら、#gentoo-javaのnichojにコンタクトを取っるか、gentoo-javaメーリングリストにメッセージを出してください。
The contents of this document, unless otherwise expressly stated, are licensed under the CC-BY-SA-2.5 license. The Gentoo Name and Logo Usage Guidelines apply.
|