Open3

Linuxで色々

PamadaPamada

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)
PamadaPamada

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インストール手順

インストール手順は以下を参照
https://docs.docker.com/desktop/setup/install/linux/ubuntu/

インストール後にDocker Desktopを立ち上げようとすると以下のような画面が表示される。

原因はKVMが存在しないためらしい(以下参照)
https://forums.docker.com/t/docker-failed-to-run-due-to-virtualisation-support-kvm-is-not-enabled-by-host/137920
以下のコマンド実行結果を見ると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は入っているので良しとする。

PamadaPamada

elasticsearchをビルドしてIntellijからデバッグできるようにする

概要

  1. elasticsearchをcloneする
  2. elasticsearchをbuildする
  3. 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。
https://zenn.dev/hamutarosan_dev/articles/c55337c51e8cd9
仮にバージョンが違っていても./gradlew run時のエラーログに出力されるのでそれに従って対応しているバージョンに入れ替えればOK。

②Dockerをインストールする

詳細はREADME.asciidocを参照のこと。インストールは以下の手順でOK。
https://zenn.dev/hamutarosan_dev/articles/22ec4c4716c491
なお、KVMが存在しないためDocker Desktopはインストールできていないが、Dockerは問題なく落とせているようなので取り敢えずこれで進める(結果は問題なくdebugまでできた)

③ Intellijにインポートする

ここらへんを参考にただインポートするだけでした。勝手にbuildまでやってくれた。
https://qiita.com/daixque/items/9b7632ebfa9f7712852e#IntelliJにインポートしてデバッグ実行
https://ryook.hatenablog.jp/entry/es-intellij-debug

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実践入門」を読むことにします。