Для безопасности пользователей, были введены ключи для репозитариев, чтобы подтверждать их надежность. Представьте себе, что будет, если в репозитарий покласть что-то лишнее =). С одной стороны, это хорошо, а с другой - не очень. В том плане, что новички просто теряются.
Иногда ключи нужно обновлять, а как это сделать знает не каждый. Представьте ситуацию: вы пытаетесь получить обновления, и консоль выдает вам что-то типа:
W: Ошибка: http://ppa.launchpad.net jaunty Release: Следующие подписи не могут быть проверены, так как недоступен открытый ключ: NO_PUBKEY BE80FFE08E772DB0
Проблема решается довольно просто. Возьмите последние 8 символов кода ключа. В нашем случае:
BE80FFE08E772DB0 -> 8E772DB0
И выполните 2 команды:
gpg --keyserver keyserver.ubuntu.com --recv 8E772DB0
Если все ок, то получаем:
gpg: запрашиваю ключ 8E772DB0 с hkp сервера keyserver.ubuntu.com
gpg: ключ 8E772DB0: открытый ключ “Launchpad PPA for Plasmoid” импортирован
gpg: Всего обработано: 1
gpg: импортировано: 1 (RSA: 1)
И вторая команда:
gpg --export --armor 8E772DB0 | sudo apt-key add --
--------------------------
Автоматизация добавления ключей:
Пользователь urusha внес и свои труды в эту тему. Создайте файл check_keys.sh, его вместимое:
#!/bin/sh
KEYS=`sudo apt-get update | awk '/NO_PUBKEY/ {print($NF)}'`
if [ -z $KEYS ]
then
echo "No missed public keys found."
else
echo "Missed public keys: $KEYS"
for KEY in $KEYS
do
gpg --keyserver keyserver.ubuntu.com --recv $KEY &&\
gpg --export --armor $KEY | sudo apt-key add -- &&\
echo "Public key $KEY has been added."
done
fi
А вот и мой скрипт на python (getkey.py):
# -*- coding: utf-8 -*-
import sys, os
if not 'linux' in sys.platform:
print 'This script is for linux only'
else:
if len(sys.argv) <= 1:
print 'No arguments'
else:
for i in range (len(sys.argv)-1):
sNeedKey = sys.argv[i+1][-8:]
sSysRequest = 'gpg --keyserver keyserver.ubuntu.com --recv {0} && gpg --export --armor {0} | sudo apt-key add --'.format(sNeedKey)
try:
os.system(sSysRequest)
except error:
print 'Can`t add need key: ' + str(error)
Использовать так (можно несколько ключей-аргументов):
python getkey.py BE80FFE08E772DB0
python getkey.py BE80FFE08E772DB0 4CF19C3233BAC1B3
Сейчас делаю инсталлер к скрипту, чтобы можно было глобально использовать
UPD: Сделал пакет, качаем приложенный файл к посту. Делаем распаковку, устанавливаем:
sudo python setup.py install
После этого наш скрипт будет прописан глобально в системе. В любой директории можно выполнить команду:
getkey.py BE80FFE08E772DB0
getkey.py BE80FFE08E772DB0 4CF19C3233BAC1B3
Скачать пакет можно по этому адресу (форум запретил такие вложения).
Думаю, что этот метод самый простый.