No se puede ejecutar binario en NixOS: no existe tal archivo o directorio

No se puede ejecutar binario en NixOS: no existe tal archivo o directorio

Intenté instalar el Oracle jre actual en una máquina virtual que ejecuta NixOS.

Ahora sucede lo siguiente:

[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

¿Qué carajo? El archivo nombrado obviamente está ahí. ¿Qué está pasando?

Tratando de analizar más a fondo:

[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

Ok, el resultado de un archivo que realmente falta se ve diferente.

[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

Este último es un pequeño binario autocompilado que se ejecuta sin problemas. Ambos se ven muy similares. Por lo tanto, formatear el binario parece estar bien.

[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

Parece que hay un problema con respecto a las bibliotecas compartidas necesarias.

¿Qué está pasando y cómo puedo solucionarlo?

Respuesta1

Por lo general, no se pueden ejecutar archivos binarios en NixOS; necesitarán establecer algunas variables de entorno o parchearlos con patchElf. Supongo que puedes instalar y ejecutar Java usando el administrador de paquetes nix. Probablemente también puedas crear un entorno adecuado para ejecutarlo usando myEnvFun.

Respuesta2

Parece que nixos tiene un paquete paraoráculo jre7.

Si desea crear una expresión nix personalizada para instalar jre o jdk, entonces podría ser una buena idea mirar la existenteexpresión nix para jdk7/jre7.

información relacionada