Zum Inhalt springen

Dev Container auf ARM-Rechnern umstellen

Betrifft mich das?

Wer im Browser auf cs50.dev arbeitet (GitHub Codespaces) oder einen Rechner mit Intel- oder AMD-Prozessor hat, muss nichts tun. Alle anderen tippen im TerminalFenster, in dem Sie dem Computer Befehle als Text eintippen statt zu klicken. In VS Code liegt es im unteren Bereich des Fensters. Glossar → von VS Code, im Fenster mit „[Dev Container]“ im Titel:

uname -m

Steht dort aarch64, läuft Ihr Container schon in der ARM-Fassung. Steht dort x86_64, stellen Sie um.

Umstellen

1. update50 eingeben

Tippen Sie im Terminal des Containers:

update50

Das holt die neue .devcontainer.json in Ihren Kursordner. Am Ende steht „Unable to update codespace. Try again in a few minutes!“, davor ein Hinweis auf gh auth login. Beides gilt nur für Codespaces im Browser, übergehen Sie es.

2. Container neu erstellen

Unten rechts in VS Code erscheint der Hinweis „Configuration file(s) changed: .devcontainer.json …“. Klicken Sie dort auf Rebuild.

Docker lädt jetzt mehrere Gigabyte, das dauert einige Minuten. Lassen Sie VS Code offen, bis im Terminal „Container eingerichtet.“ steht. uname -m zeigt dann aarch64.

Kein Hinweis erschienen?

Drücken Sie Cmd + Shift + P (Mac) oder Strg + Shift + P (Windows), tippen Sie Rebuild Container und wählen Sie „Dev Containers: Rebuild Container“. Nicht „Reopen in Container“: Das verbindet nur wieder mit dem alten Container.

3. Programme neu übersetzen

Ihre Programme sind noch für Intel und AMD übersetzt und laufen im neuen Container nicht mehr. Übersetzen Sie jedes neu, bevor Sie es wieder ausführen oder debuggen, wie gewohnt im Ordner des Programms:

make mario
Alle Programme auf einmal neu übersetzen

Diese Zeile sucht in Ihrem Kursordner jede .c-Datei, neben der ein gleichnamiges Programm liegt (mario.c und mario), und übersetzt es neu. Sie zeigt dabei jede Datei an. Wo ein Programm aus mehreren Dateien besteht (etwa speller), nimmt make wie sonst auch das Makefile im Ordner.

find /workspaces -name '*.c' -not -path '*/.*' -execdir bash -c '[ -x "${1%.c}" ] && echo "$PWD/${1#./}" && make "${1%.c}"' _ {} \;

Meldet make bei einer Datei einen Fehler, ist dieses Programm nicht übersetzt, die übrigen schon. Das betrifft meist eine Aufgabe, an der Sie noch arbeiten.

4. Wieder bei inf anmelden

Die Anmeldung bei infDas Abgabewerkzeug des Kurses: inf upload me im Terminal lädt Ihre Lösung hoch, lässt die Tests laufen und zeigt, ob die Übung ihren Stern hat, also für die Joker-Regel zählt. Glossar → lag im alten Container und ist beim Neuerstellen verloren gegangen. Melden Sie sich noch einmal an, sonst klappt die nächste Abgabe nicht:

Bevor Sie zum ersten Mal abgeben, melden Sie sich einmal an. Tippen Sie dazu inf login ins Terminal. Tippen Sie gleich inf upload, beginnt die Anmeldung von selbst. Dann geht es so weiter:

  1. inf fragt nach Ihrer Uni-E-Mail-Adresse. Geben Sie nur den Teil vor dem @ ein, bei max.mustermann@stud.uni-bamberg.de also max.mustermann.
  2. An diese Adresse geht eine Mail mit einem sechsstelligen Code. Tippen Sie ihn ein; er gilt zehn Minuten. Kommt keine Mail, sehen Sie im Spam-Ordner nach. Haben Sie sich bei der Adresse vertippt, brechen Sie mit Strg + C ab und fangen neu an.
  3. Nur beim ersten Mal: Geben Sie Ihre Matrikelnummer ein, zur Kontrolle zweimal. Gemeint sind die sieben Ziffern, nicht Ihre BA-Nummer (ba…).

Ob Sie die Prüfung mit 6 oder mit 9 ECTS ablegen, fragt inf nicht: Für die Joker-Regel gilt, was zu der Klausur passt, die Sie am Ende schreiben.

Danach bleiben Sie angemeldet. inf whoami zeigt, mit welcher Adresse; inf logout meldet Sie ab. Wurde Ihr Codespace oder Dev Container neu erstellt, fragt inf wieder nach Adresse und Code. Die Matrikelnummer kennt der Server dann schon.

