我正在尝试使用 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"
什么配方在哪一层? 目标包的 do_install 在伪(一个假 root 实用程序)下运行,因此它可以作为非 root 用户 chown 到 root。
您不应该将文件chown到root,这很可能是您收到此类错误的原因。 为什么要这么做?
当我使用 bitbake 作为 root 或使用 sudo 编译时,这种情况多次发生在我身上。您不需要特权用户来构建。实际上你真正需要的是 sudo 组内的用户。
您可以尝试以下方法吗
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
最后尝试构建。
对于所有来自谷歌搜索结果但我在这里找不到答案的人
如果您仍想以 root 身份构建它,请禁用文件中的健全性检查:
meta/conf/sanity.conf
像这样评论这一行:-
#INHERIT \+= "sanity"