![]() |
|||
![]() |
|||
![]() |
|||
![]() |
|||
![]() |
Если оно кому нужно, то архив вот (правой кнопкой > сохранить как), подпись здесь. Скрипт пригоден для автоматической работы по крону. Помимо прочего добавил в него дополнительный логгинг: все неудачные сверки подписей будут выводиться в authpriv с приоритетом warning. Разумеется, если подпись по той или иной причине не сверяется, скрипт немедленно прерывает исполнение ещё до синхронизации снапшота с рабочим деревом портежа в /usr/portage. Для установки скопируйте сам emerge-delta-webrsync и небольшой скрипт-хэлпер gpg-check-file.py в /usr/bin или иной каталог, прописанный в PATH. Затем добавьте в /etc/make.conf следующие переменные: SNAPSHOT_GPG_KEY="отпечаток ключа Gentoo Portage Snapshot Signing Key", которым заверяются снапшоты. (Если что, отпечаток текущего ключа, действующего до конца года, -- AE54 54F9 67B5 6AB0 9AE1 6064 0838 C26E 239C 75C4. Скопировать можно в таком виде, с пробелами или без, в любом регистре.) Эта переменная обязательна, без неё скрипт откажется работать. PORTAGE_GPG_DIR="путь к домашнему каталогу GnuPG, где находится связка с указанным выше ключом". Отсутствие этой переменной (в отличие от предыдущей) некритично, по умолчанию принимается путь /root/.gnupg, но тогда убедитесь, что открытый ключ Portage Snapshot Signing Key действительно находится на связке ключей у рута. DELTASYNC_MIRRORS="разделённый запятыми список зеркал для скачивания дельт и снапшотов". Поскольку я использую разные зеркала для получения дельт и исходников, посчитал такое расширение для себя удобным. Но если не хочется держать два списка, то при отсутствии этой переменной используются зеркала из основного списка GENTOO_MIRRORS. Залогиньтесь рутом, скачайте ключ, заверяющий снапшоты, и заверьте его неэкспортируемой подписью (или что там предусматривает ваша политика сертификации): gpg --keyserver subkeys.gpg.net --recv-key 0x239C75C4 gpg --lsign 0x239C75C4 В случае проблем сообщайте. ДОБАВЛЕНО (30.05): Отредактировал постинг в соответствии с изменениями в скрипте. Спасибо Mellon'у за дельные советы. ДОБАВЛЕНО (04.01): Бэкпорт багфикса #299443 из официальной версии emerge-delta-webrsync-3.5.1-r3 (случилась локальная Проблема-2010): sed 's/portage-200\*/portage-2[[:digit:]][[:digit:]][[:digit:]][[:digit:]][[:digit:]][[:digit:]][[:digit:]]/g'
|
Вообще чтение комментариев к этому багрепорту оставляет стойкое впечатление, что мэйнтейнеры какбэ не совсем понимают, как использовать инфраструктуру OpenPGP. |
Также имеет место проблема, с которой я уже не знаю, куда рыть. Если запускать emerge-delta-webrsync в шелле вручную, то всё работает на ура. Однако, когда он запускается кроном, стабильно не может проверить подпись, жалуясь на отсутствие ключа. Диагностирование показало, что крон исполняет скрипт от рута, хотя и не передевая в окружение переменную HOME. Однако, хэлпер запускает gpg с параметром --homedir /root/.gnupg; кроме того, я уже пробовал принудительно устанавливать HOME=/root и GNUPGHOME=/root/.gnupg в переменных окружения внутри хэлпера, но gpg всё равно сообщает, что такого ключа нет. Какие у вас соображения? |
Всё же для меня остаётся неясным, почему параметр --homedir, явно передаваемый gpg изначально, не имел необходимого действия. GnuPG явно полагался на наличие переменной HOME. |
% sh sh-3.2$ echo $HOME /home/user sh-3.2$ gpg --list-keys &>/dev/null && echo succes succes sh-3.2$ unset HOME sh-3.2$ gpg --list-keys &>/dev/null && echo succes || echo fail fail sh-3.2$ gpg --homedir=/home/user/.gnupg --list-keys &>/dev/null && echo succes || echo fail succes =app-shells/bash-3.2_p39 =app-crypt/gnupg-2.0.11 а теперь посмотрим, что ты там намутил :) |
в общем есть что исправить, например, homedir надо брать PORTAGE_GPG_DIR из make.conf; поправить SNAPSHOT_GPG_KEY. пока на этом вроде всё. А, ещё убери оттуда update-eix, его вызов оттуда не юниксвей, лучше сделай алиас, или обертку над этими узкоспецифичными скриптами. Удачи |
в общем, понятно, ты думаешь --homedir == $HOME, а на самом деле это дира где конфиги лежат с ключами: --homedir $HOME/.gnupg. Ну здрасти, а что я с самого начала передавал gpg --homedir? Тот самый /root/.gnupg. Если параметр --homedir опущен, то да, gpg действительно выстраивает путь к конфигу как $HOME/.gnupg. Но здесь-то он был задан явно, как в твоём последнем тесте. А, ещё убери оттуда update-eix, его вызов оттуда не юниксвей, лучше сделай алиас, или обертку над этими узкоспецифичными скриптами. А, это моё хозяйство, затесалось из рабочего скрипта. Исправлю, остальные замечания тоже учту. |
- Отпечаток ключа указывается в переменной SNAPSHOT_GPG_KEY в /etc/make.conf. - Пусть к домашнему каталогу gpg задаётся в стандартной переменной PORTAGE_GPG_DIR в /etc/make.conf. Если переменная не задана или пуста, используется умолчальный путь /root/.gnupg. - Введена проверка на наличие переменной SNAPSHOT_GPG_KEY. Если отпечаток не указан, исполнение прерывается с ошибкой. - Вызов update-eix убран из скрипт. |
- Переменная DELTASYNC_MIRRORS теперь опциональна. При её отсутствии используются зеркала, заданные в GENTOO_MIRRORS. |
http://www.gentoo.org/proj/en/releng/#doc_chap5 |
|
|