web-dev-qa-db-fra.com

Comment contourner "la sortie apt-key ne doit pas être analysée"?

J'automatise mon installation Docker. Quelque chose comme ça:

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

Cela fonctionnait bien dans les anciennes versions de apt-key, mais les versions récentes ont deux problèmes:

  1. Un format de sortie différent: je peux bidouiller ça
  2. Un avertissement:

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

De toute évidence, je peux aussi bidouiller cela, il suffit de rediriger stderr vers /dev/null. Cela m'a rendu curieux:

Comment ces gens me suggèrent-ils de vérifier mes empreintes digitales? Ou est-ce que je me trompe fondamentalement en voulant l'automatiser, est-ce que cela va à l'encontre de la question? (Je pense que non, puisque j'ai toujours levé manuellement les empreintes digitales attendues du site, mais n'hésitez pas à me dire le contraire ...)

11
Sander Verhagen

A partir d'apt-key sources, vous pouvez définir APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE sur une valeur non vide pour désactiver cet avertissement.

Vous pouvez aussi utiliser "grep -q", vous n'avez donc pas besoin de rediriger stdout dans /dev/null.

11
sebt3

Pour répondre à la partie "est-ce que je me trompe fondamentalement":

Je crois que peut-être oui. C'est la raison de l'avertissement.

Vous n'écrivez pas ce que vous faites exactement, mais une chose à réaliser est:

Les clés ont une date d'expiration. Par conséquent, après un certain temps, l'empreinte de votre script deviendra obsolète et il ne se comportera peut-être plus comme prévu.

Une fois le référentiel et sa clé installés, le système met automatiquement la clé à niveau, mais lorsque le référentiel est initialement ajouté, une clé à jour doit être fournie. Dans mes scripts automatisant l’installation, je ne vérifie pas si une clé a déjà été ajoutée, mais je vérifie également si le référentiel a déjà été ajouté. Si le référentiel n'a pas été ajouté, je l'ajoute donc avec une clé à jour que je télécharge toujours à partir de son URL.

1
David L.

Je modifie la commande elle-même pour utiliser le mode batch afin qu'elle ne se plaint pas de stdout. Pour la plus grande apt-key, cela fonctionnera, rapidement testé sur debian:

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

Tandis que pour la plus petite apt-key, cela pourrait fonctionner (non testé car je ne peux pas me rappeler exactement où j'ai vu cette variante plus simple):

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

Vous avez besoin de privilèges pour écrire dans le répertoire/usr/bin/apt-key; exécutez-le en tant que root ou utilisez Sudo.

0
muni764