【问题标题】:Setting environment variables for a single package为单个包设置环境变量
【发布时间】:2017-01-30 22:49:03
【问题描述】:

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

谢谢!

【问题讨论】:

  • 也许你可以定义你的包不下载任何东西 (<PKG>_SOURCE = ) 并在<PKG>_POST_DOWNLOAD_HOOKS 中编写你自己的下载命令,你可以在每个包中做任何你需要的事情。

标签: buildroot


【解决方案1】:

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

我意识到我的包不是用git 克隆的,而是用wget 作为tarball 下载的。将包的 $(PKG)_DL_OPTS 变量设置为 --no-check-certificate 可以解决所有问题。

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

【讨论】:

    【解决方案2】:

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

    1. 添加一个覆盖 EXTRA_ENV 的规则,但仅适用于您的包(但请注意,这不适用于法律信息):

      $(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
      

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

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

    【讨论】:

    • 谢谢!这比我的解决方法更好地解决了我最初的问题。你知道这些东西是否在任何地方都有记录吗?我在 Buildroot 手册中没有看到这种语法(用于范围界定的冒号?),但也许我是盲人。
    • 我实际上无法让这些工作。为了确保,我尝试使用 #2 并将 $(DL_WRAPPER) 替换为一些垃圾字符串,但它仍然使用标准的 git 行为,所以我假设我的更改没有做任何事情。 #1 和 #2 会位于 .mk 文件的顶部吗?所以如果第一行是FOO_UTILS_SITE=...,那么第二行会是$(FOO_TARGET_SOURCE):...吗?还是FOO_TARGET_SOURCE:...?似乎都不适合我
    • 对于#1 和#2,它必须在评估 $(generic-package) 之后完成,所以在 .mk 文件的末尾。我已经更新了答案以反映这一点。
    • #1 和 #2 的语法没有记录在 Buildroot 手册中,因为它不是 Buildroot 特定的。事实上,它并没有在 Buildroot 中的任何地方使用。它是 GNU 制造的。请参阅 GNU make 文档中的“目标特定变量值”。
    猜你喜欢
    • 2020-02-14
    • 2015-09-03
    • 2013-01-29
    • 2015-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    相关资源
    最近更新 更多