chroot: falha ao executar o comando '/ bin / bash': esse arquivo ou diretório não existe

54

Quando executo o chrootcomando, é apresentado um erro:

failed to run command ‘/bin/bash’: No such file or directory 
USER3254789
fonte
11
A pergunta pode ser considerada uma duplicata pura de unix.stackexchange.com/questions/76490/… ? As respostas para as perguntas representam uma solução possível para o problema que definitivamente merece um link, mas isso não faz da pergunta uma duplicata.
Karl Richter
11
O problema para mim era que eu estava usando um Live CD de 32 bits para montar um disco do SO de 64 bits e fazer chroot nele. Um kernel de 32 bits não pode executar o bash de 64 bits. A solução foi obter um Live CD de 64 bits. (A segunda via vinculado é totalmente alheios.)
Leons
Isso não é uma duplicata, apesar de a explicação da fonte do problema ser aplicável a ambas as perguntas. A pergunta que está marcada como duplicada é sobre a falta de bibliotecas em uma instalação genérica, enquanto essa pergunta é especificamente sobre um erro que ocorre em um ambiente chroot.
bschlueter

Respostas:

33

Este erro significa que não há /bin/bashdiretório dentro do chroot . Certifique-se de apontá-lo para onde bash(ou outro shell) executável está no chrootdiretório

Se você tiver /mnt/somedir/usr/bin/bashexecutadochroot /mnt/somedir /usr/bin/bash

phoops
fonte
2
Há uma bin / arquivo / bash nos rootfs pasta
USER3254789
2
Isso pode ser causado por alguma falha na linha de comando /root/.bashrcou /root/.bash_profileno seu chroot. Você pode renomear temporariamente esses arquivos? Além disso, você pode ter certeza de que bashé executável ( chmod +x /chroot/bin/bash)?
phoops
aspade @ home-ba: ~ / DebianArm $ sudo chmod + x rootfs / bin / bash. aspade @ home-ba: ~ / DebianArm $ sudo chroot rootfs. chroot: falha ao executar o comando '/ bin / bash': não
existe
37
Eu descobri. bin / bash está lá, mas eu não tinha / lib e / lib64 dentro dele. / bin / bash depende (ofc) da libc, ld-linux, libdl etc ... Então, basta cp -a / usr rootfs /, cp -a / lib rootfs /, cp -a / lib64 rootfs / foi suficiente. (Você pode montar e vincular os ofc, mas eu os copiei, porque quero executar algo perigoso, que pode corromper esses arquivos no rootfs.) A mensagem do chroot pode ser mais descritiva. "nenhum arquivo ou diretório" realmente significa "Não consigo executar este sh ...".
Dalibor Filus 3/11
11
@EmilVatai added :-)
Dalibor Filus
13

Eu tinha /bin/bashdentro do diretório chroot, mas não tinha / lib e / lib64 dentro dele. A mensagem do chroot pode ser mais descritiva. "nenhum arquivo ou diretório" realmente significa "Não consigo executar isso ...".

/bin/bashDependendo, é claro, da libc, ld-linux, libdl etc., você pode usar ldd /bin/bashpara ver quais bibliotecas são necessárias.

1) Você pode mount -o bindesses diretórios no chroot 2) Ou pode copiar essas bibliotecas para o chroot, se você não confiar no env chrootado para não corrompê-los, assim:

cp -a /usr rootfs/
cp -a /lib rootfs/
cp -a /lib64 rootfs/
Dalibor Filus
fonte
isso irá criar duplicatas .. que não é otimizado quando temos muitas configurações
yellowandred
11
Isso não cria duplicatas se você usar o primeiro método (marcado como 1)). O segundo é útil se você fizer um chroot para um ambiente não confiável. Por exemplo, você tem uma partição com um Trojan ou algo assim.
Dalibor Filus 30/08/19
4

chroottenta iniciar o shell que está definido na sua $SHELLvariável de ambiente por padrão, mas procura no seu novo diretório raiz, que parece não conter /bin/bash, portanto não pode ser iniciado.

Você pode dizer ao chroot para iniciar outro programa dentro da nova raiz, simplesmente adicionando-o como parâmetro:

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

Observe que o caminho do comando é interpretado dentro de sua nova raiz; portanto, neste exemplo, o programa chamado está de fato em/your/new/root/bin/foo

crater2150
fonte
2
Há uma bin / arquivo / bash no arquivo rootfs então qual é o problema
USER3254789
11
para quem recusou: embora este não tenha sido o problema no caso do pôster, esta é uma explicação válida e não improvável do erro na pergunta. Se você encontrar algum outro problema, deixe um comentário ao fazer o voto negativo.
amigos estão dizendo sobre crater2150
2

Eu estava recebendo o mesmo erro ao tentar ssh para uma conta chroot em um servidor remoto. No meu caso, estava faltando o seguinte arquivo no diretório lib64 remoto. O servidor é Centos6.9

ld-linux-x86-64.so.2

Foi corrigido executando o seguinte:

cp /lib64/ld-linux-x86-64.so.2 /secure/jail/lib64/
Shawn
fonte
não o corrigi para mim, mas, ao fazê- cp -r /lib /lib64 /secure/jaillo, eu precisava de algo da lib e da lib64 e não me incomodei em descobrir exatamente o que. (provavelmente porque eu tinha multiarch ativado)
hanshenrik
0

você precisa executar o ldd no bash ldd $(which bash), então você pode encontrar uma dependência ausente, por exemplo, se você não montou / copiou a lib64, para 64 sistemas, isso ocorrerá através deste erro.

Erro
fonte
0

Caso esteja fazendo uma compilação cruzada, você precisará usar o simulador qemu, que pode executar / mnt / somedir / bin / bash depois de copiar o qemu-arm-static (estou fazendo isso para armhf) no / mnt / somedir / usr / bin você poderá fazer chroot.

Verifique isso para obter mais detalhes: https://blog.lazy-evaluation.net/posts/linux/debian-armhf-bootstrap.html

Jainam MJ
fonte
11
Não há indicação de que é isso que o usuário está tentando fazer.
Kusalananda
Os erros são os mesmos para os dois casos. Se alguém que estiver fazendo uma compilação cruzada enfrentar esse problema, poderá encontrar a resposta aqui.
Jainam MJ