2021/04/03

【解決】Java 11をGentooにインストールする方法

この記事を書いている2021年4月3日現在、GentooではJava 11はportageには入っているもののmaskがかかっていてインストールができない。

package.accept_keywordsで~amd64 (Intel 64ビット環境の場合)をつけても、emerge @worldでインストールすることもできない。
emerge dev-java/openjdk-binなどによりインストールすることはできるが、この場合、eselect java-vm listに表示されないので、javaを呼び出す際にはフルパスで指定してやる必要がある。

これでは不便なので、どうするか。

一つの答えは、以下のようにそれぞれのファイルに追記したうえで、emerge @worldを行う。

# grep openjdk-bin /etc/portage/package.accept_keywords /etc/portage/package.use /etc/portage/profile/package.use.mask
/etc/portage/package.accept_keywords:dev-java/openjdk-bin:11 ~amd64
/etc/portage/package.use:dev-java/openjdk-bin:11 gentoo-vm
/etc/portage/profile/package.use.mask:dev-java/openjdk-bin:11 -gentoo-vm


ここでは何が起きているのか。

まず、package.accept_keywordsでdev-java/openjdk-binに~amd64をつけて、emerge dev-java/openjdk-binによりインストールすると、以下のようなメッセージが表示される。

# grep openjdk-bin /etc/portage/package.accept_keywords /etc/portage/package.use /etc/portage/profile/package.use.mask
/etc/portage/package.accept_keywords:dev-java/openjdk-bin ~amd64

# emerge -uDNtv openjdk-bin

These are the packages that would be merged, in reverse order:

Calculating dependencies... done!
[ebuild     U ~] dev-java/openjdk-bin-8.282_p08:8::gentoo [8.272_p10:8::gentoo] USE="alsa (selinux) -cups -examples -headless-awt -source" 100462 KiB
[ebuild  NS   ~] dev-java/openjdk-bin-11.0.10_p9:11::gentoo [8.272_p10:8::gentoo] USE="alsa (selinux) -cups (-gentoo-vm) -headless-awt -source (-examples%)" 189522 KiB

Total: 2 packages (1 upgrade, 1 in new slot), Size of downloads: 289984 KiB


>>> Verifying ebuild manifests

>>> Running pre-merge checks for dev-java/openjdk-bin-11.0.10_p9

>>> Emerging (1 of 2) dev-java/openjdk-bin-11.0.10_p9::gentoo
~~~(中略)~~~

>>> Installing (2 of 2) dev-java/openjdk-bin-8.282_p08::gentoo
~~~(中略)~~~

 * Messages for package dev-java/openjdk-bin-11.0.10_p9:

 * The experimental gentoo-vm USE flag has not been enabled so this JDK
 * will not be recognised by the system. For example, simply calling
 * "java" will launch a different JVM. This is necessary until Gentoo
 * fully supports Java 11. This JDK must therefore be invoked using its
 * absolute location under /opt/openjdk-bin-11.0.10_p9.
>>> Auto-cleaning packages...

>>> No outdated packages were found on your system.

 * GNU info directory index is up-to-date.

「gentoo-vm USE flag has not been enabled so this JDK will not be recognised by the system」、つまりgentoo-vm USEフラグが有効になっていないので、このJDKはシステム全体では認識されていないということなので、gentoo-vmというUSEフラグをつけてやれば良いということになる。

そこで、package.useにてdev-java/openjdk-bin(のSlot 11)に対してgentoo-vmを付加してやるとうまくいくと思うが、何も変わらない。

これは、profileの定義の中でdev-java/openjdk-bin:11に対して、gentoo-vm USEフラグをmaskしているため(以下の通り)。
注記:下記のファイルはmaskをかけるためのファイルなので、「-」無しで指定するとmaskがかかり、「-」をつけて指定するとmaskが外れる。

# grep -C3 gentoo-vm /usr/portage/profiles/base/package.use.mask

# James Le Cuirot <chewi@gentoo.org> (2017-12-17)
# Java 9+ is not yet fully supported on Gentoo. Having a masked
# gentoo-vm flag allows us to provide it without it breaking Gentoo
# packages. Those who wish to experiment with it as a fully recognised
# Gentoo JVM can unmask the flag.
dev-java/openjdk-jre-bin:11 gentoo-vm
dev-java/openjdk-bin:11 gentoo-vm
dev-java/openjdk:11 gentoo-vm

# Andreas K. Huettel <dilfridge@gentoo.org> (2017-09-09)
# Potentially destructive. Use it only if you know what you're doing.

そこで、/etc/portage/profile/package.use.maskを使い、dev-java/openjdk-binに対するprofileレベルでのgentoo-vmのmaskを外す。
注記:package.use.maskファイルはUSE maskをつけるための設定なので、dev-java/openjdk-binに対して「マイナス付き」の-gentoo-vmのmaskをかけることにより、gentoo-vmのUse maskが外れる。

最後に、このUSEフラグの操作をJava 11だけに限定しておくため、Slot 11に対してのみの制御とする「:11」を「openjdk-bin」の後ろにつける。(参考:https://wiki.gentoo.org/wiki/Version_specifier

これをまとめると上述した設定を行うことになる。

0 件のコメント:

コメントを投稿