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

55

Lorsque j'exécute la chrootcommande, une erreur est générée:

failed to run command ‘/bin/bash’: No such file or directory 
USER3254789
la source
1
La question peut-elle être considérée comme une copie pure et simple de unix.stackexchange.com/questions/76490/… ? Les réponses aux questions représentent une solution possible au problème qui mérite assurément un lien, mais cela n'en fait pas une copie.
Karl Richter
1
Le problème pour moi était que j'utilisais un Live CD 32 bits pour monter un disque de système d'exploitation 64 bits et le chroot. Un noyau 32 bits ne peut pas exécuter bash 64 bits. La solution consistait à obtenir un Live CD 64 bits. (Le duplicata lié n’a aucun lien.)
Leons
Ce n’est pas un doublon, bien que l’explication de la source du problème soit applicable aux deux questions. La question sur laquelle ceci est marqué comme un doublon concerne les bibliothèques manquantes dans une installation générique, alors que cette question concerne spécifiquement une erreur survenant dans un environnement chrooté.
bschlueter

Réponses:

34

Cette erreur signifie qu'il n'y a pas de /bin/bashrépertoire dans chroot . Assurez-vous de bien indiquer où bashl'exécutable (ou un autre shell) se trouve dans le chrootrépertoire.

Si vous avez /mnt/somedir/usr/bin/bashalors exécuterchroot /mnt/somedir /usr/bin/bash

phoops
la source
2
Il y a un fichier / bin / bash dans le dossier rootfs
USER3254789
2
Cela pourrait être causé par une commande / ligne défaillante dans /root/.bashrcou /root/.bash_profiledans votre chroot. Pouvez-vous renommer temporairement ces fichiers? Aussi, pouvez-vous vous assurer que bashc'est exécutable ( chmod +x /chroot/bin/bash)?
phoops
aspade @ home-ba: ~ / DebianArm $ sudo chmod + x rootfs / bin / bash. aspade @ home-ba: ~ / DebianArm $ sudo chroot rootfs. chroot: échec de l'exécution de la commande '/ bin / bash': aucun fichier ou répertoire de ce type
USER3254789
38
Je l'ai compris. bin / bash est là, mais je n'avais pas / lib et / lib64 à l'intérieur. / bin / bash dépend (ofc) de la libc, ld-linux, libdl etc ... cp -a / usr rootfs /, cp -a / lib rootfs /, cp -a / lib64 rootfs / suffisait. (Vous pouvez monter-lier ces ofc, mais je les ai copiés, car je veux exécuter quelque chose de dangereux, qui pourrait corrompre ces fichiers dans rootfs.) Le message de chroot pourrait être plus descriptif. "aucun fichier ou répertoire de ce type" ne signifie vraiment "je ne peux pas exécuter ce sh ...".
Dalibor Filus
1
@EmilVatai a ajouté :-)
Dalibor Filus
13

J'avais /bin/bashun répertoire chrooté, mais je n'avais pas / lib et / lib64 à l'intérieur. 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/bashdépend bien sûr de libc, ld-linux, libdl, etc., vous pouvez utiliser ldd /bin/bashpour voir les bibliothèques dont il a besoin.

1) Vous pouvez mount -o bindces répertoires sous chroot 2) Ou vous pouvez copier ces librairies dans chroot, si vous ne faites pas confiance aux envs chrootés pour ne pas les corrompre, comme ceci:

cp -a /usr rootfs/
cp -a /lib rootfs/
cp -a /lib64 rootfs/
Dalibor Filus
la source
cela va créer des doublons .. qui ne sont pas optimisés lorsque nous avons beaucoup de configurations
yellowandred
1
Cela ne crée pas de doublons si vous utilisez la première méthode (marquée comme 1)). Le second est utile si vous chrootez dans un environnement non sécurisé. Par exemple, vous avez une partition avec un cheval de Troie ou quelque chose du genre.
Dalibor Filus
4

chroottente de démarrer le shell défini $SHELLpar défaut dans votre variable d'environnement, mais il le 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 dans la nouvelle racine en l'ajoutant simplement en tant que paramètre:

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

Notez que le chemin de la commande est interprété dans votre nouvelle racine. Dans cet exemple, le programme appelé est en fait/your/new/root/bin/foo

crater2150
la source
2
Il y a un fichier / bin / bash dans le fichier rootfs alors quel est le problème
USER3254789
1
à ceux qui ont voté contre: bien que ce ne soit pas le problème dans le cas de l'affiche, il s'agit d'une explication valide et non improbable de l'erreur de la question. Si vous voyez un autre problème, veuillez laisser un commentaire lorsque vous votez quelque chose.
crater2150
2

La même erreur se produisait lorsque j'essayais de créer 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/
chawn
la source
cp -r /lib /lib64 /secure/jailJe n'ai pas résolu le problème pour moi, mais cela a été corrigé: j'avais besoin de quelque chose à la fois dans lib et lib64, et je ne me suis pas donné la peine de trouver exactement quoi. (probablement parce que j'avais multiarch activé)
hanshenrik
0

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 64 systèmes, cela résultera de cette erreur.

Erreur
la source
0

Si vous faites une compilation croisée, vous devez utiliser le simulateur qemu qui peut exécuter / mnt / somedir / bin / bash une fois que vous copiez le qemu-arm-static (je le fais pour armhf) dans le répertoire / mnt / somedir / usr. / bin tu pourras faire chroot.

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

Jainam MJ
la source
1
Rien n'indique que c'est ce que l'utilisateur tente de faire.
Kusalananda
Les erreurs sont les mêmes pour les deux cas. Si quelqu'un qui fait de la compilation croisée est confronté à ce problème, il peut trouver la réponse ici.
Jainam MJ