Estou tentando chroot
entrar em um sistema de arquivos Arch Linux ARM
do x86_64
.
Eu vi que é possível fazer isso usando static qemu
copiando o binário para o sistema chroot:
$ cp /usr/bin/qemu-arm archarm-chroot/usr/bin
Mas apesar disso, sempre recebo o seguinte erro:
chroot: failed to run command ‘/bin/bash’: Exec format error
Eu sei que isso significa que as arquiteturas são diferentes. Estou fazendo algo errado?
Responder1
Eu uso um chroot ARM de vez em quando: meu telefone roda Linux Deploy e a imagem morre de vez em quando. Em seguida, copio-o para o meu computador e examino a situação com o chroot assim:
# This provides the qemu-arm-static binary
apt-get install qemu-user-static
# Mount my target filesystem on /mnt
mount -o loop fs.img /mnt
# Copy the static ARM binary that provides emulation
cp $(which qemu-arm-static) /mnt/usr/bin
# Or, more simply: cp /usr/bin/qemu-arm-static /mnt/usr/bin
# Finally chroot into /mnt, then run 'qemu-arm-static bash'
# This chroots; runs the emulator; and the emulator runs bash
chroot /mnt qemu-arm-static /bin/bash
Responder2
IMPORTANTE:Por favor, veja as outras respostas. Esta é uma resposta antiga e imprecisa.
Você não pode fazer chroot em arquiteturas diferentes. Ao fazer chroot, você está executando os binários (do chroot) em sua arquitetura. A execução de binários ARM em x86 (e x86_64 nesse caso) levaria a um "erro de formato Exec".
Se você deseja executar binários de arquiteturas diferentes, você precisará de um emulador. Qemu é um bom candidato para isso, mas você precisará aprender como usá-lo. Isso envolveria a criação de RootFS e a compilação de um kernel para ARM. Você precisará de um conjunto de ferramentas para compilar binários ARM (e kernel), talvez. Uma coisa é certa: esqueça o método chroot, você não pode executar binários compilados para ARM em x86 (x86_64).
Editar: Após uma conversa fiada com @UrichDangel, percebi que deveria ser possível entrar no ambiente chroot com programas qemu-user (qemu-arm neste caso). Chroot deve estar executando o qemu-arm compilado para sua arquitetura Host, então o qemu-arm pode executar seu /bin/sh (compilado para arm).
Responder3
No Arch, instaleqemu-user-static
ebinfmt-qemu-static
da AUR.
Em seguida, certifique-se de copiar qemu-*-static
para o usr/bin/
diretório onde você deseja fazer o chroot e então chroot
deve funcionar com algo comochroot /mnt qemu-arm-static /bin/bash
Responder4
Você pode definitivamente fazer 'chroot' em um sistema de arquivos (montado) destinado a uma arquitetura diferente e fazer algum trabalho significativo, você só precisa das ferramentas certas.
Dê uma olhada em PRoot, que é uma implementação de chroot, mount --bind e binfmt_misc no espaço do usuário:https://proot-me.github.io/
Junto com os emuladores de modo de usuário do QEMU, está tudo pronto.
Embora normalmente você não possa executar uma inicialização 'completa' (ou seja, iniciar o init e os serviços), é bom o suficiente para executar alguns binários a partir de seu local 'natural', com acesso a todos os seus arquivos de configuração, incluindo alguns que são montados por ligação a partir do sistema 'host', etc.