При обновлении моих пакетов в системе на основе 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 обнаружит его и не будет жаловаться. Обычно этого не должно происходить, но иногда случается. Что вам действительно нужно, так это знать шестнадцатеричный код ключа, который вам нужно добавить; как только у вас это будет, все будет в гору.
Некоторые примеры:
добавление ключей для backports: первые несколько строк - это то, что вам нужно, хотя вам понадобится ключ, который он хочет.
На 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:
префикс.