如何规避"apt-key output should not be parsed"?
How to circumvent "apt-key output should not be parsed"?
我正在自动化我的 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
的旧版本中运行良好,但最新版本有两个问题:
- 一种不同的输出格式:我可以绕过它
警告:
Warning: apt-key output should not be parsed (stdout is not a terminal)
显然,我也可以解决这个问题,只需将 stderr
重定向到 /dev/null
。这让我很好奇:
这些优秀的人如何建议我验证我的密钥指纹?或者我想自动化它是不是从根本上错了,这是否违背了重点? (我认为不是,因为我仍然手动从网站上提取预期的指纹,但请随时告诉我其他情况...)
从 apt-key 来源,您可以将 APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE
设置为 non-empty 值以禁用此警告。
您也可以使用 "grep -q",因此您也不需要在 /dev/null
中重定向标准输出。
回复"am I getting this fundamentally wrong"部分:
我相信可能是的。这就是警告的原因。
你不会写下你所做的事情,但要意识到的一件事是:
密钥确实有一些过期时间,因此一段时间后脚本中的指纹将过时并且可能不再按预期运行。
安装存储库及其密钥后,系统会以某种方式自动升级密钥,但是在最初添加存储库时,必须提供最新的密钥。在我的自动安装脚本中,我不测试是否已添加密钥,但我测试是否已添加存储库。如果未添加存储库,那么我将其与我始终从其 URL.
下载的最新密钥一起添加
我正在修改命令本身以使用批处理模式,这样它就不会抱怨 stdout。对于更大的 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
这个有效
apt-key exportall > test.key 2>/dev/null
或
apt-key exportall 2>&1 | grep -v '^Warning' > test.key
或者你也可以这样做
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
我正在自动化我的 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
的旧版本中运行良好,但最新版本有两个问题:
- 一种不同的输出格式:我可以绕过它
警告:
Warning: apt-key output should not be parsed (stdout is not a terminal)
显然,我也可以解决这个问题,只需将 stderr
重定向到 /dev/null
。这让我很好奇:
这些优秀的人如何建议我验证我的密钥指纹?或者我想自动化它是不是从根本上错了,这是否违背了重点? (我认为不是,因为我仍然手动从网站上提取预期的指纹,但请随时告诉我其他情况...)
从 apt-key 来源,您可以将 APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE
设置为 non-empty 值以禁用此警告。
您也可以使用 "grep -q",因此您也不需要在 /dev/null
中重定向标准输出。
回复"am I getting this fundamentally wrong"部分:
我相信可能是的。这就是警告的原因。
你不会写下你所做的事情,但要意识到的一件事是:
密钥确实有一些过期时间,因此一段时间后脚本中的指纹将过时并且可能不再按预期运行。
安装存储库及其密钥后,系统会以某种方式自动升级密钥,但是在最初添加存储库时,必须提供最新的密钥。在我的自动安装脚本中,我不测试是否已添加密钥,但我测试是否已添加存储库。如果未添加存储库,那么我将其与我始终从其 URL.
下载的最新密钥一起添加我正在修改命令本身以使用批处理模式,这样它就不会抱怨 stdout。对于更大的 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
这个有效
apt-key exportall > test.key 2>/dev/null
或
apt-key exportall 2>&1 | grep -v '^Warning' > test.key
或者你也可以这样做
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