Info: Übersicht über die im Raspberry Pi Imager angebotenen Betriebssysteme

  • Hier einmal eine "kleine" Übersicht über die vom Raspberry Pi Imager angebotene Auswahl an Betriebssystemen.

    Zu Beginn fragt der Imager ja den Typ des Raspberry Pi ab, für den die SD-Karte erstellt werden soll. Daraus ermittelt er die möglichen Betriebssysteme (-Versionen) und auch das empfohlene Betriebssystem. Dazu verwendet er die unten aufgelisteten "Etiketten" (tags).

    Diese Liste habe ich aus der aktuellen JSON-Datei ermittelt, die der Imager intern nutzt.

  • Info: Übersicht über die im Raspberry Pi Imager angebotenen Betriebssysteme? Schau mal ob du hier fündig wirst!

  • simonz February 2, 2025 at 12:04 PM

    Changed the title of the thread from “Info: Übersicht über die im Raspberry Imager angebotenen Betriebssysteme” to “Info: Übersicht über die im Raspberry Pi Imager angebotenen Betriebssysteme”.
  • Diese Liste habe ich aus der aktuellen JSON-Datei ermittelt, die der Imager intern nutzt.

    Das ist diese? https://downloads.raspberrypi.org/os_list_imagingutility_v4.json
    Habe ich nur mit Google gefunden, nachdem ich vergeblich auf meinem RPi nach einer json-Datei zum Imager gesucht habe.

    Edit: hat sich erledigt, man rpi-imager und dann:

    Code
    moi@pie:~ $ rpi-imager --version
    rpi-imager version 1.9.1
    Repository: https://downloads.raspberrypi.org/os_list_imagingutility_v4.json

    There are no bugs. Any resemblance thereof is delirium. Really.
    (man lcf)

    Edited once, last by DistroEx (February 2, 2025 at 2:49 PM).

  • Diese Liste habe ich aus der aktuellen JSON-Datei ermittelt, die der Imager intern nutzt.

    Mit jq?

    Nein, mit einer kleinen Python.

    Mit jq bin ich noch nicht sehr weit gekommen, nutze das zum ersten Mal. Die Datei ist auch in less oder im Firefox übersichtlich.

    Keine Ahnung wie ich die nebeneinander anzeigen kann. Die Fehlermeldung am Ende habe ich erst mal ignoriert.

    There are no bugs. Any resemblance thereof is delirium. Really.
    (man lcf)

  • Hier mein Python-Code zur Erzeugung obiger (#1) Auswertung/Liste:

  • Hallo,

    simonz mir sind ein paar Anmerkungen aufgefallen.

    Die Konstanten würde ich vollständig angeben. Die Datei sollte ein absoluter Pfad sein und man spart sich das zusammenstückeln der URL in `get_data` und die Datei kann man aus Gründen auch mal umbenennen.

    In `get_data` könnte man gleich `read_text()` nutzen, wenn man `pathlib` schon nutzt. Die verschachtelten try/excepts finde ich nicht schön. Ich würde ich das zweite `try` nicht einrücken, dafür aber `return` in den `try` - Block nehmen,. `sys.exit()` würde ich ganz raus nehmen, die Funktion soll Daten holen und nicht das Programm beenden. Da würde ich eher prüfen, ob Daten zurück kamen und dann das Programm "natürlich auslaufen lassen".

    In `print_devices` persönlich mag ich Comprehensions. Den Sinn von `msg` verstehe ich nicht und auch nicht das Wörterbuch mit den Übersetzungen in der `print_devices` Funktion. Das wäre für mich eine Konstante. `max` braucht beide Listen nicht. Alternativ könnte man `map` verwenden. Hat `dev` nicht irgendwas mit Laufwerken zu tun? :P Mit `items` sparst du dir den komischen `device[devices]` - Aufruf, der nicht viel über den Inhalt aussagt.

    `print_op_systems` da würde ich auch wieder ein Wörterbuch für die Sprache wählen.

    `get_recursively_and_print_oses` ob die Funktion rekursive Aufrufe beinhalten gehört meiner Meinung nach eigentlich nicht in den Namen. Der Name soll beschreiben was für eine Tätigkeit die Funktion ausübt und sie gibt die Betriebssysteme aus. Wieso plötzlich kein `f`-String mehr in print("    " + str(devices))? Man muss auch nicht alles an einen Namen binden, wenn man den nur ein mal benötigt.

    Ich finde jetzt eine der zwei Funktionen `print_op_systems` und `get_recrusively_and_print_oses` überflüssig. Wenn dann sollte eine Funktion die Daten nur formatieren und an die die Ausgibt zurück geben oder es gibt nur eine, die die Daten formatiert ausgibt.

    Ungetesteter Zwischenstand:


    Grüße
    Dennis


    Edit: `str` in der Exception ist nicht notwendig, `Headline` und `Description` sollten noch bessere Namen werden.

    🎧 I'm strapped into my bed,
    I've got electrodes in my head.
    My nerves are really bad,
    it's the best time I've ever had. 🎧

    Edited 2 times, last by Dennis89 (February 4, 2025 at 8:58 AM).

  • Dennis89, danke für Deine Anmerkungen und Alternativvorschläge! Oder Verbesserungsvorschläge. ;)

    Wenn Du Version 0 meines Skriptes gesehen hättest, hätten auch zwei Seiten Anmerkungen nicht gereicht. :D

    Das mit den Inline-Übersetzungen war ein Experiment, das sich erst bei der Entscheidung, das Skript zu posten, entwickelt hat.
    Ich wollte explizit einen Weg ausprobieren, wo ich adhoc neue Übersetzungen einbauen kann, ohne ein zentrales Wörterbuch zu halten.

    Im Detail schaue ich mir Deine Version nachher noch an.

    Edited once, last by simonz (February 4, 2025 at 4:27 PM).

  • Vielleicht will man die Daten mal mit ältern Ausgaben vergleichen oder eine andere Datei/URL nutzen ohne das im Code zu ändern. Hier kann der Benutzer noch entscheiden, welche Quelle er will und ob er die Standard-Quelle will oder lieber eine eigene.

    Läuft aber natürlich schief, wenn da andere JSON-Daten geladen werden. Auch die Fehlerbehandlung in `load_from_web` gefällt mir noch nicht.


    Grüße
    Dennis

    🎧 I'm strapped into my bed,
    I've got electrodes in my head.
    My nerves are really bad,
    it's the best time I've ever had. 🎧

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!