【问题标题】:Yocto apache build: how to enable mod_cgid by default?Yocto apache build:如何默认启用 mod_cgid?
【发布时间】:2019-07-04 15:25:49
【问题描述】:

我们将 Yocto 用于嵌入式 Linux 构建。

我们正在使用来自

的配方构建 apache2
meta-openembedded/meta-webserver/recipes-httpd/apache2

当我们加载图像时,CGI 执行被禁用。我们可以看到在 apache2 配置文件 (/etc/apache2/httpd.conf) 中加载 mod_cgid.so 的行被注释掉了:

#LoadModule cgid_module lib/apache2/modules/mod_cgid.so

我们需要在构建过程中取消注释上述行,而不是手动取消注释,这是我们现在必须做的。

apache2 的 README.cmake 说明说您可以为每个模块设置一个构建标志(“I”表示构建并保持禁用状态,“A”表示构建和启用)。但是在 CMakelists.txt 中,我看到了 mod_cgi.c 的条目(标志设置为 I),但没有 mod_cgid.c 的条目:

SET(MODULE_LIST 
... 
"modules/generators/mod_autoindex+A+directory listing" 
"modules/generators/mod_cgi+I+CGI scripts" 
"modules/generators/mod_info+I+server information" 
... 
)

我尝试为 mod_cgid.c 添加一个条目。我还尝试更改 mod_cgi.c 的条目。这两种修改都没有导致对 httpd.conf 的预期更改。

如何进行此更改以便将其添加到补丁文件中?我需要一个补丁文件,以便将其添加到 Yocto 配方中。

有什么想法吗?

谢谢,阿拉姆

【问题讨论】:

标签: apache yocto


【解决方案1】:

要修改安装在镜像上的httpd.conf文件,需要创建一个*.bbappend文件。

两种可能:

  • 在 bbappend 中使用 sed 修改您的 httpd.conf 文件
  • 将原始 httpd.conf 替换为您提供的文件(使用未注释的行)

第一种可能,你可以看看here

对于第二种可能性,这是一个示例:

FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
SRC_URI += " file://httpd.conf "

do_install_append() {
    install -d ${D}${sysconfdir}/apache2
    install -m 0644 ${WORKDIR}/httpd.conf ${D}${sysconfdir}/apache2/httpd.conf
}

*.bbappend 文件必须命名为 apache2_%.bbappend 或 apache2_.bbappend。

您的元数据中的文件树将是:

meta-my-meta
├──recipes-httpd
│  └──apache2
│     ├──apache2_%.bbappend
│     └──apache2
│        └──httpd.conf
│ 
└──recipes-...

【讨论】:

  • 谢谢。非常有帮助。虽然我认为 do_install_append() 块的第二行可能应该是: install -m 0644 ${WORKDIR}/httpd.conf ${D}${sysconfdir}/apache2/httpd.conf 即它缺少 {D}在目的地,对吧?
  • @Aram 你完全正确!我将编辑我的帖子以修复这个错字!
猜你喜欢
  • 2016-05-27
  • 2013-06-22
  • 2022-07-20
  • 2014-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-12
  • 2020-06-25
相关资源
最近更新 更多