为单个包设置环境变量
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
之外,还有一些其他技巧可以使用。
添加覆盖 EXTRA_ENV
的规则,但仅适用于您的包裹(但请注意,这 不适用于 legal-info ):
$(MYPKG_TARGET_SOURCE): EXTRA_ENV += GIT_NO_SSL_VERIFY=1
请注意,这必须在 $(eval $(generic-package))
调用之后进行,因此可以在 .mk
文件的末尾或在外部 Makefile 中进行。
代替EXTRA_ENV
,你也可以覆盖DL_WRAPPER
:
$(MYPKG_TARGET_SOURCE): DL_WRAPPER := GIT_NO_SSL_VERIFY=1 $(DL_WRAPPER)
修补 Buildroot 以将环境覆盖添加到下载。最简单的方法是用不同的方式定义 DL_WRAPPER
:
DL_WRAPPER = $($(PKG)_DL_ENV) support/download/dl-wrapper
(但是如果你想向上游发送这样的补丁,应该在每个单独的下载方法中完成。)
注意:我实际上还没有尝试过以上任何一种方法。
我当前的 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
之外,还有一些其他技巧可以使用。
添加覆盖
EXTRA_ENV
的规则,但仅适用于您的包裹(但请注意,这 不适用于 legal-info ):$(MYPKG_TARGET_SOURCE): EXTRA_ENV += GIT_NO_SSL_VERIFY=1
请注意,这必须在
$(eval $(generic-package))
调用之后进行,因此可以在.mk
文件的末尾或在外部 Makefile 中进行。代替
EXTRA_ENV
,你也可以覆盖DL_WRAPPER
:$(MYPKG_TARGET_SOURCE): DL_WRAPPER := GIT_NO_SSL_VERIFY=1 $(DL_WRAPPER)
修补 Buildroot 以将环境覆盖添加到下载。最简单的方法是用不同的方式定义
DL_WRAPPER
:DL_WRAPPER = $($(PKG)_DL_ENV) support/download/dl-wrapper
(但是如果你想向上游发送这样的补丁,应该在每个单独的下载方法中完成。)
注意:我实际上还没有尝试过以上任何一种方法。