z01 9224

rsync lädt nicht einfach nur Dateien hoch, sondern synchronisiert:

  1. Es überprüft:
    • Dateigröße
    • Änderungszeitpunkt (Timestamp)
    • Prüfsummen (wenn nötig)
  2. Nur wenn sich eine Datei geändert hat, wird sie übertragen.

Nachdem meine ersten Versuche mit Cygwin und rsync Projekte via gulp-Befehl auf den Server hochzuladen kläglich scheiterten, und ich auf SCP ausweichen musste, bekam ich das Thema nicht aus dem Kopf. Schließlich hatte ich mir rsync ja eben da reingesetzt. Und da war es dann auch verblieben. Der folgerichtige Schritt war, es über WSL zu probieren. WSL bietet eine stabilere Umgebung für Linux-Tools wie rsync, und die Performance ist in der Regel besser als bei Cygwin.

Mit einem KI-Assistenten (momentan sind bei mir – das zweite Jahr bereits – Copilot pro und neuerdings auch Monica in VS Code integriert) sind solche Aufgaben in der Programmierung ungleich schneller zu bewältigen, da man Fragen direkt stellen kann, und sich nicht durch Google (wo ich mittlerweile den Eindruck habe, so ziemlich alles angeboten zu bekommen, nur nicht das, was ich suche) oder sonstige Suchergebnislisten arbeiten muss, um mit Glück genau das zu finden, was einem weiterhilft.

Was ist Cygwin?

Cygwin ist eine Sammlung von Tools, die eine Unix-ähnliche Umgebung unter Windows bereitstellt. Es ermöglicht Benutzern, viele GNU- und Open-Source-Tools zu verwenden, die normalerweise auf Linux-Betriebssystemen verfügbar sind. Cygwin bietet eine POSIX-kompatible API, die es Linux-Anwendungen ermöglicht, unter Windows zu laufen.

Vorteile von Cygwin

  • Unabhängigkeit: Cygwin ist unabhängig von Windows-Versionen und kann auf verschiedenen Windows-Systemen installiert werden.
  • Breite der Tools: Es bietet eine Vielzahl von Unix-Tools und -Befehlen, die direkt in der Windows-Umgebung verwendet werden können.
  • Leichte Integration: Cygwin kann leicht in bestehende Windows-Workflows integriert werden.

Nachteile von Cygwin

  • Leistung: Da Cygwin eine Emulation von Unix ist, kann die Leistung im Vergleich zu nativen Linux-Umgebungen beeinträchtigt sein.
  • Komplexität: Die Installation und Konfiguration kann für Anfänger kompliziert sein.
  • Kompatibilität: Nicht alle Linux-Anwendungen sind vollständig kompatibel mit Cygwin.

Was ist WSL?

WSL (Windows Subsystem for Linux) ist eine von Microsoft entwickelte Kompatibilitätsschicht, die es Benutzern ermöglicht, eine vollständige Linux-Distribution direkt unter Windows auszuführen. Mit WSL können Benutzer Linux-Befehle und -Anwendungen nativ auf Windows ausführen, ohne eine virtuelle Maschine oder Dual-Boot-Konfiguration zu benötigen.

Vorteile von WSL

  • Native Leistung: WSL bietet eine nahezu native Leistung für Linux-Anwendungen, da es direkt auf dem Windows-Kernel läuft.
  • Einfache Installation: Die Installation von WSL ist einfach und kann über die Windows-Einstellungen oder die PowerShell erfolgen.
  • Zugriff auf Windows-Dateisystem: Benutzer können problemlos auf das Windows-Dateisystem zugreifen und umgekehrt.

Nachteile von WSL

  • Begrenzte Unterstützung für GUI-Anwendungen: Während WSL2 die Unterstützung für GUI-Anwendungen verbessert hat, ist sie immer noch nicht so reibungslos wie bei einer nativen Linux-Umgebung.
  • Ressourcenverbrauch: WSL kann mehr Ressourcen verbrauchen als Cygwin, insbesondere bei der Verwendung von WSL2.
  • Abhängigkeit von Windows-Versionen: WSL ist an die Windows-Version gebunden und funktioniert möglicherweise nicht auf älteren Windows-Systemen.

Unterschiede zwischen Cygwin und WSL

MerkmalCygwinWSL
Art der UmgebungEmulation einer Unix-UmgebungNatives Linux-Subsystem
LeistungGeringere LeistungNahezu native Leistung
InstallationKomplexerEinfach
GUI-AnwendungenEingeschränkte UnterstützungVerbesserte Unterstützung
Zugriff auf Windows-DateisystemEingeschränktVollständiger Zugriff

