ubuntuusers.de

Raspberry Pi: amd64-Programme mit arm64-Architektur im UserSpace nutzen

Status: Gelöst | Ubuntu-Version: Ubuntu MATE 20.04 (Focal Fossa)
Antworten |

klang

Anmeldungsdatum:
12. August 2009

Beiträge: Zähle...

Hallo,

ich habe versucht, unter Ubuntu MATE auf dem Raspberry Pi 4B mit arm64-Architektur ein Programm, das für amd64-Architektur statisch gegen mehrere Libraries gelinkt wurde, nutzbar zu machen. (Die Quelltexte sind geheim!) Eine eigene virtuelle Maschine möchte ich vermeiden, sondern alles sollte möglichst transparent in meiner Nutzer-Umgebung stattfinden.

Für mich wäre naheliegend, mit

1
2
$ sudo dpkg --add-architecture amd64
$ sudo apt-get update

das System darauf vorzubereiten, beim Installieren des DEB-Pakets die fehlenden amd64-Libraries zu holen.

Leider endet das mit Fehlermeldungen

1
2
3
...
E: Fehlschlag beim Holen von http://ports.ubuntu.com/ubuntu-ports/dists/focal/main/binary-amd64/Packages 404  Not Found [IP: 91.189.88.152 80]
...

aus denen ich schließe, dass die Archivquellen in sources.list (Abschnitt „Ubuntu-20-04“) noch ergänzt werden müssen. Tue ich das in Synaptic, erscheint dort beim Neueinlesen der Pakete eine riesige Fehlermeldung, die wiederum auf fehlende arm64-Pfade verweist.

Eine erste Lösung habe ich zwar durch sinngemäße Befolgung dieser Anleitung hinbekommen, aber mit

1
$ sudo debootstrap --arch=amd64 stretch /x86_64

habe ich ein paralleles Debian-(Teil-)System und dazu noch ein älteres, weil es auch beim aktuellen nicht fehlerfrei durchläuft. Der Nachteil ist, dass ich die Installation des Programms mit chroot in dem Jail machen musste und das ganze dadurch nur als root läuft.

Jetzt fühlt es sich durch ein paar Links zwar so an, als ob sich die Dateien des Programms in meinem Userspace befänden, aber nach Änderungen der Dateien durch das Programm muss ich mir immer erst die Rechte von Root zurückholen. Das ist lästig. Daher würde ich gerne wieder auf meine Anfangs-Idee, die Libraries für die andere Architektur zusätzlich zu laden, zurück kommen.

Also: wie bekomme ich Multiarchitektur mit amd64 unter arm64 im UserMode hin?

DJKUhpisse Team-Icon

Supporter, Wikiteam
Avatar von DJKUhpisse

Anmeldungsdatum:
18. Oktober 2016

Beiträge: 18229

Wohnort: in deinem Browser, hier auf dem Bildschirm

Wenn ich es richtig verstanden habe kannst du auf einer arm64-CPU keine amd64-Befehle ausführen. https://stackoverflow.com/questions/24316854/installing-amd-64-or-i386-packages-on-raspbian-arm-hf

woko1754

Anmeldungsdatum:
12. November 2008

Beiträge: 801

Wohnort: Lübeck

Wenn ich die Anleitung richtig verstehe gibt es wohl per Qemu die Möglichkeit die AMD64 Architektur auf ARM zu emulieren.

Schon ziemlich abgefahren. Ich glaube kaum dass hier jemand dabei helfen kann.

Wenn Du den Sourcecode hättest wäre es besser selber zu bauen, aber den hast Du wohl nicht.

klang

(Themenstarter)

Anmeldungsdatum:
12. August 2009

Beiträge: Zähle...

@DJKUhpisse: doch doch, es läuft ja, allerdings nur unter root.

@woko1754: ja, Sourcecode ist nicht.

Ich vermute, dass das Multiarch-Feature nicht vollständig von Debian nach Ubuntu übernommen wurde. In dem Artikel ist ja beschrieben, wie man eigene Quellen für fremde Architekturen, in meinem Fall amd64, übersetzen und testen kann. Das funktioniert bei mir auch. Mir gelingt es aber bisher noch nicht, ein für amd64 erstelltes DEB-Paket im regulären Verzeichnisbaum zu installieren, sodass nicht root Eigner der veränderten Dateien wird.

