Установите модуль apache X-Sendfile на MAMP - PullRequest
0 голосов
/ 01 февраля 2012

Как я могу установить модуль Apache X-Sendfile, чтобы MAMP мог его использовать?

Я следовал этим инструкциям для установки X-Sendfile, но он не работал (похоже, он просто установил его для установки apache по умолчанию). Я также пытался вручную скопировать /usr/libexec/apache2/mod_xsendfile.so в /Applications/MAMP/Library/modules/, но при перезапуске Apache возникла следующая ошибка:

Cannot load /Applications/MAMP/Library/modules/mod_xsendfile.so into server: cannot create object file image or add library

Ответы [ 2 ]

4 голосов
/ 04 апреля 2012

Наабстер ответит правильно, если ваш двоичный файл MAMP построен для той же архитектуры, что и ваше ядро. Возможно, проблема в том, что MAMP не построен с использованием той же архитектуры - у меня Lion работает здесь (10.7.3) с XAMPP 1.7.3, и я просто столкнулся с той же проблемой, что и у вас.

Вот как я выяснил, что не так в моей системе, и как я это исправил. Если ваша проблема такая же, как и у меня, вы сможете следить и проверять ее на ходу.

Во-первых, вот вывод 'uname -a', чтобы показать вам, что я запускаю:

Darwin Tads-Mac-Pro.local 11.3.0 Darwin Kernel Version 11.3.0:
Thu Jan 12 18:47:41 PST 2012; root:xnu-1699.24.23~1/RELEASE_X86_64 x86_64

Вот шаги, которые я предпринял, чтобы отследить проблему и исправить ее:

  1. Выясните, какие атрибуты были у других (работающих) модулей, которые отсутствовал в моем недавно построенном модуле xsendfile. Я выбрал mod_headers.so в качестве примера. Команда для поиска этой информации: 'file [filename] '. Я запускаю это из терминала cd'd в каталог / Applications / XAMPP / xamppfiles / modules:

    file mod_headers.so 
    mod_headers.so: Mach-O universal binary with 2 architectures
    mod_headers.so (for architecture i386): Mach-O bundle i386
    mod_headers.so (for architecture ppc):  Mach-O bundle ppc
    

    Как видите, XAMPP любезно предоставляет универсальный двоичный файл, который поддерживает архитектуры i386 и ppc. Однако, поскольку ядро ​​Lion работает под управлением x86_64, все, что я собираю с использованием apxs , если я не скажу иначе, будет x86_64.

  2. Проверьте тип и архитектуру комплекта mach-o, поддерживаемые модулем, который был собран с помощью рекомендованной команды сборки apxs ('sudo apxs -cia mod_xsendfile.c'). Поскольку мы передаем '-i', apxs установит .so в стандартные модули apache dir ... /usr/libexec/apache2...

    file /usr/libexec/apache2/mod_xsendfile.so 
    /usr/libexec/apache2/mod_xsendfile.so: Mach-O 64-bit bundle x86_64
    

    Просто дважды проверьте, что это проблема, вы также можете посмотреть на двоичный файл httpd (apache):

    file /Applications/XAMPP/xamppfiles/bin/httpd
    /Applications/XAMPP/xamppfiles/bin/httpd: Mach-O universal binary with 2 architectures
    /Applications/XAMPP/xamppfiles/bin/httpd (for architecture i386):   Mach-O executable i386
    /Applications/XAMPP/xamppfiles/bin/httpd (for architecture ppc):    Mach-O executable ppc
    

    Ну, теперь это точно не будет работать с экземпляром apache, созданным без образа x86_64. Доверяй, но проверяй, а!

  3. Теперь, когда я уверен, что понимаю проблему, давайте пересоберем .so с правильной архитектурой, принудительно установленной в командной строке apxs. Для этого я просто добавляю два новых параметра: Wl (флаги компоновщика) и Wc (флаги компилятора). -I означает «установить» (переместить .so в каталог модулей), а -a означает «активировать» (добавить или повторно включить строку LoadModule в httpd.conf)

    sudo apxs -cia -Wl,"-arch i386" -Wc,"-arch i386" mod_xsendfile.c
    
  4. еще раз проверьте, что наш новый .so поддерживает архитектуру, которая соответствует установленному Apache (i386, а не x86_64)

    file /Applications/XAMPP/xamppfiles/modules/mod_xsendfile.so
    /Applications/XAMPP/xamppfiles/modules/mod_xsendfile.so: Mach-O bundle i386
    

    Высокий. Теперь скопируйте эту индейку в каталог установки XAMPP:

    sudo cp /usr/libexec/apache2/mod_xsendfile.so /Applications/XAMPP/xamppfiles/modules/
    

    И добавьте строку LoadModule в /Applications/XAMPP/xamppfiles/etc/httpd.conf.

    LoadModule xsendfile_module modules/mod_xsendfile.so
    

    Вы должны иметь возможность запустить сервер, используя пользовательский интерфейс или скрипт apachectl, находящийся в каталоге xamppfiles / bin.

Надеюсь, это поможет вам.

Кроме того, я выполнил довольно приличную проверку на должную осмотрительность и обнаружил, что почти все сидят в поисках «XAMPP X-SendFile не может создать объект» в Goog. То, что я нашел, - это ваш вопрос, когда я исключил «XAMPP», так как искал «XAMPP», а не «MAMP»

Я начал с «x'AMP» примерно 10 лет назад, используя LAMPP, затем WAMPP, но ребята из ApacheFriends теперь называют свой XAMPP для всех платформ, которые они поддерживают. Я предпочитаю использовать их, так как знаю, что если мне нужно настроить на сервере Windows, я могу просто загрузить тот же пакет, который я использую сейчас, но для Windows, и я могу ожидать, что все те же серверы будут установлены без (слишком много) сюрпризов.


Итак, чтобы быть (очень) тщательным, другой способ более легкого обнаружения этих типов проблем - через Console.app. Откройте его, отфильтруйте по org.apache.httpd, и вы увидите нечто похожее на это:

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

Вы также можете получить это из командной строки при запуске сервера apache вручную:

sudo apachectl -E /tmp/foo.txt -k start; tail -f /tmp/foo.txt 
0 голосов
/ 08 марта 2012

Это сработало для меня:

  1. Установите mod_xsendfile в соответствии с this для сервера OsX Apache по умолчанию.
  2. copy /usr/libexec/apache2/mod_xsendfile.so в /Applications/MAMP/Library/modules/
  3. Отредактируйте файл Mamp httpd.conf и добавьте следующую строку: LoadModule xsendfile_module modules/mod_xsendfile.so
  4. Перезапустите Mamp
...