5. Platz freigeben (freiwillig)

Die alte Fassung (etwa 4 GB) bleibt auf Ihrem Rechner liegen, bis Sie sie löschen:

  • Docker Desktop (Mac, Windows): links „Images“, bei jedem Eintrag ghcr.io/cs50/codespace auf den Papierkorb klicken.

  • Windows mit unserem Skript: über das Startmenü „Ubuntu“ öffnen und dort tippen:

    docker image rm $(docker image ls --format '{{.Repository}}:{{.Tag}}' ghcr.io/cs50/codespace)

Meldet Docker, dass das Image noch benutzt wird, lassen Sie es liegen. Es kostet nur Platz.

Probleme und Lösungen

Ein Programm startet nicht, oder der Debugger bricht nach dem Umstellen immer noch ab.

Typische Meldungen sind rosetta error: failed to open elf at /lib64/ld-linux-x86-64.so.2 beim Start und Cannot insert breakpoint 1. Cannot access memory at address … im Debugger. Prüfen Sie mit uname -m, ob der Container in der ARM-Fassung läuft (aarch64). Wenn ja, ist das Programm noch das alte: neu übersetzen wie in Schritt 3.

Nach dem Neuerstellen zeigt uname -m immer noch x86_64.
  1. Sie haben „Reopen in Container“ gewählt statt „Rebuild Container“. Erstellen Sie den Container wie in Schritt 2 neu.

  2. Ihr Container wurde vor dem 12. Oktober 2026 eingerichtet. Dann holt update50 noch die Datei von CS50 statt unsere, und nach dem Neuerstellen fehlt auch inf (inf: command not found). Fügen Sie im Terminal des Containers diese Zeile ein und erstellen Sie den Container danach wie in Schritt 2 neu:

    Nie wahllos Skripte aus dem Internet laden und ausführen. Eine Zeile wie diese lädt ein Programm aus dem Internet und reicht es sofort zum Ausführen weiter (| bash, | iex), mit allen Rechten Ihres Benutzerkontos und ohne dass Sie es vorher sehen. Wer Ihnen so eine Zeile unterschiebt, kann damit Ihre Dateien löschen, Passwörter mitlesen oder Schadsoftware einrichten. Führen Sie sie deshalb nur aus, wenn Sie der Quelle vertrauen, und genau so, wie sie dort steht: von dieser Seite (Adressen auf inf.zone) oder von der offiziellen Seite des Programms. Zeilen aus Foren, Chats, E-Mails, Videos oder von einer KI führen Sie nie ungeprüft aus.

    curl -fsSL https://inf.zone/setup-container.sh | bash
  3. Nur Mac: Auf Ihrem Rechner ist eingestellt, dass Docker immer die Intel-Fassung lädt, etwa für einen anderen Kurs. Tippen Sie im Programm „Terminal“ des Macs (nicht in VS Code) echo $DOCKER_DEFAULT_PLATFORM. Steht dort linux/amd64, entfernen Sie die Zeile mit DOCKER_DEFAULT_PLATFORM aus ~/.zshrc, beenden VS Code ganz mit Cmd + Q und erstellen den Container neu.

Das Herunterladen bricht ab, oder es erscheint no space left on device.

Die ARM-Fassung braucht etwa 4 GB zusätzlich zur alten. Schaffen Sie Platz, etwa indem Sie in Docker Desktop unter „Containers“ den alten Container des Kurses und danach unter „Images“ die alte Fassung löschen (Ihre Dateien im Kursordner bleiben). Öffnen Sie dann den Kursordner in VS Code und wählen Sie „Reopen in Container“.

Windows-Laptop mit Snapdragon: Es klappt nicht.

Auf Macs mit Apple-Chip haben wir die ARM-Fassung samt Debugger ausprobiert, auf Windows-Laptops mit Snapdragon noch nicht selbst. Sagen Sie uns im Tutorium Bescheid, was passiert.

Hilfe

Kommen Sie nicht weiter, fragen Sie Susi, den Chatbot der Kursseite: Markieren Sie die Stelle dieser Anleitung, an der Sie hängen, und kopieren Sie die Ausgabe von uname -m und die Fehlermeldung in Ihre Frage (bricht das Neuerstellen ab: in der Meldung von VS Code „Show Log“, die letzten Zeilen). Hilft das nicht, kommen Sie damit ins Tutorium. Zum Debuggen können Sie bis dahin auf GitHub Codespaces ausweichen. Dort läuft der Debugger ohne Umstellung.

Diese Seite als Markdown: ansehen herunterladen