Ausprobieren auf einer frisch installierten Plattform

Na gut,

wir haben auf den letzten Seiten erfahren, wie man Code in C# schreibt, diesen kompiliert als eine native Executable für eine spezifische Plattform, das Ganze über eine CI/CD-Platform baut und deployt (bereitstellt) und am Beispiel Linux (Debian / Ubuntu) hieraus ein installierbares Paket erstellt.

Jetzt wollen wir das natürlich auch mal an einem System ausprobieren, ob das auch so funktioniert wir erwartet.

Für diesen Test habe ich mir eine VM mittels KVM aufgesetzt.

In dieser VM habe ich Ubuntu Server 22.04 LTS installiert. Der Zugriff auf dieses System erfolgt mittels SSH (was natürlich im Vorfeld auf dem Server aktiviert wurde).

Im Screenshot ist zu sehen, dass ein x86_64 System vorhanden ist. Dies ist für die Auswahl des geeigneten Pakets wichtig.

Zufällig haben wir ja im Schritt vorher, ein Debian-Paket von pingcs gebaut. Dies sollte für einen Test auf dem System ausreichen.

Systeminformationen des frisch installierten Ubuntu-Servers

Nur zur Sicherheit, wie prüfen ob auch wirklich kein Dotnet installiert ist:

Prüfung, dass kein .NET auf dem System installiert ist

Na, zum Glück nicht. Und auch pingcs ist auf dem neuen System nicht vorhanden.

Prüfung, dass pingcs auf dem System nicht vorhanden ist

Und auch im Home-Verzeichnis befindet sich nichts verdächtiges.

Leeres Home-Verzeichnis auf dem Zielsystem

Da ich das Debian-Paket nicht in irgendeiner Paketquelle bereitgestellt habe, sondern als Artefakt im Deploy-Prozess, müssen wir das Paket (in unserem Fall) über die Gitlab-Gui herunterladen und per scp auf dieses System kopieren.

Dafür schauen wir erst mal in welchem Home-Verzeichnis wir uns befinden.

Ausgabe des aktuellen Home-Verzeichnisses

Jetzt laden wir, das aktuelle Paket für unsere Zwecke über die Gitlab-Gui herunter…

Download des Debian-Pakets über die GitLab-Oberfläche

Nach dem entpacken (in meinem Falle nach c:\temp) finden wir dort das Debian-Paket.

Das entpackte Debian-Paket im lokalen Verzeichnis

Mittels scp (Secure Copy) oder rsync (Remote Sync) kopieren wir jetzt das Paket auf das Zielsystem.

Ich verwende scp, über Einzelheiten der Verwendung von scp berichte ich hier nicht, da gibt es bessere Anleitungen.

Übertragung des Pakets auf das Zielsystem mit scp

Nunja, jetzt sollte sich das Debian-Paket im Home-Verzeichnis auf dem Ubuntu-Server befinden.

Das Debian-Paket im Home-Verzeichnis des Ubuntu-Servers

Perfekt, hat funktioniert.

Jetzt sollten wir das Tool mit Ubuntu-Board-Mitteln einfach so installieren können.

Installation des Debian-Pakets mit Bordmitteln

Na schau an, hat funktioniert.

Da wir ja im vorigen Kapitel alle notwendigen Schritte in das Debian-Paket gepackt haben um das Programm einfach so ausführen zu können, probieren wir das einfach mal aus!

Zuerst mal was einfaches und schauen ob das überhaupt einfach so funktioniert:

Erster Aufruf von pingcs auf dem Zielsystem

Krass! Das funktioniert einfach so. Schauen wir uns erst mal das Dateiformat an.

Prüfung des Dateiformats der Executable

Und jetzt noch die Executable checken…

Prüfung der Executable

Nicht schlecht! Jetzt schauen wir nur noch nach ob sich das Programm auch ohne sudo-Rechte ausführen lässt.

Hier werden wir mal die Domäne heise.de 12 mal kontaktieren mit einem Abstand von 250ms zwischen jeder Messung im Format IpV4.

Also los…

pingcs kontaktiert heise.de zwölfmal im Abstand von 250 ms

Joa sackra! Das funktioniert!

Sogar mit der korrekten Hostauflösung. Wir sehen dass heise.de aufgelöst wird nach redirector.heise.de.

Na wunderbar.

That´s it!

Wir können hier wunderbar sehen, dass die Erstellung von nativen Anwendungen mit den geeigneten Mitteln ist möglich ist. Diese Anwendung lässt sich auf einem entsprechenden Zielsystem ohne Weiteres ausführen.

Ob das für einen produktiven Einsatz sinnvoll ist? Warum nicht!

Schlussendlich zeigt sich, dass man mit dem geeigneten Toolset Sachen bauen kann, die nativ erst mal nicht dafür gedacht sind. Gerade in containerisierten Umgebungen ist es vielleicht hilfreich einen Standard-Linux-Container zu nehmen, die Anwendung dort hinein zu kopieren und die Anwendung im Container zu starten. Keine Framework-Installation notwendig, läuft einfach so.

Inhalt

  1. Verwendete Tools und Hinweise
  2. RFC-792 – ICMP mit Ping
  3. Das Programm „pingcs“
  4. Die Tools Bflat und upx
  5. Die Build-Pipeline mit gitlab
  6. Erzeugen eines Debian-Packages
  7. Ausprobieren auf einer frisch installierten Plattform