Apache2在Yocto中支持PHP

时间:2016-07-07 07:02:15

标签: php apache2 yocto bitbake openembedded

我正在使用Yocto来创建包含apache2的构建,但我很难添加php支持。我以前运行它(读取:去年),但从那时起,meta-openembedded中的元网络服务器层发生了变化。来自meta-webserver中的README文件:

  

“这个层用于提供构建mod_php的modphp配方,但是     现在这是作为meta-oe中php配方的一部分构建的。但是,自从     构建mod_php需要apache2,而apache2配方就在这里     meta-oe中的图层和配方不能依赖它,mod_php不是构建的     默认情况下。如果您确实希望使用mod_php,则需要添加“apache2”     到php配方的PACKAGECONFIG值以启用它。“

我在自己的图层中将以下行添加到php:

  

PACKAGECONFIG_append =“apache2”

但是当编译mod_php时无法找到似乎是apache包含文件的内容时我得到编译错误(我在下面只包含一个错误,我也得到了类似的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:没有这样的文件或目录   |编译终止。

最近是否有人设法用php支持编译apache2并且可以提供一些帮助来解决这个问题?谢谢!

2 个答案:

答案 0 :(得分:5)

在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>

我希望这对同样问题的其他人有所帮助。

答案 1 :(得分:0)

要在yocto中使用apache添加PHP支持,请在bitbake配方文件中进行以下更改。

下面是php.inc文件的diff输出

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}"

希望,这有助于解决问题:)