用于安装 deb 包的 bitbake 配方

bitbake recipe for installing deb package

我想在 yocto 映像中安装我自己的自定义 deb 包。为此,我使用以下 mydebpkg.bb 配方,使用 ROOTFS_POSTPROCESS_COMMAND

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 包的正确方法是什么。

安装预编译的 .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/to/your/recipe/files 文件夹中。请记住:永远不要 在 yocto 中使用绝对路径! 然后在 do_install 函数中调用 dpkg 将您的 .deb 文件安装到包的部署目录中。此代码并不完整,因为如果安装成功(不要忘记冲突解决),您将获得已安装但未随任何包提供的文件和目录的列表。您需要将 FILES_${PN} 变量添加到您的食谱中:

FILES_${PN} += " \
    /usr/bin/some_file \
    /etc/some_config_file \
    /and_so_on \
"

您可以从错误消息中获得您需要添加的完整列表。 请记住:只有当您的目标架构与您的主机架构相同时,此方法才有效。关于你使用了STAGING_BINDIR_NATIVE变量是这样的,关于你的包裹包含arm,这不是。