# Dev Container auf ARM-Rechnern umstellen

Quelle: https://inf.zone/extras/setup/devcontainer-arm/

**Auf einen Blick**

Betrifft nur Sie, wenn Sie die CS50-Umgebung als [Dev Container](https://inf.zone/extras/setup/devcontainer-local/) auf einem Rechner mit ARM-Prozessor benutzen (Mac mit Apple-Chip, Windows-Laptop mit Snapdragon) und ihn vor dem 18. Oktober 2026 eingerichtet haben. Dann stellen Sie einmal um: `update50` eingeben, Container neu erstellen, Ihre Programme neu übersetzen, wieder bei `inf` anmelden. Ihre Dateien bleiben erhalten. Rechnen Sie mit etwa 10 Minuten, meist Wartezeit, und einer Internetverbindung.

**Wozu das Ganze?**

Die CS50-Umgebung gab es bisher nur für Rechner mit Intel- oder AMD-Prozessor. Auf einem Rechner mit ARM-Prozessor hat Docker diesen Prozessor nachgebildet. Zum Programmieren reicht das, aber der Debugger (`debug50`) bricht dort mit der Meldung `Couldn't get CS register: Input/output error` ab. Seit Oktober 2026 gibt es die Umgebung auch als ARM-Fassung. Ein Container, der vorher eingerichtet wurde, läuft noch in der alten, bis Sie ihn umstellen.

## Betrifft mich das?

Wer im Browser auf [cs50.dev](https://cs50.dev) arbeitet (GitHub Codespaces) oder einen Rechner mit Intel- oder AMD-Prozessor hat, muss nichts tun. Alle anderen tippen im Terminal von VS Code, im Fenster mit „[Dev Container]“ im Titel:

```bash
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:

```bash
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:

```bash
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.

```bash
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 `inf` 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](https://inf.zone/extras/exam/#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:

  ```bash
  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](#3-programme-neu-übersetzen).

**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](#2-container-neu-erstellen) 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:

   > [!CAUTION]
   > **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.
   
   ```bash
   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](https://inf.zone/extras/setup/codespace-cloud/) ausweichen. Dort läuft der Debugger ohne Umstellung.
