เมื่อฉันเรียกใช้chroot
คำสั่งจะมีข้อผิดพลาด:
failed to run command ‘/bin/bash’: No such file or directory
เมื่อฉันเรียกใช้chroot
คำสั่งจะมีข้อผิดพลาด:
failed to run command ‘/bin/bash’: No such file or directory
คำตอบ:
ข้อผิดพลาดนี้หมายความว่าไม่มี/bin/bash
ไดเรกทอรีภายใน chroot ตรวจสอบให้แน่ใจว่าคุณชี้ไปที่bash
ไฟล์ปฏิบัติการ (หรือเชลล์อื่น) อยู่ในchroot
ไดเรกทอรี
หากคุณได้/mnt/somedir/usr/bin/bash
ดำเนินการแล้วchroot /mnt/somedir /usr/bin/bash
/root/.bashrc
หรือในของคุณ/root/.bash_profile
chroot
คุณสามารถเปลี่ยนชื่อไฟล์เหล่านี้ได้ชั่วคราวหรือไม่? คุณสามารถตรวจสอบให้แน่ใจว่าbash
สามารถใช้งานได้ ( chmod +x /chroot/bin/bash
) หรือไม่
ฉันมี/bin/bash
อยู่ในไดเรกทอรี chrooted แต่ฉันไม่มี / lib และ / lib64 อยู่ข้างใน ข้อความจาก chroot อาจเป็นคำอธิบายเพิ่มเติม "ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว" หมายถึง "ฉันไม่สามารถเรียกใช้ ... "
/bin/bash
ขึ้นอยู่กับหลักสูตรใน libc, ld-linux, libdl ฯลฯ คุณสามารถใช้ldd /bin/bash
เพื่อดูว่าต้องการไลบรารีใด
1) คุณสามารถmount -o bind
ไดเรกทอรีเหล่านี้ภายใต้ chroot 2) หรือคุณสามารถคัดลอกไลบรารีเหล่านี้ไปยัง chroot ถ้าคุณไม่เชื่อถือ env chrooted ที่จะไม่ทำลายพวกเขาเช่น:
cp -a /usr rootfs/
cp -a /lib rootfs/
cp -a /lib64 rootfs/
chroot
พยายามเริ่มเชลล์ที่ตั้งค่าไว้ใน$SHELL
ตัวแปรสภาพแวดล้อมของคุณตามค่าเริ่มต้น แต่มันจะมองหามันใน dir รูทใหม่ของคุณซึ่งดูเหมือนจะไม่มีอยู่/bin/bash
ดังนั้นจึงไม่สามารถเริ่มได้
คุณสามารถบอก chroot ให้เริ่มโปรแกรมอื่นภายในรูทใหม่โดยเพิ่มมันเข้าไปในพารามิเตอร์:
chroot /your/new/root /bin/foo --options...
โปรดทราบว่าเส้นทางของคำสั่งจะถูกตีความภายในรูทใหม่ของคุณดังนั้นในตัวอย่างนี้โปรแกรมที่ถูกเรียกใช้นั้นมีอยู่จริง/your/new/root/bin/foo
ฉันได้รับข้อผิดพลาดเดียวกันเมื่อพยายาม ssh ไปยังบัญชี chrooted บนเซิร์ฟเวอร์ระยะไกล ในกรณีของฉันฉันขาดไฟล์ต่อไปนี้ในไดเรกทอรี lib64 ระยะไกล เซิร์ฟเวอร์คือ Centos6.9
ld-linux-x86-64.so.2
มันได้รับการแก้ไขโดยดำเนินการดังต่อไปนี้:
cp /lib64/ld-linux-x86-64.so.2 /secure/jail/lib64/
cp -r /lib /lib64 /secure/jail
แก้ไขฉันต้องการบางสิ่งบางอย่างจากทั้ง lib และ lib64 และฉันก็ไม่ได้คิดอะไรเลย (อาจเป็นเพราะฉันเปิดใช้งาน multiarch)
คุณจำเป็นต้องเรียกใช้ ldd กับ bash ldd $(which bash)
จากนั้นคุณอาจพบว่าไม่มีการพึ่งพาเช่นหากคุณไม่ได้เมานต์ / คัดลอก lib64 สำหรับระบบ 64 มันจะผ่านข้อผิดพลาดนี้
ในกรณีที่คุณทำการคอมไพล์ข้ามคุณจำเป็นต้องใช้ตัวจำลอง qemu ซึ่งสามารถรัน / mnt / somedir / bin / bash เมื่อคุณคัดลอก qemu-arm-static (ฉันกำลังทำสิ่งนี้เพื่อ armhf) ลงใน / mnt / somedir / usr / bin คุณจะสามารถทำ chroot
ลองดูรายละเอียดเพิ่มเติมได้ที่: https://blog.lazy-evaluation.net/posts/linux/debian-armhf-bootstrap.html