Apache2 с поддержкой PHP в Yocto

Я использую Yocto для создания сборки, включающей apache2, но мне трудно добавить поддержку php. Раньше он работал (читай: в прошлом году), но с тех пор произошли изменения в слое мета-веб-сервера в meta-openembedded. Из файла README в мета-веб-сервере:

«Этот слой используется для предоставления рецепта modphp, который строит mod_php, но
теперь он построен как часть рецепта php в meta-oe. Тем не менее, так как
apache2 требуется для сборки mod_php, и рецепт apache2 находится в этом
слой и рецепты в метаэ не могут зависеть от него, mod_php не построен
по умолчанию. Если вы хотите использовать mod_php, вам нужно добавить «apache2» в значение PACKAGECONFIG для рецепта php, чтобы включить его ».

Я добавил следующую строку в php в моем собственном слое:

PACKAGECONFIG_append = «apache2»

Но я получаю ошибку компиляции, когда он не может найти то, что является apache include-файлами при компиляции 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:0 :
| /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 за последнее время и может помочь, как это сделать? Спасибо!

0

Решение

С помощью Армина Кустера мне удалось решить мою проблему. Армин заметил, что PACKAGECONFIG_append = «apache2» переопределяет существующий PACKAGECONFIG и устанавливает только «apache2». По его предложению я изменил свой файл bbappend, добавив в него следующее:

DEPENDS = "apache2"RDEPENDS_${PN} = "apache2"PACKAGECONFIG = "sqlite3 apache2 ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'pam', '', d)}”

Я не знаю, нужны ли ЗАВИСИМОСТЬ и СЛУЧАЙНОСТЬ больше, но они, кажется, не причиняют вреда.

Затем я понял, что просто добавление 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>

Я надеюсь, что это может помочь другим с той же проблемой.

5

Другие решения

Чтобы добавить поддержку PHP с apache в yocto, внесите следующие изменения в файл рецепта bitbake.

Ниже приведен вывод 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}"

Надеюсь, это поможет сработать 🙂

0

По вопросам рекламы [email protected]