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 B7B3B788A8D3785C
(oppure NO_PUBKEY 467B942D3A79BD29
). Il messaggio appare ogni volta che usiamo apt per ricercare gli aggiornamenti oppure tentiamo di aggiornare MySQL stesso. In questa rapida guida vedremo come risolvere il problema.
Trattazione aggiornata a Gennaio 2024 per rispecchiare la scadenza della chiave B7B3B788A8D3785C e la necessità di aggiungere quella nuova
La presente guida è stata testata sul server di TurboLab.it con MySQL 8 su Ubuntu 22.04. La procedura è comunque analoga per qualsiasi altra distribuzione che usi apt come gestore dei pacchetti
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 B7B3B788A8D3785C
(oppure 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 8 su Ubuntu (Linux Server e PC Desktop)
Oltre al fastidio di visualizzare questo avviso, la situazione dovrebbe essere corretta al più presto perché la copia installata di MySQL non viene aggiornata e rimane ferma ad una versione ormai obsoleta
errore NO_PUBKEY B7B3B788A8D3785C (oppure NO_PUBKEY 467B942D3A79BD29): La causa
L'errore dipende dal fatto che il team di sviluppo di MySQL 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 B7B3B788A8D3785C (oppure 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
Probabilmente verrà mostrato anche un errore simile a Warning: apt-key is deprecated
, che possiamo tranquillamente ignorare.
La cosa importante da notare è il prefisso [ expired]
mostrato accanto ad una delle voci. Questo ci conferma che la chiave è, appunto, scaduta.
errore NO_PUBKEY B7B3B788A8D3785C (oppure NO_PUBKEY 467B942D3A79BD29): Rimuovere la vecchia chiave
Procediamo eliminando la chiave scaduta impartendo il comando appropriato all'errore che stiamo ricevendo:
- errore
NO_PUBKEY B7B3B788A8D3785C
=> impartiresudo apt-key del "859B E8D7 C586 F538 430B 19C2 467B 942D 3A79 BD29"
- errore
NO_PUBKEY 467B942D3A79BD29
=> impartiresudo apt-key del "A4A9 4068 76FC BD3C 4567 70C8 8C71 8D3B 5072 E1F5"
In caso di dubbio, possiamo tranquillamente lanciarli entrambi! In ogni caso, però, attenzione a conservare le virgolette!
Il comando mostra dapprima l'avviso Warning: apt-key is deprecated. Manage keyring files in trusted.gpg.d instead (see apt-key(8))
, che possiamo ignorare, poi solo il messaggio 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 B7B3B788A8D3785C (oppure NO_PUBKEY 467B942D3A79BD29): Aggiungere la nuova chiave
Siamo ora nelle condizioni ideali per aggiungere la nuova chiave utilizzata da MySQL. Allo scopo, basta impartire:
curl https://repo.mysql.com/RPM-GPG-KEY-mysql-2023 | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/webstackup-mysql.gpg > /dev/null
Lanciando poi ancora una volta sudo apt-key list
, dovremmo poter vedere la nuova chiave appena aggiunta alla lista
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 errore NO_PUBKEY B7B3B788A8D3785C
(oppure 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!