Impossibile importare una chiave GPG durante l'installazione degli aggiornamenti
La presente guida tratta una tematica particolare, dovuta all’impossibilità di importare una chiave GPG. Questa procedura non va utilizzata se si riscontra semplicemente un problema di una chiave GPG inesistente o non riconosciuta.
Premessa
Durante il tentativo di aggiornare una vecchia installazione di Arch Linux mi si è presentato un problema legato ad una vecchia chiave GPG:
[root@vboxarch ~]# pacman -Su
:: Starting full system upgrade...
resolving dependencies...
warning: dependency cycle detected:
warning: harfbuzz will be installed before its freetype2 dependency
warning: dependency cycle detected:
warning: libglvnd will be installed before its mesa dependency
looking for inter-conflicts...
Packages (235): acl-2.2.52-4 argon2-20171227-3 attr-2.4.47-3 autoconf-2.69-4
automake-1.15.1-1 bash-4.4.019-1 binutils-2.29.1-3 bison-3.0.4-3 bzip2-1.0.6-7
ca-certificates-20170307-1 ca-certificates-cacert-20140824-4
ca-certificates-mozilla-3.36-1 ca-certificates-utils-20170307-1 coreutils-8.29-1
cracklib-2.9.6-1 cryptsetup-2.0.2-1 curl-7.59.0-2
...
Total Installed Size: 1311.00 MiB
Net Upgrade Size: 613.98 MiB
:: Proceed with installation? [Y/n]
(221/221) checking keys in keyring [################################] 100%
downloading required keys...
:: Import PGP key 256/, "Gaetan Bisson <bisson@gaati.org>", created: 1998-03-24? [Y/n] Y
error: key "Gaetan Bisson <bisson@gaati.org>" could not be imported
error: required key missing from keyring
error: failed to commit transaction (unexpected error)
Errors occurred, no packages were upgraded.
Le ultime 5 righe riportano un errore durante l’importazione di una chiave GPG di uno degli sviluppatori di Arch Linux: Gaetan Bisson.
Tentativi di aggirare il problema
Ho immediatamente pensato a reinstallare il portachiavi con tutte le chiavi degli sviluppatori e manutentori di Arch Linux:
[root@vboxarch ~]# pacman -S archlinux-keyring
resolving dependencies...
looking for inter-conflicts...
Packages (1): archlinux-keyring-20180404-1
Total Installed Size: 0.90 MiB
Net Upgrade Size: 0.00 MiB
:: Proceed with installation? [Y/n]
(1/1) checking keys in keyring [################################] 100%
(1/1) checking package integrity [################################] 100%
(1/1) loading package files [################################] 100%
(1/1) checking for file conflicts [################################] 100%
(1/1) checking available disk space [################################] 100%
(1/1) reinstalling archlinux-keyring [################################] 100%
==> Appending keys from archlinux.gpg...
gpg: key EE2EEEEE: no valid user IDs
gpg: key B9B7018A: no valid user IDs
==> Locally signing trusted keys in keyring...
-> Locally signing key DDB867B92AA789C165EEFA799B729B06A680C281...
-> Locally signing key 0E8B644079F599DFC1DDC3973348882F6AC6A4C2...
...
==> Importing owner trust values...
==> Disabling revoked keys in keyring...
-> Disabling key F5A361A3A13554B85E57DDDAAF7EF7873CFD4BB6...
...
==> Updating trust database...
gpg: next trustdb check due at 2018-06-25
Al termine dell’aggiornamento delle chiavi, l’errore stava ancora lì.
Provo ad aggiungere manualmente la chiave mancante, cercandola sul sito ufficiale delle chiavi principali di Arch Linux.
[root@vboxarch ~]# pacman-key --recv-key 1A60DC44245D06FEF90623D6EEEEE2EEEE2EEEEE
gpg: requesting key EE2EEEEE from hkp server pool.sks-keyservers.net
gpg: key EE2EEEEE: no valid user IDs
gpg: this may be caused by a missing self-signature
gpg: Total number processed: 1
gpg: w/o user IDs: 1
==> ERROR: Remote key not fetched correctly from keyserver.
Tuttavia l’errore non va via.
Mi convinco che si sarà danneggiato il database delle chiavi (/etc/pacman.d/gnupg), provo ad eliminarlo e rigenerare il database delle chiavi di pacman con i comandi precedenti, nessuna variazione.
Rintraccio la chiave PGP/GPG sul sito di Bisson, la scarico e provo ad importarla:
[root@vboxarch ~]# curl https://gaati.org/bisson/bisson.gpg | pacman-key -a -
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 20749 100 20749 0 0 19558 0 0:00:01 0:00:01 --:--:-- 19574
gpg: key EE2EEEEE: no valid user IDs
==> ERROR: A specified keyfile could not be added to the keyring.
Non è il server delle chiavi a difettare, è proprio la chiave ad avere qualcosa che non va.
L’errore è sempre lo stesso:
gpg: key EE2EEEEE: no valid user IDs
Dopo una lunga ricerca online il problema sembra dovuto al fatto che la chiave non risulta autofirmata dall’autore (1 e 2) l’unica soluzione sembra quella di forzare gpg ad accettare la chiave non autofirmata:
[root@vboxarch ~]# echo "allow-non-selfsigned-uid" >> /etc/pacman.d/gnupg/gpg.conf
[root@vboxarch ~]# rm /etc/pacman.d/gnupg/*.gpg
[root@vboxarch ~]# curl https://gaati.org/bisson/bisson.gpg | pacman-key -a -
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 20749 100 20749 0 0 16781 0 0:00:01 0:00:01 --:--:-- 16787
gpg: key EE2EEEEE: accepted non self-signed user ID "Gaetan Bisson <gaetan@fenua.org>"
gpg: key EE2EEEEE: accepted non self-signed user ID "Gaetan Bisson <bisson@gaati.org>"
gpg: key EE2EEEEE: accepted non self-signed user ID "Gaetan Bisson <bisson@archlinux.org>"
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0 valid: 1 signed: 5 trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: depth: 1 valid: 5 signed: 72 trust: 0-, 0q, 0n, 5m, 0f, 0u
gpg: depth: 2 valid: 72 signed: 8 trust: 72-, 0q, 0n, 0m, 0f, 0u
gpg: next trustdb check due at 2018-06-25
==> Updating trust database...
gpg: next trustdb check due at 2018-06-25
A questo punto credo che abbiamo risolto il problema:
[root@vboxarch ~]# pacman -Su
Ma invece il problema è sempre lo stesso di prima.
Soluzione per aggirare il problema
L’ultima chance resta quella di disabilitare la verifica delle firme dei pacchetti:
Modificare il file pacman.conf
[root@vboxarch ~]# nano /etc/pacman.conf
E cambiare la riga:
SigLevel = Required DatabaseOptional
in:
SigLevel = Never
La procedura di aggiornamento finalmente andrà a buon fine, ignorando il problema delle chiavi.
Finale
Al termine dell’aggiornamento del sistema si raccomanda di ripristinare
l’impostazione SigLevel al suo valore predefinito:
Required DatabaseOptional
Nel caso si tratti di un’installazione non aggiornata dopo il 23/04/2016 è fortemente raccomandata la rigenerazione del ramdisk iniziale.
In caso contrario avendo una vecchia versione di pacman senza il supporto agli hook, tali procedure non verranno eseguite e il kernel si troverà senza il ramdisk di supporto.
Per rigenerare il ramdisk iniziale è possibile utilizzare il comando seguente:
mkinitcpio -p linux
Per ulteriori informazioni: Required update to pacman-5.0.1 before 2016-04-23.