【问题标题】:yocto/bitbake build attempts to chown files to root and failsyocto/bitbake build 尝试将文件 chown 到 root 并失败
【发布时间】:2016-03-04 15:42:41
【问题描述】:

我正在尝试使用 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"

【问题讨论】:

  • 我在虚拟 CentOS 7 上构建 fido 时遇到了同样的问题。在原生 Arch 上构建 morty 不会遇到此错误。如果你问我在 Arch 上构建 fido 时会发生什么:由于一些 python 错误,它立即失败。

标签: linux yocto bitbake openembedded


【解决方案1】:

什么配方在哪一层?目标包的 do_install 在 pseudo(一个假根实用程序)下运行,因此它可以以非 root 用户身份更改为 root。

【讨论】:

  • 我不确定哪个食谱 - 它位于元文件夹下。不是特定的之一(meta-xilinx 等)。我想也许我没有安装伪?现在去检查一下。谢谢!
  • 这发生在:poky/meta/recipes-extended/tzdata/tzdata_2016a.bb。看起来 pseudo 包含在 yocto 中,我在 x86_64-linux/usr/bin 下看到了它的二进制文件。
  • 适用于其他所有人,我从未见过这种情况。您可以将您的问题邮寄到 yocto 支持邮件列表,您还可以在其中附加失败任务的日志文件(错误消息中将列出它的路径)
  • 我正在查看 poky/meta/conf/bitbake.conf 文件,并注意到它看起来好像伪已被禁用。 export PSEUDO_DISABLED = "1"
【解决方案2】:

您不应该将文件 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

最后尝试构建。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-27
    • 2020-01-13
    • 1970-01-01
    • 2017-07-26
    • 2020-09-30
    • 2021-11-03
    • 2019-11-29
    • 1970-01-01
    相关资源
    最近更新 更多