web-dev-qa-db-ja.com

「apt-key出力を解析しないでください」を回避する方法は?

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の古いバージョンでは問題なく機能しましたが、最近のバージョンには2つの問題があります。

  1. 別の出力形式:それをハックできます
  2. 警告:

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

明らかに、stderr/dev/nullにリダイレクトするだけで、これを回避することもできます。興味をそそられました。

これらの優れた人々はどのようにキー指紋を検証することを提案するのですか?または、それを自動化することによってこれが根本的に間違っているのですか、それはポイントを打ち負かしますか? (私はまだウェブサイトから期待される指紋を手動で持ち上げたので、そうではないと思いますが、そうでなければお気軽に教えてください...)

11
Sander Verhagen

Apt-keyソースから、APT_KEY_DONT_WARN_ON_DANGEROUS_USAGEを空でない値に設定して、この警告を無効にすることができます。

「grep -q」を使用して、/dev/nullのstdoutをリダイレクトする必要もありません。

11
sebt3

「これは根本的に間違っている」という部分に返信するには:

おそらくそうだと思います。それが警告の理由です。

あなたは正確に何をするかを書きませんが、気付くべきことの一つは:

キーにはある程度の有効期限があるため、しばらくするとスクリプト内の指紋が古くなり、期待どおりに動作しなくなる可能性があります。

リポジトリとそのキーがインストールされると、システムは何らかの形でキーを自動的にアップグレードしますが、リポジトリが最初に追加されると、最新のキーを提供する必要があります。インストールを自動化するスクリプトでは、キーが既に追加されているかどうかはテストしませんが、リポジトリが既に追加されているかどうかはテストします。リポジトリが追加されていない場合は、そのURLから常にダウンロードする最新のキーとともにリポジトリを追加します。

1
David L.

バッチモードを使用するようにコマンド自体を変更して、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を使用します

0
muni764