如何在不修改原配方的前提下配置Yocto现有mariadb配方?
Yocto中适配现有MariaDB配方修改配置的最佳实践
针对你提出的三个疑问,直接给出实操性的解决方案:
1. 是否可以覆盖CONFFILES?应在自有配方还是.bbappend文件中覆盖?
可以覆盖,必须在.bbappend文件中操作,绝对不要修改原配方源码。
在你的自定义层中创建mariadb.bbappend,重新定义CONFFILES_${PN}变量即可。比如原配方的CONFFILES_${PN}是${sysconfdir}/my.cnf,你可以替换为自己的配置文件路径,或者在原有基础上追加自定义的配置文件路径,确保新的配置文件被系统标记为可持久化的配置文件。
2. 是否需要对该文件打补丁?
不需要。打补丁是修改配方自带的源码或配置文件时的方案,而我们的目标是不触碰原配方内容,直接通过.bbappend添加或替换配置文件,这种方式更灵活,也能避免后续更新原配方时的冲突。
3. 是否可以将自有配置文件放入/etc/my.cnf.d/目录下以覆盖原有选项?
这是最推荐的方案,MariaDB原生支持这种配置方式:主配置文件my.cnf会自动加载/etc/my.cnf.d/目录下的所有.cnf文件,且子目录中的配置优先级高于主文件,同名选项会直接覆盖主文件设置。
具体实现步骤
- 在自定义层中创建配方目录:
meta-yourlayer/recipes-database/mariadb/ - 在该目录下创建
mariadb.bbappend文件,内容如下:
# 追加自定义文件的搜索路径 FILESEXTRAPATHS:prepend := "${THISDIR}/files:" # 添加自定义配置文件的源路径 SRC_URI += "file://my-custom.cnf" # 在安装阶段将自定义配置文件放到指定目录 do_install:append() { install -d ${D}${sysconfdir}/my.cnf.d install -m 0644 ${WORKDIR}/my-custom.cnf ${D}${sysconfdir}/my.cnf.d/ } # 将自定义配置文件标记为系统配置文件,确保升级时不会被覆盖 CONFFILES_${PN} += "${sysconfdir}/my.cnf.d/my-custom.cnf"
- 在同目录下创建
files/子目录,放入你的自定义配置文件my-custom.cnf,示例内容:
[mysqld] bind-address = 0.0.0.0 max_connections = 200
这种方式完全不修改原配方的任何内容,后续更新meta-oe层的MariaDB配方时,你的自定义配置会自动生效,不会产生冲突。
内容的提问来源于stack exchange,提问作者mocle
相关产品推荐
相关产品推荐

