使用我的存储库修改配方后,我在重建后遇到了这个错误。如何解决这一问题?记录:
ERROR: phosphor-user-manager-1.0+gitAUTOINC+5a6e836a71-r1 do_package: QA Issue: phosphor-user-manager: Files/directories were installed but not shipped in any package:
/dbus-1
/usr/share
/usr/share/phosphor-certificate-manager
/usr/share/phosphor-certificate-manager/nslcd
/dbus-1/system.d
/dbus-1/system.d/phosphor-nslcd-cert-config.conf
/lib/systemd/system/multi-user.target.wants
/lib/systemd/system/multi-user.target.wants/phosphor-certificate-manager@nslcd.service
Please set FILES such that these items are packaged. Alternatively if they are unneeded, avoid installing them or delete them within do_install.
phosphor-user-manager: 8 installed and not shipped files. [installed-vs-shipped]
ERROR: phosphor-user-manager-1.0+gitAUTOINC+5a6e836a71-r1 do_package: Fatal QA errors found, failing task.
ERROR: Logfile of failure stored in: /home/openbmc/build/tmp/work/arm1176jzs-openbmc-linux-gnueabi/phosphor-user-manager/1.0+gitAUTOINC+5a6e836a71-r1/temp/log.do_package.224136
ERROR: Task (/home/openbmc/meta-phosphor/recipes-phosphor/users/phosphor-user-manager_git.bb:do_package) failed with exit code '1'
字符串
2条答案
按热度按时间dw1jzc5e1#
了解问题及其原因是很好的。
Yocto中的每个食谱都有自己的
${WORKDIR}
路径。在该路径下,Bitbake在开始执行配置、编译等后续任务之前,会将配方中的所有
SRC_URI
条目解包。等等。现在,在获得输出之后,您需要将其安装到最终的
rootfs
中。安装过程在
do_install
任务中使用${D}
变量完成。${D}
指向${WORKDIR}/image
。假设你的方法编译了一个
C
程序,它的输出是hello
二进制。现在,您可以将其安装到
/usr/bin
下的rootfs,如下所示:字符串
现在,执行
do_install
后,${D}${bindir}
将包含hello
之后,程序包进程
do_package
将获取${D}/usr/bin
中的内容,并将其添加到最终的配方程序包中,该程序包是${WORKDIR}
中的package
目录。这下子,问题就发生了。
封装程序只会取得与配方相关的
FILES
变数中的内容,请在这里取得有关FILES
的更多信息。如果它发现一些内容存在于
${D}
文件夹中,而不是在FILES_${PN}
中指定的,它将给予该错误。因此,要解决此问题,只需将
${D}
的所有内容添加到FILES_${PN}
变量中。此外,还可以指定软件包的类型(
dbg
、doc
、dev
、ptest
...)。man
文档和一个库文件,你可以这样组织它:型
对于
${bindir}
和其他相应路径变量,请检查this现在,我们的
image
文件夹(即${D}
)包含:您可以将它们全部指定为
FILES_${PN}
,如下所示:型
或者:
型
将
FILES
中的所有指定项目收集到package
文件夹后,将根据您的PACKAGE_CLASSES
变量(可以是package_rpm
、package_deb
、package_tar
或package_ipk
)启动一个包类型进程,更多信息请参见此处。最后,让我们了解如何收集最终图像。
image
配方执行do_rootfs
,这将创建系统的最终rootfs。它经历了所有的食谱,是在
IMAGE_INSTALL
,IMAGE_FEATURES
,。等等,并为每个文件输入${WORKDIR}
目录,收集所有创建的软件包,并将它们安装到最终的rootfs中。oipij1gg2#
如果您正在使用新版本的Yocto,这将有助于:
FILES:${PN} ="name"
的dirs不发货”;在旧版本中,它是FILES_${PN}
。所以你的答案应该是:
FILES:${PN}= "/dbus-1 /usr/share /lib/systemd/"
个