为单个包设置环境变量

Setting environment variables for a single package

我当前的 Buildroot 配置包括一个包,其源代码托管在 GitLab 服务器上。不幸的是,该服务器的 SSL 证书存在错误;当 Buildroot 到达此包时,它会尝试克隆存储库,但 Git 会抛出有关 SSL 证书的错误并中止。

这是合理的行为,合理的回应是:

不幸的是,我还受到以下限制:

我认为 GIT_NO_SSL_VERIFY 环境变量是最简单的解决方案。如果我将它添加到 Buildroot 的 EXTRA_ENV 变量中,一切都会按预期进行。

不幸的是,这会为 Buildroot 克隆的 所有 Git 存储库禁用 SSL。由于只有一个 Git 存储库存在此问题,因此对通过 Buildroot 克隆的 所有 Git 存储库禁用 SSL 感觉是错误的。

如果我可以将 EXTRA_ENV 设置为添加 GIT_NO_SSL_VERIFY 就好了,但仅限于我遇到问题的包。我找不到任何关于 Buildroot 支持这个的建议,但文档很少所以我想我会在这里问。

谢谢!

原来Buildroot支持这个。对于给定的包,$(PKG)_DL_OPTS 变量用于将选项传递给包的下载工具。

我意识到我的包没有被 git 克隆,而是被 wget 下载为 tarball。将包的 $(PKG)_DL_OPTS 变量设置为 --no-check-certificate 修复了所有问题。

请注意,$(PKG)_DL_OPTS 变量仅在 Buildroot 的 2016.11 版本中添加。对于旧版本,您需要更复杂的解决方法。

除了设置 $(PKG)_DL_OPTS 之外,还有一些其他技巧可以使用。

  1. 添加覆盖 EXTRA_ENV 的规则,但仅适用于您的包裹(但请注意,这 不适用于 legal-info ):

    $(MYPKG_TARGET_SOURCE): EXTRA_ENV += GIT_NO_SSL_VERIFY=1
    

    请注意,这必须在 $(eval $(generic-package)) 调用之后进行,因此可以在 .mk 文件的末尾或在外部 Makefile 中进行。

  2. 代替EXTRA_ENV,你也可以覆盖DL_WRAPPER:

    $(MYPKG_TARGET_SOURCE): DL_WRAPPER := GIT_NO_SSL_VERIFY=1 $(DL_WRAPPER)
    
  3. 修补 Buildroot 以将环境覆盖添加到下载。最简单的方法是用不同的方式定义 DL_WRAPPER

    DL_WRAPPER = $($(PKG)_DL_ENV) support/download/dl-wrapper
    

    (但是如果你想向上游发送这样的补丁,应该在每个单独的下载方法中完成。)

注意:我实际上还没有尝试过以上任何一种方法。