2009-06-15 4 views
3

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

Сборка прошла успешно, и я смог использовать пароли 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

Проблема в том, что 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 есть гораздо больше информации, например Tech Note 2137 и Universal Binary Programming Guidelines.

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

+0

Я попытался выполнить ваши шаги выше, но полученный mod_dav_svn.so все еще i386, когда я делаю липо. У меня установлен последний SDK (тот, который поставляется с комплектом iPhone 3.0). Все, что вы говорите, имеет большой смысл. Просто не создавайте его, как ничего, кроме i386. – Geuis

+1

У меня возникли проблемы с некоторыми пакетами, которые не использовали CFLAGS и LDFLAGS в соответствующих местах, но subversion получает это право. Перед запуском скрипта configure убедитесь, что вы делаете «make distclean» на верхнем уровне. Я попробовал это с чистой выборкой svn-1.6.2, и он работал на моем MacBook Pro. Вы смотрите на встроенный, а не на установленный справа? –

+0

Это было очень полезно, спасибо. В качестве примечания я должен был сделать трюк envvars/DYLD_LIBRARY_PATH, упомянутый здесь позже: http://www.thoughtspark.org/node/19 – leander

0

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

1

Ответ D.Shawley не помог мне (я получаю сообщение об ошибке во время 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

И, прокомментировав эти строки, я снова смог снова начать апач.