Назад | Перейти на главную страницу

Что мне делать, если после обновления apt-get я получил сообщение об ошибке KEYEXPIRED?

При обновлении моих пакетов в системе на основе Debian

sudo apt-get update

У меня такое сообщение об ошибке:

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

Что мне делать, чтобы это исправить?

Чтобы найти ключи репозитория с истекшим сроком действия и их идентификаторы, используйте apt-key следующим образом:

LANG=C apt-key list | grep expired

Вы получите результат, подобный следующему:

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

Идентификатор ключа - это бит после / т.е. BE1DB1F1 в таком случае.

Чтобы обновить ключ, запустите

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

Примечание: Обновление ключа, очевидно, не работать, если сопровождающий пакета (еще) не загрузил новый ключ. В этом случае вы мало что можете сделать, кроме как связаться с сопровождающим, зарегистрировать ошибку в вашем дистрибутиве и т. Д.

Один лайнер для обновления всех ключей с истекшим сроком действия: (спасибо @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

Вам нужно получить новый ключ и добавить его, после чего apt обнаружит его и не будет жаловаться. Обычно этого не должно происходить, но иногда случается. Что вам действительно нужно, так это знать шестнадцатеричный код ключа, который вам нужно добавить; как только у вас это будет, все будет в гору.

Некоторые примеры:

На Debian Wiki о SecureAPT, Я обнаружил, что мне следует удалить строку, содержащую non-us из /etc/apt/sources.list.

Я действительно так и сделал, и это сработало.

У меня была аналогичная ошибка, но проблема была в системном времени. Шел 1961 год :)

Я исправил системную дату / время и после этого смог обновить без профи

Это также может произойти, если дата неверна.

Проверить дату с

date

Если он настроен неправильно, выполните следующие действия, чтобы настроить автоматическую синхронизацию часового пояса и даты.

apt-get install ntp ntpdate && service ntp stop
dpkg-reconfigure tzdata
ntpdate-debian
service ntp start

Одна крайне маловероятная, но иногда возможная причина этой ошибки заключается в том, что один и тот же ключ был добавлен дважды с разными сроками действия. Вы, вероятно, знаете, что сделали это, чтобы этот ответ был актуален для вас.

Это может произойти, как это было со мной, при размещении вашего собственного репозитория с вашими собственными ключами. Если вы, когда срок действия ключа скоро истечет, просто продлите его время жизни, а не измените его, и если вы установили исходный ключ с помощью предварительной загрузки, но обновленный ключ с помощью пакета deb, тогда старый ключ будет в /etc/apt/trusted.gpg, а новый оказывается отдельным файлом в /etc/apt/trusted.gpg.d/. Старый ключ затеняет новый, который полностью игнорируется apt-key. Удалите старый ключ, запустив gpg --keyring /etc/trusted.gpg --delete-keys <keyid>, и ваш новый ключ будет обнаружен.

Это немного нестандартная угловая конфигурация, но я надеюсь, что мой ответ поможет избежать путаницы на случай, если кто-то еще столкнется с этой проблемой по той же причине, что и я.

Более простой лайнер:

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

Я просто чувствую, что если ты делаешь что-то вроде использования cut не раз есть лучший инструмент. (Кроме того, я создал это на основе другой вопрос.)

Ты не должен Делать что-нибудь. Это просто предупреждение, это видно из W: префикс.