【问题标题】:Apache2 with PHP support in YoctoYocto 中支持 PHP 的 Apache2
【发布时间】:2016-11-09 09:50:42
【问题描述】:

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

"该层用于提供构建 mod_php 的 modphp 配方,但是 这现在被构建为 meta-oe 中 php 配方的一部分。然而,由于 构建 mod_php 需要 apache2,而 apache2 配方在此 meta-oe 中的 layer 和 recipes 不能依赖它,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 并且可以就如何做提供一些帮助?谢谢!

【问题讨论】:

    标签: php apache2 yocto bitbake openembedded


    【解决方案1】:

    在 Armin Kuster 的宝贵帮助下,我设法解决了我的问题。 Armin 注意到 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>
    

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

    【讨论】:

      【解决方案2】:

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

      希望,这有助于解决:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-02-20
        • 2018-03-17
        • 2018-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多