Использование PREMIRRORS в конфигурации Bitbake - PullRequest
0 голосов
/ 23 октября 2018

Как использовать PREMIRRORS в локальных конфигурациях или рецептах Bitbake?

Я хочу указать собственные места загрузки для некоторых медленных или недоступных сторонних URL-адресов, но официальная PREMIRRORS документация расплывчата и не содержит примеров.

1 Ответ

0 голосов
/ 23 октября 2018

Примечание. Эти результаты основаны на экспериментах с 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, но стандартного механизма для разделения этих значений не существует.

...