¿Cómo puedo hacer chroot en un sistema de archivos con una arquitectura diferente?

¿Cómo puedo hacer chroot en un sistema de archivos con una arquitectura diferente?

Estoy intentando chrootingresar a un sistema de archivos Arch Linux ARMdesde x86_64.

He visto que es posible usar estática qemucopiando el binario en el sistema chroot:

$ cp /usr/bin/qemu-arm archarm-chroot/usr/bin    

Pero a pesar de esto siempre me sale el siguiente error:

chroot: failed to run command ‘/bin/bash’: Exec format error

Sé que esto significa que las arquitecturas difieren. ¿Estoy haciendo algo mal?

Respuesta1

Utilizo un chroot ARM de vez en cuando: mi teléfono ejecuta Linux Deploy y la imagen muere de vez en cuando. Luego lo copio a mi computadora y examino la situación con chroot de esta manera:

# 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

Respuesta2

IMPORTANTE:Por favor mire las otras respuestas. Esta es una respuesta antigua e inexacta.

No se puede hacer chroot en una arquitectura diferente. Al hacer chroot, estás ejecutando los binarios (desde el chroot) en tu arquitectura. La ejecución de binarios ARM en x86 (y x86_64 en ese sentido) provocaría un "error de formato Exec".

Si desea ejecutar binarios desde una arquitectura diferente, necesitará un emulador. Qemu es un buen candidato para esto, pero necesitarás aprender a usarlo. Esto implicaría crear RootFS y compilar un kernel para ARM. Quizás necesitará una cadena de herramientas para compilar binarios ARM (y kernel). Una cosa es segura: olvídese del método chroot, no puede ejecutar archivos binarios compilados para ARM en x86 (x86_64).

Editar: Después de la pequeña charla con @UrichDangel, me di cuenta de que debería ser posible ingresar al entorno chroot con programas de usuario qemu (qemu-arm en este caso). Chroot debería estar ejecutando qemu-arm compilado para su arquitectura de host, luego qemu-arm puede ejecutar su /bin/sh (compilado para arm).

Respuesta3

En Arch, instalarqemu-user-staticybinfmt-qemu-staticde la AUR.

Luego, asegúrese de copiarlo qemu-*-statical usr/bin/directorio en el que desea realizar el chroot y luego chrootdebería funcionar con algo comochroot /mnt qemu-arm-static /bin/bash

Respuesta4

Definitivamente puede realizar un 'chroot' en un sistema de archivos (montado) destinado a una arquitectura diferente y realizar un trabajo significativo, solo necesita las herramientas adecuadas.

Eche un vistazo a PRoot, que es una implementación en el espacio de usuario de chroot, mount --bind y binfmt_misc:https://proot-me.github.io/

Junto con los emuladores de modo de usuario de QEMU, ya está todo listo.

Aunque normalmente no se puede realizar un arranque "completo" (es decir, iniciar init y servicios), es suficiente ejecutar algunos binarios desde su lugar "natural", con acceso a todos sus archivos de configuración, incluidos algunos que están montados mediante enlace desde el sistema 'host', etc.

información relacionada