BitBake:如何使用 shell 脚本内容作为 pkg_postinst 或 pkg_preinst 函数的主体?
Posted
技术标签:
【中文标题】BitBake:如何使用 shell 脚本内容作为 pkg_postinst 或 pkg_preinst 函数的主体?【英文标题】:BitBake: How to use shell script content as body of pkg_postinst or pkg_preinst functions? 【发布时间】:2016-05-29 03:01:15 【问题描述】:我想将 shell 脚本的内容添加到 pkg_preinst_$PN 或 pkg_postinst_$PN 函数(软件包的 BitBake 配方)的主体中。
例如,让我们考虑这个“PREINST”shell 脚本:
$ cat PREINST
#! /bin/sh
chmod +x /usr/bin/mybin
在 pkg_preinst 函数中执行一个简单的“cat”命令不起作用:
pkg_preinst_$PN()
cat $S/path/to/PREINST
这样一来,生成的rpm包的.spec文件的内容就不是预期的了:
%pre
cat /Full/Path/To/Variable/S/path/to/PREINST
如您所见,%pre 部分不包含 PREINST 文件的实际内容,仅包含“cat”命令。
是否可以通过某种方式将 PREINST 文件的内容包含到生成的 .spec 文件中?
提前谢谢你!
【问题讨论】:
我找到了一个文件 poky/meta/classes/package_rpm.bbclass,其中定义了 write_specfile 方法。该方法似乎读取了键“pkg_preinst”的值,该值似乎是 preinst 脚本。但我无法修改该键的值来更改其值。这:d.setVar("pkg_preinst", "hello world")) 不起作用 【参考方案1】:最后我通过将此代码添加到 do_package 任务来解决了这个问题:
do_package_prepend()
PREINST_path = "$S/$MYMODULE/PREINST"
POSTINST_path = "$S/$MYMODULE/POSTINST"
PREINST = open(PREINST_path, "r")
POSTINST = open(POSTINST_path, "r")
d.setVar("pkg_preinst", PREINST.read())
d.setVar("pkg_postinst", POSTINST.read())
它使用每个 PREINST 和 POSTINST 文件的内容作为值来修改 'd' 全局字典中的 "pkg_preinst" 和 "pkg_postinst" 键。现在它起作用了! :)
【讨论】:
以上是关于BitBake:如何使用 shell 脚本内容作为 pkg_postinst 或 pkg_preinst 函数的主体?的主要内容,如果未能解决你的问题,请参考以下文章