Co powinienem zrobić po otrzymaniu komunikatu o błędzie KEYEXPIRED po aktualizacji apt-get?

74

Podczas aktualizacji moich pakietów w systemie opartym na Debianie przez

sudo apt-get update

Mam ten komunikat o błędzie:

Reading package lists... Done
W: GPG error: ftp://ftp.fr.debian.org stable/non-US Release: 
The following signatures were invalid: KEYEXPIRED 1138684904

Co powinienem zrobić, aby to naprawić?

paulgreg
źródło

Odpowiedzi:

117

Aby znaleźć wygasłe klucze repozytorium i ich identyfikatory, użyj apt-keynastępujących poleceń:

LANG=C apt-key list | grep expired

Otrzymasz wynik podobny do następującego:

pub   4096R/BE1DB1F1 2011-03-29 [expired: 2014-03-28]

Identyfikator klucza to bit po /ie BE1DB1F1w tym przypadku.

Aby zaktualizować klucz, uruchom

sudo apt-key adv --recv-keys --keyserver keys.gnupg.net BE1DB1F1

Uwaga: Aktualizacja klucza oczywiście nie będzie działać, jeśli opiekun pakietu nie przesłał (jeszcze) nowego klucza. W takim przypadku niewiele można zrobić poza skontaktowaniem się z opiekunem, zgłoszeniem błędu w dystrybucji itp.

Jedna linijka do aktualizacji wszystkich wygasłych kluczy: (dzięki @ryanpcmcquen)

for K in $(apt-key list | grep expired | cut -d'/' -f2 | cut -d' ' -f1); do sudo apt-key adv --recv-keys --keyserver keys.gnupg.net $K; done
kynan
źródło
2
to nie działa dla mnie, po wydaniu polecenia aktualizacji klucza klucz wygasł.
Karl Forner,
@KarlForner dodaje klucz?
kynan
tak, to się udało.
Karl Forner
4
Jeden liniowiec:for K in $(apt-key list | grep expired | cut -d'/' -f2 | cut -d' ' -f1); do sudo apt-key adv --recv-keys --keyserver keys.gnupg.net $K; done
ryanpcmcquen,
2
Tylko wskazówka dotycząca części grep: „wygasł” jest i18ned, więc w zależności od ustawień LANG * może to nie działać, na przykład dla ustawień pl_PL.UTF-8 należy zmienić „wygasł” na „wygasł”, aby zrobić to- wkładka do pracy.
Cromax,
6

Musisz zdobyć nowszy klucz i dodać go, w którym momencie apt go wykryje i nie będzie narzekać. To normalnie nie powinno się zdarzyć, ale czasem tak się dzieje. Tak naprawdę potrzebujesz znać kod szesnastkowy klucza, który musisz dodać; kiedy już to masz, jest już prawie z górki.

Kilka przykładów:

Avery Payne
źródło
2

Miałem podobny błąd, ale problem dotyczył czasu systemowego. Był rok 1961 :)

Poprawiłem datę / czas systemowy, a potem mogłem aktualizować bez profesjonalisty

slava
źródło
1

Na Wiki Debiana o SecureAPT znalazłem, że powinienem usunąć wiersz zawierający non-usz /etc/apt/sources.list.

Właściwie to zrobiłem i zadziałało.

paulgreg
źródło
5
Mogło to zadziałać w jednym konkretnym przypadku, ale nie jest to ogólne rozwiązanie
kynan
1

Może się to również zdarzyć, gdy data jest niepoprawna.

Sprawdź datę za pomocą

date

Jeśli jest źle skonfigurowany, wykonaj następujące czynności, aby ustawić automatyczną synchronizację strefy czasowej i daty.

apt-get install ntp ntpdate && service ntp stop
dpkg-reconfigure tzdata
ntpdate-debian
service ntp start
Aley
źródło
1

Jedną z bardzo mało prawdopodobnych, ale czasami możliwych przyczyn tego błędu, jest dwukrotne dodanie tego samego klucza z różnymi datami wygaśnięcia. Prawdopodobnie wiesz, że to zrobiłeś, aby ta odpowiedź była dla Ciebie odpowiednia.

Może się tak zdarzyć, tak jak w przypadku mnie, gdy hostujesz własne repozytorium z własnymi kluczami. Jeśli podczas wygaśnięcia klucza po prostu przedłużysz jego żywotność, a nie go zmienisz, a jeśli zainstalowałeś oryginalny klucz za pomocą wstępnego cięcia, ale zaktualizowany klucz za pomocą pakietu deb, stary klucz będzie włączony /etc/apt/trusted.gpg, podczas gdy nowy kończy się jako osobny plik pod /etc/apt/trusted.gpg.d/. Stary klucz zasłoni nowy, który zostanie całkowicie zignorowany apt-key. Usuń stary klucz, uruchamiając gpg --keyring /etc/trusted.gpg --delete-keys <keyid>, a nowy klucz zostanie wykryty.

Jest to trochę niestandardowa konfiguracja narożna, ale mam nadzieję, że moja odpowiedź może zaoszczędzić trochę zamieszania na wypadek, gdyby ktoś napotkał ten problem z tego samego powodu, co ja.

sampi
źródło
1

Prostszy oneliner:

for key in $(sudo apt-key list | awk -v FS='[ /:]+' '/expire[sd]/ {print $3}'); do sudo apt-key adv --recv-keys --keyserver keys.gnupg.net $key; done

Po prostu czuję, że jeśli robisz takie rzeczy, jak używanie cutwięcej niż raz, istnieje lepsze narzędzie. (Stworzyłem to również na podstawie innego pytania ).

Bruno Bronosky
źródło
-1

Nie musisz nic robić. To tylko ostrzeżenie, widać to na podstawie W:prefiksu.

Michael Franzl
źródło
1
Gdyby nie musiał nic robić, cały system podpisywania dla Repos byłby bezużyteczny. Jest to funkcja bezpieczeństwa, a w środowisku produkcyjnym integralność klucza ma kluczowe znaczenie dla bezpieczeństwa.
Broco