#apache #coldfusion #homebrew #apple-m1 #mod-jk
#apache #coldfusion #доморощенный #apple-m1 #mod-jk
Вопрос:
У меня установлен доморощенный Apache, и я пытаюсь подключить Coldfusion Server 2016 к Tomcat mod_jk.
Я скачал исходный код с https://tomcat.apache.org/download-connectors.cgi
Я следовал инструкциям по его компиляции, попробовал несколько разных способов, но когда я добираюсь до команды «make», я продолжаю получать ту же ошибку:
In file included from jk_ajp12_worker.c:26:
In file included from ./jk_ajp12_worker.h:26:
In file included from ./jk_logger.h:26:
In file included from ./jk_global.h:340:
./jk_types.h:56:2: error: Can not determine the proper size for pid_t
#error Can not determine the proper size for pid_t
^
./jk_types.h:62:2: error: Can not determine the proper size for pthread_t
#error Can not determine the proper size for pthread_t
^
2 errors generated.
make[1]: *** [jk_ajp12_worker.lo] Error 1
make: *** [all-recursive] Error 1
Это разные команды, которые я пытался скомпилировать:
./configure --with-apxs=/opt/homebrew/bin/apxs
./configure CFLAGS='-arch arm64e' APXSLDFLAGS='-arch arm64e' --with-apxs=/opt/homebrew/bin/apxs
./configure CFLAGS='-arch arm64e' APXSLDFLAGS='-arch arm64e' --with-apxs=/opt/homebrew/bin/apxs --host=arm
Недавно я получил этот новый MacBook Pro 16 «и перенес все с моего MacBook Pro 2017 года (чип Intel). Я запускал стандартный Apache с Coldfusion Server 2016, но когда я попытался запустить Apache на новом MacBook, ему не понравился мой mod_jk.so файл и выдал сообщение об ошибке:
httpd: Syntax error on line 542 of /opt/homebrew/etc/httpd/httpd.conf: Syntax error on line 2 of /opt/homebrew/etc/httpd/mod_jk.conf:
Cannot load /Applications/ColdFusion2016/config/wsconfig/2/mod_jk.so into server: dlopen(/Applications/ColdFusion2016/config/wsconfig/2/mod_jk.so, 0x000A):
tried: '/Applications/ColdFusion2016/config/wsconfig/2/mod_jk.so'
(mach-o file, but is an incompatible architecture (have 'x86_64', need 'arm64e'))
Я ценю любую помощь или вклад. Спасибо.
Ответ №1:
Я наконец установил Apache2 с Tomcat на свой M1, и все это работает. Единственное, что вам нужно сделать, это установить свежий Apache из Macports или HomeBrew. Это связано с тем, что большинство старых установок, скопированных со старого Mac на новый, теперь будут находиться в части вашей файловой системы, доступной только для чтения, и SIP не позволит вам к ним приблизиться. Вы найдете странные и замечательные обходные пути (apachectl сказал мне, что мне нужно разработать код mod_jk.so например, и я потратил на это много времени, и в конце концов это было бессмысленно), и вы попытаетесь заставить старую установку работать, но поверьте мне, это того не стоит.
Вам нужно будет скомпилировать новый jk_module (mod_jk.so ). Это то, что я сделал:
Загрузить последнюю версию connector https://dlcdn.apache.org/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.48-src.tar.gz , сохраните файл .gz и распакуйте его.
Измените каталог на native
папку. запустите which apxs
, чтобы указать путь к apxs для команды ./configure, путь, который я дал, был: /opt/local/bin/apxs
. Используйте его в качестве пути в команде ./configure ниже.
Команды следующие (на самом деле пока не стоит их запускать, потому что они завершатся неудачей):
./configure --with-apxs=/opt/local/bin/apxs
make
Однако make
произойдет сбой с:
./jk_types.h:56:2: error: Can not determine the proper size for pid_t
#error Can not determine the proper size for pid_t
^
./jk_types.h:62:2: error: Can not determine the proper size for pthread_t
#error Can not determine the proper size for pthread_t
^
2 errors generated.
make[1]: *** [jk_ajp12_worker.lo] Error 1
make: *** [all-recursive] Error 1
Это проблема для Mac M1, которая была исправлена. Итак, на данный момент мы откажемся от исходного кода 1.2.48 и загрузим исходный код с исправлением.
Но не удаляйте исходный код 1.2.48, потому что в источнике исправления отсутствует несколько файлов, которые вы скопируете прямо из исходного кода 1.2.48.
Страница для загрузки исправления для Mac OS находится здесь: https://github.com/apache/tomcat-connectors , который будет зафиксирован e719874
30 июня 2021 года.
Нажмите на зеленую кнопку «Код», а затем на «Загрузить ZIP». Распакуйте новый исходный код и компакт-диск в «родной»
Выполните команды:
./configure --with-apxs=/opt/local/bin/apxs
make
И всякий раз, когда он останавливается и жалуется, что чего-то не хватает, найдите это в исходном коде 1.2.48 и скопируйте его в ту же позицию в новом исходном коде и повторите попытку. Это произойдет два или три раза.
В какой-то момент я получил эту ошибку:
/home/myuser/source/mod_auth_cas/mod_auth_cas/missing: line 81: aclocal-1.15: command not found WARNING: 'aclocal-1.15' is missing on your system. You should only need it if you modified 'acinclude.m4' or 'configure.ac' or m4 files included by 'configure.ac'. The 'aclocal' program is part of the GNU Automake package: <http://www.gnu.org/software/automake> It also requires GNU Autoconf, GNU m4 and Perl in order to run: <http://www.gnu.org/software/autoconf> <http://www.gnu.org/software/m4/> <http://www.perl.org/> make: *** [aclocal.m4] Error 127
Затем я где-то прочитал о запуске autoreconf -f -i
(который исправил это).
Когда make завершится, найдите свой хороший новый mod_jk.so файл в native/apache-2.0
папке и скопируйте его туда, где находятся все остальные ваши модули. У меня установлена Macports, поэтому Homebrew, вероятно, отличается, но мои модули /opt/local/lib/apache2/modules
включены.
Не забудьте добавить LoadModule
строку в httpd.conf, если ее там еще нет:
LoadModule jk_module /opt/local/lib/apache2/modules/mod_jk.so
У вас могут возникнуть некоторые проблемы с определением, какие папки apache2 содержат новую установку, а не старую установку — я обнаружил, что две другие установки пытаются сбить меня с толку.
Мой конфиг здесь: /opt/local/etc/apache2/httpd.conf
apachectl
очень полезно для настройки.
apachectl -t -D DUMP_INCLUDES
найдет все файлы конфигурации, которые он использует. Это полностью спасло меня, потому что показало, что мой файл httpd.conf, который я скопировал из другого места, все еще указывал с помощью команд «Включить» на другие старые файлы конфигурации в неправильном месте.
apachectl configtest
проверит вашу конфигурацию для вас и распечатает все найденные ошибки. Он указал на 4 модуля, которые ему не понравились, поэтому я просто исключил их. Хотя, очевидно, внимательно прочитайте сообщения и google, если вы не уверены, почему apachectl что-то не нравится. Если он отвечает «Синтаксис ОК», вы готовы к работе.
Это загадочное сообщение, которое я получал много раз, пока не выяснил, что это потому, что httpd.conf указывал на неправильную папку modules (старая установка apache2) для каждого модуля, поэтому он загружал материал, который, предположительно, не был скомпилирован для 64bit
httpd: Синтаксическая ошибка в строке 76 из /opt/local/etc/apache2/httpd.conf: не удается загрузить libexec/apache2/mod_authz_owner.so на сервер: dlopen(/usr/libexec/apache2/mod_authz_owner.so, 0x000A): символ не найден в плоском пространстве имен ‘_apr_stat $INODE64’
Это моя команда запуска с использованием списка, который автоматически создается Macports: sudo launchctl load -w /opt/local/etc/LaunchDaemons/org.macports.apache2/org.macports.apache2.plist
И выгрузить: sudo launchctl unload /opt/local/etc/LaunchDaemons/org.macports.apache2/org.macports.apache2.plist
запустите, ps ax|grep httpd
чтобы проверить, работает ли он.
Ведение журнала: не забудьте sudo
создать папку jk /var/log/apache2
, если она еще не существует, иначе у apache или tomcat возникнут загадочные проблемы или они не запустятся или что-то в этом роде ( /var/log/apache2/jk
папка необходима для jk.log).
Другая проблема возникла так же, как я думал, что я это сделал: apache не смог записать свой pid-файл при запуске. Опять же, это было связано с тем, что позиция, установленная в моей конфигурации для файла pid, была из конфигурации на моем старом mac, и выбранная позиция была доступна только для чтения. Чтобы изменить это, вам нужно установить PidFile
параметр, который я нашел в следующем файле: /opt/local/etc/apache2/extra/httpd-mpm.conf
и это выглядит так:
# PidFile: The file in which the server should record its process
# identification number when it starts.
#
# Note that this is the default PidFile for most MPMs.
#
<IfModule !mpm_netware_module>
PidFile "local/run/apache2/httpd.pid"
</IfModule>
Не беспокойтесь о том, что делает IfModule, просто установите PID-файл в место для записи, которое, как вы можете видеть, является относительным путем. Вам может быть интересно, что находится перед local
папкой.
Впереди идет параметр ServerRoot, установленный в httpd.conf
:
ServerRoot "/usr"
Итак, мой pid будет записан в /usr/local/run/apache2/httpd.pid
. Мне пришлось создать папки run
and apache2
.
Вот и все. Существуют различные журналы, которые могут указывать на ошибки, если вы застряли:
/var/log/apache2/error_log
И jk.log для соединителя apache / tomcat:
/var/log/apache2/jk/jk.log
И всегда есть системный журнал, который может вам что-то сказать:
/var/log/system.log
Я очень надеюсь, что это кому-то поможет. Однако это было очень долго и сложно, и я наверняка пропустил что-то, что я сделал по пути, поэтому, если вы столкнетесь с какой-то новой проблемой, я посмотрю, смогу ли я помочь.
Комментарии:
1. спасибо за подробный отзыв! Я выбрал доморощенный Apache, но, возможно, придется попробовать Macports, поскольку я все еще не могу заставить Apache подключиться к Coldfusion. Еще раз спасибо!
Ответ №2:
Запуск ColdFusion на Mac — это всегда PITA. Не имеет значения, является ли это CF 9, 10, 11, вплоть до текущего. Особенно, когда вы имеете дело с чипсетом, не основанным на Intel. Вы также пытаетесь получить более старую и пользовательскую сборку Toncat, работающую на чипсете, который, вероятно, не поддерживается. Вы также не единственный, у кого есть эта проблема с CF 2016 на чипе M1 (они тоже не нашли решения).
Попробуйте использовать CommandBox для запуска CF. Он загрузит сервер в виде файла JAR и запустит его в контейнере сервлетов Glassfish (IIRC). Вам также не понадобится Apache. Это действительно довольно просто запустить и запустить.
https://commandbox.ortusbooks.com/embedded-server/multi-engine-support
После его установки перейдите в корневую папку вашего приложения в CLI:
start cfengine=adobe@2016
Он загрузит и установит сервер, а затем запустит приложение.
Проверьте документы для получения дополнительной информации.
Комментарии:
1. Спасибо, что предложили CommandBox; Я об этом не слышал. Попробую сегодня.
2. Я наконец-то получил mod_jk для правильной компиляции и создания, но теперь что-то не так с Coldfusion / Tomcat, взаимодействующим с Apache. Я продолжаю получать страницу «Служба недоступна».
3. @felix822 Не могли бы вы уточнить, возможно, с правильным ответом, как вы установили mod_jk. Я хотел бы просто скопировать со своего старого mac на свой M1, но все модули apache теперь находятся в папке, доступной только для чтения, и вы больше не можете переопределить SIP, поэтому я не могу его добавить. Я мог бы установить его в папку r / w и указать LoadModule, где он находится, но тогда вам придется подписать его чертовым сертификатом, который после двух дней попыток оказался невозможным. Можете ли вы вообще помочь?
4. @mwarren Я скомпилировал mod_jk из исходного кода. К сожалению, я не сохранил заметки о том, как именно, но потребовалось много попыток с разными настройками конфигурации. Мне также пришлось самостоятельно подписать mod_jk.so файл, который я смог сделать, выполнив шаги, приведенные здесь — blog.phusion.nl/2020/12/22/future_of_macos_apache_modules
5. @felix822 Моя проблема с подписью решена. Но Apache по-прежнему не запускается. Вот мой вопрос и ответ: developer.apple.com/forums/thread/699126?page=1#702453022