この記事を書いている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 件のコメント:
コメントを投稿