yocto/bitbake 构建尝试将文件 chown 到 root 并失败

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

我正在尝试使用 yocto 为 zedboard 构建图像。我的第一次构建在尝试将一堆文件切换到根目录时失败了。它作为元层之一的 do_install 命令的一部分失败。该命令执行了此 chown 行:

chown -R root:root ${D}

我以普通非 root 用户身份运行 bitbake。难道我不能以非root身份编译它吗?

为了测试,我创建了一个新文件并尝试 chown 到 root:root,但以完全相同的方式失败了。

我在这里缺少什么?

更新:看起来这与使用伪代码有关。我尝试在没有任何附加层(没有 xilinx、openembedded 等)的情况下构建 poky,但它仍然失败并出现相同的错误。我尝试了 jethro 和 fido 版本,但出现相同的错误。

更新2:显然伪在meta/conf/bitbake.conf 中被禁用。我不知道为什么或如何继续了解这一点:

# Use pseudo as the fakeroot implementation
PSEUDO_LOCALSTATEDIR ?= "${WORKDIR}/pseudo/"
PSEUDO_PASSWD ?= "${STAGING_DIR_TARGET}:${STAGING_DIR_NATIVE}"
export PSEUDO_DISABLED = "1"
#export PSEUDO_PREFIX = "${STAGING_DIR_NATIVE}${prefix_native}"
#export PSEUDO_BINDIR = "${STAGING_DIR_NATIVE}${bindir_native}"
#export PSEUDO_LIBDIR = "${STAGING_DIR_NATIVE}$PSEUDOBINDIR/../lib/pseudo/lib
FAKEROOTBASEENV = "PSEUDO_BINDIR=${STAGING_BINDIR_NATIVE} PSEUDO_LIBDIR=${STAGING_BINDIR_NATIVE}/../lib/pseudo/lib PSEUDO_PREFIX=${STAGING_BINDIR_NATIVE}/../../ PSEUDO_DISABLED=1"
FAKEROOTCMD = "${STAGING_BINDIR_NATIVE}/pseudo"
FAKEROOTENV = "PSEUDO_PREFIX=${STAGING_DIR_NATIVE}${prefix_native} PSEUDO_LOCALSTATEDIR=${PSEUDO_LOCALSTATEDIR} PSEUDO_PASSWD=${PSEUDO_PASSWD} PSEUDO_NOSYMLINKEXP=1 PSEUDO_DISABLED=0"
FAKEROOTNOENV = "PSEUDO_UNLOAD=1"
FAKEROOTDIRS = "${PSEUDO_LOCALSTATEDIR}"
PREFERRED_PROVIDER_virtual/fakeroot-native ?= "pseudo-native"
linux yocto bitbake openembedded
3个回答
1
投票

什么配方在哪一层? 目标包的 do_install 在伪(一个假 root 实用程序)下运行,因此它可以作为非 root 用户 chown 到 root。


0
投票

您不应该将文件chown到root,这很可能是您收到此类错误的原因。 为什么要这么做?

当我使用 bitbake 作为 root 或使用 sudo 编译时,这种情况多次发生在我身上。您不需要特权用户来构建。实际上你真正需要的是 sudo 组内的用户。

您可以尝试以下方法吗

  • 创建 yocto 构建用户
groupadd -g 1000 build && useradd -u 1000 -g 1000 -ms /bin/bash build && usermod -a -G sudo build && usermod -a -G root build && usermod -a -G staff build
useradd -u 1000 -g 1000 -ms /bin/bash 1001 && usermod -a -G sudo 1001 && usermod -a -G root 1001 && usermod -a -G staff 1001
  • 将所有文件切换到 sudo 组用户,例如 build。
  • 然后,授予读写权限
  • 删除构建文件夹中的 tmp 和缓存文件。
  • 来源 bitbake

最后尝试构建。


0
投票

对于所有来自谷歌搜索结果但我在这里找不到答案的人

如果您仍想以 root 身份构建它,请禁用文件中的健全性检查:

 meta/conf/sanity.conf 

像这样评论这一行:-

#INHERIT \+= "sanity"

src

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