Durante uma tentativa de chroot, recebi o seguinte erro: "chroot: falha ao executar o comando '/ bin / bash': erro de formato Exec"

20

Eu estava seguindo as instruções deste tutorial HOWTO: Limpar e reinstalar o Grub 2 a partir do Live CD , quando encontrei um erro na etapa 1, quando iniciei o comando

sudo chroot /mnt/temp

O erro foi o seguinte:

chroot: failed to run command `/bin/bash': Exec format error

Onde é que isso veio? Como faço para passar?

Grand Oxymore
fonte

Respostas:

22

Verifique se você está usando o Live CD certo. Por exemplo, verifique se você não está usando um CD de 32 bits em vez de um CD de 64 bits. Você precisa de um kernel de 64 bits para executar o código de 64 bits, portanto verifique sua arquitetura.

Supondo que você montou seu sistema como chroot em / media / sda1 , para determinar a arquitetura, você pode:

ls /media/sda1/*

se você vê lib64 na saída, provavelmente é um sistema de 64 bits

Grand Oxymore
fonte
É, mas ainda não pode fazer chroot
Starx
2

Eu tive o mesmo problema ao criar uma imagem para o arco armhf. Eu tive que instalar qemu-user-statice copiá-lo para a pasta chroot bin.

sudo cp /usr/bin/qemu-arm-static /mnt/chroot/usr/bin
Ismail Moukafih
fonte
1

O erro significa que sua prisão ( /mnt/temp) não contém um shell bash ou as bibliotecas necessárias para executar o shell bash.

Se você criou sua prisão usando algo parecido com isto:

debootstrap --variant=buildd --arch i386 lucid /mnt/temp \
    http://archive.ubuntu.com/ubuntu/

Você provavelmente pretendia fazer isso:

debootstrap --variant=minbase --arch i386 lucid /mnt/temp \
    http://archive.ubuntu.com/ubuntu/

No entanto, como resposta técnica para o seu problema, tente:

cp -r /bin /lib /mnt/temp

Isso deve permitir que você faça chroot com êxito, quando você pode fazer outras coisas.

No entanto, existem cerca de um milhão de coisas erradas ao fazer isso, e quase certamente você não deseja fazer isso. Use minbase ao criar sua prisão ou instale o ubuntu em um alvo em branco (por exemplo, uma máquina virtual) e crie um arquivo tar de todo o sistema no qual você descompactará /mnt/temp.

Doug
fonte
0

Na verdade, essa é uma incompatibilidade de 64 bits e 32 bits.

Embora com

cp /bin/bash /mount/temp/tmp

(copia o exec de 32 bits para a nova raiz no tmpdiretório

chroot /mount/temp /tmp/bash

chrootestá bom, todos os comandos ainda falham. Você teria que copiá-los por toda parte.

cosseno
fonte
-1

No meu caso, eu estava tentando criar uma versão chroot do Linux de 64 bits, mas meu Linux atual era de 32 bits.

Eu havia montado uma imagem de disco (imagem principal, para replicação em várias máquinas).

azuer88
fonte
Mesma resposta que a do GrandOxymore acima.
Karl Richter
@KarlRichter Semelhante, mas não o mesmo. Executar um programa de 32 bits em um sistema operacional de 64 bits não é o mesmo que executar um programa de 32 bits em um ambiente virtual (ou SO) de 64 bits. Eu poderia executar um sistema operacional convidado de 32 bits e teria funcionado bem.
precisa saber é o seguinte
-2

Eu acho que é um erro.

`/ bin / bash '

mas não

'bin / bash'


fonte