Сборка Yocto не работает при установке удаленного хранилища rpm с помощью https - PullRequest
0 голосов
/ 08 мая 2018

Я сгенерировал изображение Yocto для использования на всех моих целевых устройствах. Когда этот образ работает на целевых устройствах, его необходимо обновить с помощью удаленного хранилища rpm по протоколу https.

Чтобы попытаться это сделать, я добавил dnf bbappend в свой пользовательский слой:

$ cat recipes-devtools/dnf/dnf_%.bbappend
FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
SRC_URI += " \
    file://yocto-adv-rpm.repo \
"
do_install_append () {
    install -d ${D}/etc/yum.repos.d
    install -m 0600 ${WORKDIR}/yocto-adv-rpm.repo ${D}/etc/yum.repos.d/yocto-adv-rpm.repo
}
FILES_${PN} += "/etc/yum.repos.d"

Это содержимое файла конфигурации репозитория, включенного в рецепт dnf bbappend:

$ cat recipes-devtools/dnf/files/yocto-adv-rpm.repo
[yocto-adv-rpm]
name=Rocko Yocto Repo
baseurl=https://storage.googleapis.com/my_repo/
gpgkey=https://storage.googleapis.com/my_repo/PACKAGEFEED-GPG-KEY-rocko
enabled=1
gpgcheck=1

Эта конфигурация репозитория нарушает процесс сборки образа. Когда я пытаюсь построить myimage рецепт, я всегда получаю эту ошибку:

ERROR: myimage-1.0-r0 do_rootfs: [log_check] myimage: found 1 error message in the logfile:
[log_check] Failed to synchronize cache for repo 'yocto-adv-rpm', disabling.
ERROR: myimage-1.0-r0 do_rootfs: Function failed: do_rootfs
ERROR: Logfile of failure stored in: /home/yocto/yocto/build/tmp/work/machine-poky-linux/myimage/1.0-r0/temp/log.do_rootfs.731
ERROR: Task (/home/yocto/yocto/sources/meta-mylayer/recipes-images/myimage.bb:do_rootfs) failed with exit code '1'

Однако, когда я заменяю «https» на «http» в переменной «baseurl»:

baseurl=http://storage.googleapis.com/my_repo/

Тогда рецепт myimage строится нормально.

Хост-машина может загружать файлы из хранилища https с помощью wget:

$ wget https://storage.googleapis.com/my_repo/PACKAGEFEED-GPG-KEY-rocko

Предыдущие команды работают нормально, поэтому проблема не связана с хост-машиной, я думаю, что это должно быть связано с сертификатами Google и yocto.

Я нашел соответствующую информацию в этом файле:

yocto/build/tmp/work/machine-poky-linux/myimage/1.0-r0/temp/dnf.librepo.log

Соответствующая часть:

15:56:41 lr_download: Downloading started
15:56:41 check_transfer_statuses: Transfer finished: repodata/repomd.xml (Effective url: https://storage.googleapis.com/my_repo/repodata/repomd.xml)
15:56:41 check_finished_transfer_status: Fatal error - Curl code (77): Problem with the SSL CA cert (path? access rights?) for https://storage.googleapis.com/my_repo/repodata/repomd.xml [error setting certificate verify locations:
  CAfile: /home/yocto/yocto/build/tmp/work/x86_64-linux/curl-native/7.54.1-r0/recipe-sysroot-native/etc/ssl/certs/ca-certificates.crt
  CApath: none]
15:56:41 lr_yum_download_repomd: repomd.xml download was unsuccessful

Кто-нибудь из вас может дать полезный совет, чтобы попытаться это исправить?

Заранее спасибо за ваше время! : -)

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Я наконец исправил свою проблему, полностью удалив мой рецепт dnf bbappend из моего пользовательского слоя и добавив эту переменную в мой файл distro.conf:

PACKAGE_FEED_URIS = "https://storage.googleapis.com/my_repo/"

После этого в конце процесса сборки образ содержит действительный файл /etc/yum.d/oe-remote-repo и все необходимое для его управления. Нет необходимости копировать "ca-сертификаты.crt" вручную.

Кроме того, важно выполнить эту команду после завершения сборки образа:

$ bitbake package-index

Эта команда создает каталог «repodata» в фиде пакетов, который требуется целевому устройству, когда оно использует репо для обновления пакетов с использованием клиента dnf.

0 голосов
/ 08 мая 2018

Я нашел временный взлом, чтобы исправить мою проблему:

$ cp /etc/ssl/certs/ca-certificates.crt /home/yocto/yocto/build/tmp/work/x86_64-linux/curl-native/7.54.1-r0/recipe-sysroot-native/etc/ssl/certs/

После этого я наконец смог построить образ, используя репозиторий «https».

Сейчас я нахожусь в процессе исправления этой проблемы правильным способом.Я вернусь с окончательным решением.

...