2

我们正在 BitBake 中创建文件系统映像,其中一个包要求在设备上执行其安装后脚本,在设备上安装映像本身之后,而不是在构建服务器生成 rootfs 映像时执行。

查看带有“opkg status”的包,它表示该包已成功安装——“install ok installed”。但是,没有执行任何副作用,只需从 /var/lib/opkg/info/.postinst 运行 .postinst 文件即可工作并且不会报告任何错误。

我怎样才能让它工作?似乎该软件包正在以不正确的状态“安装”在 rootfs 映像中。

4

1 回答 1

2

请参阅开发手册部分安装后脚本:使用最新的 Yocto (>=2.7),pkg_postinst_ontarget_${PN}()当您知道您的脚本应始终在第一次启动期间在目标上运行时,您可以使用,并且永远不会在 rootfs 生成期间。

在较旧的 Yocto 版本上,您可以在函数中手动执行 pkg_postinst_ontarget_${PN} 执行的操作pkg_postinst_${PN}()

if [ -n "$D" ]; then
    echo "Delaying until first boot"
    exit 1
fi

# actual post install script here

$D 将在 rootfs 生成期间定义,因此安装后脚本将失败。这意味着该脚本将在首次启动目标时再次运行。

最好的选择仍然是修复 postinstall 脚本,以便它在 rootfs 生成期间工作——当然有时这是不可能的。

于 2019-07-08T19:12:33.323 回答