How To: PHP/MySQL-Entwicklungsumgebung mit Dropbox synchronisieren in Mac OS X

Stefan Keller, den 10. Januar 2013
MAMP Icon
MAMP Icon

In dieser Anleitung soll es darum gehen, wie ihr mithilfe von Dropbox eine Entwicklungsumgebung für Web-Entwicklung über mehrere Macs hinweg synchronisieren könnt. Die Zutaten sind einfach – aber ein Wort der Warnung sei vorab ausgesprochen: Für alle Anwendungsfälle ist das Verfahren nicht geeignet.

Ausgangssituation

Am Anfang war der Mac und ein (Hobby-)Programmierer, der mit PHP und MySQL arbeiten möchte. Mit vergleichsweise geringem Aufwand lässt sich eine Umgebung mithilfe von Paketen wie XAMPP oder MAMP realisieren. Mit Eclipse und den PHP Development Tools hat man zudem eine IDE, die bereits einiges an Luxus verspricht. Solange wie nur ein Mac involviert ist, funktioniert das gut, problematisch wird es, wenn beispielsweise das MacBook auf Reisen mitentwickeln soll.

Lösungsansätze

Eine Option ist, für wenig Geld Webspace zu mieten. Alternativ kann man den eigenen Server verwenden. Dort kann man per (S)FTP auf die Daten zugreifen und über andere Zugangspunkte von außen beispielsweise auf die Datenbank zugreifen, mit Toole wie Sequel Pro. Der eigene Server erlaubt den SSH-Zugang, allerdings benötigt man so dauerhaft eine Internetverbindung. Andernfalls kann man seinen Quellcode nicht hochladen und ausprobieren. Verfügt man dauerhaft über eine Internetanbindung, bleibt das Problem bestehen, die Daten selbst synchronisieren zu müssen. NetBeans beispielsweise bietet an, geänderte Dateien direkt auf den Server via FTP hochzuladen. Sobald man aber wieder an den anderen Mac kommt, muss man daran denken, die lokale Kopie zu synchronisieren. Dabei wird man nicht selten mit Konflikt-Situationen konfrontiert, etwa wenn eine Datei auf dem Server verschoben wurde. Das Ergebnis: Datenmüll und viel Arbeit.
Des Weiteren gäbe es die Möglichkeit, mit Versionierungstools wie Git oder SVN zu arbeiten. Für den Hausgebrauch ist das eher umständlich; um ältere Versionen von Dateien kümmert sich Time Machine und den Sync-Aufwand hat man auf einem anderen Rechner trotzdem. Zudem wird die Datenbank nicht mit erfasst.

Dropbox als Lösung

Da liegt es nahe, sich Dropbox und deren Funktionsweise genauer zu betrachten. Dropbox ist ein Ordner innerhalb des persönlichen Ordners des Anwenders. Dieser wird von einem Dienst überwacht und synchronisiert automatisch alle Änderungen mit der Dropbox-Cloud. Also könnte die Lösung sein, XAMPP und Eclipse in die Dropbox zu packen?

XAMPP spielt nicht mit

Eclipse kann man einfach in die Dropbox verschieben und zukünftig von dort ausführen. Einzige Voraussetzung ist, dass auf allen Macs, die auf diese Weise synchronisiert werden, Java installiert ist. Andernfalls läuft Eclipse nicht. Mit XAMPP ist das aber nicht möglich, das Paket besteht darauf, in den Programme-Ordner kopiert zu werden. Ein Trick, zu dem wir später noch kommen, funktionierte nicht, MySQL verweigerte den Dienst und beschwerte sich, keine Schreibrechte zu besitzen (was nicht stimmte).

Erfolg mit MAMP

Zunächst hat MAMP dasselbe Problem wie XAMPP, es will unbedingt in den Applications-Ordner. Als Anwender kann man sich das anfangs gar nicht aussuchen, weil das Installationsprogramm keine Wahl lässt. Die Dokumentation von MAMP verrät aber, dass am System nichts verändert wird. Also könnte man ganz plump den MAMP-Ordner aus den Programmen in die Dropbox verschieben. Nun muss aber noch dafür gesorgt werden, dass MAMP weiterhin denkt, dass es korrekt installiert wurde. Hierfür legen wir einen symbolischen Link an. Das geht am einfachsten mit einem Terminal-Fenster, das via Spotlight-Suche zu finden ist:
ln -s ~/Dropbox/MAMP/ /Applications/MAMP

Fortan wird sich der Pfad /Applications/MAMP so benehmen, als würde es ihn wirklich geben. In Wahrheit werden aber sämtliche Daten in ~/Dropbox/MAMP abgelegt und gelesen („~“ bezeichnet wie bei unixoiden Betriebssystemen üblich den persönlichen Ordner). Diese Zeile muss auf allen Rechnern, die mit dem MAMP-Datenbestand arbeiten sollen, ins Terminal kopiert werden – allerdings erst, nachdem der Dropbox-Sync fertig ist, da ansonsten der Zielpfad nicht gefunden wird.

