Ich versuche, von in chroot
ein Arch Linux- ARM
Dateisystem zu wechseln x86_64
.
Ich habe gesehen, dass es möglich ist, static zu verwenden, qemu
indem man die Binärdatei in das Chroot-System kopiert:
$ cp /usr/bin/qemu-arm archarm-chroot/usr/bin
Trotzdem erhalte ich immer die folgende Fehlermeldung:
chroot: failed to run command ‘/bin/bash’: Exec format error
Ich weiß, das bedeutet, dass die Architekturen unterschiedlich sind. Mache ich etwas falsch?
Antwort1
Ich verwende von Zeit zu Zeit ein ARM-Chroot: Auf meinem Telefon läuft Linux Deploy und das Image stürzt ab und zu ab. Ich kopiere es dann auf meinen Computer und untersuche die Situation mit Chroot wie folgt:
# 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
Antwort2
WICHTIG:Bitte schauen Sie sich die anderen Antworten an. Dies ist eine alte und ungenaue Antwort.
Sie können nicht in eine andere Architektur chrooten. Durch Chrooten führen Sie die Binärdateien (aus dem Chroot) auf Ihrer Architektur aus. Das Ausführen von ARM-Binärdateien auf x86 (und x86_64) würde zu einem „Exec-Formatfehler“ führen.
Wenn Sie Binärdateien von einer anderen Architektur ausführen möchten, benötigen Sie einen Emulator. Qemu ist hierfür gut geeignet, Sie müssen jedoch lernen, wie man es verwendet. Dazu müssten Sie RootFS erstellen und einen Kernel für ARM kompilieren. Sie benötigen möglicherweise eine Toolchain zum Kompilieren von ARM-Binärdateien (und Kernel). Eines ist sicher: Vergessen Sie die Chroot-Methode, Sie können für ARM kompilierte Binärdateien nicht auf x86 (x86_64) ausführen.
Bearbeiten: Nach dem Smalltalk mit @UrichDangel wurde mir klar, dass es möglich sein sollte, die Chroot-Umgebung mit QEMU-Benutzerprogrammen (in diesem Fall QEMU-ARM) zu betreten. Chroot sollte QEMU-ARM ausführen, das für Ihre Hostarchitektur kompiliert wurde, dann kann QEMU-ARM Ihr /bin/sh (kompiliert für ARM) ausführen.
Antwort3
Installieren Sie auf Archqemu-user-static
Undbinfmt-qemu-static
von der AUR.
qemu-*-static
Dann stellen Sie sicher, dass Sie das in das Verzeichnis kopieren usr/bin/
, in das Sie chrooten möchten, und dann chroot
sollte das mit etwas wiechroot /mnt qemu-arm-static /bin/bash
Antwort4
Sie können auf jeden Fall per „chroot“ in ein (gemountetes) Dateisystem wechseln, das für eine andere Architektur gedacht ist, und dort sinnvolle Arbeit leisten; Sie benötigen lediglich die richtigen Tools.
Sehen Sie sich PRoot an, eine User-Space-Implementierung von chroot, mount --bind und binfmt_misc:https://proot-me.github.io/
Zusammen mit den Benutzermodus-Emulatoren von QEMU sind Sie startklar.
Obwohl Sie normalerweise keinen „vollständigen“ Bootvorgang durchführen können (d. h. Init und Dienste starten), reicht es aus, einige Binärdateien von ihrem „natürlichen“ Speicherort aus auszuführen und dabei Zugriff auf alle ihre Konfigurationsdateien zu haben, einschließlich einiger, die vom „Host“-System usw. per Bind-Mount bereitgestellt wurden.