{"id":10216,"date":"2023-02-28T18:11:58","date_gmt":"2023-02-28T16:11:58","guid":{"rendered":"https:\/\/u-labs.de\/portal\/?p=10216"},"modified":"2023-02-28T18:15:59","modified_gmt":"2023-02-28T16:15:59","slug":"image2card-vorgestellt-ich-habe-einen-eigenen-raspberry-pi-imager-entwickelt","status":"publish","type":"post","link":"https:\/\/u-labs.de\/portal\/image2card-vorgestellt-ich-habe-einen-eigenen-raspberry-pi-imager-entwickelt\/","title":{"rendered":"Image2Card vorgestellt: Ich habe einen eigenen Raspberry Pi Imager entwickelt"},"content":{"rendered":"<p>Den Raspberry Pi Imager <a href=\"https:\/\/u-labs.de\/portal\/raspberry-pi-4-ohne-monitor-installieren-und-einrichten-durch-vorkonfiguration-unter-windows-linux\/\" data-type=\"URL\" data-id=\"https:\/\/u-labs.de\/portal\/raspberry-pi-4-ohne-monitor-installieren-und-einrichten-durch-vorkonfiguration-unter-windows-linux\/\">habe ich bereits vor l\u00e4ngerem vorgestellt<\/a>. Vor allem f\u00fcr Einsteiger ist er die wohl beste Methode, um g\u00e4ngige Betriebssysteme wie das Raspberry Pi OS auf die Speicherkarte zu \u00fcberspielen. Doch er hat auch ein paar Schw\u00e4chen, die zumindest erfahrenen Nutzern begegnen k\u00f6nnen: Die Vorkonfiguration von Hostname, SSH und anderen Funktionen ist prim\u00e4r f\u00fcr das Raspberry Pi OS entwickelt worden. Unter anderen Distributionen funktioniert sie entweder nicht oder sorgt sogar f\u00fcr Startprobleme, wie es unter Ubuntu eine Zeit lang der Fall war. Mittlerweile hat sich dies gebessert, dennoch fehlen durchaus n\u00fctzliche Betriebssysteme, wie etwa <a href=\"https:\/\/u-labs.de\/portal\/dietpi-das-bessere-rapsberry-pi-os-dietpi-betriebssystem-vorgestellt-dietpi-vs-raspberry-pi-os\/\" data-type=\"post\" data-id=\"8014\">DietPi<\/a> oder <a href=\"https:\/\/u-labs.de\/portal\/nur-103-mb-alpine-linux-getestet-kleine-simple-und-sichere-linux-distribution-fuer-den-raspberry-pi\/\" data-type=\"post\" data-id=\"8298\">Alpine Linux<\/a>.<\/p>\n<p>Dar\u00fcber hinaus wollte ich mich schon l\u00e4nger mit der Entwicklung von plattformunabh\u00e4ngiger Desktop-Software besch\u00e4ftigen. Mehr als eine kleine Java-Anwendung die auch schon etwas l\u00e4nger zur\u00fcck liegt, ist in dieser Richtung bisher nicht entstanden. Die meisten Projekte nutzten entweder fr\u00fcher unter Windows die im .NET Framework integrierten WinForms, besa\u00dfen gar keine grafische Oberfl\u00e4che oder wurden \u00fcberwiegend als Webanwendung umgesetzt. Die Form der Webanwendung macht in meinen Augen auch nach wie vor f\u00fcr vieles Sinn und bietet Vorteile. Beispielsweise kann man die Software auch auf Mobilger\u00e4ten nutzen. Bei hardwarenahen Operationen sind Desktop-Anwendungen jedoch meist nach wie vor die beste Wahl.<\/p>\n<h2 class=\"wp-block-heading\">Eingesetzte Technologie<\/h2>\n<p>Mein erster Gedanke lag bei Python: Eine quelloffene und verbreitete Technologie, die mittlerweile nahezu \u00fcberall l\u00e4uft. Zudem sind Bibliotheken f\u00fcr das erstellen von Partitionen vorhanden, die ich zum Beschreiben der Speicherkarte ben\u00f6tige. Die n\u00e4her betrachteten Frameworks f\u00fcr grafische Oberfl\u00e4chen konnten mich nicht \u00fcberzeugen. Qt schien m\u00e4chtig, doch man ben\u00f6tigt einer separate Entwicklungsumgebung. Dort traten schnell erste Probleme auf, etwa bei der Vorschau. Bei anderen war es \u00e4hnlich: Sah auf den ersten Blick gut aus, im Detail erf\u00fcllten sie nicht meine Anforderungen. Zumindest ein Level von den .NET WinForms mit Visual Studio wollte ich erreichen. Und auch die Bibliothek f\u00fcr FAT-Partitionen verursachte Probleme, deren L\u00f6sung ein tieferes Verst\u00e4ndnis des Dateisystems voraussetzten.<\/p>\n<p>Also schaute ich weiter in die von mir pr\u00e4ferierte C# Ecke: Das .NET Framework ist seit langem eine solide Basis. Seit Microsoft es vor einigen Jahren \u00f6ffnete und als quelloffene Software weiterentwickelt, steht es Python in dieser Hinsicht nicht mehr nach. Technisch ist es sogar eher von Vorteil, schlie\u00dflich vergleichen wir eine Hochsprache mit einer Skriptsprache.<\/p>\n<p>Leider entt\u00e4uschte das .NET \u00d6kosystem mit den Anforderungen der Plattformunabh\u00e4ngigkeit auf den ersten Blick: Microsoft hatte f\u00fcr grafische Desktopanwendungen nichts vorzuweisen. Lediglich .NET MAUI, das klang gut, l\u00e4uft jedoch nur unter Windows. Unabh\u00e4ngige Projekte sind dort deutlich weiter, wie <a href=\"https:\/\/www.avaloniaui.net\/\" data-type=\"URL\" data-id=\"https:\/\/www.avaloniaui.net\/\" target=\"_blank\" rel=\"nofollow\">Avalonia UI<\/a> zeigt. Durch seinen Ansatz in Richtung WPF ist es zwar f\u00fcr den Einstieg komplexer, doch es h\u00e4lt, was es verspricht. Man kann damit (sch\u00f6n aussehende) Desktopanwendungen entwickeln, die auf allen g\u00e4ngigen Plattformen funktionieren. Lediglich die Logik muss bei derart hardwarenahen Aufgaben an die Plattform angepasst werden, die Oberfl\u00e4che ist dagegen einheitlich.<\/p>\n<p>Avalonia UI integriert sich \u00fcber Erweiterungen in Visual Studio und Visual Studio Code, sodass theoretisch auch unter GNU\/Linux entwickelt werden kann. Interessant finde ich den geteilten Bildschirm. \u00c4nderungen am Code links sind mit geringer Verz\u00f6gerung im rechten Bereich sichtbar, so lange sie keine Fehler erzeugen.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/02\/grafik.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"419\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/02\/grafik-1024x419.png\" alt=\"\" class=\"wp-image-10219\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/02\/grafik-1024x419.png 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/02\/grafik-300x123.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/02\/grafik-768x314.png 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/02\/grafik-1536x628.png 1536w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/02\/grafik-2048x838.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n<h2 class=\"wp-block-heading\">Funktionen<\/h2>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/02\/image2card_linux.png\"><img loading=\"lazy\" decoding=\"async\" width=\"904\" height=\"530\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/02\/image2card_linux.png\" alt=\"\" class=\"wp-image-10218\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/02\/image2card_linux.png 904w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/02\/image2card_linux-300x176.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/02\/image2card_linux-768x450.png 768w\" sizes=\"auto, (max-width: 904px) 100vw, 904px\" \/><\/a><\/figure>\n<\/div>\n<p>F\u00fcr das Hauptfenster habe ich mich am Raspberry Pi Imager orientiert. Die Aufteilung in drei Schritte finde ich sinnvoll, wollte sie jedoch f\u00fcr Einsteiger deutlicher machen. Als erstes wird das gew\u00fcnschte Betriebssystem ausgew\u00e4hlt. Neben dem offiziellen Raspberry Pi OS wurden f\u00fcr den Anfang ein paar Distributionen eingebaut, die im Imager fehlen &#8211; etwa die bereits angesprochenen DietPi und Alpine Linux. Statt verschiedener Eintr\u00e4ge lassen sich rechts zu jeder Distribution die vorhandenen Architekturen ausw\u00e4hlen. Falls es Editionen mit grafischer Desktopumgebung gibt (z.B. Raspberry Pi OS), sind diese dort ebenfalls gelistet. <\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/02\/grafik-1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"799\" height=\"321\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/02\/grafik-1.png\" alt=\"\" class=\"wp-image-10220\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/02\/grafik-1.png 799w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/02\/grafik-1-300x121.png 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2023\/02\/grafik-1-768x309.png 768w\" sizes=\"auto, (max-width: 799px) 100vw, 799px\" \/><\/a><\/figure>\n<\/div>\n<p>Das gew\u00e4hlte Image wird anschlie\u00dfend heruntergeladen und ausgepackt, sofern es nicht bereits lokal existiert. Falls es existiert, pr\u00fcft die Software, ob eine aktualisierte Version verf\u00fcgbar ist. Nach der Auswahl der Speicherkarte erfolgt die Leerung und Beschreibung dieser. Abschlie\u00dfend kann die Vorkonfiguration erfolgen. Sie ist derzeit noch recht beschr\u00e4nkt auf das Setzen eines Hostnamens f\u00fcr das Netzwerk sowie die Aktivierung von SSH.<\/p>\n<h2 class=\"wp-block-heading\">Zukunft des Projektes<\/h2>\n<p>Wenngleich die grundlegenden Funktionen gro\u00dfteils gegeben sind, fehlen noch einige Dinge. Unter anderem erweiterte M\u00f6glichkeiten f\u00fcr die Anpassungen. Es handelt sich derzeit eher um eine Art Prototyp mit dem Grundfunktionen. Grunds\u00e4tzlich finde ich die Idee sinnvoll und sehe dar\u00fcber hinaus Erweiterungspotenzial. Konkrete Pl\u00e4ne gibt es derzeit nicht, dieser Beitrag ist eine Vorstellung des momentanen Zustandes.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Den Raspberry Pi Imager habe ich bereits vor l\u00e4ngerem vorgestellt. Vor allem f\u00fcr Einsteiger ist er die wohl beste Methode, um g\u00e4ngige Betriebssysteme wie das Raspberry Pi OS auf die Speicherkarte zu \u00fcberspielen. Doch er hat auch ein paar Schw\u00e4chen, die zumindest erfahrenen Nutzern begegnen k\u00f6nnen: Die Vorkonfiguration von Hostname, SSH und anderen Funktionen ist &#8230;<\/p>\n","protected":false},"author":5,"featured_media":10224,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[671],"tags":[330],"class_list":["post-10216","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-raspberry-pi","tag-c"],"_links":{"self":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/10216","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/comments?post=10216"}],"version-history":[{"count":5,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/10216\/revisions"}],"predecessor-version":[{"id":10225,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/10216\/revisions\/10225"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media\/10224"}],"wp:attachment":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media?parent=10216"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/categories?post=10216"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/tags?post=10216"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}