Ich habe die Befürchtung, dass es daran liegt, dass Ubuntu in mehrere Teilarchive aufgeteilt ist, wogegen Debian ein Archiv für alle Architekturen hat.

Ich lasse mich gerne des Besseren belehren.

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14388

klang schrieb:

@woko1754: ja, Sourcecode ist nicht.

Wenn Du deinen eigenen Test-source-code nimmst, kannst Du dann auf deinem PI, als nicht root user ein amd64-binary kompilieren und dieses amd64-binary als nicht root user ausführen?

klang

(Themenstarter)

Anmeldungsdatum:
12. August 2009

Beiträge: 32

lubux schrieb:

Wenn Du deinen eigenen Test-source-code nimmst, kannst Du dann auf deinem PI, als nicht root user ein amd64-binary kompilieren und dieses amd64-binary als nicht root user ausführen?

Ja, ich kann die oberen 60% des Artikels nachvollziehen, also eigene Quellen übersetzen, statisch linken und laufen lassen ohne Root-Rechte. (Und dann den Rest mit chroot als root wie gesagt auch.)

Das fragliche Programm ist ebenfalls statisch gelinkt, benötigt jedoch vorhandene Libraries, z.B. libc6:amd64, aber damit habe ich ja Probleme, siehe Eröffnungsbeitrag.

Ich wäre ja auch zufrieden, wenn ich einen Aufruf wie

1
$ qemu-amd64 ...

hin bekäme. Aber wie bringe ich das System dazu, die amd64-Pakete bei der Installation in den regulären Verzeichnisbaum zu bringen und zu nutzen?

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14388

klang schrieb:

Das fragliche Programm ist ebenfalls statisch gelinkt, benötigt jedoch vorhandene Libraries, z.B. libc6:amd64, ...

Dann ist es nicht 100% statisch gelinkt? Hast Du binutils-multiarch installiert?

apt-cache policy binutils-multiarch
apt-cache show binutils-multiarch

?

klang

(Themenstarter)

Anmeldungsdatum:
12. August 2009

Beiträge: 32

lubux schrieb:

Dann ist es nicht 100% statisch gelinkt? Hast Du binutils-multiarch installiert?

apt-cache policy binutils-multiarch
apt-cache show binutils-multiarch

?

ldd sagt, es sei statisch gelinkt. Andererseits werden weitere Libraries benötigt.

binutils-multisarch habe ich nachinstalliert. Folgender Text hat mich davon bisher abgehalten:

Homepage: https://www.gnu.org/software/binutils/
Description-de: Binärwerkzeuge, die Multiarchitektur-Ziele unterstützen Die Programme in diesem Paket werden zur Manipulation von Binär- und Objekt-Dateien verwandt, die vielleicht auf anderen Architekturen erzeugt wurden. 
Dieses Paket ist primär für Cross-Compiler und Multiarchitektur-Entwickler gedacht und wird von normalen Benutzern oder Entwicklern nicht benötigt. 

Es bringt aber leider auch nichts.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
$ sudo add-apt-repository 'deb http://de.archive.ubuntu.com/ubuntu/ focal main'
$ sudo dpkg --add-architecture amd64
$ sudo apt-get update
...
Ign:19 http://de.archive.ubuntu.com/ubuntu focal/main arm64 Packages
Fehl:19 http://de.archive.ubuntu.com/ubuntu focal/main arm64 Packages  404  Not Found [IP: 141.30.62.24 80]
Es wurden 1.237 kB in 3 s geholt (364 kB/s).
Paketlisten werden gelesen... Fertig
E: Fehlschlag beim Holen von http://ports.ubuntu.com/ubuntu-ports/dists/focal/main/binary-amd64/Packages 404  Not Found [IP: 91.189.88.142 80]
...

Für mich sieht das so aus, als würde in den adm64-Repos nach arm64 gesucht und in den arm64-Repos nach amd64.

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14388

klang schrieb:

Für mich sieht das so aus, als würde in den adm64-Repos nach arm64 gesucht und in den arm64-Repos nach amd64.

Die Architektur kann man in der sources.list festlegen bzw. vorgeben.

Der Eintrag in der sources.list, auf meinem PI, sieht z. B. so aus:

:~ $ cat /etc/apt/sources.list
deb [ arch=armhf ] https://ftp.uni-stuttgart.de/raspbian/ buster main contrib non-free rpi

