Quando eseguo il chroot
comando viene visualizzato un errore:
failed to run command ‘/bin/bash’: No such file or directory
Quando eseguo il chroot
comando viene visualizzato un errore:
failed to run command ‘/bin/bash’: No such file or directory
Risposte:
Questo errore indica che non esiste alcuna /bin/bash
directory all'interno di chroot . Assicurati di indicarlo dove bash
(o altra shell) l'eseguibile è nella chroot
directory.
Se hai /mnt/somedir/usr/bin/bash
quindi eseguirechroot /mnt/somedir /usr/bin/bash
/root/.bashrc
o /root/.bash_profile
nel tuo chroot
. Puoi rinominare temporaneamente questi file? Puoi anche assicurarti che bash
sia eseguibile ( chmod +x /chroot/bin/bash
)?
Avevo /bin/bash
all'interno della directory chroot, ma non avevo / lib e / lib64 al suo interno. Il messaggio da chroot potrebbe essere più descrittivo. "nessun file o directory di questo tipo" significa in realtà "non posso eseguirlo ...".
/bin/bash
dipende ovviamente da libc, ld-linux, libdl ecc., puoi usare ldd /bin/bash
per vedere quali librerie richiede.
1) Puoi mount -o bind
usare queste directory sotto chroot 2) Oppure puoi copiare queste librerie in chroot, se non ti fidi dell'env chroot per non corromperle, in questo modo:
cp -a /usr rootfs/
cp -a /lib rootfs/
cp -a /lib64 rootfs/
chroot
tenta di avviare la shell impostata nella $SHELL
variabile di ambiente per impostazione predefinita, ma la cerca nella nuova directory root, che sembra non contenere /bin/bash
, quindi non può avviarsi.
Puoi dire a chroot di avviare un altro programma all'interno della nuova radice semplicemente aggiungendolo come parametro:
chroot /your/new/root /bin/foo --options...
Nota che il percorso del comando è interpretato nella tua nuova radice, quindi in questo esempio il programma chiamato è in realtà in/your/new/root/bin/foo
Stavo ottenendo lo stesso errore durante il tentativo di inviare a un account chroot su un server remoto. Nel mio caso, mi mancava il seguente file nella directory lib64 remota. Il server è Centos6.9
ld-linux-x86-64.so.2
È stato risolto eseguendo quanto segue:
cp /lib64/ld-linux-x86-64.so.2 /secure/jail/lib64/
cp -r /lib /lib64 /secure/jail
risolvendolo, avevo bisogno di qualcosa sia da lib che da lib64, e non mi sono preoccupato di capire esattamente cosa. (probabilmente perché avevo abilitato il multiarch)
Nel caso in cui si stia eseguendo una compilazione incrociata, è necessario utilizzare il simulatore qemu che può eseguire / mnt / somedir / bin / bash dopo aver copiato qemu-arm-static (lo sto facendo per armhf) in / mnt / somedir / usr / bin sarai in grado di fare chroot.
Dai un'occhiata a questo per maggiori dettagli: https://blog.lazy-evaluation.net/posts/linux/debian-armhf-bootstrap.html