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
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
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 le chroot
répertoire.
Si vous avez /mnt/somedir/usr/bin/bash
alors exécuterchroot /mnt/somedir /usr/bin/bash
/root/.bashrc
ou /root/.bash_profile
dans votre chroot
. Pouvez-vous renommer temporairement ces fichiers? Aussi, pouvez-vous vous assurer que bash
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 utiliser ldd /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:
cp -a /usr rootfs/
cp -a /lib rootfs/
cp -a /lib64 rootfs/
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:
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
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/
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é)
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