Все об Arch Linux

Arch Linux будет тем, что вы из него сделаете!

GPG unknown public key: как починить ключи pacman

Сразу к делу: ошибка signature from "Unknown User" is unknown trust при установке пакета значит, что pacman не доверяет ключу, которым подписан пакет. Лечится по порядку: сначала обнови пакет archlinux-keyring через pacman -Syu, затем выполни pacman-key --refresh-keys, а если связка ключей повреждена, сбрось её через pacman-key --init и pacman-key --populate archlinux. В большинстве случаев хватает первого шага.

Почему pacman проверяет подписи пакетов?

Arch подписывает каждый пакет. У проекта есть мастер-ключ и ключи разработчиков, заверенные этим мастер-ключом. Ключи лежат в связке /etc/pacman.d/gnupg. При установке pacman проверяет подпись пакета: если ключ подписанта есть в связке и ему доверяют, пакет ставится. Если ключа нет или цепочка доверия от мастер-ключа разорвана, появляется ошибка.

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

Схема доверия простая. Мастер-ключ Arch подписывает ключи разработчиков. В твою связку при установке системы попадает мастер-ключ и все ключи разработчиков из пакета archlinux-keyring. Мастер-ключ помечен как полностью доверенный. Дальше pacman проверяет подпись пакета и идёт по цепочке: подпись разработчика, затем подпись мастер-ключа. Если любое звено отсутствует или повреждено, доверие не подтверждается, и установка блокируется.

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

Что значит «signature from Unknown User»?

Типичный вывод pacman выглядит так:

error: linux: signature from "Unknown User <noreply@archlinux.org>" is unknown trust
error: failed to commit transaction (invalid or corrupted package (PGP signature))

Причин две. Первая: ключ разработчика, подписавшего пакет, ещё не попал в твою связку. Вторая: связка устарела или повреждена, и цепочка доверия разорвана. В обоих случаях pacman не может подтвердить подлинность пакета и блокирует установку.

Похожие сообщения: key is revoked, key is expired, no public key. Каждое из них описывает своё состояние ключа, но лечение одинаковое: обновить keyring и подтянуть свежие ключи.

Разница между «unknown key» и «unknown trust» небольшая. В первом случае ключа вообще нет в связке. Во втором ключ есть, но ему не доверяют: он не подписан мастер-ключом или подпись повреждена. Обе ситуации лечатся одинаково, но для диагностики полезно понимать, с какой из них ты столкнулся.

Как понять, какого ключа не хватает?

Посмотри, что лежит в связке:

pacman-key --list-keys
pacman-key --list-sigs | head

Первая команда показывает все ключи, вторая: подписи и цепочку доверия. Ищи в выводе адрес из сообщения об ошибке, например noreply@archlinux.org. Если такого ключа нет, значит, он ещё не скачан. Если есть, но без подписи мастер-ключа, цепочка доверия разорвана, и нужен --refresh-keys.

Обрати внимание на пометки доверия рядом с ключами. У мастер-ключа стоит [ full ] или [ ultimate ]. У ключей разработчиков, подписанных мастер-ключом, тоже собирается полное доверие. Если рядом с ключом написано [ unknown ], цепочка не собрана, и pacman откажется принимать подпись.

Как починить: что делать в первую очередь?

Самый частый случай: устаревший пакет archlinux-keyring. В нём лежат свежие ключи разработчиков и списки отозванных ключей. Если пакет подписан новым ключом, а твой keyring старый, pacman его не знает.

Обнови систему целиком:

pacman -Syu

Полное обновление предпочтительнее: вместе с keyring обновятся и остальные пакеты, а система останется консистентной. Во время pacman -Syu keyring обновляется одним из первых. Это сделано специально: свежие ключи нужны, чтобы проверить подписи остальных пакетов. Поэтому полное обновление часто чинит ошибку само, без ручных команд.

Если полное обновление сейчас не подходит, обнови только keyring:

pacman -Sy archlinux-keyring

После этого повтори установку проблемного пакета. Чаще всего ошибка уходит. Важно: pacman -Sy без полного обновления это частичное обновление, а оно в Arch не поддерживается. Подробнее в статье «Частичное обновление pacman». Поэтому после -Sy archlinux-keyring сразу выполняй pacman -Syu.

Как обновить ключи вручную?

Если обновление keyring не помогло, подтяни ключи с сервера ключей:

pacman-key --refresh-keys

Команда скачивает свежие версии ключей из связки. Нужен интернет. Иногда она падает с ошибками DNS или TLS, тогда проверь сеть и время системы (об этом ниже).

Старый сервер keyserver.gnupg.net больше не работает. Современные варианты: hkps://keyserver.ubuntu.com и hkps://keys.openpgp.org. Если --refresh-keys ругается на сервер, укажи его явно:

pacman-key --refresh-keys --keyserver hkps://keyserver.ubuntu.com

Что делать, если –refresh-keys падает с ошибкой?

