安装deb软件包的BitBake配方

3

我想在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包的正确方法是什么?


如果我没记错的话,Debian软件包与Yocto .deb软件包不兼容。因此,您必须使用Yocto生成自己的软件包,然后像其他软件包一样使用“IMAGE_INSTALL”添加它。 - Nayfe
1个回答

3
安装预编译的 .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文件复制到工作目录。我建议您将文件压缩为.zip,因为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,所以情况并非如此。


1
有一个选项可以关闭解压缩。只需将 SRC_URI 添加 ;unpack=0 即可。比将依赖项压缩成 zip 文件让 bitbake 解压更简单。 - Jan Hudec
1
请问您能否更具体地说明为什么使用预构建的软件包是“糟糕的决定”? - OznOg
要构建到 ARM 平台,您可以使用 dpkg 选项“--force architecture”。 - esguti
有人能把这个脚本转换成当前的语法吗?bitbake 抱怨它使用了一些旧的覆盖语法。我卡住了... - BenHero
基本上,当存在专有软件包(例如,Pylon SDK)时,就需要这个东西。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接