Exkurs: Symbolische und harte Links

Wir haben einen symbolischen Link gesetzt, kurz Symlink. Dieser ist im technischen Sinne eine Datei, die für sich genommen autonom ist. Das bedeutet, dass man diese Datei löschen kann und dem Link-Ziel dabei nichts passiert.
Im Gegensatz dazu gibt es auch harte Links. Diese repräsentieren direkt das Objekt, auf die sie sich beziehen. Wird also ein harter Link gelöscht oder geändert, geschieht dasselbe mit dem Original.
Ein Symlink hat zudem den Vorteil, dass er auf alles im System zeigen kann. So macht es keinen Unterschied, auf welcher Festplatte das Ziel letztendlich liegt. Hingegen funktionieren harte Links nur innerhalb eines „Volumes“. Wer also beispielsweise unseren Tipp befolgt hat, bei älteren iMacs den Benutzerordner von der SSD auf die rotierende Festplatte zu verschieben, muss mit einem Symlink arbeiten, da der Programme-Ordner auf einem anderen Volume liegt.

Zu Risiken und Nebenwirkungen…

Diese Anleitung erhebt keinen Anspruch darauf, für alle Anwendungsfälle zu funktionieren. Ich verwende diese Lösung, weil nur ein Betriebssystem auf den relevanten Rechnern zum Einsatz kommt. Außerdem ist zu beachten, dass kein Simultanbetrieb möglich ist! Solange wie Rechner A den MAMP (und Eclipse) gestartet hat, darf Rechner B das nicht auch tun, ansonsten kommt es zu Kollisionen.

Ebenfalls zu beachten ist, dass sich das Verfahren für Neuentwicklungen eignet, aber nicht zum Testen von kompletten Projekten. Solange die Datenbank wenige Daten beinhaltet, funktioniert so eine Synchronisierung noch in endlicher Zeit, große Datenbanken können mit gängigen DSL-Upload-Geschwindigkeiten hingegen nicht sinnvoll in die Cloud hochgeladen werden.

Solange MAMP aktiv ist, gibt es ein kleines Problem mit dem Synchronisieren. Das Lock-File des Apache-Servers kann nicht gelesen werden. Es wird aber ohnehin gelöscht, wenn der Server geschlossen wird und stellt damit keine Einschränkung dar.
Für den Einsatz von Eclipse günstig wäre es, auf allen Rechnern denselben Benutzernamen zu verwenden. Dann ist der Ordner des Workspaces auf allen Rechnern derselbe (z. B. /Users/klaus/Dropbox/MAMP/htdocs) und man muss nicht bei jedem Rechnerwechsel neu suchen.

Weitergedacht: Nur Daten synchronisieren

Natürlich muss man nicht unbedingt die gesamte MAMP-Installation in die Dropbox packen. Es würde grundsätzlich bereits reichen, wenn nur die wichtigen Daten, also die HTDocs und die Datenbanken, synchron gehalten werden. Auch das lässt sich bewerkstelligen. Anstelle des gesamten MAMP-Ordners müsste man dann nur /Applications/MAMP/htdocs und /Applications/MAMP/db/mysql in die Dropbox verschieben und einen entsprechenden Link setzen, beispielsweise:
ln -s ~/Dropbox/htdocs/ /Applications/MAMP/htdocs
und
ln -s ~/Dropbox/mysql/ /Applications/MAMP/db/mysql
Dies müsste ebenfalls auf allen beteiligten Rechnern geschehen. Außerdem muss auf jedem Rechner MAMP installiert werden. Grundsätzlich kann man auf diese Weise alles selektiv in die Dropbox werfen. Der Syntax für den ln-Befehl lautet hierfür:
ln -s ORIGINAL LINK
Ist in einem der Pfade ein Leerzeichen enthalten, muss dieses mithilfe eines Backslash (Shift+Alt+7) escaped werden. Dabei wird der Backslash einfach dem Leerzeichen vorangestellt, beispielsweise so:
~/Desktop/Meine Dokumente/

Fazit: Fröhliches Verlinken!

Die Anleitung zeigt, dass Symlinks ganz nützlich sein können, um benötigte Pfade aufrecht erhalten zu können. Nach dem Verschieben des Benutzerordners von der SSD auf die Festplatte, ist dieses How-To schon der zweite Anwendungsfall auf Macnotes, der von Links Gebrauch macht. Wenn es nur darum geht, dass ein Pfad anders lauten müsste als er in Wirklichkeit ist, können solche Links für beliebige Einsatzgebiete angewandt werden.


Ähnliche Nachrichten