Open3
Linuxで色々
elasticsearchをビルドしようとしたらJDKのバージョンが違っていた
やること
以下のコマンドを実行したらJDKのバージョンが違っていたので再インストールする
./gradlew run --debug-jvm
(抜粋)
* What went wrong:
Error resolving plugin [id: 'com.gradle.develocity', version: '3.18.1']
> A problem occurred configuring project ':build-tools-internal'.
> A problem occurred evaluating project ':build-tools-internal'.
> Java 21 is required to build Elasticsearch but current Java is version 17.
実行環境
# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.5 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.5 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
openjdk-21をインストールする
# sudo apt install -y openjdk-21-jdk
# which java
/usr/bin/java
# java --version
openjdk 21.0.5 2024-10-15
OpenJDK Runtime Environment (build 21.0.5+11-Ubuntu-1ubuntu122.04)
OpenJDK 64-Bit Server VM (build 21.0.5+11-Ubuntu-1ubuntu122.04, mixed mode, sharing)
elasticsearchを実行しようとするとDockerが必要らしい
やること
UbuntuにDocker-Desktopをインストールする
実行環境
# cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.5 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.5 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
Dockerインストール手順
インストール手順は以下を参照
インストール後にDocker Desktopを立ち上げようとすると以下のような画面が表示される。
原因はKVMが存在しないためらしい(以下参照)
以下のコマンド実行結果を見るとDockerは入ってるっぽい。
$ docker compose version
Docker Compose version v2.29.7-desktop.1
$ docker --version
Docker version 27.3.1, build ce12230
KVMってどう入れれば良いのか調べようと思ったが、ひとまずインストール手順を参考に以下のコマンドを実行してみたところ、そもそもCPUがKVMをサポートしていないみたい。これはオワタか??
$ kvm-ok
sh: 0: getcwd() failed: No such file or directory
sh: 0: getcwd() failed: No such file or directory
sh: 0: getcwd() failed: No such file or directory
INFO: Your CPU does not support KVM extensions
KVM acceleration can NOT be used
とにかくDockerは入っているので良しとする。
elasticsearchをビルドしてIntellijからデバッグできるようにする
概要
- elasticsearchをcloneする
- elasticsearchをbuildする
- elasticsearchをdebugする
実行環境
- elasticsearch 8.16.0
$ cat /etc/os-release
PRETTY_NAME="Ubuntu 22.04.5 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.5 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy
$ java --version
openjdk 21.0.5 2024-10-15
OpenJDK Runtime Environment (build 21.0.5+11-Ubuntu-1ubuntu122.04)
OpenJDK 64-Bit Server VM (build 21.0.5+11-Ubuntu-1ubuntu122.04, mixed mode, sharing)
$ docker compose version
Docker Compose version v2.29.7-desktop.1
$ docker --version
Docker version 27.3.1, build ce12230
1.elasticsearchをcloneする
インストールしたいディレクトリ階層でこれを実行するだけでOK
git clone git@github.com:elastic/elasticsearch.git
2.elasticsearchをbuildする
今回はIntellijにcloneしたディレクトリをそのままインポートして自動的にbuildしてもらうことにする。erasticsearch配下にある以下のファイルを適宜参考に進めていく。
- README.asciidoc
- COTRIBUTING.md
- TESTING.asciidoc
①対応するJDKをインストールする
詳細はCONTRIBUTING.mdを参照のこと。インストールは以下の手順でOK。
仮にバージョンが違っていても./gradlew run時のエラーログに出力されるのでそれに従って対応しているバージョンに入れ替えればOK。②Dockerをインストールする
詳細はREADME.asciidocを参照のこと。インストールは以下の手順でOK。
なお、KVMが存在しないためDocker Desktopはインストールできていないが、Dockerは問題なく落とせているようなので取り敢えずこれで進める(結果は問題なくdebugまでできた)③ Intellijにインポートする
ここらへんを参考にただインポートするだけでした。勝手にbuildまでやってくれた。
3.elasticsearchをdebugする
ここは2-③のURLを参考に進めていく。具体的な手順は以下。
- IntelliJ側で「Debug Elasticsearch」を選択してdebugを起動する。接続先ポートは5007を設定(詳細はTESTING.asciidocに記載があるので参考にする)
- リモートデバックオブションを指定して以下コマンド(例のごとくTESTING.asciidocに記載がある)を実行。初回は結構時間がかかる。
./gradlew run --debug-jvm
- Intellijのdebugコンソールに以下が出力される → OK
Connected to the target VM, address: 'localhost:5007', transport: 'socket'
- RestRequestがよく使われるクラスだそうなので適当なメソッドにブレークポイントを打ってcurlを実行するとちゃんと処理が止まる → OK
curl -u elastic:password localhost:9200
まとめ
elasticsearchをデバッグ実行するにあたっての手順をまとめた。
ここまでやっておいて肝心のelasticsearchのことを何も知らないため「ElasticStack実践入門」を読むことにします。