注:这些结果基于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
,但是没有标准的机制来分割这些值。