klang

(Themenstarter)

Anmeldungsdatum:
12. August 2009

Beiträge: 32

lubux schrieb:

Der Eintrag in der sources.list, auf meinem PI, sieht z. B. so aus:

:~ $ cat /etc/apt/sources.list
deb [ arch=armhf ] https://ftp.uni-stuttgart.de/raspbian/ buster main contrib non-free rpi

Ubuntu Mate liegt auf http://ports.ubuntu.com/ubuntu-ports/dists/focal

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14388

klang schrieb:

Ubuntu Mate liegt auf http://ports.ubuntu.com/ubuntu-ports/dists/focal

OK, aber was hat das mit meinem Beispiel zu tun? Denn es geht um deine Aussage:

Für mich sieht das so aus, als würde in den adm64-Repos nach arm64 gesucht und in den arm64-Repos nach amd64.

aus deinem Beitrag vom: 23. Dezember 2020, 22:03 Uhr.

klang

(Themenstarter)

Anmeldungsdatum:
12. August 2009

Beiträge: 32

lubux schrieb:

klang schrieb:

Ubuntu Mate liegt auf http://ports.ubuntu.com/ubuntu-ports/dists/focal

OK, aber was hat das mit meinem Beispiel zu tun?

Du zeigst ein Beispiel von Raspbian, das von Debian Buster abgeleitet ist. Ich dagegen habe Ubuntu Mate im Einsatz: https://ubuntu-mate.org/download/arm64/focal/ Damit bin ich ja sonst auch sehr zufrieden. Dazu passen auch meine Pfade zu den Repositories.

Eventuell logisch wäre noch gewesen, meine ersten beiden Befehle zu tauschen:

1
2
3
 weitere Architektur bekannt geben
 Repository dafür angeben
 Baum bauen lassen

Liefert aber die selben Fehler wie zuvor. Ich denke, dass es einfach ein Bug in Ubuntu ist und werde das mal weiter melden.

lubux

Anmeldungsdatum:
21. November 2012

Beiträge: 14388

klang schrieb:

Du zeigst ein Beispiel von Raspbian, das von Debian Buster abgeleitet ist. Ich dagegen habe Ubuntu Mate im Einsatz...

D. h. Du hast nicht verstanden, was ich mit meinem Beispiel dir zeigen wollte? Ich hätte das evtl. so posten sollen:

:~ $ cat /etc/apt/sources.list
deb [ arch=armhf ] https://ftp.uni-stuttgart.de/<OS>/ <OS-Version> main contrib non-free <...>

klang

(Themenstarter)

Anmeldungsdatum:
12. August 2009

Beiträge: 32

lubux schrieb:

D. h. Du hast nicht verstanden, was ich mit meinem Beispiel dir zeigen wollte?

So isses. Ja, jetzt ist der Groschen etwas langsamer gefallen. Pakete und Architekturen sind eindeutig zugeordnet. Vielen Dank für die Hilfe!

Sieht so aus, als sei die Installation jetzt durchgelaufen, Programm startet aber noch nicht. Mal sehen wie es weitergeht. Werde Rückmeldung geben.

klang

(Themenstarter)

Anmeldungsdatum:
12. August 2009

Beiträge: 32

klang schrieb:

Sieht so aus, als sei die Installation jetzt durchgelaufen, Programm startet aber noch nicht. Mal sehen wie es weitergeht. Werde Rückmeldung geben.

Die Installation wurde nach

1
$ sudo apt --fix-broken install

ohne Fehlermeldung beendet. Beim Starten im Terminal ließen sich noch weitere fehlende Libraries erkennen, die ich letztlich nachinstallieren konnte. Jetzt läuft alles fast so, wie man es auf amd64-Maschinen mit Xubuntu gewohnt ist.

Ich habe jetzt ein Programm, das angeblich statisch gelinkt ist, aber dennoch weiterer vorhandener Bibliotheken bedarf, soweit zum Laufen gebracht, dass ich in dem eingangs zitierten Artikel ungefähr an der Stelle

Now it works transparently!

angekommen bin. Das ist also keine allgemeingültige Lösung, aber ein gangbarer Weg, wenn es gelingt, alle Abhängigkeiten aufzulösen. Dafür, dass man dann im Userraum arbeiten kann, bin ich damit sehr zufrieden.

Antworten |