Сначала проверь сеть. --refresh-keys ходит по HTTPS, поэтому работают те же требования, что и для обычного интернета: доступ к серверу, корректное время, рабочий DNS. Если DNS не отвечает, команда падает с ошибкой разрешения имени. Если время системы ушло, TLS-соединение не установится.

Попробуй другой сервер ключей:

pacman-key --refresh-keys --keyserver hkps://keys.openpgp.org

Если сеть и время в порядке, а команда всё равно падает, переходи к полному сбросу keyring.

Что делать, если keyring повреждён полностью?

Если связка сломана, например после сбоя питания или ручных правок, --refresh-keys не поможет. Сбрось keyring целиком:

rm -rf /etc/pacman.d/gnupg
pacman-key --init
pacman-key --populate archlinux

--init создаёт новую связку и мастер-ключ. --populate archlinux загружает официальные ключи Arch из пакета archlinux-keyring. После этого обнови ключи с сервера:

pacman-key --refresh-keys

Нюанс: --populate берёт ключи из установленного пакета archlinux-keyring. Если сам пакет повреждён или устарел, сначала переустанови его. Если система не обновляется из-за подписей, возьми свежий keyring с другого компьютера или с установочного ISO: скопируй каталог /etc/pacman.d/gnupg с рабочей машины либо загрузись с live-USB, где keyring свежий, и перенеси его в систему.

Почему ошибка появляется из-за времени системы?

Подписи проверяются по времени. Если системные часы ушли вперёд или назад, ключи могут считаться недействительными: срок действия истёк или ещё не наступил. Это же ломает HTTPS-соединения, а вместе с ними и --refresh-keys, и обычные обновления.

Проверь время:

date
timedatectl

Если время неверное, включи синхронизацию:

timedatectl set-ntp true

Аппаратные часы тоже стоит проверить:

hwclock --systohc

На большинстве систем аппаратные часы хранят время в UTC, а локальное время вычисляется по часовому поясу. Если ты менял часовой пояс или система грузилась без сети, часы могут разойтись. timedatectl покажет и локальное время, и UTC, и статус синхронизации.

После исправления времени повтори pacman-key --refresh-keys и установку пакета.

Что делать, если пакет подписан чужим ключом?

Ошибка «Unknown User» появляется и тогда, когда пакет пришёл не из официальных репозиториев. Если ты добавил сторонний репозиторий, например chaotic-aur, его пакеты подписаны ключом этого репозитория. Пока ключ не импортирован и не помечен как доверенный, pacman будет ругаться.

Решение: импортировать ключ репозитория. Для chaotic-aur:

pacman-key --recv-keys <ID_ключа>
pacman-key --lsign-key <ID_ключа>

ID ключа и точные команды бери с сайта репозитория. Не подписывай случайные ключи: доверяй только тем, что опубликованы на официальных страницах проекта.

Кстати, пакеты из AUR тут ни при чём. AUR-пакеты ты собираешь сам из исходников, подписей там нет. Проблема с чужими ключами возникает только при подключении бинарных репозиториев, которые раздают готовые пакеты.

Частые вопросы

Ошибка появилась после обновления системы, что делать?

Обнови archlinux-keyring ещё раз и выполни pacman-key --refresh-keys. После крупных обновлений набор ключей разработчиков меняется, и связка отстаёт на один шаг.

Можно ли отключить проверку подписей?

Технически да: pacman -S --config /dev/null <пакет>. Но эта команда отключает проверку подписей для всех пакетов в ней. Не используй её без крайней нужды: теряется защита от подмены пакетов. Это разовая мера, а не решение.

Чем отличается pacman-key от gpg?

pacman-key это обёртка над GnuPG для связки /etc/pacman.d/gnupg. Она использует те же механизмы, но настроена под нужды pacman: отдельная связка и свои параметры доверия. Обычный gpg работает с личной связкой ~/.gnupg и на pacman не влияет.

Что делать, если ошибка повторяется после каждого обновления?

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

Поможет ли переустановка archlinux-keyring при повреждённой связке?

Переустановка пакета обновит файлы ключей, но не восстановит повреждённую связку /etc/pacman.d/gnupg. Если после переустановки и --refresh-keys ошибка осталась, делай полный сброс: rm -rf /etc/pacman.d/gnupg, затем pacman-key --init и pacman-key --populate archlinux.

Полезные ресурсы

Заключение

Ошибка signature from Unknown User не повод паниковать. Чаще всего помогает обновление archlinux-keyring и pacman-key --refresh-keys. Если связка повреждена, сброс через --init и --populate archlinux вернёт её к жизни. Проверь время системы и помни про сторонние репозитории: их ключи нужно импортировать отдельно. А отключение проверки подписей через --config /dev/null оставь на самый крайний случай.



Не получилось? Поможем настроить

Задай вопрос в чате — отвечаем быстро, по делу и без воды.

Читайте также

Комментарии

Загрузка…

Откроется GitHub: создайте новый issue с вашим комментарием (кнопка «Submit new issue»). После отправки обновите эту страницу — комментарий появится ниже.

Telegram Max