ES 7.4.0 and SQL CLI Script :: Environment Variable Issue?

Hi ELK Sensei (s),

I recently upgraded to Elasticsearch 7.4.0 because I want to take advantage of the SQL-like queries. But I’m hitting issues with the CLI interface script.

First off: I’m on an Ubuntu box, 16.04.4. My ES is the Docker variety; my version of Docker is 17.09.0-ce, build afdb6d4. My instance of Elasticsearch is running smoothly, with data populating very nicely.

Okay, I went to run the “elasticsearch-sql-cli” script, and here’s what happened:

[root@1234567890ab bin]# pwd
/usr/share/elasticsearch/bin
[root@1234567890ab bin]#
[root@1234567890ab bin]# ./elasticsearch-sql-cli https://elastic@127.0.0.1:9200
./elasticsearch-sql-cli: line 9: ./x-pack-env: No such file or directory
[root@1234567890ab bin]#

Weird thing is, the “x-pack-env” file IS in this directory:

[root@1234567890ab bin]# pwd
/usr/share/elasticsearch/bin
[root@1234567890ab bin]#
[root@1234567890ab bin]# ls -l *x-pack-env*
-rwxr-xr-x 1 elasticsearch root 346 Sep 27 08:40 x-pack-env
 [root@1234567890ab bin]#

When I look inside that file, here’s what I see:

[root@1234567890ab bin]# more x-pack-env
#!/bin/bash
# Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
# or more contributor license agreements. Licensed under the Elastic License;
# you may not use this file except in compliance with the Elastic License.
# include x-pack-core jars in classpath
ES_CLASSPATH="$ES_CLASSPATH:$ES_HOME/modules/x-pack-core/*"
[root@1234567890ab bin]#

And just to be complete, here’s the “elasticsearch-sql-cli” script:

[root@1234567890ab bin]# more ./elasticsearch-sql-cli
#!/bin/bash
# Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
# or more contributor license agreements. Licensed under the Elastic License;
# you may not use this file except in compliance with the Elastic License.
source "`dirname "$0"`"/elasticsearch-env
source "`dirname "$0"`"/x-pack-env
CLI_JAR=$(ls $ES_HOME/bin/elasticsearch-sql-cli-*.jar)
exec \
"$JAVA" \
-jar "$CLI_JAR" \
"$@"
[root@1234567890ab bin]#

So forgive me, but it seems like this might be an environment variable issue? The “elasticsearch-sql-cli” is in the same directory as “x-pack-env”, but “elasticsearch-sql-cli” doesn’t see it because its looking in "dirname "$0"`"/x-pack-env." And I don’t see that env variable set within the Docker container:

[root@1234567890ab bin]# printenv
HOSTNAME=1234567890ab
TERM=xterm
ELASTIC_CONTAINER=true
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
PATH=/usr/share/elasticsearch/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/usr/share/elasticsearch/bin
discovery.type=single-node
SHLVL=1
HOME=/root
_=/usr/bin/printenv
OLDPWD=/usr/share/elasticsearch
[root@1234567890ab bin]#

(This seems like it may also be a problem with the “x-pack-env” script too, as that guy needs $ES_CLASSPATH, $ES_CLASSPATH, and $ES_HOME… which don’t seem to be set, either.)

A commented-out line in "x-pack-env" says: "include x-pack-core jars in classpath" Does that mean I have to set the ENV manually?

Is there a fix for this, or am I doing something wrong? Thanks!

I'm guessing you need to specify the ES_HOME environmental variable within your docker container. As a workaround you can replace the "`dirname "$0"`" with the absolute path to the bin folder.

Thanks Matriv,

Yeah, I thought I might have to manually add the missing EnvVars too. Its nice to know that I'm on your wavelength.

Just to be clear, you are also proposing editing the elasticsearch-sql-cli script with that absolute pathname? I was reluctant to do that kind of surgery, but feel better about doing it if that's your recommendation.

THanks!

Happy to help,

There is an open issue in this area: https://github.com/elastic/elasticsearch/issues/47803

Extremely useful! thank you!

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.