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

S.C*_*sen 2 openembedded bitbake

我正在为openembedded-classic编写openembedded/bitbake配方.关于keyutils的我的食谱RDEPENDS,一切似乎都有效,除了一件事:我想在keyutils包安装的/etc/request-key.conf文件中附加一行.所以我在配方中添加了以下内容:

pkg_postinst_${PN} () {
  echo 'create ... more stuff ..' >> ${sysconfdir}/request-key.conf
}
Run Code Online (Sandbox Code Playgroud)

但是,我生成的图像中缺少预期添加的行.update-rc.d如果这有任何区别,我的食谱会继承.

我的主要问题是:我如何调试这个?目前我正构建一个完整的rootfs图像,然后在其中进行搜索,看看是否显示更改.当然有更好的方法吗?

更新: 将食谱更改为:

pkg_postinst_${PN} () {
  echo 'create ... more stuff ...' >> ${D}${sysconfdir}/request-key.conf
}
Run Code Online (Sandbox Code Playgroud)

但仍然没有运气.

Ros*_*ton 5

postinst 脚本在 root 时间运行,因此 ${sysconfdir} 是主机上的/etc 。使用 $D${sysconfdir} 写入正在生成的 rootfs 内的文件。

  • 我猜你需要 $D 而不是 ${D}。解析配方时 ${D} 将由 bitbake 扩展,并在配方构建时扩展为临时目标目录的值。$D 不会被 bitbake 扩展,但会被 shell 扩展,并且在 rootfs 时,D 位于环境中。 (2认同)

zwe*_*rch 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
}
Run Code Online (Sandbox Code Playgroud)