Coloro che abbiano installato MySQL sul proprio PC o server Linux qualche tempo fa stanno incappando oggi in un fastidioso errore simile al seguente: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 467B942D3A79BD29
. Il messaggio appare ogni volta che usiamo il gestore di pacchetti per ricercare gli aggiornamenti oppure tentiamo di aggiornare MySQL stesso. In questa rapida guida vedremo come risolvere il problema.
La presente guida è stata testata sul server di TurboLab.it con MySQL 8 su Ubuntu 20.04. La procedura è comunque analoga per qualsiasi altra distribuzione: è sufficiente utilizzare il proprio gestore di pacchetti al posto di apt
Il messaggio di errore completo è simile al seguente:
An error occurred during the signature verification. The repository is not updated and the previous index files will be used. GPG error: http://repo.mysql.com/apt/ubuntu focal InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 467B942D3A79BD29
Viene visualizzato su tutti i sistemi sui quali sia stato installato MySQL utilizzando il repository ufficiale di MySQL invece che tramite il pacchetto fornito dalla propria distribuzione. Si tratta della modalità che io consiglio, e che ho indicato anche nella guida dedicata:
» Leggi: Guida: come installare MySQL per Linux (Ubuntu/CentOS)
Oltre al fastidio di visualizzare questo avviso, la situazione dovrebbe essere corretta al più presto: in questo scenario, infatti, la copia installata di MySQL non viene aggiornata e rimane ferma ad una versione ormai obsoleta
errore NO_PUBKEY 467B942D3A79BD29: La causa
L'errore dipende dal fatto che MySQL (l'azienda) ha sostituito la chiave crittografica GPG con la quale firma le nuove versioni dei pacchetti (fonte). Di conseguenza, la corrispondente chiave pubblica che avevamo aggiunto precedentemente alla lista di quelle "autorizzate" non combacia più con quella oggi in uso.
Il sistema di aggiornamento integrato nel sistema operativo rileva dunque che la nuova firma crittografica è sconosciuta, e rifiuta l'installazione del nuovo pacchetto emettendo il messaggio in questione.
errore NO_PUBKEY 467B942D3A79BD29: Visualizzare la chiave scaduta
Per prima cosa, impartiamo il seguente comando:
sudo apt-key list
Questo elenca le chiavi installate, fra le quali dovrebbe figurare anche quella di MySQL Release Engineering
Si noti la dicitura [ expired]
. Questo ci conferma che la chiave è, appunto, scaduta.
errore NO_PUBKEY 467B942D3A79BD29: Rimuovere la vecchia chiave
Procediamo eliminando la chiave scaduta. Dalla schermata precedente, prendiamo nota della seconda riga, ovvero quella che, nel caso mostrato nello screenshot, riporta A4A9 4068 76FC BD3C 4567 70C8 8C71 8D3B 5072 E1F5
.
Ora utilizziamo il testo appena copiato in un comando simile al seguente
sudo apt-key del "A4A9 4068 76FC BD3C 4567 70C8 8C71 8D3B 5072 E1F5"
Attenzione alle virgolette!
Il comando deve rispondere semplicemente OK
... ma, purtroppo, risponde OK
sia in caso il comando abbia avuto effettivamente successo, sia in caso la chiave sia già stata rimossa o non esista! Per assicurasi che l'operazione sia veramente andata a buon fine è dunque opportuno impartire di nuovo il precedente sudo apt-key list
e constatare che la sezione relativa a MySQL Release Engineering
sia sparita.
errore NO_PUBKEY 467B942D3A79BD29: Aggiungere la nuova chiave
Siamo ora nelle condizioni ideali per aggiungere la nuova chiave utilizzata da MySQL. Allo scopo, basta impartire:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3A79BD29
Da notare che il server indicato nel comando sopra, keyserver.ubuntu.com
, è diverso da quello consigliato nella documentazione ufficiale di MySQL. Quello consigliato nella doc è infatti spesso sovraccarico, e tende a non rispondere. Quello che suggerisco io, gestito da Ubuntu ma compatibile con qualsiasi altra distribuzione, risponde invece sempre puntualmente.
Aggiornare la lista dei pacchetti disponibili
Possiamo ora aggiornare la cache dei pacchetti disponibili impartendo
sudo apt update
Da notare che, ora, il messaggio di errore non si presenta più.
Aggiornare MySQL
Se, fino ad oggi, visualizzavamo il messaggio di errore NO_PUBKEY 467B942D3A79BD29
, è altamente probabile che la copia di MySQL installata sia divenuta obsoleta. È dunque importante valutare di svolgere subito l'aggiornamento che, ora, funzionerà correttamente e scaricherà una build aggiornata
Prima di proseguire all'upgrade, è imperativo effettuare un backup del database, di modo da poterlo ripristinare in caso di problemi. Abbiamo visto come farlo in modo ottimale e con un singolo comando in quest'altra guida:
» Leggi: MySQL/mysqldump: creare un file distinto/singolo per ogni database con zzmysqldump (script)
Una volta che il backup è pronto, procediamo con l'upgrade. Personalmente, preferisco cogliere l'occasione e aggiornare tutto il sistema, invece dei singoli pacchetti. Ho mostrato come farlo qui:
Chi lavori con MySQL da diversi anni ricorderà sicuramente che, in passato, era necessario lanciare manualmente mysql_upgrade
dopo ogni installazione di un nuovo pacchetto. Oggi, invece, questa operazione non è più necessaria: il servizio principale di MySQL svolge infatti automaticamente questa operazione in caso fosse necessario. Evviva!