クラウド・シェルでJava21を使いたい(csruntimectlを調べる)
この記事は、 JPOUG Advent Calendar 2024 6日目の記事です。
5日目はNoraさんの記事でした。
-言語ランタイムの管理
現在クラウド・シェルでサポートされているランタイムのバージョンを確認するには、
listオプションを使用します。例:csruntimectl java list
実際に確認してみると3種類のJavaランタイムが使えるようです。
xxx@cloudshell:~ (ap-osaka-1)$ csruntimectl java list
graalvmjdk-17 /usr/lib64/graalvm/graalvm-java17
oraclejdk-1.8 /usr/lib/jvm/jdk-1.8.0_431-oracle-aarch64
* oraclejdk-11 /usr/lib/jvm/jdk-11.0.25-oracle-aarch64
が、、、少し古くない?
Java21*が使いたいんだけど。。
*マイクラのプラグイン開発はJava21が標準らしいので、クラウド・シェルでできたら嬉しい。
というわけで、今回は、csruntimectlについて調べてみることにします。
そもそも、csruntimectl って何?どこかにインストールされている?
xxxxxx@cloudshell:~ (ap-osaka-1)$ which csruntimectl
/usr/bin/which: no csruntimectl in (/usr/lib/jvm/jdk-11.0.25-oracle-aarch64/bin/:/opt/dataflow/scala/scala-2.12.15/bin/:/opt/dataflow/sbt/sbt/bin/:/opt/dataflow/df_setup/spark-*-bin*/bin/:/opt/ogg/bin:/home/s4r_agent/.yarn/bin:/home/s4r_agent/.config/yarn/global/node_modules/.bin:/opt/oracle/sqlcl/bin:/usr/lib/oracle/19.10/client64/bin/:/opt/odsp:/home/oci/.pyenv/plugins/pyenv-virtualenv/shims:/home/oci/.pyenv/shims:/home/oci/.pyenv/bin:/opt/rh/rh-ruby27/root/usr/local/bin:/opt/rh/rh-ruby27/root/usr/bin:/opt/rh/rh-python38/root/usr/local/bin:/opt/rh/rh-python38/root/usr/bin:/opt/rh/rh-maven35/root/usr/bin:/opt/rh/rh-git218/root/usr/bin:/opt/rh/httpd24/root/usr/bin:/opt/rh/httpd24/root/usr/sbin:/opt/rh/devtoolset-10/root/usr/bin:/home/oci/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/s4r_agent/.composer/vendor/bin:/opt/yarn-v1.22.19/bin)
実行ファイルじゃなさそうですね。
プロファイルを追いかけます。
.bashrc
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=# User specific aliases and functions
source /etc/bashrc.cloudshell
いかにもそれっぽいの読み込んでますね。
cat /etc/bashrc.cloudshell
# Make sure to source the script 'manage-runtime'
function csruntimectl() {
source /usr/local/bin/manage-runtime "$@"
}# Export JAVA_HOME and PATH env variables for the current java runtime.
csruntimectl java export
ありました!
さらに調べます。
cat /usr/local/bin/manage-runtime
#!/usr/bin/env bash
if grep -q "Red Hat Enterprise Linux Server release 7" /etc/redhat-release
then
source manage-runtime-ol7 "$@"
elif grep -q "Red Hat Enterprise Linux release 8" /etc/redhat-release
then
source manage-runtime-ol8 "$@"
fi
OSのバージョンで分岐してるみたいですね。
cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.9 (Maipo)
ということで、分岐先のファイルを見ます。
less /usr/local/bin/manage-runtime-ol7
#!/usr/bin/env bash
#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
#
# Copyright (c) 2022 Oracle and/or its affiliates. All rights reserved.
#[ -n "$ENABLE_DEBUG" ] && set -x
JDK_VERSION_ROOT="${HOME}/.oci/java"
CURRENT_VERSION_FILE="${JDK_VERSION_ROOT}/current-version"
OCI_ROOT="/etc"
VERSIONS_FILE="${OCI_ROOT}/java-versions"# Default jdk version alias specified in format javaProvider-javaVersion
DEFAULT_JAVA_VERSION=oraclejdk-11javaRuntime=false
usage() {
echo "Usage:"
echo ""
echo " csruntimectl java set <version alias> Switch to a specific java version by giving a version alias."
echo " csruntimectl java list Display all java version aliases and their corresponding JAVA_HOME."
echo " csruntimectl help Output this help usage."
echo ""
return 1
}# Get the full path from the versions file based on the javaShortVersion
searchJavaPath() {
javaShortVersion=$1javaHomePath=""
if [ -f ${VERSIONS_FILE} ]; then
while read -a line; do
if [ -n "${line}" ]; then
IFS='='
read -ra strarray <<< "${line}" # version is read into an array as tokens separated by IFS
#${strarray[0]} ${strarray[1]}
if [ "${strarray[0]}" = "${javaShortVersion}" ]; then
# Found the matching short java version
javaHomePath="${strarray[1]}"
break
fi
IFS=' ' # reset to default
fi
done < "${VERSIONS_FILE}"
else
echo >&2 "${VERSIONS_FILE} does not exist. No java version to manage."
return 1
fi
echo "${javaHomePath}"
}・・・・・
/etc/java-versions をからcsruntimeutilでセットできるJavaを見ている模様。
そして、、、/etc/java-versionを編集する方法は、、、ありません。
クラウド・シェルの制限
個別にJavaを配置すれば使用できるみたいですね。
xxxx@cloudshell: (ap-osaka-1)$wget https://download.oracle.com/java/21/latest/jdk-21_linux-aarch64_bin.tar.gz
xxxx@cloudshell: (ap-osaka-1)$cd jdk-21*/bin
xxxx@cloudshell:bin (ap-osaka-1)$ ./java -version
java version "21.0.5" 2024-10-15 LTS
Java(TM) SE Runtime Environment (build 21.0.5+9-LTS-239)
Java HotSpot(TM) 64-Bit Server VM (build 21.0.5+9-LTS-239, mixed mode, sharing)
今日はここまで。
明日は、gowatanaさんの記事です。