Wie Raspian Buster Lite 32-bit in einen Docker Container installieren?

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo,

    ich habe eine recht spezielle Frage an die Docker Spezialisten.

    Ich möchte SW (genauer Treiber), die nicht mehr weiterentwickelt wird, in einem Docker Container mit Raspian Buster Lite 32-bit (armv7) einfrieren.

    Das Host-System läuft mit Raspian Bullseye 64-bit, also aarch64.

    Ich habe es geschafft, das offizielle Image in einen Container zu importieren.

    Beim Versuch, nun darin die Treiber zu installieren, kommt die Fehlermeldung:

    Code
    gcc: error: unrecognized command line option '-mgeneral-regs-only'

    Die Ursache dürfte sein, dass das Raspian im Container die Architektur vom Host-OS übernommen hat:

    Code
    # uname -m
    aarch64

    Das müsste "armv7" werden.

    Meine Frage ist nun, was ist zu tun, damit das 32-bit Raspian im Docker-Container sich selbst als "armv7" empfindet?

    2 Mal editiert, zuletzt von pisel (20. Dezember 2022 um 15:38)

  • Wie Raspian Buster Lite 32-bit in einen Docker Container installieren?? Schau mal ob du hier fündig wirst!

  • Moin pisel,

    würdest du mal die Quelle des Images nennen?

    Wie hast du dich mit dem Dockerimage verbunden?

    Ich vermute da schon einen Fehler.

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • Hallo Bernd,

    das ist das 32-bit Raspberry Pi OS Lite (Legacy) von hier.

    Das Image habe ich gemountet und die System-Partition in eine tar-Datei gepackt und nach dieser Anleitung in docker importiert.

    Das Image funktioniert auch soweit. Z.B.:

    Nur hält es sich für ein 64-bit OS, was es wohl vom Host-OS übernommen hat:

    Code
    # docker image inspect xy/raspbian:buster_lite|egrep "Architecture"
    "Architecture": "arm64",
  • Moin pisel,

    anscheinend hast du bei Docker was falsch verstanden! Ein Dockerimage ist nicht veränderbar.

    Du setzt eine RPi mit Buster lite auf, installierst alle Treiber. Wenn alles so funktioniert, machst du ein Image von der SD-Karte.

    Das kannst du dann für Docker aufbereiten. So wie du es nun auch gemacht hast.

    Über die Ausgabe deines Befehls denke ich nochmal nach. Dafür ist es zu früh ;-))

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • Moin pisel,

    ja, Docker nutzt den Kernel des "Wirtes".

    Du hast nach der Anleitung in Docker ein Image importiert, aber es rennt bei dir nicht. Sprich du hast keinen Container!

    Was auch nicht so einfach ist. Es übersteigt auch den Rahmen eines Forums zu erklären wie man ein Dockerimage erstellt.

    Ob man einen laufenden Container hat, kann man mit docker ps-a feststellen. In der Ausgabe ist auch ein Statusfeld. da sollte up healthy stehen.

    Erzähl doch mal was du erreichen möchtest. Eventuell gibt es eine andere Lösung.

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • Hallo Bernd,

    ich bräuchte einen Container mit einem 32-bit Raspbian Buster um darin Software einzufrieren, die unter aktuellen Raspians nicht mehr läuft und auch wohl nicht mehr weiter entwickelt wird.

    Das Gast-System sollte dann ein aktuelles Raspian sein. Z.B. jetzt 64-bit Bullseye.

    Ich habe zuerst das 32-bit Raspberry Pi OS Lite (Legacy) von hier importiert. Mit dem oben beschriebenen Ergebnis.

    Auf Dein Anraten habe ich nun ein Raspbian aufgesetzt und darin die SW installiert. Die SD-Karte habe ich dann wieder in ein Image importiert.

    Genauer:

    ("_img" ist das Image von raspberrypi.com, ohne "_img" das rpi von der SD-Karte )

    Das Image, das ich von raspberrypi.com heruntergeladen hatte, habe ich so in das Docker-Image importiert:

    Code
    # Image herunterladen:
    wget -O - https://downloads.raspberrypi.org/raspios_oldstable_lite_armhf/images/raspios_oldstable_lite_armhf-2022-09-26/2022-09-22-raspios-buster-armhf-lite.img.xz | /usr/bin/xz --decompress -c >2022-09-22-raspios-buster-armhf-lite.img
    # Archiv erstellen:
    sudo mount -v -r -o offset=272629760 -t ext4 2022-09-22-raspios-buster-armhf-lite.img /mnt/target/system
    sudo tar -czf raspbian_buster_lite_img.tgz --exclude="dev/*" --exclude="proc/*" --exclude="sys/*" --exclude="tmp/*" --exclude="run/*" --exclude="mnt/*" --exclude="media/*" --exclude="lost+found" -C /mnt/target/system/ .
    # Docker-Image bauen
    docker import raspbian_buster_lite_img.tgz xy/raspbian:buster_lite_img
    docker run --name rpi_buster_img -it xy/raspbian:buster_lite_img tail -f /dev/null

    Das lauffähige Raspbian von der SD-Karte so:

    Code
    # Archiv erstellen: (Die SD-Karte wurde über einen USB-Adapter automatisch gemountet)
    sudo tar -czf raspbian_buster_lite.tgz --exclude="dev/*" --exclude="proc/*" --exclude="sys/*" --exclude="tmp/*" --exclude="run/*" --exclude="mnt/*" --exclude="media/*" --exclude="lost+found" -C /media/pi/rootfs/ .
    # Docker-Image bauen
    docker import raspbian_buster_lite.tgz xy/raspbian:buster_lite
    docker run --name rpi_buster -t xy/raspbian:buster_lite tail -f /dev/null

    Ja, das geht auch ohne Zwischendateien. Aber so habe ich erst einmal mehr Kontroll-Möglichkeiten.

    Die Container laufen beide und man kann sich auch darin anmelden:

    Code
    $ docker container ls -a
    CONTAINER ID   IMAGE                                     COMMAND                  CREATED          STATUS                  PORTS                                                                    NAMES
    54df6978c05c   xy/raspbian:buster_lite                 "tail -f /dev/null"      8 minutes ago    Up 8 minutes                                                                                     rpi_img
    3adac45894bd   xy/raspbian:buster_lite_img             "tail -f /dev/null"      21 minutes ago   Up 21 minutes                                                                                    rpi_buster_img

    Beide halten sich für aarch64.

    Ich nehme an, damit habe ich nur die Filesysteme importiert und es fehlen die eigentlichen Betriebssysteme.
    Das mit der multi-platform-Architektur und die Virtualisierung mit QEMU habe ich leider (noch) nicht verstanden.

    Für konstruktive Hinweise wäre ich dankbar.

    3 Mal editiert, zuletzt von pisel (22. Dezember 2022 um 15:06)

  • Moin pisel,

    Ich habe immer noch keinen Schimmer wozu das gut sein soll, aber das muß ich auch nicht wissen.

    Kannst du nicht einfach eine SD-Karte so fertig machen, wie du sie brauchst und dann weglegen. Bei Bedarf wird sie aktiviert.

    Ansonsten lass mich mal einiges probieren. Ich melde mich.

    Das mit der multi-platform-Architektur und die Virtualisierung mit QEMU habe ich leider (noch) nicht verstanden.

    Wo kommt das denn nun her?? Aufklärung?

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

    Einmal editiert, zuletzt von Bernd666 (23. Dezember 2022 um 01:21)

  • Ich habe immer noch keinen Schimmer wozu das gut sein soll,

    ich bräuchte einen Container mit einem 32-bit Raspbian Buster um darin Software einzufrieren, die unter aktuellen Raspians nicht mehr läuft und auch wohl nicht mehr weiter entwickelt wird.

    ...

    Das Gast-System sollte dann ein aktuelles Raspian sein.

    Wie kann ich helfen? Was fehlt? Was ist unverständlich?

    Wo kommt das denn nun her?? Aufklärung?

    Das stammt von der offiziellen Docker-Import-Doku hier.

    QEMU ist eine SW Emulation und du musst nicht dieselbe HW Platform haben. Bei Docker muss die HW Platform identisch sein.

    Danke! Gibt es irgendwo eine Anleitung für Anfänger

  • Moin pisel,

    welcher Raspberry ist dein Wirtssystem?

    Kommt ev. ein VM in Frage?

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • Das Gast-System sollte dann ein aktuelles Raspian sein. Z.B. jetzt 64-bit Bullseye.

    Konkret geht es um Treiber für Hardware, die nicht mehr weiter entwickelt werden.

    Wenn ich es schaffe, die mit einem passenden alten Raspian in einem Container einzusperren, wäre das vielleicht eine Möglichkeit, die Hardware weiter zu nutzen auf aktuellen Raspians. "Die Karawane zieht weiter ..."

  • Moin pisel,

    mal eine Frage, wenn es dir so wichtig ist, die Busterumgebung zu erhalten, warum bleibst du denn nicht bei Buster?

    Du wirst es mit einem Docker nicht hinbekommen!

    Dann ist da noch die Frage, selbst wenn es irgendwie geht, kann man auch die GPIO so ansprechen, wie du denkst.

    Mein Vorschlag. Mach ein Backup der Buster-Installation, lege sie weg und arbeite mit Buster weiter. Es wird ja noch con Raspberrypi.org gepflegt.

    Wenn die Preise für RPi's sich wieder normalisiert haben, besorge dir einen RPi4 mit 8GB Speicher und richte eine virtuelle Maschine ein. Da kann dein Buster dann wirken. Frage ist auch da, werden die GPIO bedient.

    Sri, aber ich sehe da keine Lösung in einer Dockerumgebung...

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • Moin!

    framp : Ich vermute du hast mein Ergebnis schon geahnt.

    Ich habe einige Virtualisierungsumgebungen probiert. Es scheitert immer an der unüblichen Bootmethode des Raspberry Pi.

    Aber das ist auch ein Grund warum es mit einem Container in Docker nicht gehen wird.

    Es scheint eine Möglichkeit zu geben, aber da wird nur mit virtuellen Umgebungen gearbeitet.

    Das wäre die ESXi-ARM-Edition von VMware.

    Damit ist das Thema für mich erledigt.

    pisel : Dir viel Erfolg bei deiner Suche. Falls du zu einem Ergebnis kommst, lass es uns wissen, bitte.

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • Ich vermute du hast mein Ergebnis schon geahnt

    Nein. Dann hätte ich nicht gefragt :) . Ich bin immer auf der Suche nach einer Alternative meine raspiBackup Regressionstests durchzufuehren. Ich nutze QEMU erfolgreich. Aber wenn es was besseres gibt nehme ich natürlich das.

    Es war mir nicht bekannt dass VMware auch ARM unterstützt. Ich sehe mir das Mal an.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!