
Eu estava seguindo as instruções deste tutorialCOMO FAZER: Limpar e reinstalar o Grub 2 do Live CD, quando encontrei um erro na etapa 1, ao iniciar 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?
Responder1
Verifique se você está usando o Live CD correto. 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 código de 64 bits, então verifique sua arquitetura.
Supondo que você montou seu sistema para ser chrootado em/mídia/sda1, para determinar a arquitetura você pode:
ls /media/sda1/*
se você vir lib64 na saída, provavelmente é um sistema de 64 bits
Responder2
Eu tive o mesmo problema ao fazer uma imagem para o arco armhf. Tive que instalar qemu-user-static
e copiá-lo para a pasta chroot bin.
sudo cp /usr/bin/qemu-arm-static /path/to/mount/usr/bin
Você pode ter que correr
systemctl restart systemd-binfmt.service
então você deve ser capaz de fazer chroot no ambiente
Responder3
O erro significa que seu jail ( /mnt/temp
) não contém um shell bash ou não contém as bibliotecas necessárias para executar o shell bash.
Se você criou sua prisão usando algo assim:
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 ao seu problema, tente:
cp -r /bin /lib /mnt/temp
Isso deve permitir que você faça chroot com sucesso, e nesse ponto você poderá fazer outras coisas.
Porém, há cerca de um milhão de coisas erradas em fazer isso, e é quase certo que você não deseja fazer isso. Use o minbase ao criar sua prisão ou instale o Ubuntu em um destino em branco (por exemplo, uma máquina virtual) e crie um arquivo tar de todo o sistema, no qual você descompacta em /mnt/temp
.
Responder4
Na verdade, esta é uma incompatibilidade de 32 bits de 64 bits.
Embora com
cp /bin/bash /mount/temp/tmp
(copia o exec de 32 bits para a nova raiz no tmp
diretório
chroot /mount/temp /tmp/bash
chroot
está bem, todos os comandos ainda falham. Você teria que copiá-los todos.