2016-07-07 8 views
0

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

"This layer used to provide a modphp recipe that built mod_php, but this is now built as part of the php recipe in meta-oe. However, since apache2 is required to build mod_php, and apache2 recipe is in this layer and recipes in meta-oe can't depend on it, mod_php is not built by default. If you do wish to use mod_php, you need to add "apache2" to the PACKAGECONFIG value for the php recipe in order to enable it."

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

PACKAGECONFIG_append = " apache2"

Но я получаю сборники ошибки, когда он не может найти то, что, как представляется, быть APACHE включают файлы при компиляции mod_php (I включает только одну ошибку ниже, я получаю подобную ошибку для ap_config.h а):

In file included from /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: fatal error: httpd.h: No such file or directory | compilation terminated.

кто-нибудь удалось собрать apache2 с поддержкой PHP в последнее время и может оказать некоторую помощь в том, как это сделать? Благодаря!

ответ

2

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

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

Я не знаю, если ЗАВИСИТ и 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> 

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

0

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

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

Надежда, это помогает работать :)