我的yocto build / conf / auto.conf文件包含一个变量:
READ_ONLY_FS ?= "true"
我想安装一个可以修改的配置文件,为此,如果READ_ONLY_FS为“ true”,则我的my.conf文件直接安装在/ etc中。但是,如果READ_ONLY_FS为“ false”,则我希望将my.conf文件安装在/ data / etc中,然后软链接到/ etc。 (/ data是一个读写分区)
目前我的食谱中包含此内容,目的是为了实现我想要的目标:
FILES_${PN} += " ${@bb.utils.contains('READ_ONLY_FS', 'true', '', '/data/${sysconfdir}/my.conf', d)}"
do_install_append() {
install -d ${D}/${sysconfdir}
if [ "${@bb.utils.contains('READ_ONLY_FS', 'true', 'true', 'false', d)} == "true" ]; then
install -d ${D}/data/${sysconfdir}
install -m 0755 ${S}/my.conf ${D}/data/${sysconfdir}/my.conf
ln -sf ${D}/data/${sysconfdir}/my.conf ${D}/${sysconfdir}/my.conf
else
install -m 0755 ${S}/my.conf ${D}/${sysconfdir}/my.conf
fi
}
但是出现错误:已安装文件/目录,但未发货。我在做什么错了?
答案 0 :(得分:0)
Bitbake通常应该告诉您哪些文件“已安装但未发货”。就您而言,似乎您安装了/data/${sysconfdir}/my.conf
和符号链接位于/${sysconfdir}/my.conf
,但仅将前一个路径添加到FILES
。
顺便说一句:我想,您可以通过删除FILES
分配中的条件并直接访问READ_ONLY_FS
来简化代码。
类似的事情应该起作用(完全未经测试):
FILES_${PN} += "/data/${sysconfdir}/my.conf /${sysconfdir}/my.conf"
do_install_append() {
install -d ${D}/${sysconfdir}
if [ ${READ_ONLY_FS} == "true" ]; then
install -d ${D}/data/${sysconfdir}
install -m 0755 ${S}/my.conf ${D}/data/${sysconfdir}/my.conf
ln -sf ${D}/data/${sysconfdir}/my.conf ${D}/${sysconfdir}/my.conf
else
install -m 0755 ${S}/my.conf ${D}/${sysconfdir}/my.conf
fi
}
答案 1 :(得分:0)
我通常在自己的图层中创建一个bbappend,以附加到volatile-binds.bb上,
例如:meta-mylayer/recipes-core/volatile-binds/volatile-binds.bbappend
包含
VOLATILE_BINDS += "\
/data/${sysconfdir}/my.conf /${sysconfdir}/my.conf\n\
"
我必须确保我的rootfs通过软件包组或volatile-binds
插入IMAGE_INSTALL
软件包。
安装my.conf
的配方不需要知道这种重定向,只需安装到${sysconfdir}/my.conf
中即可。
volatile-binds
生成一个启动脚本,该脚本仅在${sysconfdir}/my.conf
为只读时才采取措施。在那种情况下,它将${sysconfdir}/my.conf
复制到/data/${sysconfdir}/my.conf
(如果尚不存在)并将后者绑定安装在前者之上。
我用
IMAGE_FEATURES += "read-only-rootfs"
在我的“只读图像”配方中。