I am a little lost. I think you are over-complicating things maybe based on reading too much.
To install single-node elasticsearch instance onto a fresh RHEL install should be 1) import a key, 2) add a yum repo, 3) install the package - yum/dnf does all the work. To make a cluster would require a little more work, but not much.
The subject mentions "persistent keystore errors", and you mentioned again "corrupted keystones", but if I've understood correctly these were problems last time, not currently? If thats not the case, please share/show more information incl which errors you are getting now?
As for installing VMware, well it's a while since I used it but I guess it needs build kernel modules. I use VirtualBox, but there's not much difference really, could use virt-install/virt-manager too. There's really too many options for virtualisation nowadays 
I just so happened to install a RHEL 10 (test) system yesterday, let give it a go, not officially supported yet but ... will be much the same as on RHEL 8/9. I will follow:
Note it seemed to work, with only a minor whine around var/run
which is now a link to /run
/usr/lib/tmpfiles.d/elasticsearch.conf:1: Line references path below legacy directory /var/run/, updating /var/run/elasticsearch → /run/elasticsearch; please update the tmpfiles.d/ drop-in file accordingly.
which is not important for here.
Here's the full process, my user (kevin) has sudo rights.
[kevin@rhel10x1 ~]$ sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
[kevin@rhel10x1 ~]$ sudo vi /etc/yum.repos.d/elastic.repo
< pasted the contents shown below >
[kevin@rhel10x1 ~]$ sudo cat /etc/yum.repos.d/elastic.repo
[elasticsearch]
name=Elasticsearch repository for 9.x packages
baseurl=https://artifacts.elastic.co/packages/9.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md
[kevin@rhel10x1 ~]$ id elasticsearch
id: ‘elasticsearch’: no such user
[kevin@rhel10x1 ~]$ sudo dnf install --enablerepo=elasticsearch elasticsearch -y
Updating Subscription Management repositories.
Last metadata expiration check: 0:11:58 ago on Mon Jun 16 21:06:05 2025.
Dependencies resolved.
========================================================================================================================
Package Architecture Version Repository Size
========================================================================================================================
Installing:
elasticsearch x86_64 9.0.2-1 elasticsearch 620 M
Transaction Summary
========================================================================================================================
Install 1 Package
Total download size: 620 M
Installed size: 1.2 G
Downloading Packages:
elasticsearch-9.0.2-x86_64.rpm 5.5 MB/s | 620 MB 01:52
------------------------------------------------------------------------------------------------------------------------
Total 5.5 MB/s | 620 MB 01:52
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
Preparing : 1/1
Running scriptlet: elasticsearch-9.0.2-1.x86_64 1/1
Creating elasticsearch group... OK
Creating elasticsearch user... OK
Installing : elasticsearch-9.0.2-1.x86_64 1/1
Running scriptlet: elasticsearch-9.0.2-1.x86_64 1/1
--------------------------- Security autoconfiguration information ------------------------------
Authentication and authorization are enabled.
TLS for the transport and HTTP layers is enabled and configured.
The generated password for the elastic built-in superuser is : UNMkFuZcZNH=QRg9q22F
If this node should join an existing cluster, you can reconfigure this with
'/usr/share/elasticsearch/bin/elasticsearch-reconfigure-node --enrollment-token <token-here>'
after creating an enrollment token on your existing cluster.
You can complete the following actions at any time:
Reset the password of the elastic built-in superuser with
'/usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic'.
Generate an enrollment token for Kibana instances with
'/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana'.
Generate an enrollment token for Elasticsearch nodes with
'/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node'.
-------------------------------------------------------------------------------------------------
### NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using systemd
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
### You can start elasticsearch service by executing
sudo systemctl start elasticsearch.service
/usr/lib/tmpfiles.d/elasticsearch.conf:1: Line references path below legacy directory /var/run/, updating /var/run/elasticsearch → /run/elasticsearch; please update the tmpfiles.d/ drop-in file accordingly.
Installed products updated.
Installed:
elasticsearch-9.0.2-1.x86_64
Complete!
[kevin@rhel10x1 ~]$ sudo systemctl start elasticsearch.service
[kevin@rhel10x1 ~]$ sudo systemctl status elasticsearch.service | cat
● elasticsearch.service - Elasticsearch
Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; disabled; preset: disabled)
Active: active (running) since Mon 2025-06-16 21:22:43 UTC; 24s ago
Invocation: ab33179b9abc44ecafcb9f0a019d8d62
Docs: https://www.elastic.co
Main PID: 5205 (java)
Tasks: 111 (limit: 10395)
Memory: 1.3G (peak: 1.3G)
CPU: 40.407s
CGroup: /system.slice/elasticsearch.service
├─5205 /usr/share/elasticsearch/jdk/bin/java -Xms4m -Xmx64m -XX:+UseSerialGC -Dcli.name=server -Dcli.script=/usr/share/elasticsearch/bin/elasticsearch -Dcli.libs=lib/tools/server-cli -Des.path.home=/usr/share/elasticsearch -Des.path.conf=/etc/elasticsearch -Des.distribution.type=rpm "-Des.java.type=bundled JDK" -cp "/usr/share/elasticsearch/lib/*:/usr/share/elasticsearch/lib/cli-launcher/*" org.elasticsearch.launcher.CliToolLauncher -p /var/run/elasticsearch/elasticsearch.pid --quiet
├─5267 /usr/share/elasticsearch/jdk/bin/java -Des.networkaddress.cache.ttl=60 -Des.networkaddress.cache.negative.ttl=10 -XX:+AlwaysPreTouch -Xss1m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djna.nosys=true -XX:-OmitStackTraceInFastThrow -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -Dlog4j2.formatMsgNoLookups=true -Djava.locale.providers=CLDR -Dorg.apache.lucene.vectorization.upperJavaFeatureVersion=24 -Des.distribution.type=rpm "-Des.java.type=bundled JDK" --enable-native-access=org.elasticsearch.nativeaccess,org.apache.lucene.core --enable-native-access=ALL-UNNAMED --illegal-native-access=deny -XX:ReplayDataFile=/var/log/elasticsearch/replay_pid%p.log -Des.entitlements.enabled=true -XX:+EnableDynamicAgentLoading -Djdk.attach.allowAttachSelf=true --patch-module=java.base=lib/entitlement-bridge/elasticsearch-entitlement-bridge-9.0.2.jar --add-exports=java.base/org.elasticsearch.entitlement.bridge=org.elasticsearch.entitlement,java.logging,java.net.http,java.naming,jdk.net -XX:+UseG1GC -Djava.io.tmpdir=/tmp/elasticsearch-7540940937904985010 --add-modules=jdk.incubator.vector -Dorg.apache.lucene.store.defaultReadAdvice=normal -XX:+HeapDumpOnOutOfMemoryError -XX:+ExitOnOutOfMemoryError -XX:HeapDumpPath=/var/lib/elasticsearch -XX:ErrorFile=/var/log/elasticsearch/hs_err_pid%p.log "-Xlog:gc*,gc+age=trace,safepoint:file=/var/log/elasticsearch/gc.log:utctime,level,pid,tags:filecount=32,filesize=64m" -Xms852m -Xmx852m -XX:MaxDirectMemorySize=446693376 -XX:G1HeapRegionSize=4m -XX:InitiatingHeapOccupancyPercent=30 -XX:G1ReservePercent=15 --module-path /usr/share/elasticsearch/lib --add-modules=jdk.net --add-modules=jdk.management.agent --add-modules=ALL-MODULE-PATH -m org.elasticsearch.server/org.elasticsearch.bootstrap.Elasticsearch
└─5287 /usr/share/elasticsearch/modules/x-pack-ml/platform/linux-x86_64/bin/controller
Jun 16 21:21:56 rhel10x1 systemd[1]: Starting elasticsearch.service - Elasticsearch...
Jun 16 21:22:43 rhel10x1 systemd[1]: Started elasticsearch.service - Elasticsearch.
[kevin@rhel10x1 ~]$ EUSER=elastic EPASS="UNMkFuZcZNH=QRg9q22F"
[kevin@rhel10x1 ~]$ curl -sku "${EUSER}:${EPASS}" https://localhost:9200 | jq -r .
{
"name": "rhel10x1",
"cluster_name": "elasticsearch",
"cluster_uuid": "_wrTbkCRQauLMU8ZfYXtZA",
"version": {
"number": "9.0.2",
"build_flavor": "default",
"build_type": "rpm",
"build_hash": "0a58bc1dc7a4ae5412db66624aab968370bd44ce",
"build_date": "2025-05-28T10:06:37.834829258Z",
"build_snapshot": false,
"lucene_version": "10.1.0",
"minimum_wire_compatibility_version": "8.18.0",
"minimum_index_compatibility_version": "8.0.0"
},
"tagline": "You Know, for Search"
}
[kevin@rhel10x1 ~]$ curl -sku "${EUSER}:${EPASS}" https://localhost:9200/_cat/indices
[kevin@rhel10x1 ~]$ curl -sku "${EUSER}:${EPASS}" "https://localhost:9200/_cat/indices?index=.*"
green open .security-7 h3oQBa82SWqOwGEayi3T_g 1 0 30 0 40.9kb 40.9kb 40.9kb
green open .ds-ilm-history-7-2025.06.16-000001 OcN-xcEiRniz30GpGO5Ouw 1 0 3 0 9.7kb 9.7kb 9.7kb
green open .ds-.logs-elasticsearch.deprecation-default-2025.06.16-000001 497jow5-S_qExb7LJzjNxA 1 0 1 0 10.2kb 10.2kb 10.2kb
[kevin@rhel10x1 ~]$ cat /etc/os-release
NAME="Red Hat Enterprise Linux"
VERSION="10.0 (Coughlan)"
ID="rhel"
ID_LIKE="centos fedora"
VERSION_ID="10.0"
PLATFORM_ID="platform:el10"
PRETTY_NAME="Red Hat Enterprise Linux 10.0 (Coughlan)"
ANSI_COLOR="0;31"
LOGO="fedora-logo-icon"
CPE_NAME="cpe:/o:redhat:enterprise_linux:10::baseos"
HOME_URL="https://www.redhat.com/"
VENDOR_NAME="Red Hat"
VENDOR_URL="https://www.redhat.com/"
DOCUMENTATION_URL="https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/10"
BUG_REPORT_URL="https://issues.redhat.com/"
REDHAT_BUGZILLA_PRODUCT="Red Hat Enterprise Linux 10"
REDHAT_BUGZILLA_PRODUCT_VERSION=10.0
REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux"
REDHAT_SUPPORT_PRODUCT_VERSION="10.0"
[kevin@rhel10x1 ~]$ head -1 /proc/meminfo
MemTotal: 1746136 kB
[kevin@rhel10x1 ~]$ egrep ^proc /proc/cpuinfo
processor : 0
processor : 1
[kevin@rhel10x1 ~]$
[kevin@rhel10x1 ~]$ sudo ls -ld /var/run /run
drwxr-xr-x. 38 root root 1140 Jun 16 21:21 /run
lrwxrwxrwx. 1 root root 6 Apr 23 14:35 /var/run -> ../run
[kevin@rhel10x1 ~]$ id elasticsearch
uid=990(elasticsearch) gid=990(elasticsearch) groups=990(elasticsearch)
[kevin@rhel10x1 ~]$ ps -uelasticsearch -opid,command | cat
PID COMMAND
5205 /usr/share/elasticsearch/jdk/bin/java -Xms4m -Xmx64m -XX:+UseSerialGC -Dcli.name=server -Dcli.script=/usr/share/elasticsearch/bin/elasticsearch -Dcli.libs=lib/tools/server-cli -Des.path.home=/usr/share/elasticsearch -Des.path.conf=/etc/elasticsearch -Des.distribution.type=rpm -Des.java.type=bundled JDK -cp /usr/share/elasticsearch/lib/*:/usr/share/elasticsearch/lib/cli-launcher/* org.elasticsearch.launcher.CliToolLauncher -p /var/run/elasticsearch/elasticsearch.pid --quiet
5267 /usr/share/elasticsearch/jdk/bin/java -Des.networkaddress.cache.ttl=60 -Des.networkaddress.cache.negative.ttl=10 -XX:+AlwaysPreTouch -Xss1m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djna.nosys=true -XX:-OmitStackTraceInFastThrow -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -Dlog4j2.formatMsgNoLookups=true -Djava.locale.providers=CLDR -Dorg.apache.lucene.vectorization.upperJavaFeatureVersion=24 -Des.distribution.type=rpm -Des.java.type=bundled JDK --enable-native-access=org.elasticsearch.nativeaccess,org.apache.lucene.core --enable-native-access=ALL-UNNAMED --illegal-native-access=deny -XX:ReplayDataFile=/var/log/elasticsearch/replay_pid%p.log -Des.entitlements.enabled=true -XX:+EnableDynamicAgentLoading -Djdk.attach.allowAttachSelf=true --patch-module=java.base=lib/entitlement-bridge/elasticsearch-entitlement-bridge-9.0.2.jar --add-exports=java.base/org.elasticsearch.entitlement.bridge=org.elasticsearch.entitlement,java.logging,java.net.http,java.naming,jdk.net -XX:+UseG1GC -Djava.io.tmpdir=/tmp/elasticsearch-7540940937904985010 --add-modules=jdk.incubator.vector -Dorg.apache.lucene.store.defaultReadAdvice=normal -XX:+HeapDumpOnOutOfMemoryError -XX:+ExitOnOutOfMemoryError -XX:HeapDumpPath=/var/lib/elasticsearch -XX:ErrorFile=/var/log/elasticsearch/hs_err_pid%p.log -Xlog:gc*,gc+age=trace,safepoint:file=/var/log/elasticsearch/gc.log:utctime,level,pid,tags:filecount=32,filesize=64m -Xms852m -Xmx852m -XX:MaxDirectMemorySize=446693376 -XX:G1HeapRegionSize=4m -XX:InitiatingHeapOccupancyPercent=30 -XX:G1ReservePercent=15 --module-path /usr/share/elasticsearch/lib --add-modules=jdk.net --add-modules=jdk.management.agent --add-modules=ALL-MODULE-PATH -m org.elasticsearch.server/org.elasticsearch.bootstrap.Elasticsearch
5287 /usr/share/elasticsearch/modules/x-pack-ml/platform/linux-x86_64/bin/controller