【问题标题】:Fetcher failure for URL: 'file://dropbear.default'. Unable to fetch URL from any sourceURL 的提取器失败:'file://dropbear.default'。无法从任何来源获取 URL
【发布时间】:2021-05-08 08:30:50
【问题描述】:

我正在尝试覆盖 dropbear.default

图层如下所示: meta/recipes-core/dropbear

    ├── dropbear
    │   ├── 0001-urandom-xauth-changes-to-options.h.patch
    │   ├── 0005-dropbear-enable-pam.patch
    │   ├── 0006-dropbear-configuration-file.patch
    │   ├── dropbear
    │   ├── dropbear.default
    │   ├── dropbear-disable-weak-ciphers.patch
    │   ├── dropbearkey.service
    │   ├── dropbear@.service
    │   ├── dropbear.socket
    │   └── init
    ├── dropbear_2020.81.bb
    ├── dropbear_%.bbappend
    ├── dropbear.inc
    └── files
        ├── 0007-patch1.patch
        └── 0008-patch2.patch
    └──$MACHINE folder name
        ├──dropbear.default   -------> this one I want to use to replace the old one from the /dropbear/dropbear.default above

我创建了一个 dropbear_%.bbappend

在那个 dropbear_%.bbappend 文件中我有

FILESEXTRAPATHS_prepend_myfolder := "${THISDIR}/${PN}:${THISDIR}/${MACHINE}:${THISDIR}/files:" -----> 这应该是

${THISDIR}/${MACHINE}:${THISDIR}/files:"

我还是遇到了同样的错误

【问题讨论】:

  • 请编辑您的提交以获得类似于tree 命令输出的内容,我们无法帮助您处理帖子的当前内容。此外,您的 dropbear_%.bbappend 文件在该层中的位置(将其包含在tree 的输出中)。我已经可以告诉你 _myfolder 应该从 FILESEXTRAPATHS_prepend 中删除。
  • 嘿,谢谢您的回复,我想我误导了上下文,文件夹的名称(我的文件夹)是 $MACHINE 的名称,如果我放任何随机补丁它会起作用,但如果我拿dropbear 文件夹中的任何服务文件都不起作用。我不知道是不是因为许可证校验和相关问题
  • 您的帖子无法阅读,请编辑。至少为每个文件/目录提供层根的相对路径。或者使用tree,或find,任何软件。谢谢。
  • 如果您现在看得更清楚,请告诉我
  • 这样好多了,谢谢。

标签: linux yocto openssh dropbear


【解决方案1】:

将 bbappend 与将要附加到的 bb 配方放在同一目录中是很不寻常的,但不管你的船是什么 :) 在这种情况下,这种不寻常的情况实际上是问题的一部分。

我不确定_myfolderFILESEXTRAPATHS_prepend_myfolder 中代表什么?如果myfolder 不是OVERRIDES 变量(或其他隐式值,例如class-targetvirtclass- 等)的一部分,那么它将不起作用。我很确定您实际上应该从FILESEXTRAPATHS_prepend 中删除它。参考文献https://docs.yoctoproject.org/ref-manual/variables.html#term-OVERRIDES

考虑到当前目录布局,你的 bbappend 中的FILESEXTRAPATHS_prepend 将扩展为:

./dropbear:./${MACHINE}:./files:

Yocto 将在SRC_URI 中搜索文件的路径将从最左到右进行搜索,c.f. https://docs.yoctoproject.org/ref-manual/variables.html#term-FILESPATH(虽然 IMO 我可以给你,但措辞不明确)。

所以从技术上讲,您是在告诉 Yocto 在 dropbear 目录中搜索 dropbear.default,然后是 ${MACHINE} 目录,然后是 files。这已经是原始配方所使用的,所以总而言之,您的 bbappend 对您想要覆盖的文件是无操作的。

要解决此问题,可以:

  • 将你的 bbappend 移动到另一个目录(可能还有层,因为我很确定你没有权利提交和推送到原始 dropbear 配方所在的层?然后dropbear.default 文件将从dropbear${MACHINE}files 目录与您的 bbappend 处于同一级别。(由于 FILESEXTRAPATHS(和 FILESPATH)中的路径是绝对的,它会找到您想要的文件),李>
  • 从您的FILESEXTRAPATHS_prepend 中删除${THISDIR}/${PN}(即./dropbear)或将其放在您放置要覆盖的文件的目录之后,
  • 将一个以机器命名的子目录 (${MACHINE}) 直接放在 ./dropbear 中,因为在 FILESPATH(因此,FILESEXTRAPATHS)中指定的目录会自动扩展为包含机器名称的 FILESOVERRIDES。基本上,假设 FILESPATH 设置为 dirA:dirBdirA/poky(如果 poky 是您的发行版)将首先被搜索,然后是 dirB/poky,然后是 dirA/machinedirB/machinedirA,最后是 @987654359 @。因此,通过在./dropbear 中有一个以您的机器命名的子目录,Yocto 将自动在./dropbear 之前搜索它。参考文献https://docs.yoctoproject.org/ref-manual/variables.html#term-FILESPATH

您可以通过从${WORKDIR}/temp 读取log.do_fetch 日志文件来检查搜索的目录和顺序,${WORKDIR} 可能会以类似tmp/work/<target_arch>/dropbear/2020.81-r0/ 的形式结束。

您可以通过运行bitbake dropbear -e 检查变量的值以及这些值是如何构建的历史记录。由于它可以输出数百万行,因此您通常将其通过管道传输到 lessmore,将其重定向到文件或通过管道传输到 grep -e "^VARTOCHECK="

【讨论】:

  • 这个太详细了,太敬业了,非常感谢你的回复,现在我会以正确的方式实现它,是的 FILESEXTRAPATHS_prepend_myfolder 是 bbappend 的一部分
  • 我的帖子中有一个类型应该是 ${THISDIR}/${MACHINE}:${THISDIR}/files:"
猜你喜欢
  • 1970-01-01
  • 2014-12-19
  • 2015-05-17
  • 2020-10-25
  • 2021-08-06
  • 2012-11-23
  • 2019-03-14
  • 2011-10-31
  • 2011-03-04
相关资源
最近更新 更多