ไม่สามารถดำเนินการไบนารีใน NixOS - ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว


11

ฉันพยายามติดตั้ง 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

ดูเหมือนว่ามีปัญหาเกี่ยวกับไลบรารีที่แบ่งใช้ที่จำเป็น

เกิดอะไรขึ้นและฉันจะแก้ไขได้อย่างไร


คำตอบ:


10

โดยปกติคุณจะไม่สามารถเรียกใช้ไฟล์ไบนารีใน NixOS ได้พวกเขาจะต้องตั้งค่าตัวแปรสภาพแวดล้อมบางอย่างหรือต้องได้รับการแก้ไขด้วย patchElf ฉันถือว่าคุณสามารถติดตั้งและเรียกใช้ java โดยใช้ตัวจัดการแพคเกจ nix คุณยังสามารถสร้างสภาพแวดล้อมที่เหมาะสมในการใช้งานโดยใช้ myEnvFun


2
บางทีตัวอย่างของการใช้patchelfเพื่อเรียกใช้ไบนารีในสภาพแวดล้อมที่ nix สามารถใช้กับผู้ค้นหาโซลูชัน แต่กรณีนั้นคือสภาพแวดล้อมระวัง "ใช้งาน" ของผู้ใช้ในการติดตั้งระวังผู้ใช้คนเดียวภายใต้ CentOS ความต้องการของคุณอาจแตกต่างกัน (IIC แนวทาง nixy เพิ่มเติมจะหมายถึงไม่อ้างอิงสภาพแวดล้อม symlinked "ใช้งาน" แต่ค่อนข้างเฉพาะ เวอร์ชัน, แฮชหนึ่งอันในที่เก็บห้าม)
imz - Ivan Zakharyaschev

3

ดูเหมือนว่า nixos มีแพคเกจสำหรับoracle jre7

หากคุณต้องการที่จะทำให้การแสดงออกที่กำหนดเองระวังการติดตั้ง JRE หรือ jdk แล้วมันอาจจะเป็นความคิดที่ดีที่จะดูที่มีอยู่แสดงออกระวังสำหรับ jdk7

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.