为单个包设置环境变量

时间:2017-01-30 22:49:03

标签: buildroot

我当前的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支持这个的任何建议,但文档很少,所以我想我会在这里问。

谢谢!

2 个答案:

答案 0 :(得分:2)

事实证明,Buildroot支持这一点。对于给定的包,$(PKG)_DL_OPTS变量用于将选项传递给包的下载工具。

我意识到我的软件包没有使用git进行克隆,而是使用wget作为tarball下载。将包的$(PKG)_DL_OPTS变量设置为--no-check-certificate修复了所有内容。

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

答案 1 :(得分:1)

除了设置$(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
    

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

  4. 注意:我还没有真正尝试过上述任何一种。