如何规避"apt-key输出不应该被解析"?

San*_*gen 23 apt gnupg

我正在自动化我的Docker安装.像这样的东西:

if apt-key fingerprint 0EBFCD88 | grep "Key fingerprint = 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88" > /dev/null
then
  # proceed
fi
Run Code Online (Sandbox Code Playgroud)

这在旧版本中运行良好apt-key,但最近的版本有两个问题:

  1. 一种不同的输出格式:我可以解决这个问题
  2. 一个警告:

    Warning: apt-key output should not be parsed (stdout is not a terminal)
    
    Run Code Online (Sandbox Code Playgroud)

显然,我也可以解决这个问题,只需重定向stderr即可/dev/null.这让我很好奇:

这些好人如何建议我验证我的关键指纹?或者我想通过自动化来解决这个根本错误,这是否会破坏这一点?(我想不是,因为我仍然手动从网站上取消了预期的指纹,但随时可以告诉我......)

小智 22

从apt-key源,您可以设置APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE为非空值以禁用此警告.

您也可以使用"grep -q",因此您无需重定向stdout /dev/null.

  • 这似乎没有回答这个问题.除了解析标准输出之外,使用apt-key的正确方法是什么,以便此警告不会显示开始? (17认同)
  • @TomDrake,通常您不想使用“ENV”,因为这将设置一个永久环境变量,该变量也会出现在运行时容器中。您可以使用“ARG APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1”(仅在映像构建时间),也可以设置内联变量“RUN APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key ...” (8认同)
  • 如何使用`grep -q`?你能提供完整的指令吗? (4认同)
  • 重定向在Dockerfile中不起作用.我不得不添加ENV APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE = DontWarn RUN apt-key add -distribution = $ {DISTRIBUTION} /tmp/nvidia.key (3认同)

Dav*_* L. 7

回复“我是否从根本上理解错误”部分:

我相信可能是的。这就是警告的原因。

您没有准确地写下您所做的事情,但需要意识到的一件事是:

密钥确实有一定的过期时间,因此一段时间后脚本中的指纹将变得过时,并且可能不再按预期运行。

安装存储库及其密钥后,系统会以某种方式自动升级密钥,但在最初添加存储库时,必须提供最新的密钥。在我的自动化安装脚本中,我不测试是否已添加密钥,但测试是否已添加存储库。如果未添加存储库,那么我会将其与始终从其 URL 下载的最新密钥一起添加。