2016-03-04 105 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支持郵件列表,您還可以爲失敗的任務附加日誌文件(錯誤消息中將列出其路徑) –