用于安装 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
,这不是。
我想在 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
,这不是。