Вопрос или проблема
Я ломаю голову, пытаясь найти способ исправить сломанную gpg в apt
.
Когда я пытаюсь установить Nodejs:
curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
sudo apt-get install -y nodejs
Я получаю эту ошибку:
## Вы, похоже, используете версию Debian stretch.
## Это сопоставляется с Debian "jessie"... Регулировка для вас...
## Подтверждение, что "jessie" поддерживается...
+ curl -sLf -o /dev/null 'https://deb.nodesource.com/node_7.x/dists/jessie/Release'
## Добавление ключа подписания NodeSource в ваш кейринг...
+ curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add -
gpg: [don't know]: неправильный пакет (ctb=00)
gpg: keydb_get_keyblock failed: Значение не найдено
gpg: [don't know]: неправильный пакет (ctb=00)
gpg: /tmp/apt-key-gpghome.ix2LFsfXOw/pubring.gpg: копирование в '/tmp/apt-key-gpghome.ix2LFsfXOw/pubring.gpg.tmp' не удалось: Неправильный пакет
gpg: ошибка записи кейринга '/tmp/apt-key-gpghome.ix2LFsfXOw/pubring.gpg': Неправильный пакет
gpg: [don't know]: неправильный пакет (ctb=00)
gpg: ошибка чтения '-': Неправильный пакет
gpg: импорт из '-' не удался: Неправильный пакет
Ошибка выполнения команды, выход
Я использую Debian stretch rc2 с ядром 10.5. Не знаю, является ли это проблемой или нет. Я не могу использовать стабильную версию Debian, потому что у меня процессор Ryzen.
Когда я пытаюсь установить VSCode, я тоже получаю другую ошибку:
W: Erreur de GPG : http://packages.microsoft.com/repos/vscode stable InRelease : Les signatures suivantes n'ont pas pu être vérifiées car la clé publique n'est pas disponible : NO_PUBKEY EB3E94ADBE1229CF
W: Репозиторий 'http://packages.microsoft.com/repos/vscode stable InRelease' не подписан.
N: Данные из такого репозитория не могут быть аутентифицированы и поэтому потенциально опасны для использования.
N: См. man-страницу apt-secure(8) для подробностей о создании репозитория и конфигурации пользователя.
Любая идея?
[РЕДАКТИРОВАТЬ] Это мой source.list
deb http://ftp.univ-pau.fr/linux/mirrors/debian/ stretch main non-free contrib
deb-src http://ftp.univ-pau.fr/linux/mirrors/debian/ stretch main non-free contrib
deb http://security.debian.org/debian-security/ stretch/updates main contrib non-free
deb-src http://security.debian.org/debian-security/ stretch/updates main contrib non-free
# stretch-updates, ранее известный как 'затухание'
deb http://ftp.univ-pau.fr/linux/mirrors/debian/ stretch-updates main contrib non-free
deb-src http://ftp.univ-pau.fr/linux/mirrors/debian/ stretch-updates main contrib non-free
# stretch-backports, ранее на backports.debian.org
deb http://ftp.univ-pau.fr/linux/mirrors/debian/ stretch-backports main contrib non-free
deb-src http://ftp.univ-pau.fr/linux/mirrors/debian/ stretch-backports main contrib non-free
# deb [arch=amd64] https://download.docker.com/linux/debian/ stretch stable
# deb-src [arch=amd64] https://download.docker.com/linux/debian/ stretch stable
deb http://www.deb-multimedia.org/ stretch main non-free
deb [arch=amd64] http://packages.microsoft.com/repos/vscode stable main
Я понимаю, что это старый вопрос и, возможно, переполнен событиями (OBE)… Тем не менее…
Кажется, есть несколько проблем, которые случайно произошли одновременно.
Проблема 1: GPG публичные ключи репозитория Nodejs
У меня не было проблем с загрузкой ключей, поэтому, возможно, у репозитория были проблемы с подключением или какая-то другая ошибка в тот конкретный день.
Вот мой тест чтения публичных ключей репозитория:
$ curl -s https://deb.nodesource.com/gpgkey/nodesource.gpg.key |gpg --list-packets
# off=0 ctb=99 tag=6 hlen=3 plen=525
:public key packet:
version 4, algo 1, created 1402676406, expires 0
pkey[0]: [4096 bits]
pkey[1]: [17 bits]
keyid: 1655A0AB68576280
# off=528 ctb=b4 tag=13 hlen=2 plen=31
:user ID packet: "NodeSource <[email protected]>"
# off=561 ctb=89 tag=2 hlen=3 plen=568
:signature packet: algo 1, keyid 1655A0AB68576280
version 4, created 1402676406, md5len 0, sigclass 0x13
digest algo 2, begin of digest 74 e6
hashed subpkt 2 len 4 (sig created 2014-06-13)
hashed subpkt 27 len 1 (key flags: 03)
hashed subpkt 11 len 5 (pref-sym-algos: 9 8 7 3 2)
hashed subpkt 21 len 5 (pref-hash-algos: 8 2 9 10 11)
hashed subpkt 22 len 3 (pref-zip-algos: 2 3 1)
hashed subpkt 30 len 1 (features: 01)
hashed subpkt 23 len 1 (keyserver preferences: 80)
subpkt 16 len 8 (issuer key ID 1655A0AB68576280)
data: [4095 bits]
# off=1132 ctb=b9 tag=14 hlen=3 plen=525
:public sub key packet:
version 4, algo 1, created 1402676406, expires 0
pkey[0]: [4096 bits]
pkey[1]: [17 bits]
keyid: 6C5CDECAAA01DA2C
# off=1660 ctb=89 tag=2 hlen=3 plen=543
:signature packet: algo 1, keyid 1655A0AB68576280
version 4, created 1402676406, md5len 0, sigclass 0x18
digest algo 2, begin of digest 83 d0
hashed subpkt 2 len 4 (sig created 2014-06-13)
hashed subpkt 27 len 1 (key flags: 0C)
subpkt 16 len 8 (issuer key ID 1655A0AB68576280)
data: [4096 bits]
Проблема 2: GPG публичные ключи репозитория Microsoft
Проблема здесь в том, что публичные ключи Microsoft находятся в отдельном каталоге на сервере репозитория Microsoft.
Я нашел файл ключа по адресу:
https://packages.microsoft.com/keys/microsoft.asc
Вот мой тест чтения публичных ключей репозитория Microsoft:
$ curl -s https://packages.microsoft.com/keys/microsoft.asc |gpg --list-packets
# off=0 ctb=99 tag=6 hlen=3 plen=269
:public key packet:
version 4, algo 1, created 1446074508, expires 0
pkey[0]: [2048 bits]
pkey[1]: [17 bits]
keyid: EB3E94ADBE1229CF
# off=272 ctb=b4 tag=13 hlen=2 plen=55
:user ID packet: "Microsoft (Release signing) <[email protected]>"
# off=329 ctb=89 tag=2 hlen=3 plen=309
:signature packet: algo 1, keyid EB3E94ADBE1229CF
version 4, created 1446074508, md5len 0, sigclass 0x13
digest algo 2, begin of digest 1a 9b
hashed subpkt 2 len 4 (sig created 2015-10-28)
hashed subpkt 27 len 1 (key flags: 03)
hashed subpkt 11 len 5 (pref-sym-algos: 9 8 7 3 2)
hashed subpkt 21 len 3 (pref-hash-algos: 2 8 3)
hashed subpkt 22 len 2 (pref-zip-algos: 2 1)
hashed subpkt 30 len 1 (features: 01)
hashed subpkt 23 len 1 (keyserver preferences: 80)
subpkt 16 len 8 (issuer key ID EB3E94ADBE1229CF)
data: [2047 bits]
Проблема 3: Отсутствует слэш в URL репозитория
В вашей строке /etc/apt/sources.list
для репозитория Microsoft отсутствует слэш.
Эта строка:
deb [arch=amd64] http://packages.microsoft.com/repos/vscode stable main
Должна быть:
deb [arch=amd64] http://packages.microsoft.com/repos/vscode/ stable main
Полное решение
- Повторить попытку установки
nodejs
- Добавить отсутствующий слэш в
/etc/apt/sources.list
- Загрузить и добавить ключи подписания репозитория Microsoft:
curl -s https://packages.microsoft.com/keys/microsoft.asc |apt-key add -
Ответ или решение
Проблемы с установкой пакетов через apt
связаны с несколькими аспектами работы системы управления пакетами в Debian Stretch, а именно с использованием устаревшей версии Debian и некорректной работой с ключами GPG, необходимыми для подтверждения подлинности пакетов. Разберем проблему детально, применяя методику FOREST для структурированного решения:
F – Четко сформулируйте проблематику и ее причины
Ваша проблема имеет три причины. Первая связана с некорректной загрузкой GPG ключей для репозитория Node.js. Вторая касается отсутствия необходимых GPG ключей для репозитория Microsoft при попытке установки VSCode, что ведет к недоверенному источнику пакетов. Третья причина — структурная ошибка в вашем sources.list
, из-за которой адрес репозитория Microsoft некорректен.
O – Объясните важность решения проблемы
Эти проблемы препятствуют корректному обновлению и установке программ, что негативно сказывается на безопасности и функциональности системы. Устранение их позволит избежать как протоколов, не соответствующих последним стандартам безопасности, так и ошибок в процессе установки ПО.
R – Подтвердите актуальность проблемы
Ошибки, связанные с GPG ключами, встречаются часто при использовании внешних репозиториев, особенно если они не обновлялись долгое время. Это приводит к тому, что установка пакетов становиться небезопасной или невозможной.
E – Предложите ясное и последовательное решение
-
Повторите попытку установки Node.js:
Возможно, проблема была временной и связана с недоступностью сервера. Попробуйте снова:curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash - sudo apt-get install -y nodejs
-
Исправьте запись в sources.list:
Добавьте пропущенный слэш в URL репозитория Microsoft:deb [arch=amd64] http://packages.microsoft.com/repos/vscode/ stable main
-
Добавьте GPG ключи Microsoft:
curl -s https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
S – Подкрепите ваш подход
Эти действия помогут установить соответствие между ключами и репозиториями, увеличив доверие к загружаемым пакетам, и улучшат взаимодействие с механизмом управления пакетами в Debian
.
T – Настройте систему для предотвращения подобных проблем в будущем
Регулярно обновляйте систему и ключи репозитория, следите за появлением новых версий дистрибутива и рекомендаций сообщества. Это снизит вероятность повторного возникновения подобных проблем. Кроме того, при необходимости рассмотрите возможность использования более новых версий Debian или Ubuntu, поддерживающих более современные процессоры, такие как Ryzen, для лучшей совместимости.