我想在yocto图片中安装自己的自定义deb包。为此我使用 ROOTFS_POSTPROCESS_COMMAND
使用 mydebpkg.bb 配方SUMMARY = "Recipe for installing deb package"
DESCRIPTION = "It installs own deb package"
HOMEPAGE = ""
LICENSE = "CLOSED"
inherit bin_package
my_install_pkg_deb() {
${STAGING_BINDIR_NATIVE}/dpkg \
--root=${IMAGE_ROOTFS}/ --admindir=${IMAGE_ROOTFS}/var/lib/dpkg/ \
-i /home/pi1/install/own_1.3-07u_armhf.deb
}
ROOTFS_POSTPROCESS_COMMAND += "my_install_pkg_deb; "
但是在构建映像时,进程失败并出现以下错误无法安装包mydebpkg 和功能失败:do_rootfs 。我犯错误的地方以及安装任何deb包的正确方法。
答案 0 :(得分:2)
安装预编译的.deb是一个糟糕的决定,你应该避免在你能够从源代码编译包的任何时候这样做。如果情况并非如此,我建议做这样的事情:
SUMMARY = "Recipe for installing deb package"
DESCRIPTION = "It installs own deb package"
HOMEPAGE = ""
LICENSE = "CLOSED"
DEPENDS += " dpkg-native "
SRC_URI += " \
file://own_1.3-07u_armhf.deb.zip \
"
do_install_append() {
touch ${STAGING_DIR_NATIVE}/var/lib/dpkg/status
${STAGING_BINDIR_NATIVE}/dpkg --instdir=${D}/ \
--admindir=${STAGING_DIR_NATIVE}/var/lib/dpkg/ \
-i ${WORKDIR}/own_1.3-07u_armhf.deb
}
所以:使用SRC_URI变量让bitbake将.deb文件复制到工作目录。我建议您将文件压缩为bitbake尝试解压缩您提供给他的所有档案,而.deb只是另一个档案。所以将它打包到zip并让bitbake将你的.deb文件带到工作目录。将.deb.zip文件放在 / path /到/ your / recipe / files文件夹中。请记住:从不在yocto中使用绝对路径!
然后在do_install函数中调用dpkg将.deb文件安装到包的deploy dir中。如果安装成功(不要忘记解决冲突),此代码不完整,您将获得已安装但未在任何软件包中提供的文件和目录列表。您需要添加到食谱FILES_${PN}
变量:
FILES_${PN} += " \
/usr/bin/some_file \
/etc/some_config_file \
/and_so_on \
"
您需要添加的完整列表可以从错误消息中获取。
请记住:只有当您的目标体系结构与主机体系结构相同时,此方法才有效。关于你使用STAGING_BINDIR_NATIVE
变量的情况就是这样,关于你的包包含arm
,这不是。