Lorsque j'exécute la chroot
commande, une erreur est générée:
failed to run command ‘/bin/bash’: No such file or directory
executable
chroot
USER3254789
la source
la source
Réponses:
Cette erreur signifie qu'il n'y a pas de
/bin/bash
répertoire dans chroot . Assurez-vous de bien indiquer oùbash
l'exécutable (ou un autre shell) se trouve dans lechroot
répertoire.Si vous avez
/mnt/somedir/usr/bin/bash
alors exécuterchroot /mnt/somedir /usr/bin/bash
la source
/root/.bashrc
ou/root/.bash_profile
dans votrechroot
. Pouvez-vous renommer temporairement ces fichiers? Aussi, pouvez-vous vous assurer quebash
c'est exécutable (chmod +x /chroot/bin/bash
)?J'avais
/bin/bash
un 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/bash
dépend bien sûr de libc, ld-linux, libdl, etc., vous pouvez utiliserldd /bin/bash
pour voir les bibliothèques dont il a besoin.1) Vous pouvez
mount -o bind
ces 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:la source
chroot
tente de démarrer le shell défini$SHELL
par 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:
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
la source
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
Il a été corrigé en exécutant ce qui suit:
la source
cp -r /lib /lib64 /secure/jail
Je 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é)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.la source
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
la source