chroot: '/ bin / bash' komutunu çalıştıramadı: Böyle bir dosya veya dizin yok


54

chrootKomutu çalıştırdığımda bir hata verildi:

failed to run command ‘/bin/bash’: No such file or directory 

1
Soru, unix.stackexchange.com/questions/76490/… 'nin saf bir kopyası olarak değerlendirilebilir mi? Soruların cevapları, sorunun kesinlikle bir bağlantıya değmesi muhtemel bir çözümü temsil eder, ancak bu, soruyu bunun bir kopyası yapmaz.
Karl Richter

1
Benim için sorun, 64-bit bir işletim sistemi diski takmak ve ona chroot yapmak için 32-bit bir Live CD kullanmamdı. 32-bit bir çekirdek 64-bit bash çalıştıramaz. Çözüm 64 bitlik bir Live CD almaktı. (Bağlantılı kopya tamamen ilgisizdir.)
Leons

Her iki soru için de geçerli olan sorunun kaynağının açıklamasına rağmen, bu bir kopya değildir. Bunun bir kopyasına işaretli olan soru, genel bir kurulumda kitaplıkların eksik olması ile ilgilidir, oysa bu soru özellikle chrootlu bir ortamda meydana gelen bir hata ile ilgilidir.
bschlueter

Yanıtlar:


33

Bu hata, chroot içinde bir/bin/bash dizin olmadığı anlamına gelir . Çalıştırılabilir dizinin (veya diğer kabuğun) çalıştırılabildiği dizine yönlendirdiğinizden emin olun .bashchroot

Eğer öyleyse, /mnt/somedir/usr/bin/bashyürütchroot /mnt/somedir /usr/bin/bash


2
Rootfs

2
Bu, içindeki /root/.bashrcveya /root/.bash_profileiçindeki bazı başarısız komutlardan / satırlardan kaynaklanıyor olabilir chroot. Bu dosyaları geçici olarak yeniden adlandırabilir misiniz? Ayrıca bashçalıştırılabilir ( chmod +x /chroot/bin/bash) olduğundan emin olabilir misiniz ?
07'de

aspade @ home-ba: ~ / DebianArm $ sudo chmod + x rootfs / bin / bash. aspade @ home-ba: ~ / DebianArm $ sudo chroot rootfs. chroot: '/ bin / bash' komutunu çalıştıramadı: Böyle bir dosya ya da dizin yok
USER3254789

37
Bunu anladım. bin / bash orada, ama içinde / lib ve / lib64 yoktu. / bin / bash libc, ld-linux, libdl vs.'ye (ofc) bağlıdır. Yani basit cp -a / usr rootfs /, cp -a / lib rootfs /, cp -a / lib64 rootfs / yeterliydi. (Bunları bağlayabilirsin, ama onları kopyaladım, çünkü bu dosyaları rootfs'ta bozabilecek tehlikeli bir şey çalıştırmak istiyorum.) Chroot'tan gelen mesaj daha açıklayıcı olabilir. msgstr "böyle bir dosya veya dizin yok" gerçekten "bu programı çalıştıramıyorum ..." anlamına geliyor.
Dalibor Filus

1
@EmilVatai :-) ekledi
Dalibor Filus

13

/bin/bashİçinde chrooted bulunan bir dizin vardı ama içinde / lib ve / lib64 yoktu. Chroot'tan gelen mesaj daha açıklayıcı olabilir. msgstr "böyle bir dosya veya dizin" gerçekten "bunu çalıştıramam ..." anlamına geliyor.

/bin/bashelbette libc, ld-linux, libdl vs.'ye bağlıdır, ldd /bin/bashhangi kütüphaneleri gerektirdiğini görmek için kullanabilirsiniz .

1) mount -o bindBu dizinleri chroot altında yapabilirsiniz 2) Veya chrooted env'ye onları bozmamaya güvenmiyorsanız, bu kütüphaneleri chroot'a kopyalayabilirsiniz.

cp -a /usr rootfs/
cp -a /lib rootfs/
cp -a /lib64 rootfs/

bu, yinelenen kopyalar yaratacaktır. Bu, birçok
kurulum

1
İlk yöntemi kullanırsanız bu, kopya oluşturmaz (1 olarak işaretlenir). İkincisi, güvenilmeyen ortama chroot yaparsanız kullanışlıdır. Örneğin, bir trojan veya başka bir şey ile bir bölüm var.
Dalibor Filus,

4

chroot$SHELLortam değişkeninizde ayarlanan kabuğu varsayılan olarak başlatmaya çalışır , ancak içerdiği görülmeyen yeni kök dizininizde arar /bin/bash, bu nedenle başlayamaz.

Chroot'a, yeni root içerisinde başka bir program başlatmasını sadece parametre olarak ekleyerek söyleyebilirsiniz:

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

Komutun yolunun yeni kökünüzün içinde yorumlandığını unutmayın, bu nedenle bu örnekte çağrılan program aslında/your/new/root/bin/foo


2
Rootfs

1
Oysa kim aşağı oylandıysa: Bu, posterin probleminde sorun olmasa da, bu, söz konusu hatanın geçerli ve muhtemel olmayan bir açıklamasıdır. Başka bir sorun görürseniz, bir şeyi reddettiğinizde lütfen yorum bırakın.
krater2150 17:14

2

Uzak bir sunucudaki chrooted bir hesaba ssh yapmaya çalışırken de aynı hatayı alıyordum. Benim durumumda, uzak lib64 dizininde bulunan aşağıdaki dosyayı özlüyordum. Sunucu Centos6.9

ld-linux-x86-64.so.2

Aşağıdakileri çalıştırarak düzeltildi:

cp /lib64/ld-linux-x86-64.so.2 /secure/jail/lib64/

Benim için cp -r /lib /lib64 /secure/jaildüzelmedi , ama düzelttikten sonra hem lib hem de lib64'ten bir şeye ihtiyacım vardı ve tam olarak ne olduğunu bulmak için uğraşmadım. (muhtemelen multiarch'ı etkinleştirdiğim için)
hanshenrik

0

bash'a karşı ldd komutunu çalıştırmanız gerekir ldd $(which bash), o zaman eksik bir bağımlılık bulabilirsiniz, örneğin 64 libreyi bağlayıp kopyalamıyorsanız, 64 sistemde bu hatayla sonuçlanacaktır.


0

Eğer bir çapraz derleme yapıyorsanız, qemu-arm-static'ı (mhf için yapıyorum) / mnt / somedir / usr içine kopyaladığınızda / mnt / somedir / bin / bash komutunu çalıştırabilen qemu simülatörünü kullanmanız gerekir. / bin chroot yapmak mümkün olacak.

Daha fazla bilgi için bunu göz atın: https://blog.lazy-evaluation.net/posts/linux/debian-armhf-bootstrap.html


1
Kullanıcının ne yapmaya çalıştığına dair bir gösterge yoktur.
Kusalananda

Her iki durumda da hatalar aynıdır. Çapraz derleme yapan biri bu sorunla karşı karşıya kalırsa cevabı burada bulabilir.
Jainam MJ
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.