Назад | Перейти на главную страницу

Как правильно подписать измененный и перекомпилированный пакет?

Я побежал dpkg-buildpackage после получения apt-get source nginx версии backports nginx и изменение debian/rules чтобы включить модуль uwsgi. Последними результатами команды были:

dpkg-deb: building package `nginx' in `../nginx_0.7.67-3~bpo50+1_i386.deb'.
dpkg-deb: building package `nginx-dbg' in `../nginx-dbg_0.7.67-3~bpo50+1_i386.deb'.
 signfile nginx_0.7.67-3~bpo50+1.dsc
gpg: keyring `/home/shogun/.gnupg/secring.gpg' created
gpg: skipped "Faidon Liambotis <paravoid@debian.org>": secret key not available
gpg: [stdin]: clearsign failed: secret key not available

 dpkg-genchanges  >../nginx_0.7.67-3~bpo50+1_i386.changes
dpkg-genchanges: warning: the current version (0.7.67-3~bpo50+1) is smaller than the previous one (0.7.67-3)
dpkg-genchanges: not including original source code in upload
dpkg-buildpackage: binary and diff upload (original source NOT included)
dpkg-buildpackage: warning: Failed to sign .dsc and .changes file

Он жалуется, что, поскольку я не являюсь первоначальным сопровождающим пакета, мой ключ не совпал.

Действительно ли это необходимо, и если да, то как я могу использовать свои ключи для сопоставления gpg?

Пакеты Debian с подписью PGP не нужны, если вы создали их для личного использования. Это обычный метод аутентификации для (официальных) разработчиков Debian, когда они загружают новые пакеты в «нестабильную» ветку Debian.

Чтобы избежать сообщения об ошибке, просто используйте:

dpkg-buildpackage -uc -us

(см. также справочную страницу dpkg-buildpackage)

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

редактировать debian/changelog, и добавьте запись, имитирующую формат существующих записей. Датируйте его сегодня и выберите номер версии like 0.7.67-3~bpo50+meder1 (вы хотите то, для чего dpkg --compare-versions говорит, что ваша версия более свежая). Укажите свой адрес электронной почты в качестве сопровождающего; таким образом у вас будет четкое указание на то, что это пакет, который вы изменили, и dpkg-buildpackage запросит кодовую фразу GPG.

Если вы пользователь Emacs, установите dpkg-dev-el пакет и используйте C-c C-a и C-c C-c команды для добавления и завершения записи в журнале изменений.

При этом подписывать пакет не нужно, а -uc -us можно использовать параметры, чтобы избежать этого шага, также может быть полезно подписать пакет, особенно если его будут использовать другие, или вы будете отправлять его по незащищенным каналам связи. И это совсем не сложно.

Чтобы создать хорошую подпись, см. страница руководства для dpkg-buildpackage. По умолчанию он подписывает пакеты с помощью gpg. Судя по распечатанным сообщениям об ошибках, вы просто еще не сгенерировали ключ gpg. См. Например GnuPrivacyGuardHowto - Документация сообщества Ubuntu для некоторых инструкций и фона.

Как отмечает @Gilles, вам также следует изменить номер версии пакета через файл журнала изменений и указать адрес электронной почты для ключа gpg, который вы будете использовать. Легкий способ сделать это - просто запустить dch --local foo command, где "foo" - ключевое слово для изменения. Если вы действительно не хотите этого делать и вам нужно указать другое имя / адрес сопровождающего или загрузчика, или конкретный ключ, который будет использоваться при подписании, вы также можете использовать -m, -e или -k вариант при постройке.

Видеть Как пересобрать пакеты Debian для получения дополнительных советов.

Сложность возникает, когда кто-то пытается решить, подписан ли данный пакет тем, кому он доверяет. Загляните в сеть доверия PGP, чтобы разобраться с тонкими проблемами.