Intenté instalar el oráculo 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
WTF? El archivo nombrado está obviamente allí. Que esta 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, la salida de un archivo realmente perdido 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, el formato del binario en sí 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?
Respuestas:
Por lo general, no puede ejecutar archivos binarios en NixOS, ya que necesitarán algunas variables de entorno establecidas o parchearse con patchElf. Supongo que puede instalar y ejecutar Java utilizando el administrador de paquetes nix. Probablemente también pueda crear un entorno adecuado para ejecutarlo con myEnvFun.
fuente
patchelf
para ejecutar un binario en un entorno nix puede ser de alguna utilidad para aquellos que buscan una solución. Pero ese caso es el entorno de nix "activo" del usuario en una instalación de nix de un solo usuario bajo CentOS, sus necesidades pueden ser diferentes (IIC, el enfoque más nixy sería referirse no al entorno de enlaces simbólicos "activos", sino a un entorno específico versionado, hash one en la tienda nix).Parece que nixos tiene un paquete para Oracle Jre7 .
Si desea crear una expresión nix personalizada para instalar jre o jdk, puede ser una buena idea mirar la expresión nix existente para jdk7 / jre7 .
fuente