Yocto do_unpack .ipk 包

问题描述 投票:0回答:2

我想在 Yocto 映像中安装一些预编译的 .ipk 包。安装必须在构建时进行(在 Yocto 映像生成期间而不是在运行时) 这些包将由 Yocto 构建从组件本身的源代码生成。 造成这种情况的原因是代码隔离政策。

从 Yocto 文档看来,这可以使用 bin_package 类来完成。

我在解压任务期间遇到一些问题。在这篇文章中,我使用 nano 包作为示例。

首先,我使用meta-openembedded中的配方从源代码编译了Nano。然后我将编译过程中生成的ipk文件移动到我称为prebuild的目录中。

然后我创建了一个名为 nano2.bb 的配方来测试 .ipk 的解压和安装:

SRC_URI = "file:///workdir/example2/poky/build/prebuild/nano_6.2-r0_core2-64.ipk;subpath=${BP}"

inherit bin_package

当我运行 $bitbake nano2 时,我收到以下 do_unpack 错误日志:

DEBUG: Executing python function do_unpack
DEBUG: Executing python function base_do_unpack
NOTE: Unpacking /workdir/example2/poky/build/prebuild/nano_6.2-r0_core2-64.ipk to /workdir/example2/poky/build/tmp/work/core2-64-poky-linux/nano2/1.0-r0/
tar (child): xz: Cannot exec: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
ERROR: Bitbake Fetcher Error: UnpackError('Unpack command PATH="/workdir/example2/poky/build/tmp/sysroots-uninative/x86_64-linux/usr/bin:/workdir/example2/poky/scripts:/workdir/example2/poky/build/tmp/work/core2-64-poky-linux/nano2/1.0-r0/recipe-sysroot-native/usr/bin/x86_64-poky-linux:/workdir/example2/poky/build/tmp/work/core2-64-poky-linux/nano2/1.0-r0/recipe-sysroot/usr/bin/crossscripts:/workdir/example2/poky/build/tmp/work/core2-64-poky-linux/nano2/1.0-r0/recipe-sysroot-native/usr/sbin:/workdir/example2/poky/build/tmp/work/core2-64-poky-linux/nano2/1.0-r0/recipe-sysroot-native/usr/bin:/workdir/example2/poky/build/tmp/work/core2-64-poky-linux/nano2/1.0-r0/recipe-sysroot-native/sbin:/workdir/example2/poky/build/tmp/work/core2-64-poky-linux/nano2/1.0-r0/recipe-sysroot-native/bin:/workdir/example2/poky/bitbake/bin:/workdir/example2/poky/build/tmp/hosttools" ar x /workdir/example2/poky/build/prebuild/nano_6.2-r0_core2-64.ipk data.tar.xz && tar --extract --no-same-owner -p -f data.tar.xz && rm data.tar.xz failed with return value 2', 'file:///workdir/example2/poky/build/prebuild/nano_6.2-r0_core2-64.ipk;subpath=nano2-1.0')
DEBUG: Python function base_do_unpack finished
DEBUG: Python function do_unpack finished

文件 nano_6.2-r0_core2-64.ipk 存在: ls /workdir/example2/poky/build/prebuild/nano_6.2-r0_core2-64.ipk -la -rw-r--r-- 1 pokyuser pokyuser 172444 11 月 8 日 13:24 /workdir/example2/poky/build/prebuild/nano_6.2-r0_core2-64.ipk

在文件夹 /workdir/example2/poky/build/tmp/work/core2-64-poky-linux/nano2/1.0-r0/ 内 ls /workdir/example2/poky/build/tmp/work/core2-64-poky-linux/nano2/1.0-r0/ -la 总计 184 drwxr-xr-x 4 pokyuser pokyuser 4096 十一月 8 14:03 。 drwxr-xr-x 3 pokyuser pokyuser 4096 十一月 8 13:59 .. -rw-r--r-- 1 pokyuser pokyuser 171808 11 月 8 日 14:03 data.tar.xz drwxr-xr-x 2 pokyuser pokyuser 4096 十一月 8 14:03 nano2-1.0 drwxr-xr-x 2 pokyuser pokyuser 4096 11 月 8 日 14:03 临时

此外,如果我在 shell 中手动运行命令 do_unpack 正在运行,它不会给我任何错误! ar x /workdir/example2/poky/build/prebuild/nano_6.2-r0_core2-64.ipk data.tar.xz && tar --extract --no-same-owner -p -f data.tar.xz && rm数据.tar.xz

我错过了什么吗? 关于如何调试根本原因有什么想法吗?

compilation yocto bitbake unpack
2个回答
1
投票

此问题的根本原因是默认情况下“xz”实用程序未在 HOSTTOOLS 中列入白名单。 xz 用于提取.ipk 内容。

在 local.conf 中添加以下行即可解决问题

# For Yocto 4 Kirkstone
HOSTTOOL:append = " xz"

Yocto IRC 人员非常乐于助人!


0
投票

只是一个小修正,应该是

HOSTTOOLS:追加=“xz”

https://docs.yoctoproject.org/ref-manual/variables.html?highlight=hosttools#term-HOSTTOOLS

© www.soinside.com 2019 - 2024. All rights reserved.