
Tentei instalar o oracle jre atual em uma VM rodando NixOS.
Agora acontece o seguinte:
[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
O que é isso? O arquivo nomeado está obviamente lá. O que está acontecendo?
Tentando analisar melhor:
[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, a saída de um arquivo realmente ausente parece 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
O último é um pequeno binário autocompilado rodando sem problemas. Ambos parecem muito semelhantes. Portanto, formatar o binário em si parece estar bem.
[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 há um problema em relação às bibliotecas compartilhadas necessárias.
O que está acontecendo e como posso consertar isso?
Responder1
Normalmente você não pode executar arquivos binários no NixOS, eles precisarão de algumas variáveis de ambiente definidas ou serão corrigidos com patchElf. Presumo que você possa instalar e executar o Java usando o gerenciador de pacotes nix. Provavelmente você também pode criar um ambiente adequado para executá-lo usando myEnvFun.
Responder2
Parece que nixos tem um pacote paraoráculo jre7.
Se você deseja criar uma expressão nix personalizada para instalar jre ou jdk, pode ser uma boa ideia dar uma olhada na expressão existenteexpressão nix para jdk7/jre7.