【问题标题】:How to circumvent "apt-key output should not be parsed"?如何规避“不应解析 apt-key 输出”?
【发布时间】:2018-06-18 03:45:35
【问题描述】:

我正在自动化我的 Docker 安装。像这样的:

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

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

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

    Warning: apt-key output should not be parsed (stdout is not a terminal)
    

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

这些优秀的人建议我如何验证我的密钥指纹? 或者我想自动化它而从根本上搞错了,这是否违背了重点? (我认为不会,因为我仍然手动从网站上提取了预期的指纹,但请随时告诉我......)

【问题讨论】:

  • 所以我想每个人都忽略了这个警告。似乎不太理想。您的基本问题仍未得到解答。

标签: gnupg apt


【解决方案1】:

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

您也可以使用“grep -q”,这样您也不需要在/dev/null 中重定向标准输出。

【讨论】:

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

回复“我是不是完全搞错了”部分:

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

你不会写出你所做的事情,但要意识到的一件事是:

密钥确实有一些过期时间,所以一段时间后脚本中的指纹会过时,并且可能不再按预期运行。

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

【讨论】:

    【解决方案3】:

    我正在修改命令本身以使用批处理模式,因此它不会抱怨标准输出。对于更大的 apt-key,这将起作用,在 debian 上快速测试:

    sed -i "s%{GPG_EXE}\")' --%{GPG_EXE}\")' --batch --%g" /usr/bin/apt-key
    

    虽然对于较小的 apt-key 这可以工作(未经测试,因为我不记得我在哪里看到过这个更简单的变体):

    sed -i 's%GPG_CMD="gpg %GPG_CMD="gpg --batch %g' /usr/bin/apt-key
    

    您需要写入 /usr/bin/apt-key 的权限,因此以 root 身份运行或使用 sudo

    【讨论】:

      【解决方案4】:

      这行得通

      apt-key exportall > test.key 2>/dev/null
      

      或

      apt-key exportall 2>&1 | grep -v '^Warning' > test.key
      

      【讨论】:

        【解决方案5】:

        或者你也可以这样做

        RUN curl -sS http://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - &&\
            echo "deb http://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
        

        而不是

        RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
        RUN echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2010-12-14
          • 1970-01-01
          • 1970-01-01
          • 2014-12-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多