我正在为openembedded-classic编写openembedded / bitbake配方。关于keyutils的我的食谱RDEPENDS,一切似乎都有效,除了一件事: 我想在keyutils包安装的/etc/request-key.conf文件中附加一行。所以我在配方中添加了以下内容:
pkg_postinst_${PN} () {
echo 'create ... more stuff ..' >> ${sysconfdir}/request-key.conf
}
但是,我生成的图像中缺少预期添加的行。
如果这有任何区别,我的食谱会继承update-rc.d
。
我的主要问题是:我如何调试这个?目前我正构建一个完整的rootfs图像,然后在其中进行搜索,看看是否显示更改。当然有更好的方法吗?
更新 将食谱更改为:
pkg_postinst_${PN} () {
echo 'create ... more stuff ...' >> ${D}${sysconfdir}/request-key.conf
}
但仍然没有运气。
答案 0 :(得分:5)
据我所知,postinst
在创建rootfs时运行,并且只有在rootfs失败时才会首次启动。
所以有一种简单的方法来执行只有第一次启动的东西。只需检查$D
,就像这样:
pkg_postinst_stuff() {
#!/bin/sh -e
if [ x"$D" = "x" ]; then
# do something at first boot here
else
exit 1
fi
}
答案 1 :(得分:4)
postinst脚本在根时运行,因此$ {sysconfdir}是主机上的/ etc 。使用$ D $ {sysconfdir}写入正在生成的rootfs内的文件。
答案 2 :(得分:0)
OE-Classic非常古老,所以你真的应该更新到oe-core。
那就是说,首次启动后运行postinst?我不确定。另请查看temp目录中的食谱工作目录,并阅读日志并运行文件以查看是否有任何线索。
答案 3 :(得分:0)
还有一件事。如果foo RDEPENDS on bar就意味着“安装foo时,也会安装bar”。我不确定它是否会在安装阶段,当你的postinst正在运行时对安装的内容进行断言。
如果使用$ D无法解决问题,请尝试编辑postinst以复制您尝试在其他位置编辑的现有文件,这样您就可以首先验证它是否存在。您可能会附加到尚不存在的文件,并且安装该文件的软件包会替换它。