libjli.soが見つかりません。 root権限なしでJavaをインストールする方法は?

libjli.soが見つかりません。 root権限なしでJavaをインストールする方法は?

SSHを介してアクセスできますが、ルートアクセスは必要ない単純なWebホスティングサーバーでJavaを実行したいと思います。 jdk linux / x64 tarballをダウンロードして解凍しましたが、javaバイナリを実行すると次のようになります。

jdk-14.0.1/bin/java: error while loading shared libraries: libjli.so:
cannot open shared object file: No such file or directory

ファイルはサブディレクトリにlibjli.soありますjdk-14.0.1/libが、Javaバイナリがそのファイルを見つけることができないようです。

実行中のstrace jdk-14.0.1/bin/java出力:

execve("jdk-14.0.1/bin/java", ["jdk-14.0.1/bin/java"], [/* 17 vars */]) = 0
brk(0)                                  = 0x7fa16e241000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fa16d87c000
readlink("/proc/self/exe", 0x7fffb04bc970, 4096) = -1 ENOENT (No such file or directory)
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=24961, ...}) = 0
mmap(NULL, 24961, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7fa16d875000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/tls/x86_64/libz.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/lib/x86_64-linux-gnu/tls/x86_64", 0x7fffb04bd280) = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/tls/libz.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/lib/x86_64-linux-gnu/tls", 0x7fffb04bd280) = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/x86_64/libz.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/lib/x86_64-linux-gnu/x86_64", 0x7fffb04bd280) = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/libz.so.1", O_RDONLY) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\340#\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0644, st_size=92752, ...}) = 0
mmap(NULL, 2187792, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7fa16d448000
mprotect(0x7fa16d45e000, 2093056, PROT_NONE) = 0
mmap(0x7fa16d65d000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x15000) = 0x7fa16d65d000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/libjli.so", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/lib/x86_64-linux-gnu/tls/x86_64/libjli.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/lib/x86_64-linux-gnu/tls/x86_64", 0x7fffb04bd250) = -1 ENOENT (No such file or directory)
open("/usr/lib/x86_64-linux-gnu/tls/libjli.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/lib/x86_64-linux-gnu/tls", 0x7fffb04bd250) = -1 ENOENT (No such file or directory)
open("/usr/lib/x86_64-linux-gnu/x86_64/libjli.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/lib/x86_64-linux-gnu/x86_64", 0x7fffb04bd250) = -1 ENOENT (No such file or directory)
open("/usr/lib/x86_64-linux-gnu/libjli.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/lib/x86_64-linux-gnu", {st_mode=S_IFDIR|0755, st_size=36864, ...}) = 0
open("/lib/tls/x86_64/libjli.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/lib/tls/x86_64", 0x7fffb04bd250) = -1 ENOENT (No such file or directory)
open("/lib/tls/libjli.so", O_RDONLY)    = -1 ENOENT (No such file or directory)
stat("/lib/tls", 0x7fffb04bd250)        = -1 ENOENT (No such file or directory)
open("/lib/x86_64/libjli.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/lib/x86_64", 0x7fffb04bd250)     = -1 ENOENT (No such file or directory)
open("/lib/libjli.so", O_RDONLY)        = -1 ENOENT (No such file or directory)
stat("/lib", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
open("/usr/lib/tls/x86_64/libjli.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/lib/tls/x86_64", 0x7fffb04bd250) = -1 ENOENT (No such file or directory)
open("/usr/lib/tls/libjli.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/lib/tls", 0x7fffb04bd250)    = -1 ENOENT (No such file or directory)
open("/usr/lib/x86_64/libjli.so", O_RDONLY) = -1 ENOENT (No such file or directory)
stat("/usr/lib/x86_64", 0x7fffb04bd250) = -1 ENOENT (No such file or directory)
open("/usr/lib/libjli.so", O_RDONLY)    = -1 ENOENT (No such file or directory)
stat("/usr/lib", {st_mode=S_IFDIR|0755, st_size=20480, ...}) = 0
writev(2, [{"jdk-14.0.1/bin/java", 19}, {": ", 2}, {"error while loading shared libra"..., 36},
{": ", 2}, {"libjli.so", 9}, {": ", 2}, {"cannot open shared object file", 30}, {": ", 2},
{"No such file or directory", 25}, {"\n", 1}], 10jdk-14.0.1/bin/java: error while loading shared
libraries: libjli.so: cannot open shared object file: No such file or directory
) = 128
exit_group(127)                         = ?

明らかに、Javaは書き込み権限がない場所でlibjli.so共有ライブラリファイルを検索しています。

インターネットを検索した後、同様の質問がたくさんありましたが、ルートアクセスが必要なため、提供されたヒントは利用できませんでした。しかし、私はルートアクセスの欠如が問題の中心であるとは思わない。なぜなら、私のホームLinuxシステムで同じtarballを解凍すると、同じJavaバイナリが問題なく実行されるか、ルートアクセスなしで実行されるからです。だから私はいくつかの異なる前提条件、つまりサーバーがないと仮定します。

サーバーでuname -aYieldを実行するLinux [...] 3.2.0-6-amd64 #1 SMP Debian 3.2.102-1 x86_64 GNU/Linuxことは私にとって驚くべきことではありません。

もちろん助けてくれてありがとう。より多くの情報を提供します。よろしくお願いします。

ベストアンサー1

まず、libjli.soライブラリはlibディレクトリではなくbinディレクトリに配置する必要があります。あなたが持っている方法に応じて、2つの場所のいずれかになければなりません。

jdk-14.0.1/lib/
jdk-14.0.1/jli/

次に、PATHとJAVA_HOMEを使用して環境にその場所を追加する必要があります。 .bashrcに次の行を追加して新しいシェルセッションを開始します。

export PATH=/home/presencia/jdk-14.0.1/bin:$PATH

export LD_LIBRARY_PATH=/home/presencia/jdk-14.0.1/lib:$LD_LIBRARY_PATH

export JAVA_HOME=/home/presencia/jdk-14.0.1

おすすめ記事