LINUX.ORG.RU

Ошибка подписи deb пакета: «signing failed: No data callback in IPC»

 , , ,


1

1

Пытаюсь подписать deb пакет

dpkg-sig -g "--passphrase MyPass" -k MYKEY5 -s builder ./my-package.deb

В ответ получаю:

Processing ./my-package.deb...
gpg: using "MYKEY5" as default secret key for signing
gpg: signing failed: No data callback in IPC
gpg: /tmp/debsigs-ng.TdvFQv/digests: clear-sign failed: No data callback in IPC
E: Signing failed. Error code: 512

Пробовал подписывать текстовый файл, результат примерно аналогичный:

$ debsign -k MYKEY5 test.dsc
 signfile dsc test.dsc F258BC0E
gpg: signing failed: No data callback in IPC
gpg: /tmp/debsign.UO8dLraz/test.dsc: clear-sign failed: No data callback in IPC
debsign: gpg error occurred!  Aborting....

ОС: Ubuntu 18.04

$ gpg --version
gpg (GnuPG) 2.2.4
libgcrypt 1.8.1

...

Версия dpkg-sig: 0.13.1+nmu4

Подскажите, куда копать?

       --passphrase string
              Use string as the passphrase. This can only be used if only  one
              passphrase  is supplied. Obviously, this is of very questionable
              security on a multi-user system. Don't use this  option  if  you
              can  avoid  it.   Note  that this passphrase is only used if the
              option --batch has also been  given.   This  is  different  from
              GnuPG version 1.x.
Zubok ★★★★★ ()
Ответ на: комментарий от Zubok

Всё равно. Даже пароль не спрашивает.

С ключами в .gnupg всё в порядке.

Сейчас попробовал подписать пакет через Docker и он успешно подписался:

$ docker run -it -v /home/eennoott/.gnupg:/root/.gnupg -v $PWD:/packages debian:stretch

root@36f7db9907d6:/packages# apt update && apt install gpg dpkg-sig
root@36f7db9907d6:/packages# export GPG_TTY=$(tty)
root@36f7db9907d6:/packages# dpkg-sig -k F258BC0E -s builder ./gameap-daemon_2.1-32trusty_amd64.deb 
Processing ./gameap-daemon_2.1-32trusty_amd64.deb...
gpg: WARNING: unsafe ownership on homedir '/root/.gnupg'
gpg: WARNING: unsafe ownership on homedir '/root/.gnupg'
gpg: using "F258BC0E" as default secret key for signing
Signed deb ./gameap-daemon_2.1-32trusty_amd64.deb

Docker контейнер следующий:

Debian Stretch

# gpg --version
gpg: WARNING: unsafe ownership on homedir '/root/.gnupg'
gpg (GnuPG) 2.1.18
libgcrypt 1.7.6-beta

Версия dpkg-sig: 0.13.1+nmu4

EENNOOTT ()
Ответ на: комментарий от EENNOOTT

Вообще, в Debian *.deb не подписывают. Подписывают репозитории. То есть возможность есть такая, но этого никто не делает. Я не видел. В rpm тоже есть подпись, но, насколько я знаю, она подерживается. В Debian подпись может быть даже проигнорирована без конфигурирования dpkg (я не понмю этого момента, надо проверить). Обычно делают локальные репозитории и их подписывают. А дальше все их них ставят, предварительно добавив ключ.

У тебя при установке подписанного пакета через dpkg требует ключ или молча ставит?

Zubok ★★★★★ ()
Последнее исправление: Zubok (всего исправлений: 1)
Ответ на: комментарий от Zubok

В Debian *.deb точно подписывают. И репозитории тоже подписывают, тем же ключом, что и пакеты. APT будет ругаться, если установить неподписанные пакеты из репозитория. Собственно, утилиты debsigs и dpkg-sig для этого и созданы, чтобы пакеты подписывать.

EENNOOTT ()
Ответ на: комментарий от EENNOOTT

Как я понял, от версии GPG ничего не зависит. Это я понял, когда скопировал весь .gnupg на соседнюю, чистую Ubuntu 18.04. Попробовал подписать и всё получилось.

Однако, не знаю ещё куда копать, чтобы исправить ошибку в ОС за которой я работаю.

EENNOOTT ()
Ответ на: комментарий от EENNOOTT

В Debian *.deb точно подписывают.

Не подписывают. Там подпись отдельно идет на уровне репозитория (файл .dsc, но для source). Она не идет внутри пакета. Вот почитай документ:

https://blog.packagecloud.io/eng/2014/10/28/howto-gpg-sign-verify-deb-package...

И дочитай до этого:

dpkg support for dpkg-sig

Unfortunately, dpkg does not have built-in support for dpkg-sig, but the discussion appears to have been moved to a bug ticket with Debian (last updated in 2012): https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=340306.

Zubok ★★★★★ ()
Последнее исправление: Zubok (всего исправлений: 1)
Ответ на: комментарий от EENNOOTT

Нет, я считаю, что подпись deb-пакета нужна и в баге были разговоры про то, как это вернуть правильно (раньше это работало как-то), но сейчас общепринятого механизма класть подпись в *.deb нет. Это плохо, когда файл достался в отрыве от репозитория и вообще непонятно, откуда он. Раньше, если я правильно помню, skype, opera и др. (virtualbox?) делали свои apt-репозитории для Debian/Ubuntu, которые надо было прописать в sources.list и добавлять key. Потом, кажется, все они или часть из них перестали держать репозитории и распространяли просто *.deb, которые не были подписаны, ничего не проверялось.

Я. например, держу у себя подписанный локальный репозиторий, где собираю отдельные программки под Debian. Репозиторий подписан, добавлен в sources.list.d. Так и живу. В общем, либо забивай на подпись *.deb, либо начинай развертывать локальный репозиторий и apt-ом ставить.

Zubok ★★★★★ ()
Ответ на: комментарий от Zubok

Пакеты в Debian, увы, обычно не подписываются. При загрузке в репозиторий сопровождающим подписываются файлы .dsc с перечислением исходников и файлы.changes, в который dpkg-buildpackage (dpkg-genchanges на самом деле, но неважно) складывает информацию для загрузки в репозиторий. В этом файле есть хэши всех бинарных пакетов, которые только что собрали. Так что можно, например, положить его рядом с .deb для проверки. Автоматически проверка не происходит.

Я посмотрел на dpkg-sig. Действительно, эта штука подписывает .deb. Скажем,

dpkg-sig --sign builder <package>.deb
кладет в .deb дополнительный файлик _gpgbuilder с подписью, которую сам же может проверить. Так что если распространять только .deb, то это вполне себе выход. Только нужно писать инструкцию, как проверять эту подпись, это весьма малоизвестная вещь.

В репозитории подписывается файл с метаданными, пакеты обычно не подписываются, но этого вполне достаточно.

TeopeTuK ★★ ()
Ответ на: комментарий от Zubok

Да, на всякий случай добавлю, что воспроизвести ошибку «No data callback in IPC» не удалось. На багтрекере есть такой баг: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=914728 Однако ничего полезного в нем не нашлось.

TeopeTuK ★★ ()