Jeden z moich ulubionych komunikatów błędu przy aktualizowaniu pakietów to
Reading package lists... Done W: GPG error: http://ppa.launchpad.net jaunty Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 2A8E3034D018A4CE W: GPG error: http://ppa.launchpad.net jaunty Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 0CF459B8DF37ED8B W: You may want to run apt-get update to correct these problems
Czyli nie mam sygnatury dla któregoś z używanych dodatkowych repozytoriów (tu akurat chodzi o klucz do pakietów FreeNX potrzebnych przy uruchamianiu neatx) oraz mikroblogowy dodatek do pidgina (raczej nienajlepszy pomysł ale jeszcze chcę przetestować).
Oczywiście nic trudnego, oczywiście kwestia użycia dwóch komend, oczywiście te komendy opisało już dziesięć tysięcy osób i ... oczywiście za każdym razem muszę googlować, by je sobie przypomnieć. Dlatego w końcu pokusiłem się o rozwiązanie ułatwiające życie.
Rozwiązanie wygląda tak:
function apt_get_key { if [ -z "$1" ]; then echo "Usage:" echo " apt_get_key KLUCZ" return fi gpg --recv-keys "$1" gpg --armor --export "$1" | sudo apt-key add - }
i należy je umieścić w ~/.bashrc
albo podobnym pliku. A potem wystarczy:
$ apt_get_key 2A8E3034D018A4CE $ apt_get_key 0CF459B8DF37ED8B
(uruchamiane z normalnego konta).
Dla porządku: powyższa funkcja robi dwie rzeczy:
-
wyszukuje zadany klucz publiczny, ściąga go i zapisuje w
~/.gnupg/pubring.gpg
(dzięki czemu zyskuję możliwość weryfikowania danych podpisanych odpowiednim kluczem prywatnym z własnego konta), -
eksportuje ten klucz i zapisuje go jako zaufany (w
/etc/apt/trusted.gpg
), mogący podpisywać instalowane pakiety.
Uprawnień roota wymaga tylko to ostatnie, stąd położenie
sudo
.
Pierwszą z tych operacji można robić dość bezrefleksyjnie, druga wymaga pewnego zaufania do posiadacza klucza (od tego momentu może on wyprodukować pakiet jaki zostanie bezkrytycznie przyjęty przez nasz system przy aktualizacji).