Dart - Linux Binaries unter Windows erstellen
Im Rahmen meines BoehrsiTweetHub Projekts stolperte ich über das Problem, dass unter Windows gebaute Dart Binaries nicht unter Linux ausgeführt werden können. Diese Problematik ist auch auf GitHub als Issue open_in_new festgehalten und ich finde es spannend das ich darüber nicht schon viel früher gestolpert bin. Doch glücklicherweise war es trotz dessen durchaus einfach die gewünschte Binary zu erzeugen. Einen kleinen Guide findet ihr im unteren Teil der News. Sofern ihr Fragen, Ergänzungen oder ähnliches habt, meldet euch gerne in den Kommentaren.
1. Windows Subsystem for Linux (WSL) Installation
Mittlerweile ist es zum Glück sehr einfach ein Linux unter Windows nutzen zu können. WSL bietet die Möglichkeit mit nur wenigen Befehlen eine vollwertige Linux Umgebung zu erzeugen. Öffnet eure Powershell im Administrator Modus und gebt folgenden Befehl ein.
wsl --install
Diese Eingabe startet die Installation, bittet abschließend um einen Neustart und führt euch nach selbigem durch ein minimales Setup, in welchem ein Nutzeraccount erstellt wird. Schon habt ihr ein Linux, in diesem Fall Ubuntu, installiert und es kann weitergehen.
Nicht nötig aber empfehlenswert ist es nach dem ersten Start das System auf den neusten Stand zu bringen. Gebt dafür folgendes in eurem Ubuntu ein.
sudo apt-get update
sudo apt-get upgrade
Gestartet werden kann Ubuntu nun einfach über das Startmenü. Gebt dort einfach Ubuntu ein und startet das System wie jedes normale Programm.
Quelle und weitere Informationen via microsoft.com open_in_new
2. Dart Installation unter Linux
Da es unser Ziel ist Dart Code unter Linux zu kompilieren, ist es natürlich nötig das Dart SDK unter Linux zu installieren. Dafür installiert zunächst das apt-transport-https
Package und fügt Googles Signing Key hinzu. Folgende Eingaben in eurem Ubuntu führen diese Schritte aus.
sudo apt-get update
sudo apt-get install apt-transport-https
wget -qO- https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo gpg --dearmor -o /usr/share/keyrings/dart.gpg
echo 'deb [signed-by=/usr/share/keyrings/dart.gpg arch=amd64] https://storage.googleapis.com/download.dartlang.org/linux/debian stable main' | sudo tee /etc/apt/sources.list.d/dart_stable.list
Anschließend kann Dart via apt
installiert werden.
sudo apt-get update
sudo apt-get install dart
Um zu überprüfen ob alles funktioniert hat führt Dart zum ersten Mal aus und prüft die installierte Version.
dart –version
Quelle und weitere Informationen via dart.dev open_in_new
3. Programm kompilieren
Navigiert in den Ordner in welchem sich euer Projekt befindet. Ihr müsst nichts einbinden oder erneut herunterladen, denn euer Ubuntu kann auf die Windows Ordner zugreifen. Gebt folgenden Befehl in eurem Ubuntu ein und folgt von dort aus eurer aus Windows bekannten Ordnerstruktur. Im mnt
Ordner findet ihr eure Laufwerke und darin entsprechend alle weiteren Unterordner.
cd /mnt
Sobald ihr im Ordner angekommen seid sorgt dafür das alle Abhängigkeiten vorhanden sind, indem ihr selbige herunterladet. Führt dafür folgenden Befehl aus.
dart pub get
Nun ist es soweit und ihr könnt eure Binary für Linux erstellen. Folgender Befehl führt dies aus. Lasst euch dabei nicht vom Befehl exe
verwirren, selbiger sagt lediglich aus das eine ausführbare Datei erstellen werden soll und hat nicht direkt etwas mit der Windows Dateiendung .exe
zu tun.
dart compile exe main.dart -o boehrsiTweetHub
Der erste Parameter hinter exe
ist die Quelldatei eures Dart Codes, meist also die main.dart
und der -o
Parameter mit dem folgenden String definiert den Namen der erzeugten Binary Datei. Während unter Windows hier .exe
erwartet wird, ist unter Linux keine Dateiendung zu setzen.
Mit diesen wenigen Schritten ist es möglich eine Binary für Linux unter Windows zu bauen. Für mich war dies relevant, weil ich auf meinem Linux Server kein Dart SDK benötigte und entsprechend auch nicht installieren möchte. Entwickeln tue ich allerdings unter Windows und somit war es hier nötig diese Betriebssystemgrenze zu überbrücken. Dankenswerterweise war dies mit dem WSL und wenigen zusätzlichen Schritten möglich, sodass ich auf externe Tools und ähnliche Abhängigkeiten verzichten konnte.