Die Wahl zwischen Cygwin und WSL hängt stark von den individuellen Bedürfnissen und Vorlieben ab.

  • Cygwin ist ideal für Benutzer, die eine Unix-ähnliche Umgebung benötigen, ohne auf eine vollständige Linux-Distribution umzusteigen, und die bereits mit den Tools vertraut sind.
  • WSL hingegen ist die bessere Wahl für Entwickler, die eine vollständige Linux-Umgebung benötigen, die nahtlos mit Windows integriert ist und eine bessere Leistung bietet.

Sowohl Cygwin als auch WSL leistungsstarke Möglichkeiten, um Linux-Tools und -Anwendungen auf Windows-Systemen zu nutzen. Meine Wahl ist klar – WSL.

wsl --install
--
wsl --install -d Ubuntu

zu WSL wechseln und dafür sorgen, dass die SSH Keys übernommen werden:

mkdir -p ~/.ssh
cp /mnt/c/Users/{username}/.ssh/id_rsa ~/.ssh/
cp /mnt/c/Users/{username}/.ssh/id_rsa.pub ~/.ssh/
chmod 600 ~/.ssh/id_rsa

Dry Deploy zum Testen

${storage} ist hierbei meine Variable für das Webserver-Verzeichnis des Projekts. Ich gehe davon aus, dass SSH Keys bereits generiert und zu den authorized_keys auf dem Server hinzugefügt sind.

// Dry-Run Task
gulp.task('deploydry', function (cb) {
    const wslSource = process.cwd().replace(/\\/g, '/').replace(/^(\w):/, '/mnt/$1').toLowerCase();
    const rsyncCommand = `wsl rsync -avzn --delete --progress --exclude='node_modules' --exclude='.git*' --exclude='*.log' --exclude='.DS_Store' --exclude='package*.json' --exclude='gulpfile.js' --exclude='.*' "${wslSource}/" user@server:${storage}/`;

    console.log('Simulating deployment (dry-run)...');
    exec(rsyncCommand, { maxBuffer: 1024 * 1024 * 10 }, function (error, stdout, stderr) {
        if (error) {
            console.error('Error:', error);
            if (stderr) console.error('stderr:', stderr);
            cb(error);
            return;
        }
        console.log(stdout);
        console.log('Dry run completed. No files were actually transferred.');
        cb();
    });
});

Deploy, diesmal richtig

// Actual Deploy Task
gulp.task('deploy', function (cb) {
    const wslSource = process.cwd().replace(/\\/g, '/').replace(/^(\w):/, '/mnt/$1').toLowerCase();
    const rsyncCommand = `wsl rsync -avz --delete --progress --exclude='node_modules' --exclude='.git*' --exclude='*.log' --exclude='.DS_Store' --exclude='package*.json' --exclude='gulpfile.js' --exclude='.*' "${wslSource}/" user@server:${storage}/`;

    console.log('Starting deployment...');
    exec(rsyncCommand, { maxBuffer: 1024 * 1024 * 10 }, function (error, stdout, stderr) {
        if (error) {
            console.error('Error:', error);
            if (stderr) console.error('stderr:', stderr);
            cb(error);
            return;
        }
        console.log(stdout);
        console.log('Deployment completed successfully!');
        cb();
    });
});

a = „archive mode“ – Dies ist eine Kombination mehrerer Optionen:

  • rekursiv durch Verzeichnisse gehen
  • Symbolische Links erhalten
  • Berechtigungen beibehalten
  • Zeitstempel beibehalten
  • Gruppen- und Besitzerrechte beibehalten

v = „verbose“ – Ausführliche Ausgabe:

  • Zeigt jede Datei an, die übertragen wird
  • Gibt Fortschrittsinformationen aus
  • Hilft bei der Fehlersuche

z = „compress“ – Komprimiert die Daten während der Übertragung:

  • Schnellere Übertragung bei langsamen Verbindungen
  • Besonders nützlich bei Textdateien
  • Spart Bandbreite

–delete – Löscht Dateien die lokal nicht mehr existieren
–progress – Zeigt den Fortschritt
–exclude – Schließt bestimmte Dateien/Verzeichnisse aus

Bitte Kommentarfunktion nicht für Supportanfragen nutzen. Dem kann hier nicht entsprochen werden. Die Angabe einer E-Mail-Adresse und eines Namens ist nicht erforderlich. Einen (Spitz)-Namen zu nennen wäre aber doch nett.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Hinweis: Sowohl angegebener Name als auch E-Mail-Adresse (beides ist optional, dafür werden alle Kommentare vor Veröffentlichung geprüft) werden dauerhaft gespeichert. Du kannst jeder Zeit die Löschung Deiner Daten oder / und Kommentare einfordern, direkt über dieses Formular (wird nicht veröffentlicht, und im Anschluss gelöscht), und ich werde das umgehend erledigen. – Mit hinterlassenen Kommentaren hinterlegte IP-Adressen werden nach zwei Monaten automatisch gelöscht