Примечание. Эти результаты основаны на экспериментах с 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 с той же файловой структурой
HTTP / HTTPS с плоской структурой
Просто переключите имя хоста
Заполнители в заменяющем 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 пробует их в порядке появления, и вы, как правило, хотите, чтобы ваши личные зеркала имели приоритет, поэтому добавьте к PREMIRRORS
, например:
PREMIRRORS_prepend = "http://original/location/.* http://alternate/location/\n"
Какой файл мне нужно отредактировать?
Вы можете добавлять записи в PREMIRRORS
в своих рецептах битового теста, но это не рекомендуется, так как основное использованиеPREMIRRORS
для людей, использующих ваш рецепт в другом контексте или в другом месте.
Вместо этого вы можете поместить его в файл local.conf
в существующий каталог сборки.Также можно отредактировать исходный шаблон, который использует скрипт Poky при создании нового local.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
+ 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
Вот несколько примеров отладочных выходных данных, показывающих URL PREMIRROR
пытается получить доступ к:
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
, но стандартного механизма для разделения этих значений не существует.