gpt4 book ai didi

yocto - 在 Bitbake 配置中使用 PREMIRRORS

转载 作者:行者123 更新时间:2023-12-04 23:12:39 59 4
gpt4 key购买 nike

如何使用 PREMIRRORS在 Bitbake 本地配置或食谱中?

我想为一些速度慢或无法访问的第三方 URL 提供我自己的下载位置,但是 official PREMIRRORS documentation含糊不清,缺乏例子。

最佳答案

注意:这些结果基于对 Yocto 2.3 的实验,但也可能适用于 2.5。

一个简单的例子

假设您的配方文件包含此目标 URL:

SRC_URI = "http://download.example.com:8080/foo/bar/baz-1.0.tar.gz"

然后在你的 local.conf ,您可以将自定义下载位置定义为:
PREMIRRORS_prepend = "http://download\.example\.com:8080/.* http://my-mirror.example.com/copies/\n"

在这种默认情况下(没有特殊的占位符)Bitbake 不包括额外的 /foo/bar路径元素,而是尝试仅从 http://my-mirror.example.com/copies/baz-1.0.tar.gz 下载文件名

高级示例

这些示例使用特殊的预定义占位符,将在下一节中详细介绍。

具有相同文件结构的 HTTP/HTTPS
  • 配方:SRC_URI = "https://example.com:1234/foo/bar.zip"
  • 设置:PREMIRRORS_prepend = "http(s)?://example\.com(:\d+)?/.* http://mirror.local/PATH\n"
  • 尝试:http://mirror.local/foo/bar.zip

  • 扁平结构的 HTTP/HTTPS
  • 配方:SRC_URI = "https://example.com:1234/foo/bar.zip"
  • 设置:PREMIRRORS_prepend = "http(s)?://example\.com(:\d+)?/.* http://mirror.local/MIRRORNAME\n"
  • 尝试:http://mirror.local/example.com.1234.foo.bar.zip

  • 只需切换主机名
  • 配方:SRC_URI = "ftp://example.com:1234/foo/bar.zip"
  • 设置:PREMIRRORS_prepend = "(\w+)://example\.com(:\d+)?/.* TYPE://mirror.local/PATH\n"
  • 尝试:ftp://mirrors.local/foo/bar.zip

  • 替换 URI 中的占位符
    PREMIRRORS解析所有匹配的 URI,并在目标 URI 中提供五个特殊的占位符值。假设匹配的 URI 是 http://host.example.com:1234/foo/bar/baz.txt :
    TYPE          https
    HOST host.example.com%3A1234
    PATH foo/bar/baz.txt
    BASENAME baz.txt
    MIRRORNAME host.example.com.1234.foo.bar.baz.txt

    更改 PREMIRRORS多变的
    PREMIRRORS变量由一系列行(由 \n 分隔)组成,每行都有一个正则表达式来匹配一个 URI,然后是一个替换字符串,两部分由空格分隔。

    Bitbake 按出现顺序尝试它们,并且您通常希望您的私有(private)镜像优先,因此在 PREMIRRORS 前面添加, 前任:
    PREMIRRORS_prepend = "http://original/location/.* http://alternate/location/\n"

    我应该编辑什么文件?

    您可以将条目添加到 PREMIRRORS在您的 bitbake 食谱中,但不建议这样做,因为 PREMIRRORS 的主要用途适用于在其他环境或位置重复使用您的食谱的人。

    相反,你可以把它放在你的 local.conf 现有构建目录中的文件。或者,编辑 Poky 脚本在创建新的 local.conf 时使用的源模板。在一个新的构建目录中。

    其他问题
    SOURCE_MIRROR_URL 呢? ?

    SOURCE_MIRROR_URL 是添加一系列 PREMIRROR的快速方法所有支持的协议(protocol)的条目。例如,此设置:
    INHERIT += "own-mirrors"    
    SOURCE_MIRROR_URL = "TYPE://mirror.local/PATH"

    和写法一样:
    PREMIRRORS_prepend = "\
    cvs://.*/.* TYPE://mirror.local/PATH \
    svn://.*/.* TYPE://mirror.local/PATH \
    git://.*/.* TYPE://mirror.local/PATH \
    gitsm://.*/.* TYPE://mirror.local/PATH \
    hg://.*/.* TYPE://mirror.local/PATH \
    bzr://.*/.* TYPE://mirror.local/PATH \
    p4://.*/.* TYPE://mirror.local/PATH \
    osc://.*/.* TYPE://mirror.local/PATH \
    https?$://.*/.* TYPE://mirror.local/PATH \
    ftp://.*/.* TYPE://mirror.local/PATH \
    npm://.*/?.* TYPE://mirror.local/PATH \
    "

    似乎 INHERIT + SOURCE_MIRROR_URL如果在您的 local.conf 中使用,指令仍然有效。 (与特定配方相反。)但是,Bitbake 会发出警告,因此它可能不是预期的用例。前任:
    WARNING: Invalid protocol in PREMIRRORS: ('cvs://.*/.*', 'TYPE://mirror.local/PATH')

    如何检查和调试我的设置?
    -D调试标志将导致 bitbake发出有关它尝试从哪些 URL 下载的信息。您也可以使用 -C do_fetch ,这将迫使它尝试获取步骤并重新下载给定配方所需的任何内容。
    bitbake -D -C do_fetch software-recipe-name-here

    这是一些示例调试输出,显示 PREMIRROR它尝试访问的 URL:
    DEBUG: some-software-1.0 do_fetch: Trying PREMIRRORS
    DEBUG: some-software-1.0 do_fetch: Fetcher accessed the network with the command /usr/bin/env wget -t 2 -T 30 -nv --passive-ftp --no-check-certificate -P /home/user/build_foo/DL_DIR 'http://mirror.local/path/to/the/filename.ext

    如果您需要试验和运行 bitbake很多时候,暂时把你的新 PREMIRRORS_prepend指令到特定的测试配方中,而不是修改 local.conf .这是因为当您更改 Bitbake 时,不需要重新解析所有其他配方。

    如果我想隔离一个端口号怎么办,例如 http://host:123/foo ?

    显然没有简单的方法来获得 123在其自己的。而 PREMIRRORS允许您使用正则表达式进行匹配,它似乎不支持在替换 URI 中使用匹配中捕获的文本。

    端口号存在于 HOST 中和 MIRRORNAME ,但是没有标准的机制可以将这些值分开。

    关于yocto - 在 Bitbake 配置中使用 PREMIRRORS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52940431/

    59 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com