使用 https 设置远程 rpm 存储库时 Yocto 构建中断
Yocto build broken when setting a remote rpm repository with https
我已经生成了一个 Yocto 映像,可以在我所有的目标设备上使用。当该图像 运行 在目标设备上时,它必须能够通过 https 协议使用 rpm 远程存储库进行更新。
为了尝试这样做,我在我的自定义层中添加了一个 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" 替换为 "baseurl" 变量中的 "http" 时:
baseurl=http://storage.googleapis.com/my_repo/
然后 myimage
配方构建得很好。
主机可以使用 wget 从 https 存储库下载文件:
$ 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
你们中的一些人可以提供任何有用的建议来尝试解决这个问题吗?
提前感谢您的宝贵时间! :-)
我找到了解决问题的时间黑客:
$ 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" 存储库构建映像。
现在我正在以正确的方式解决这个问题。我会带着最终的解决方案回来。
我终于解决了我的问题,从我的自定义层中完全删除了我的 dnf bbappend 配方并将这个变量添加到我的 distro.conf 文件中:
PACKAGE_FEED_URIS = "https://storage.googleapis.com/my_repo/"
之后,在构建过程结束时,映像包含一个有效的 /etc/yum.d/oe-remote-repo 文件和管理它的所有必要内容。完全不需要手动复制"ca-certificates.crt"。
另外,在 完成映像构建后执行此命令很重要:
$ bitbake package-index
此命令在目标设备使用 dnf 客户端使用 repo 更新包后所需的包提要中生成一个 "repodata" 目录。
我已经生成了一个 Yocto 映像,可以在我所有的目标设备上使用。当该图像 运行 在目标设备上时,它必须能够通过 https 协议使用 rpm 远程存储库进行更新。
为了尝试这样做,我在我的自定义层中添加了一个 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" 替换为 "baseurl" 变量中的 "http" 时:
baseurl=http://storage.googleapis.com/my_repo/
然后 myimage
配方构建得很好。
主机可以使用 wget 从 https 存储库下载文件:
$ 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
你们中的一些人可以提供任何有用的建议来尝试解决这个问题吗?
提前感谢您的宝贵时间! :-)
我找到了解决问题的时间黑客:
$ 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" 存储库构建映像。
现在我正在以正确的方式解决这个问题。我会带着最终的解决方案回来。
我终于解决了我的问题,从我的自定义层中完全删除了我的 dnf bbappend 配方并将这个变量添加到我的 distro.conf 文件中:
PACKAGE_FEED_URIS = "https://storage.googleapis.com/my_repo/"
之后,在构建过程结束时,映像包含一个有效的 /etc/yum.d/oe-remote-repo 文件和管理它的所有必要内容。完全不需要手动复制"ca-certificates.crt"。
另外,在 完成映像构建后执行此命令很重要:
$ bitbake package-index
此命令在目标设备使用 dnf 客户端使用 repo 更新包后所需的包提要中生成一个 "repodata" 目录。