web-dev-qa-db-ja.com

NixOSでバイナリを実行できません-そのようなファイルまたはディレクトリはありません

現在のOracle jreをVM NixOSを実行している)にインストールしようとしました。

今、次のことが起こります:

[michas@cc:~]$ tar xvzf jre-7u40-linux-x64.tar.gz |grep bin/Java
jre1.7.0_40/bin/javaws
jre1.7.0_40/bin/Java_vm
jre1.7.0_40/bin/Java

[michas@cc:~]$ ls -l ./jre1.7.0_40/bin/Java
-rwxr-xr-x 1 michas nogroup 7750 Aug 27 09:17 ./jre1.7.0_40/bin/Java

[michas@cc:~]$ ./jre1.7.0_40/bin/Java
bash: ./jre1.7.0_40/bin/Java: No such file or directory

WTF?名前付きファイルは明らかにそこにあります。何が起こっている?

さらに分析しようとしています:

[michas@cc:~]$ strace ./jre1.7.0_40/bin/Java
execve("./jre1.7.0_40/bin/Java", ["./jre1.7.0_40/bin/Java"], [/* 53 vars */]) = -1 ENOENT (No such file or directory)
write(2, "strace: exec: No such file or di"..., 40strace: exec: No such file or directory
) = 40
exit_group(1)                           = ?
+++ exited with 1 +++

[michas@cc:~]$ strace ./jre1.7.0_40/bin/jav
strace: Can't stat './jre1.7.0_40/bin/jav': No such file or directory

さて、本当に欠けているファイルの出力は異なって見えます。

[michas@cc:~]$ file ./jre1.7.0_40/bin/Java
./jre1.7.0_40/bin/Java: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, BuildID[sha1]=a558f547fe0b95fdc6a109cb7d9692d6d7969794, not stripped

[michas@cc:~]$ file ~/t
/home/michas/t: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, not stripped

後者は問題なく実行される小さな自己コンパイルされたバイナリです。どちらも非常によく似ています。したがって、バイナリ自体のフォーマットは問題ないようです。

[michas@cc:~]$ ldd ./jre1.7.0_40/bin/Java
/run/current-system/sw/bin/ldd: line 116: ./jre1.7.0_40/bin/Java: No such file or directory

必要な共有ライブラリに関して問題があるようです。

何が起こっているのですか、どうすれば修正できますか?

11
michas

通常、NixOSでバイナリファイルを実行することはできません。それらは、いくつかの環境変数を設定するか、patchElfでパッチを適用する必要があります。 Java nixパッケージマネージャーを使用してインストールおよび実行できると思います。myEnvFunを使用して実行するための適切な環境を作成することもできます。

10
goibhniu

Nixosには Oracle jre7 のパッケージがあるようです。

Jreまたはjdkをインストールするためのカスタムnix式を作成する場合は、既存の jdk7/jre7のnix式 を確認することをお勧めします。

3
Davorak