Aktualisierung von Linux-Paketen für C#-Entwickler
Bei der Entwicklung von C#-Anwendungen unter Linux beeinflussen die Systempakete mehr als nur das Betriebssystem. Browser-Engines zum Testen von Webanwendungen, das .NET SDK, gemeinsam genutzte Bibliotheken und Sicherheitspatches werden alle über den Paketmanager bereitgestellt. Die Verwendung veralteter Pakete kann zu Build-Problemen, Sicherheitslücken oder Inkompatibilität mit den neuesten .NET -Funktionen führen.
In seinem Video "Linux-Pakete für C#-Entwickler aktualisieren" zeigt Tim Corey im Rahmen seiner umfassenderen C#-on-Linux-Serie, wie man eine Linux-Installation sowohl mit dem grafischen Update-Manager als auch über die Befehlszeile auf dem neuesten Stand hält. In diesem Artikel behandeln wir beide Methoden, erläutern die Funktion der einzelnen Befehle und erklären, warum es insbesondere für die .NET -Entwicklung wichtig ist, das System auf dem neuesten Stand zu halten.
Wie sich die Paketverwaltung unter Linux von der unter Windows unterscheidet
[0:00 - 0:38] Tim beginnt mit der Auseinandersetzung mit einem häufigen Stolperstein für Entwickler, die von Windows kommen. Unter Windows verwaltet in der Regel jede Anwendung ihre eigenen Updates. Visual Studio prüft unabhängig von Edge auf Aktualisierungen, während Edge wiederum unabhängig von Ihren Druckertreibern aktualisiert wird. Es gibt kein einzelnes System, das alles auf Ihrem Rechner installierte Material erfasst.
Linux verfolgt einen zentralisierten Ansatz. Ein Paketmanager wie apt (Advanced Package Tool) verfolgt jedes einzelne Softwarepaket, das aus den offiziellen Repositories installiert wird. Wenn Sie ein Update durchführen, fragt apt alle installierten Pakete gleichzeitig in den Repositories ab. Browser-Updates, Bibliotheks-Patches, SDK-Upgrades und Sicherheitskorrekturen werden alle über denselben Prozess bereitgestellt.
Für C#-Entwickler hat dies reale Konsequenzen. Ihre .NET Laufzeitumgebung, die OpenSSL-Bibliotheken, von denen Ihre HTTPS-Aufrufe abhängen, und die Systemabhängigkeiten, mit denen Ihre Anwendungen verknüpft sind, werden alle von diesem System verwaltet. Wenn Sie zum ersten Mal mit C# auf einer Nicht-Windows-Plattform beginnen , erspart Ihnen das Wissen um die Funktionsweise des Paketmanagers die spätere Suche nach mysteriösen Build-Fehlern. Ein einzelnes apt upgrade sorgt dafür, dass der gesamte Stack ausgerichtet bleibt; etwas, das man unter Windows bei vielen separaten Updatern koordinieren müsste.
Die grafische Benutzeroberfläche: Update-Manager
[0:38 - 1:34] Für Entwickler, die einen visuellen Workflow bevorzugen, erklärt Tim zunächst den Update-Manager. Linux Mint enthält einen solchen, der ähnlich wie Windows Update funktioniert. Ein kleines Symbol in der unteren rechten Ecke der Taskleiste öffnet es, und Sie sehen genau, was aktualisiert wird: Microsoft Edge, Firefox, curl, libssh und mehr. Jeder Eintrag zeigt die aktuelle Version, die neue Version und die Downloadgröße an.
Alle Pakete sind standardmäßig ausgewählt. Sie können jedoch einzelne Elemente abwählen, wenn Sie ein bestimmtes Update überspringen möchten. Das ist nützlich, wenn für Ihr Projekt eine bestimmte Version eines Tools erforderlich ist und Sie nicht möchten, dass sich diese mitten im Sprint ändert.
Sie klicken auf "Updates installieren", geben Ihr Passwort ein, wenn Sie dazu aufgefordert werden, und warten, bis der Vorgang abgeschlossen ist. Die Passwortabfrage existiert, weil das Ändern von Systempaketen eine administrative Aktion ist, die wir im nächsten Abschnitt behandeln werden.
Eine Sache, die die grafische Benutzeroberfläche gut macht: Sie klassifiziert Aktualisierungen nach Risikostufe und ist vorsichtiger bei Änderungen, die die Systemstabilität beeinträchtigen könnten. Für einen Linux-Neuling, der einfach nur seine Umgebung in einem guten Zustand halten möchte, ohne sich um die Details kümmern zu müssen, ist der Update Manager eine solide Standardlösung.
sudo verstehen
[1:34 - 1:51] Bevor Tim zum Terminal wechselt, erklärt er kurz sudo, da dieser Code bei jeder Kommandozeilenoperation eines Pakets auftaucht. Es lohnt sich, zu verstehen, was es bewirkt, bevor man mit dem Tippen beginnt. Die meisten Windows-Benutzerkonten sind standardmäßig Administratorkonten, die Ihnen vollen Zugriff auf die Installation, Deinstallation und Änderung von Systemsoftware gewähren. Linux verfolgt den gegenteiligen Ansatz: Ihr Benutzerkonto läuft mit eingeschränkten Berechtigungen, und Sie erweitern die Administratorrechte nur bei Bedarf.
Wenn einem Befehl sudo vorangestellt wird, werden Sie zur Überprüfung Ihrer Identität zur Eingabe eines Passworts aufgefordert. Nach erfolgreicher Authentifizierung wird dieser Befehl mit Root-Rechten ausgeführt, anschließend werden die Berechtigungen wieder auf den Normalzustand zurückgesetzt. Die Paketverwaltung (Installation, Deinstallation oder Aktualisierung von Software) ist ein Vorgang auf Systemebene, der jede Anwendung auf dem Rechner betreffen könnte. Daher stellt das explizite Präfix sudo sicher, dass Sie nicht versehentlich Systempakete ändern, wenn Sie eigentlich etwas anderes tun wollten.
Wenn Sie Windows verwendet haben, können Sie sich das ähnlich vorstellen wie das Ausführen von Visual Studio als Administrator, nur dass Sie unter Linux einzelne Befehle und nicht ganze Anwendungen mit erhöhten Rechten ausführen. Es handelt sich um ein zielgerichteteres Modell.
Die Befehlszeile: apt update
[1:51 - 2:28] Nachdem sudo behandelt wurde, geht Tim zum Terminal. Die Arbeit dort ermöglicht eine detailliertere Kontrolle über den Aktualisierungsprozess, und er geht drei Befehle nacheinander durch. Es ist wichtig zu verstehen, was die einzelnen Komponenten bewirken, denn, wie er betont, ist die Namensgebung irreführend.
Der erste Befehl lautet:
sudo apt update
sudo apt update
Eine gängige Annahme ist, dass dieser Befehl Pakete aktualisiert. Nein. apt update aktualisiert den Paketindex, einen lokalen Katalog verfügbarer Software. Mit der Zeit veraltet dieser Katalog, da die Entwickler immer wieder neue Versionen veröffentlichen. Durch Ausführen dieses Befehls wird die neueste Version von den Repository-Servern heruntergeladen. Es werden keine Softwareänderungen an Ihrem Rechner vorgenommen. Es handelt sich lediglich um einen Informationserfassungsschritt.
Nach der Ausführung meldet apt, für wie viele Pakete neuere Versionen verfügbar sind. Sie können die vollständige Liste einsehen, bevor Sie Änderungen übernehmen:
apt list --upgradeable
apt list --upgradeable
Dadurch erhalten Sie eine detaillierte Übersicht aller Pakete, für die eine neuere Version verfügbar ist, einschließlich der aktuellen und der neuen Versionsnummer. Wenn Sie auf diesem Rechner mit .NET arbeiten, können Sie hier möglicherweise SDK-Updates, Laufzeit-Patches oder Änderungen an Bibliotheken entdecken, von denen Ihre Anwendung abhängt. Wenn Sie wissen , welche .NET Versionen auf Ihrem Rechner installiert sind, können Sie besser entscheiden, ob ein bestimmtes Upgrade sicher angewendet werden kann oder ob es vorher getestet werden muss.
Die Befehlszeile: apt upgrade
[3:01 - 3:40] Sobald der Index aktualisiert ist, fährt Tim mit dem zweiten Befehl fort – demjenigen, der die neueren Versionen tatsächlich installiert:
sudo apt upgrade
sudo apt upgrade
Beachten Sie die Namensgebung: update erhält die neuesten Informationen, upgrade ist das, was die Pakete ändert. Diese Zweiteilung ist beabsichtigt. Dadurch wird der Schritt "Verfügbarkeit prüfen" vom Schritt "Änderungen anwenden" getrennt, sodass Sie Zeit haben, die Änderungen zu überprüfen, zu recherchieren oder eine Sicherungskopie anzulegen, bevor irgendetwas passiert.
Im Inneren befolgt upgrade strenge Regeln darüber, was es tun wird und was nicht. Es lädt neuere Versionen von Paketen herunter und installiert sie, die sich bereits auf Ihrem System befinden, entfernt aber niemals ein vorhandenes Paket oder installiert ein neues, das zuvor nicht vorhanden war. Wenn eine neuere Version eine Abhängigkeit benötigt, die nicht installiert ist, hält upgrade dieses Paket zurück, anstatt die neue Abhängigkeit automatisch einzubinden.
Der Vorteil ist die Vorhersagbarkeit. Es ist wichtig , den .NET -Stack auf dem neuesten Stand zu halten, aber ebenso wichtig ist es, dies auf kontrollierte Weise zu tun. Das System zeigt Ihnen eine Zusammenfassung der anstehenden Änderungen an und bittet Sie um Bestätigung, bevor es fortfährt. So geschieht nichts ohne Ihre ausdrückliche Zustimmung.
Die Befehlszeile: apt full-upgrade
[3:40 - 4:19] Nachdem die sicheren Updates angewendet wurden, stellt Tim den dritten Befehl vor, um alles zu verarbeiten, was upgrade absichtlich zurückgehalten hat:
sudo apt full-upgrade
sudo apt full-upgrade
full-upgrade behandelt die Fälle, die upgrade absichtlich vermeidet. Falls für ein Paketupdate die Installation neuer Abhängigkeiten oder das Entfernen von in Konflikt stehenden Paketen erforderlich ist, erledigt full-upgrade dies. Kernel-Upgrades, größere Änderungen an Systembibliotheken und Patches auf Betriebssystemebene werden hier angewendet.
Wenn Sie dies als separaten Schritt ausführen, erhalten Sie einen mehrschichtigen Ansatz. Falls bei der Auflösung komplexer Abhängigkeiten etwas schiefgeht, haben Sie die einfachen Aktualisierungen bereits angewendet und müssen nur noch die komplizierteren beheben.
Für Teams, die eine Build-Pipeline verwalten, die C#-Anwendungen unter Linux kompiliert, ist dieser gestaffelte Workflow besonders relevant. In einer automatisierten CI/CD-Umgebung könnten Sie sich aus Stabilitätsgründen dafür entscheiden, nur apt upgrade auszuführen und full-upgrade für geplante Wartungsfenster zu reservieren, in denen Sie überprüfen können, ob nach tiefergreifenden Systemänderungen noch alles kompiliert und erfolgreich ist.
Warum die Paketanzahlen unterschiedlich sind
[2:28 - 3:01] Etwas, das regelmäßig zu Problemen führt: Der Update-Manager zeigt möglicherweise 23 Updates an, während die Befehlszeile 79 Pakete meldet. Es handelt sich nicht um unterschiedliche Aktualisierungssätze; Es ist dasselbe System, nur anders gezählt.
Die grafische Benutzeroberfläche gruppiert zusammengehörige Pakete in logische Einheiten. Ein einzelnes "Firefox-Update" im Update-Manager kann tatsächlich aus der Firefox-Binärdatei, ihrem Lokalisierungspaket, den von ihr abhängigen gemeinsam genutzten Bibliotheken und einem Konfigurationspaket bestehen, die jeweils von apt als separates Paket verfolgt werden. Was der Update-Manager als ein Update anzeigt, listet apt als vier oder fünf einzelne Paketaktualisierungen auf.
Sobald man das weiß, hört die Diskrepanz auf, rätselhaft zu sein. Jemand könnte sagen: "Ich hatte 100 Pakete zu aktualisieren", obwohl Ihr Update-Manager für dieselben Änderungen nur 30 Updates anzeigt.
Flatpak: Ein separater Paketmanager
[5:56 - 6:41] Es gibt einen Haken, den man leicht übersehen kann: Unter Linux können mehrere Paketmanager installiert sein, und apt kennt nur die Pakete, die es selbst verwaltet. Flatpak ist eine solche Alternative; es handelt sich um ein Sandbox-basiertes System, das Anwendungen mit ihren eigenen Abhängigkeiten verpackt und sie so vom Rest des Systems isoliert.
Wenn Sie Software über Flatpak installiert haben, werden diese Anwendungen durch die Ausführung von apt upgrade nicht beeinträchtigt. Sie müssen sie separat aktualisieren:
flatpak list
flatpak update
flatpak list
flatpak update
Der Befehl flatpak list zeigt alle über Flatpak installierten Pakete an, und flatpak update aktualisiert diese Pakete auf die jeweils neueste Version. Es empfiehlt sich, regelmäßig nachzusehen, insbesondere wenn Sie darüber IDEs, Datenbanktools oder Kommunikationsanwendungen installiert haben.
Unter Linux kann Software über apt, Flatpak, Snap oder sogar durch manuelle Installationen bezogen werden. Jeder Mechanismus verfügt über eine eigene Aktualisierung, daher sollte eine gründliche Aktualisierungsroutine alle berücksichtigen. Wenn Sie es gewohnt sind, dass jede Anwendung ihren eigenen Updater mitbringt, besteht der entscheidende Unterschied hier darin, dass Sie wissen müssen, welcher Paketmanager zu welcher Software gehört, und für jede den richtigen Aktualisierungsbefehl ausführen müssen.
Welche Methode sollten Sie anwenden?
[4:19 - 5:32] Tims Ansicht ist, dass beide Ansätze gültig sind und die richtige Wahl von Ihrem Arbeitsablauf abhängt. Wenn Sie eine visuelle Benutzeroberfläche bevorzugen, können Sie mit dem Update Manager die gleichen Aktualisierungen wie mit apt über eine Point-and-Click-Oberfläche durchführen. Sie müssen sich keine Befehle merken oder sich Sorgen machen, die Schritte in der falschen Reihenfolge auszuführen. Allerdings gibt es einen guten Grund, sich mit der Kommandozeile vertraut zu machen: die Automatisierung. Sie können ein einfaches Shell-Skript erstellen, das die gesamte Aktualisierungssequenz ausführt, und es mithilfe von cron so planen, dass es wöchentlich ausgeführt wird. Ein dreizeiliges Skript, das Ihr System auf dem neuesten Stand hält, ohne dass Sie darüber nachdenken müssen, ist die Art von kleiner Investition, die sich im Laufe der Zeit auszahlt.
Über die Automatisierung hinaus ermöglicht die Befehlszeile die selektive Anwendung bestimmter Upgrade-Stufen je nach Kontext oder die Weiterleitung der Ausgabe an andere Tools zur Analyse. Diese Optionen sind über die grafische Benutzeroberfläche nicht verfügbar.
Überprüfung Ihrer installierten Pakete
[7:16 - 7:54] Ein nützlicher Nebeneffekt des Aktualisierungsprozesses ist die Überprüfung der Aktualisierungsliste gleichzeitig eine Bestandsaufnahme der auf Ihrem System installierten Programme. Wenn Sie ein Paket in der Aktualisierungswarteschlange sehen, sollten Sie sich fragen, ob Sie es noch benötigen.
Möglicherweise sehen Sie Firefox in der Update-Liste, obwohl Sie hauptsächlich Edge verwenden, oder umgekehrt. Es ist sinnvoll, zwei Browser für browserübergreifende Tests von Webanwendungen installiert zu halten, aber das übergeordnete Prinzip ist, dass die Update-Liste den gesamten Umfang Ihrer Entwicklungsumgebung offenlegt. Veraltete Tools aus einem früheren Projekt, Entwicklungsbibliotheken, die als Abhängigkeiten eingebunden und nie bereinigt wurden, Pakete, deren Installation Sie vor sechs Monaten vergessen haben: Sie alle tauchen hier auf.
Diese Art von Ordnung und Sauberkeit zahlt sich mehr aus, als man erwarten würde. Eine saubere Entwicklungsumgebung lässt sich leichter von Teammitgliedern replizieren, einfacher containerisieren und führt seltener zu Fehlern, die auf dem eigenen Rechner auftreten. Wenn auf Ihrem Linux-System Pakete installiert sind, die in Ihrer Dockerfile nicht enthalten sind, verlassen Sie sich möglicherweise auf etwas, das in der Produktionsumgebung nicht vorhanden sein wird. Die Vertrautheit mit der Bereitstellung von C#-Anwendungen in Docker macht diese Verbindung zwischen Ihren lokalen Paketen und Ihrer Produktionsumgebung viel konkreter.
Abschluss
[7:54 - 8:25] Wie Tim demonstriert, dauert der gesamte Prozess – egal ob über den Update Manager oder die Befehlszeile – höchstens ein paar Minuten und schützt Sie davor, technische Schulden auf Betriebssystemebene anzuhäufen. Wenn man es zu einer wöchentlichen Gewohnheit und nicht zu einer gelegentlichen Pflicht macht, bleiben die Entwicklungswerkzeuge, Laufzeitabhängigkeiten und Systembibliotheken aufeinander abgestimmt, und diese Abstimmung sorgt dafür, dass die plattformübergreifende C#-Entwicklung zuverlässig und nicht frustrierend ist.
Eine vollständige Schritt-für-Schritt-Anleitung finden Sie im Video von Tim Corey auf seinem YouTube-Kanal.
