chroot: gagal menjalankan perintah '/ bin / bash': Tidak ada file atau direktori seperti itu

55

Ketika saya menjalankan chrootperintah kesalahan diberikan:

failed to run command ‘/bin/bash’: No such file or directory 
USER3254789
sumber
1
Bisakah pertanyaan ini dianggap sebagai duplikat murni dari unix.stackexchange.com/questions/76490/… ? Jawaban atas pertanyaan-pertanyaan tersebut merupakan solusi yang mungkin untuk masalah yang pasti layak tautan, tetapi itu tidak membuat pertanyaan itu duplikat.
Karl Richter
1
Masalahnya bagi saya adalah bahwa saya menggunakan Live CD 32-bit untuk me-mount disk OS 64-bit dan chroot untuk itu. Kernel 32-bit tidak dapat menjalankan bash 64-bit. Solusinya adalah untuk mendapatkan CD Live 64-bit. (Duplikat yang ditautkan sepenuhnya tidak terkait.)
Leons
Ini bukan duplikat, meskipun penjelasan tentang sumber masalah yang berlaku untuk kedua pertanyaan. Pertanyaan yang ditandai duplikat ini adalah tentang perpustakaan yang hilang pada instalasi generik, sedangkan pertanyaan ini secara khusus tentang kesalahan yang terjadi di lingkungan chroot.
bschlueter

Jawaban:

34

Kesalahan ini berarti bahwa tidak ada /bin/bashdirektori di dalam chroot . Pastikan Anda mengarahkannya ke tempat bash(atau shell lain) yang dapat dieksekusi ada di chrootdirektori.

Jika sudah /mnt/somedir/usr/bin/bashmaka jalankanchroot /mnt/somedir /usr/bin/bash

phoops
sumber
2
Ada file / bin / bash di folder rootfs
USER3254789
2
Ini mungkin disebabkan oleh beberapa perintah / baris yang gagal di /root/.bashrcatau /root/.bash_profiledi chroot. Bisakah Anda mengubah nama sementara file-file ini? Anda juga dapat memastikan bahwa bashitu dapat dieksekusi ( chmod +x /chroot/bin/bash)?
phoops
aspade @ home-ba: ~ / DebianArm $ sudo chmod + x rootfs / bin / bash. aspade @ home-ba: ~ / DebianArm $ sudo chroot rootfs. chroot: gagal menjalankan perintah '/ bin / bash': Tidak ada file atau direktori seperti itu
USER3254789
38
Saya menemukan jawabannya. bin / bash ada di sana, tapi saya tidak memiliki / lib dan / lib64 di dalamnya. / bin / bash tergantung (ofc) pada libc, ld-linux, libdl dll ... Jadi sederhana cp -a / usr rootfs /, cp -a / lib rootfs /, cp -a / lib64 rootfs / sudah cukup. (Anda dapat me-mount mengikat ofc tersebut, tetapi saya menyalinnya, karena saya ingin menjalankan sesuatu yang berbahaya, yang mungkin merusak file-file itu di rootfs.) Pesan dari chroot bisa lebih deskriptif. "Tidak ada file atau direktori seperti itu" yang benar-benar berarti "Saya tidak bisa menjalankan ini ..."
Dalibor Filus 3-15
1
@EmilVatai menambahkan :-)
Dalibor Filus
13

Saya memiliki /bin/bashdi dalam direktori chroot, tetapi saya tidak memiliki / lib dan / lib64 di dalamnya. Pesan dari chroot bisa lebih deskriptif. "Tidak ada file atau direktori" yang benar-benar berarti "Saya tidak bisa menjalankan ini ...".

/bin/bashtentu saja tergantung pada libc, ld-linux, libdl dll., Anda dapat menggunakan ldd /bin/bashuntuk melihat perpustakaan mana yang dibutuhkan.

1) Anda dapat mount -o binddirektori ini di bawah chroot 2) Atau Anda dapat menyalin perpustakaan ini ke chroot, jika Anda tidak percaya enro chroot untuk tidak merusaknya, seperti:

cp -a /usr rootfs/
cp -a /lib rootfs/
cp -a /lib64 rootfs/
Dalibor Filus
sumber
ini akan membuat duplikat .. yang tidak dioptimalkan ketika kami memiliki banyak pengaturan
yellowandred
1
Ini tidak membuat duplikat jika Anda menggunakan metode pertama (ditandai sebagai 1)). Yang kedua berguna jika Anda melakukan chroot ke lingkungan yang tidak terpercaya. Misalnya, Anda memiliki partisi dengan trojan atau sesuatu.
Dalibor Filus
4

chrootmencoba untuk memulai shell yang diatur dalam $SHELLvariabel lingkungan Anda secara default, tetapi mencari di dir root baru Anda, yang tampaknya tidak mengandung /bin/bash, sehingga tidak dapat memulai.

Anda dapat memberi tahu chroot untuk memulai program lain di dalam root baru dengan hanya menambahkannya sebagai parameter:

chroot /your/new/root /bin/foo --options...

Perhatikan bahwa lintasan perintah ditafsirkan di dalam root baru Anda, jadi dalam contoh ini program yang dipanggil sebenarnya di/your/new/root/bin/foo

crater2150
sumber
2
Ada file / bin / bash di file rootfs jadi apa masalahnya
USER3254789
1
untuk siapa pun yang turun jabatan: meskipun ini bukan masalah dalam kasus poster, ini adalah penjelasan yang sahih dan bukan tidak mungkin dari kesalahan dalam pertanyaan. Jika Anda melihat masalah lain, silakan tinggalkan komentar saat Anda melakukan downvote sesuatu.
crater2150
2

Saya mendapatkan kesalahan yang sama ketika mencoba ssh ke akun chroot di server jauh. Dalam kasus saya, saya kehilangan file berikut di direktori lib64 jarak jauh. Server adalah Centos6.9

ld-linux-x86-64.so.2

Itu diperbaiki dengan mengeksekusi berikut:

cp /lib64/ld-linux-x86-64.so.2 /secure/jail/lib64/
shawn
sumber
tidak memperbaikinya untuk saya, tetapi melakukan cp -r /lib /lib64 /secure/jailmemperbaikinya, saya butuh sesuatu dari lib dan lib64, dan saya tidak repot-repot mencari tahu apa. (mungkin karena saya mengaktifkan multiarch)
hanshenrik
0

Anda perlu menjalankan ldd terhadap bash ldd $(which bash), maka Anda mungkin menemukan ketergantungan yang hilang, misalnya jika Anda tidak memasang / menyalin lib64, untuk 64 sistem, itu akan melalui kesalahan ini.

Kesalahan
sumber
0

Jika Anda melakukan kompilasi silang, Anda perlu menggunakan simulator qemu yang dapat menjalankan / mnt / somedir / bin / bash setelah Anda menyalin qemu-arm-static (saya melakukan ini untuk armhf) ke / mnt / somedir / usr / bin Anda dapat melakukan chroot.

Lihat ini untuk lebih jelasnya: https://blog.lazy-evaluation.net/posts/linux/debian-armhf-bootstrap.html

Jainam MJ
sumber
1
Tidak ada indikasi bahwa inilah yang coba dilakukan oleh pengguna.
Kusalananda
Kesalahannya sama untuk kedua kasus. Jika seseorang yang melakukan kompilasi silang menghadapi masalah ini, ia dapat menemukan jawabannya di sini.
Jainam MJ