MAMP-Arbeitsumgebung, in der auch PECL funktioniert

Was mich zur Verzweiflung brachte, nun aber endlich gelöst ist

Wochenlang habe ich probiert, auf meinem MacBook Air Apache2, MySQL und PHP vernünftig zum Laufen zu bringen. Zwar liefert Apple im OS X schon Apache und PHP mit, allerdings hakt es, sobald man bestimmte Erweiterungen, z.B. per PECL nachinstallieren will. Bei mir scheiterte es letztlich an imagick.

Nun ist mir leider das MBA gestohlen wurden und heute wurde als Ersatz eines der neuen Aluminum-MacBooks geliefert. Die Gelegenheit, es auf einem frischen System noch einmal zu probieren.

Letztendlich hing es daran, dass Leopard ein Mischmasch aus 32-Bit- und 64-Bit-Komponenten ist. Nachdem ich auf die Idee kam, die Universal Binaries dementsprechend zu missbrauchen, brachte ich es zum Laufen.

Hier aber nun die Schritt-für-Schritt-Anleitung

  1. Vergisst das von Apple beigelegte PHP! Es fehlen viel zu viele Erweiterungen und beim Versuch, diese nachzuinstallieren, hakt's irgendwann. Installiert das PHP-Paket von www.entropy.ch. Derzeit gibt es für 10.5 nur eine Beta-Version, aber die scheint gut zu funktionieren. Der Download-Link findet sich im Forum.
  2. MySQL bietet ein fertiges Paket für OS X 10.5 an. Einfach hier herunterladen und installieren. Ich entschied mich für die Paketversion für x86_64. Am besten auch das »StartupItem« installieren, damit man MySQL nicht immer über die Konsole starten muss.
  3. Falls man mit den PHP-Erweiterungen einverstanden ist, die im Entropy-Paket enthalten sind, war's das. PEAR ist enthalten, sodass solche Module problemlos nachinstalliert werden können. PECL-Zeugs ist komplizierter, siehe unten.

Installation eines PECL-Moduls

Der Trick ist, das Modul als Universal Binary mit 32-Bit- und 64-Bit-Komponente zu kompilieren. Das ist zwar übertrieben, aber so hat man die Sicherheit, dass es zumindest immer irgendwie funktioniert.

  1. Erst einmal das Paket irgendwohin herunterladen: cd /tmp ; /usr/local/php5/bin/pecl download xdebug
  2. Nun das Paket entpacken und vorbereiten: tar xzfv xdebug-VERSION.tar.gz && cd xdebug-VERSION && /usr/local/php5/bin/phpize
  3. Jetzt der entscheidene Schritt, das Kompilieren in zwei Architekturen: CFLAGS='-arch i386 -arch x86_64' ./configure && make && sudo make install

Das funktioniert soweit wunderbar. Die ImageMagick-Erweiterung erwartet allerdings die entsprechenden Libraries im System. Das habe ich mit den Binaries von ImageMagick.org und denen von Fink nicht hinbekommen, weil beide nur in 32-Bit-Version vorliegen (wie sie in der Konsole meist verwendet wird), aber die Daemons offenbar lieber 64 Bit haben wollen.

Also:

Wie kompiliert man mittels MacPorts Universal Binaries, die 32-Bit- und 64-Bit-Version gleichzeitig enthalten?

Das ist erstaunlich einfach, wenn man erst die richtige Stelle entdeckt hat:

  1. MacPorts hier herunterladen und installieren.
  2. Die Datei /opt/local/etc/macports/variants.conf als root öffnen und die Zeile +universal anhängen.
  3. Die Datei /opt/local/share/macports/Tcl/port1.0/portconfigure.tcl als root öffnen und darin nach der Einstellung configure.universal_cflags suchen. Hier die arch-Parameter wie folgt ändern: -arch i386 -arch x86_64
    Dasselbe auch bei configure.universal_cxxflags und configure.ldflags (bei mir wenige Zeilen darunter).
  4. Nun lassen sich die Module ganz einfach installieren, z.B.: sudo port install ImageMagick
  5. Um das imagick-PHP-Modul zu installieren, wie oben vorgehen und diesen configure-Befehl verwenden: CFLAGS='-arch i386 x86_64' ./configure --with-imagick=/opt/local

Fazit

Mit dieser Methode laufen bei mir jetzt PHP5 mit XDebug und IMagick gleichzeitig – etwas, was vorher unmöglich war. Ich hatte daher am Ende ein VirtualBox-Image mit Ubuntu für den Apache benutzt, was natürlich extremst umständig war. Zum Glück gehört das jetzt der Vergangenheit an.

Ich verstehe jetzt auf jeden Fall die Aussage von Steve Jobs, dass man sich bei OS X 10.6 primär um den Komplettumstieg auf 64 Bit kümmern will. Vielleicht gibt's auch irgendwann einmal einen Paketmanager, der genauso gut wie APT funktioniert. *träum*

Flattr