web-dev-qa-db-fra.com

chroot: échec de l’exécution de la commande ‘/ bin / bash’: aucun fichier ou répertoire de ce type

Lorsque j'exécute la commande chroot, une erreur est donnée:

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

Cette erreur signifie qu'il n'y a pas de /bin/bash répertoire à l'intérieur du chroot. Assurez-vous de le pointer vers l'endroit où l'exécutable bash (ou tout autre shell) se trouve dans le répertoire chroot.

Si tu as /mnt/somedir/usr/bin/bash puis exécutez chroot /mnt/somedir /usr/bin/bash

35
phoops

J'avais /bin/bash dans le répertoire chrooté, mais je n'avais pas/lib et/lib64 dedans. Le message de chroot pourrait être plus descriptif. "aucun fichier ou répertoire de ce type" signifie vraiment "Je ne peux pas exécuter ceci ...".

/bin/bash dépend bien sûr de libc, ld-linux, libdl etc., vous pouvez utiliser ldd /bin/bash pour voir de quelles bibliothèques il a besoin.

1) Vous pouvez mount -o bind ces répertoires sous chroot 2) Ou vous pouvez copier ces bibliothèques vers chroot, si vous ne faites pas confiance à l'env chrooté pour ne pas les corrompre, comme ceci:

cp -a /usr rootfs/
cp -a /lib rootfs/
cp -a /lib64 rootfs/
17
Dalibor Filus

chroot essaie de démarrer le shell défini dans votre $Shell variable d'environnement par défaut, mais elle la recherche dans votre nouveau répertoire racine, qui ne semble pas contenir /bin/bash, il ne peut donc pas démarrer.

Vous pouvez dire à chroot de démarrer un autre programme à l'intérieur de la nouvelle racine en l'ajoutant simplement comme paramètre:

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

Notez que le chemin de la commande est interprété à l'intérieur votre nouvelle racine, donc dans cet exemple le programme appelé est en fait dans /your/new/root/bin/foo

4
crater2150

J'obtenais la même erreur en essayant de ssh vers un compte chrooté sur un serveur distant. Dans mon cas, il me manquait le fichier suivant dans le répertoire lib64 distant. Le serveur est Centos6.9

ld-linux-x86-64.so.2

Il a été corrigé en exécutant ce qui suit:

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

Dans le cas où vous faites une compilation croisée, vous devez utiliser le simulateur qemu qui peut exécuter/mnt/somedir/bin/bash. Voici les étapes pour la compilation croisée d'armhf. Les étapes pour les autres architectures devraient être similaires.

  1. Installez d'abord qemu-user-static

Sudo apt-get install qemu-user-static

  1. Copiez ensuite le binaire 'qemu-arm-static' dans le répertoire chroot

Sudo cp/usr/bin/qemu-arm-static/mnt/usr/bin/

Une fois que vous aurez copié le qemu-arm-static dans/mnt/usr/bin, vous pourrez faire du chroot.

Vérifiez cela pour plus de détails: https://blog.lazy-evaluation.net/posts/linux/debian-armhf-bootstrap.html

1
Jainam MJ

Le bash elf n'est pas disponible dans /bin, /usr/bin/ etc.

cp -rf --preserve=links  /usr/bin/* myroot/usr/bin/; cp --preserve=links  -rf /lib64/*  myroot/lib64/;..

copier toutes les bibliothèques et ELF.

0
Feanix

vous devez exécuter ldd contre bash ldd $(which bash), alors vous pourriez trouver une dépendance manquante, par exemple si vous n'avez pas monté/copié lib64, pour les systèmes 64, cela passera par cette erreur.

0
Error

Quelque chose que personne n'a encore mentionné, si le but n'est pas de conserver des copies des bibliothèques que vous localisez avec ldd. Lorsque vous créez une boîte occupée, elle respecte LDFLAGS=--static selon leur FAQ . Cela va construire toutes les bibliothèques nécessaires dans vos binaires. Cela augmente la taille des binaires, mais ... vous auriez quand même besoin de la plupart de cet espace disque pour stocker ce que vous localisez avec ldd.

Notez que vous devrez peut-être encore copier votre bibliothèque c (libc.so.6), votre bibliothèque mathématique de base (libm.so.6), votre bibliothèque de résolution d'espace de noms (libresolv.so.2) et votre bibliothèque noyau (dans mon cas, depuis J'utilise un Raspberry Pi, ld-linux-armhf.so.3). Vous pouvez utiliser l'outil ldd comme indiqué dans les autres réponses sur votre binaire de boîte occupée statique pour découvrir si c'est le cas.

Celles-ci peuvent à leur tour dépendre d'autres bibliothèques. Pour savoir si c'est le cas, vous pouvez utiliser l'outil de fichier. J'utilise le chemin complet vers libm.so.6 du Raspberry Pi comme exemple:

file /chroot/lib/arm-linux-gnueabihf/libm.so.6

Dans mon cas, puisque les processeurs ARM ont besoin de nombreuses bibliothèques, j'ai copié l'intégralité de mon dossier arm-linux-gnueabihf dans mon dossier lib, ce qui me permet d'accéder à mon chroot.

0
Jessica Pennell