Я использую Yocto для создания сборки, включая apache2, но мне сложно добавить поддержку php. Раньше я выполнял его (читал: в прошлом году), но с тех пор произошли изменения на уровне мета-сервера в мета-openembedded. Из файла README в мета-сервере:
«Этот слой использовался для создания рецепта modphp, который построил mod_php, но теперь он построен как часть рецепта php в meta-oe. Однако, поскольку apache2 требуется для создания mod_php, а рецепт apache2 находится в этом слое, а рецепты в мета -oe не может зависеть от него, mod_php не создается по умолчанию. Если вы хотите использовать mod_php, вам нужно добавить «apache2» в значение PACKAGECONFIG для рецепта php, чтобы включить его ».
Я добавил следующую строку в php в свой собственный слой:
PACKAGECONFIG_append = "apache2"
Но я получаю ошибку компиляции, когда не удается найти то, что, по-видимому, относится к файлам apache при компиляции mod_php (я включаю только одну ошибку ниже, я получаю аналогичную ошибку и для ap_config.h):
В файле, включенном в /home/martin/Yocto/poky/rpi/tmp/work/x86_64-linux/php-native/5.6.12-r0/php-5.6.12/sapi/apache2handler/mod_php5.c:26:09 : | /home/martin/Yocto/poky/rpi/tmp/work/x86_64-linux/php-native/5.6.12-r0/php-5.6.12/sapi/apache2handler/php_apache.h:24:19: фатальная ошибка: httpd.h: Нет такого файла или каталога | компиляция завершена.
Кто-нибудь успел собрать apache2 с поддержкой php в последнее время и может оказать некоторую помощь в том, как это сделать? Благодаря!
С ценной помощью от Armin Kuster мне удалось решить мою проблему. Армин заметил, что PACKAGECONFIG_append = «apache2» переопределяет существующий PACKAGECONFIG и устанавливает только «apache2». Исходя из его предложения, я изменил свой файл bbappend, включив в него следующее:
DEPENDS = "apache2" RDEPENDS_${PN} = "apache2" PACKAGECONFIG = "sqlite3 apache2 ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'pam', '', d)}”
Я не знаю, нужны ли DEPENDS и RDEPENDS, но они, похоже, не болят.
Затем я понял, что просто добавление «php» в мой layer.conf не создает двоичные файлы, как в прошлом. Я должен был явно указать php-cli и php-modphp. Теперь мой layer.conf включает следующее:
IMAGE_INSTALL_append = " apache2 php php-cli php-modphp"
С помощью этого рецепта PHP создается и включает как php-бинарный, так и php-модуль apache. Однако файл /etc/apache/modules.d/70_mod_php5.conf не загружает модуль PHP, так как переменная среды PHP5 не определена (см. Файл по умолчанию ниже). Я не знал, где указать переменную среды, поэтому вместо этого я переопределяю этот файл на своем собственном слое, и в моей версии я просто удалил IfDefine.
# vim: ft=apache sw=4 ts=4 <IfDefine PHP5> # Load the module first <IfModule !sapi_apache2.c> LoadModule php5_module /usr/lib/apache2/modules/libphp5.so </IfModule> # Set it to handle the files AddHandler php5-script .php .phtml .php3 .php4 .php5 AddType application/x-httpd-php-source .phps DirectoryIndex index.html index.html.var index.php index.phtml </IfDefine>
Я надеюсь, что это может помочь другим людям с той же проблемой.
Чтобы добавить поддержку PHP с помощью apache в yocto, внесите следующие изменения в файл рецепта битбака.
Ниже представлен вывод diff файла php.inc
10c10 < openssl libmcrypt" --- > openssl libmcrypt apache2-native apache2" 52c54,55 < EXTRA_OECONF = "--enable-mbstring \ --- > EXTRA_OECONF = "--with-apxs2=${STAGING_BINDIR_CROSS}/apxs \ > --enable-mbstring \ 129c132 < if ${@bb.utils.contains('PACKAGECONFIG', 'apache2', 'true', 'false', d)}; then --- > if ${@bb.utils.contains('PACKAGECONFIG', 'apache2', 'true', 'true', d)}; then 200c203 < PACKAGES = "${PN}-dbg ${PN}-cli ${PN}-cgi ${PN}-fpm ${PN}-fpm-apache2 ${PN}-pear ${PN}-phar ${MODPHP_PACKAGE} ${PN}-dev ${PN}-staticdev ${PN}-doc ${PN}" --- > PACKAGES = "${PN}-dbg ${PN}-cli ${PN}-cgi ${PN}-fpm ${PN}-fpm-apache2 ${PN}-pear ${PN}-phar ${MODPHP_PACKAGE} ${PN}-dev ${PN}-staticdev ${PN}-doc ${PN} ${PN}-modphp" 236a240 > #FILES_${PN} += "${sysconfdir}"
Надеюсь, это поможет разобраться 🙂