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

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

"Этот слой использовался для предоставления рецепта modphp, который построил mod_php, но теперь он построен как часть рецепта php в мета-oe. Однако, поскольку для сборки mod_php требуется apache2, рецепт 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: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 в последнее время и может помочь, как это сделать? Спасибо!


person Martin Bergek    schedule 07.07.2016    source источник


Ответы (2)


С ценной помощью Армина Кустера мне удалось решить мою проблему. Армин заметил, что 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>

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

person Martin Bergek    schedule 02.08.2016

Чтобы добавить поддержку 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}"

Надеюсь, это поможет разобраться :)

person thirupathi    schedule 01.03.2017