Mac Leopard - Не удается запустить Apache2 после сборки SVN1.6.2 из исходного кода - PullRequest
3 голосов
/ 15 июня 2009

В прошлый четверг я собрал SVN из исходного кода на своем Mac под управлением Leopard 10.5.7, чтобы я мог получить возможность svn + ssh. (По какой-то причине эта функциональность была недоступна при использовании двоичного файла от Collabnet.)

Сборка прошла успешно, и я смог использовать послесловия SVN, но apache прекратил запуск.

Когда я выследил ошибку, вот что я получаю:

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

Я подозреваю, что сборка что-то испортила, но я не уверен, куда идти.

Ответы [ 3 ]

3 голосов
/ 15 июня 2009

Проблема заключается в том, что Apple создала Apache как толстый двоичный файл, поэтому он поддерживает четыре архитектуры, поэтому он будет загружать только модули, которые построены как толстые двоичные файлы. Вы можете использовать утилиту lipo, чтобы выяснить, как что-то было построено:

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

Скорее всего, вы увидите что-то вроде этого:

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

Вы можете использовать arch для принудительного запуска команды в том или ином режиме или утилиту lipo для изменения двоичного файла и исключения определенных вариантов. В целом, довольно сложно иметь дело с каждым конкретным случаем.

Другой вариант - собрать все в толстые двоичные файлы, что я и делал в последнее время. Вещи, основанные на autoconf (практически все, что связано со скриптом configure), обычно вы можете контролировать большую часть процесса с помощью переменных среды. У меня есть куча скриптов, которые обертывают процесс сборки, чтобы убедиться, что они настроены правильно. Используйте следующие команды для восстановления 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

Я храню копию окружения в своем домашнем каталоге. Всякий раз, когда я что-то строю, я копирую env-sh, редактирую по мере необходимости, создаю исходный код и собираю. В глубинах developer.apple.com скрыто гораздо больше информации, например, Техническая записка 2137 и Универсальные руководящие принципы двоичного программирования .

Удачи. Я знаю, что я все еще прокладываю себе путь через эту болтовню веселья.

1 голос
/ 29 октября 2010

Ответ Д.Шоули не сработал для меня (я получаю ошибку во время make), но, возможно, я сделал это неправильно. Но ... поскольку я не использую svn в своем http-сервере, мне удалось «решить» проблему, комментируя все модули SVN в httpd.conf. В моем случае:

файл: /etc/apache2/httpd.conf

# LoadModule dav_svn_module libexec / apache2 / mod_dav_svn.so

# LoadModule authz_svn_module libexec / apache2 / mod_authz_svn.so

И после комментирования этих строк я смог снова запустить apache.

0 голосов
/ 15 июня 2009

Похоже, оно было скомпилировано для неправильной архитектуры. Mayhaps 64-разрядная?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...