调试bitbake pkg_postinst _ $ {PN}:附加到其他配方安装的配置文件

时间:2015-06-23 11:41:02

标签: bitbake openembedded

我正在为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
}

但仍然没有运气。

4 个答案:

答案 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以复制您尝试在其他位置编辑的现有文件,这样您就可以首先验证它是否存在。您可能会附加到尚不存在的文件,并且安装该文件的软件包会替换它。