Вопрос или проблема
У меня на машине установлена Ubuntu 20.04.6 LTS, и я хочу обновить операционную систему до 24.04. Я выполнил команды apt update
и apt upgrade
. Обе успешно завершились, однако apt update
выдал некоторые предупреждения. Когда я запускаю do-release-upgrade
, он выдаёт
Пожалуйста, установите все доступные обновления для вашей версии перед обновлением.
При выполнении apt-update
появилось следующее предупреждение
W: 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
W: Failed to fetch http://repo.mysql.com/apt/ubuntu/dists/focal/InRelease The following signatures couldn't be verified because the public key is not available: NO_PUBKEY B7B3B788A8D3785C
W: Some index files failed to download. They have been ignored, or old ones used instead.
Я попытался добавить ключ напрямую с помощью
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys B7B3B788A8D3785C
но это выдало gpg: keyserver receive failed: Network is unreachable
затем я попробовал следующую команду с использованием подобного вопроса
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys B7B3B788A8D3785C
но это также выдало gpg: keyserver receive failed: Connection timed out
Я также попытался получить IP-адрес keyserver.ubuntu.com с помощью ping и попробовал следующую команду:
sudo apt-key adv --keyserver 185.125.188.26 --recv-keys 467B942D3A79BD29
но это также выдало gpg: keyserver receive failed: Connection timed out
Я также пытался добавить nameserver 8.8.8.8 # Google DNS
в файл /etc/resolv.conf
машины, но проблема сохраняется.
Машина находится за файрволлом и прокси.
Ответ или решение
Проблема, с которой столкнулся пользователь, связана с невозможностью обновления операционной системы Ubuntu из-за проблем с GPG-ключами для MySQL. Прежде чем приступить к решению, важно детально понять суть проблемы, чтобы предложить правильное и эффективное решение.
Теория
Когда вы используете систему управления пакетами APT для обновления или установки программного обеспечения в Ubuntu, система проверяет подлинность репозиториев, используя GPG-ключи. Это обеспечивает защиту от скачивания и установки потенциально вредоносного кода из неизвестных источников. Если GPG-ключ, связанный с репозиторием, недоступен, вы можете столкнуться с ошибками, как в данном случае, где отсутствует ключ для репозитория MySQL.
Ошибка «NO_PUBKEY» указывает на то, что APT не может получить доступ к публичному ключу для подписи пакетов, исходящих из указанного репозитория. Эта проблема может усугубляться ситуацией, когда машина находится за фаерволом или прокси, что ограничивает сетевую доступность.
Пример
Проблему пользователя можно разделить на несколько основных частей:
- Ошибка верификации подписи: APT сообщает, что не может проверить подлинность пакетов из репозитория MySQL, так как отсутствует соответствующий GPG-ключ.
- Сетевые проблемы: Попытки получить ключ с keyserver.ubuntu.com приводят к ошибкам, таким как «Сеть недоступна» и «Тайм-аут подключения», вероятно, из-за наличия фаервола и прокси.
- Решения, требующие обхода фаервола и прокси: На данный момент предлагаемые команды для получения GPG-ключа не увенчались успехом, несмотря на использование различных стратегий, таких как указание IP-адреса сервера ключей и изменение конфигурации DNS.
Применение
Для решения данной проблемы рекомендуется выполнить следующие шаги:
-
Обновление APT-токенов: Если у вас установлен старый
apt-key
, попробуйте использовать новый механизм для добавления GPG-ключей, применяяgpg
вместоapt-key
, так какapt-key
устарел и может вести себя не так, как ожидается в новых версиях дистрибутивов.curl -fsSL https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 | gpg --dearmor -o /usr/share/keyrings/mysql.gpg
Затем добавьте репозиторий в файл
/etc/apt/sources.list.d/mysql.list
, видоизменив его следующим образом:deb [signed-by=/usr/share/keyrings/mysql.gpg] http://repo.mysql.com/apt/ubuntu focal mysql-apt-config deb [signed-by=/usr/share/keyrings/mysql.gpg] http://repo.mysql.com/apt/ubuntu focal mysql-5.7 deb [signed-by=/usr/share/keyrings/mysql.gpg] http://repo.mysql.com/apt/ubuntu focal mysql-tools
-
Использование прокси: Убедитесь, что все сетевые соединения проходят через установленный прокси. Для этого добавьте информацию о прокси в файл конфигурации
/etc/apt/apt.conf
:Acquire::http::Proxy "http://your-proxy-server:port/"; Acquire::https::Proxy "http://your-proxy-server:port/";
-
Ручное добавление ключа: Если сетевые условия все еще препятствуют автоматическому получению ключа, скачайте его вручную из проверенного источника и добавьте локально:
wget https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 sudo apt-key add RPM-GPG-KEY-mysql-2022
-
Обновление DNS: Если предыдущие попытки сводились к тайм-аутам, возможно, стоит проверить общие настройки сети и DNS-серверов, чтобы гарантировать, что недоступность серверов не вызвана локальны