2016-03-04 67 views
1

我正在尝试使用yocto为zedboard构建图像。当它试图将一堆文件转换为root时,我的第一个编译失败。它作为其中一个元层的do_install命令的一部分失败。这条命令执行了这条chown行:yocto/bitbake构建尝试将文件chown到root并失败

chown -R root:root ${D} 

我将bitbake作为普通的非root用户运行。我不应该能够将其编译为非root?

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

我在这里错过了什么?

更新:看起来像这与使用伪相关。我试图建立poky没有任何额外的层(没有xilinx,openembedded等),它仍然失败,同样的错误。我尝试了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" 
+0

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

回答

1

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

+0

我不确定哪个配方 - 它是在meta文件夹下。没有一个具体的(meta-xilinx等)。我想也许我没有伪装?现在去检查一下。谢谢! –

+0

这发生在:poky/meta/recipes-extended/tzdata/tzdata_2016a.bb。看起来伪作为yocto的一部分,我在x86_64-linux/usr/bin下看到了它的二进制文件。 –

+0

适用于其他人,我从来没有见过这个。您可以将您的问题邮寄到yocto支持邮件列表,您还可以为失败的任务附加日志文件(错误消息中将列出其路径) –