2009-06-15 1 views
3
nicht gestartet werden

Letzten Donnerstag habe ich SVN aus der Quelle auf meinem Mac mit Leopard 10.5.7 erstellt, damit ich die svn + ssh-Fähigkeit bekommen konnte. (Aus irgendeinem Grund war diese Funktionalität mit der Binärdatei von Collabnet nicht verfügbar.)Mac Leopard - Apache2 kann nach dem Erstellen von SVN1.6.2 aus der Quelle

Der Build war erfolgreich und ich konnte SVN später verwenden, aber Apache wurde nicht mehr gestartet.

Wenn ich den Fehler aufgespürt, ist es das, was ich bekomme:

Syntax error on line 117 of /private/etc/apache2/httpd.conf: Cannot load /usr/libexec 
/apache2/mod_dav_svn.so into server: dlopen(/usr/libexec/apache2/mod_dav_svn.so, 10): no 
suitable image found. Did find:\n\t/usr/libexec/apache2/mod_dav_svn.so: mach-o, but 
wrong architecture 

Ich vermute, dass die Build etwas zu tun, muckte, aber ich bin nicht sicher, wohin man von hier zu gehen.

Antwort

3

Das Problem ist, dass Apple Apache als eine fette Binärdatei baute, so dass es vier Architekturen unterstützt, so dass es nur Module laden wird, die als fette Binärdateien gebaut werden. Sie können die lipo Dienstprogramm verwenden, um herauszufinden, wie etwas gebaut wurde:

lorien$ lipo -info /usr/sbin/httpd 
Architectures in the fat file: /usr/sbin/httpd are: ppc7400 ppc64 i386 x86_64 

Die Chancen stehen gut, dass Sie so etwas wie dies sehen:

lorien$ lipo -info /usr/libexec/apache2/modules/mod_dav_svn.so 
Non-fat file: /usr/libexec/apache2/modules/mod_dav_svn.so is architecture: i386 

Sie arch verwenden können, um einen Befehl zu zwingen, in einer laufen Modus oder eine andere oder das lipo Dienstprogramm, um die Binärdatei zu modifizieren und bestimmte Varianten auszublenden. Insgesamt ist es sehr mühsam, von Fall zu Fall zu entscheiden.

Die andere Möglichkeit besteht darin, alles in Fett-Binärdateien zu kompilieren, was ich in letzter Zeit gemacht habe. Mit autoconf-basierten Dingen (fast alles mit einem configure Skript), können Sie in der Regel einen Großteil des Prozesses mit Umgebungsvariablen steuern. Ich habe eine Reihe von Skripten, die den Build-Prozess umhüllen, um sicherzustellen, dass sie richtig eingerichtet werden. Verwenden Sie die folgenden Befehle zum Neuaufbau von svn:

lorien$ cd ~/src/svn-1.6.2 
lorien$ cat env-sh 
ARCHFLAGS="-arch ppc -arch ppc64 -arch i386 -arch x86_64" 
DEVPATH='/Developer/SDKs/MacOSX10.5.sdk' 
CPPFLAGS="-isysroot $DEVPATH" 
CFLAGS="$ARCHFLAGS $CPPFLAGS" 
CXXFLAGS="$CFLAGS" 
LDFLAGS="-Wl,-syslibroot,$DEVPATH $ARCHFLAGS" 
MACOS_DEPLOYMENT_TARGET=10.5 
export CFLAGS CXXFLAGS LDFLAGS MACOS_DEPLOYMENT_TARGET 
lorien$ . env-sh 
lorien$ ./configure ... 
lorien$ make -j2 
lorien$ lipo -info subversion/mod_dav_svn/.libs/mod_dav_svn.so 
Architectures in the fat file: subversion/mod_dav_svn/.libs/mod_dav_svn.so are: ppc7400 ppc64 i386 x86_64 

Ich behalte eine Kopie der Umgebung in meinem Home-Verzeichnis. Immer wenn ich etwas baue, kopiere ich env-sh, bearbeite es nach Bedarf, beziehe es und baue es dann weg. Es gibt eine Menge mehr Informationen in den Tiefen von developer.apple.com wie Tech Note 2137 und Universal Binary Programming Guidelines versteckt.

Viel Glück. Ich weiß, dass ich mich immer noch durch diesen Morast von Spaß navigiere.

+0

Ich habe versucht, Ihre Schritte oben zu laufen, aber das resultierende mod_dav_svn.so ist immer noch i386, wenn ich Lipo mache. Ich habe das neueste SDK installiert (das, das mit dem iPhone 3.0-Kit geliefert wird). Alles, was Sie sagen, macht viel Sinn. Nur nicht, um es als etwas anderes als i386 zu bauen. – Geuis

+1

Ich hatte Probleme mit einigen Paketen, die CFLAGS und LDFLAGS nicht an den richtigen Stellen verwendeten, aber Subversion bekam genau das richtige. Stellen Sie sicher, dass Sie eine 'make distclean' auf der obersten Ebene ausführen, bevor Sie das configure-Skript ausführen. Ich habe dies mit einem sauberen Abruf von svn-1.6.2 versucht und es funktionierte auf meinem MacBook Pro. Sie schauen sich die gebaute an und nicht die installierte, oder? –

+0

Das war super hilfreich, danke. Als Nebenbemerkung musste ich den envvars/DYLD_LIBRARY_PATH-Trick machen, der hiernach erwähnt wird: http://www.thoughtspark.org/node/19 – leander

0

Es sieht so aus, als ob es für die falsche Architektur kompiliert wurde. Vielleicht 64-Bit?

1

Die Antwort von D.Shawley hat nicht für mich funktioniert (ich bekomme einen Fehler während make), aber vielleicht habe ich es nicht richtig gemacht. Aber ... Da ich Svn nicht in meinem http-Server verwende, konnte ich das Problem "lösen", indem ich alle SVN-Module in httpd.conf kommentierte. In meinem Fall:

Datei: /etc/apache2/httpd.conf

#LoadModule dav_svn_module libexec/apache2/mod_dav_svn.so

#LoadModule authz_svn_module libexec/apache2/mod_authz_svn.so

Und nachdem ich diese Zeilen kommentiert hatte, konnte ich den Apache wieder starten.

Verwandte Themen