3

我正在为 openembedded-classic 编写 openembedded/bitbake 食谱。我的配方 RDEPENDS on keyutils,一切似乎都有效,除了一件事:我想在 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

4 回答 4

6

据我所知,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
}
于 2015-06-25T12:00:45.513 回答
4

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

于 2015-06-24T11:08:16.827 回答
0

OE-Classic 非常古老,所以你真的应该更新到 oe-core。

也就是说,postinst 在第一次启动时运行吗?我不确定。还要查看 temp 目录中的 recipes 工作目录,阅读日志和运行文件,看看那里是否有任何线索。

于 2015-06-25T11:50:19.583 回答
0

还有一件事。如果 foo RDEPENDS on bar 仅表示“安装 foo 时,也安装了 bar”。我不确定当您的 postinst 正在运行时,它会断言在安装阶段安装的内容。

如果使用 $D 不能解决问题,请尝试编辑您的 postinst 以复制您尝试在其他地方编辑的现有文件,这样您就可以首先验证它是否存在。您可能要附加到一个尚不存在的文件,而安装该文件的包将替换它。

于 2015-06-25T12:10:46.820 回答