代码之家  ›  专栏  ›  技术社区  ›  Darien Sam Palmer

在位烘焙配置中使用预镜像

  •  1
  • Darien Sam Palmer  · 技术社区  · 8 年前

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

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

    1 回复  |  直到 8 年前
        1
  •  3
  •   Darien Sam Palmer    8 年前

    注:这些结果基于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
    

    改变 预镜像 变量

    这个 预镜像 变量由一系列行组成(用 \n )每一个都有一个正则表达式来匹配一个uri,然后是一个替换字符串,两部分用空格分隔。

    bitbake按外观顺序尝试它们,通常您希望您的私有镜像优先,因此请准备 预镜像 ,EX:

    PREMIRRORS_prepend = "http://original/location/.* http://alternate/location/\n"
    

    我应该编辑什么文件?

    您可以将条目添加到 预镜像 在你的烤面包食谱里面,但是不推荐,因为 预镜像 是为了让人们在其他上下文或位置重用你的配方。

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

    其他问题

    那怎么办 SOURCE_MIRROR_URL ?

    这个 SOURCE_MIRROR_URL 是添加一系列 PREMIRROR 所有支持协议的条目。例如,此设置:

    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 + 源镜像URL 如果在 本地.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
    

    下面是一些调试输出示例,显示了 预镜像 它试图访问的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
    

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

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

    显然没有简单的方法 123 靠自己。同时 预镜像 允许您 比赛 对于正则表达式,它似乎不支持在替换uri中使用来自匹配项的捕获文本。

    端口号在里面 HOST 和 MIRRORNAME ,但是没有标准的机制来分割这些值。