Estoy intentando chroot
ingresar a un sistema de archivos Arch Linux ARM
desde x86_64
.
He visto que es posible usar estática qemu
copiando 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-static
ybinfmt-qemu-static
de la AUR.
Luego, asegúrese de copiarlo qemu-*-static
al usr/bin/
directorio en el que desea realizar el chroot y luego chroot
deberí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.