Как подписать пакет Deb с dpkg-сигналом и GPG2 в Ubuntu 16.04?

У меня есть сценарий, который используется, чтобы подписать deb и создать repo. Соответствующие нормы ниже этого, вызывает проблемы:

export GNUPGHOME=foo/gnupg/
killall -q gpg-agent
eval $(gpg-agent --daemon --homedir $GNUPGHOME --allow-preset-passphrase)
echo ${signPass} | /usr/lib/gnupg2/gpg-preset-passphrase --preset $fingerprint
dpkg-sig -g '--no-tty' --sign builder bar/baz/app.deb

Это работает над Ubuntu 14.04, но как только я пытаюсь работать, это на сервере с Ubuntu 16.04 установило ее, я получаю следующие ошибки:

dpkg-deb: building package 'app' in 'bar/baz/app.deb'.
Processing bar/baz/app.deb..
gpg: gpg-agent is not available in this session
gpg: Sorry, no terminal at all requested - can't get input
E: Signing failed. Error code: 512

Пакеты Ubuntu 14.04:

  • gnupg - 1.4.16-1ubuntu2.3
  • gnupg-агент - 2.0.22-3ubuntu1.3
  • gnupg2 - 2.0.22-3ubuntu1.3
  • gpgv - 1.4.16-1ubuntu2.3

Пакеты Ubuntu 16.04:

  • gnupg - 1.4.20-1ubuntu3.1
  • 2.1.11-6ubuntu2 gnupg-агент
  • gnupg2 - 2.1.11-6ubuntu2
  • gpgv - 1.4.20-1ubuntu3.1
  • gpgv2 - 2.1.11-6ubuntu2

Я знаю это dpkg-sig вызовы /usr/bin/gpg непосредственно, и я использовал update-alternatives установить /usr/bin/gpg быть gpg2 но это дает мне ошибки с “inappropiate ioctl для устройства”. Любые предложения были бы большими, поскольку я ударял по голове некоторое время.

Дополнительная информация:

Этот скрипт запущен как часть задания сборки на 'Бамбуке'. Через пароль проходят как переменная среды, поскольку он надежно хранится. Я не надеюсь изменять конвейер этого приложения все же.

1
задан 25 September 2017 в 13:43

1 ответ

Вы говорите, что пароль в ${signPass} прибывает из некоторого безопасного устройства хранения данных. Если можно сохранить пароль надежно, Вы могли бы также снабдить цепочку для ключей секретный ключ пароля меньше надежно.

  1. Изменение пароль ключа для освобождения. Можно использовать любимого менеджера по цепочке для ключей или следующую команду:

    GNUPGHOME=... gpg2 --passwd user_id
    
  2. Хранилище цепочка для ключей в безопасном устройстве хранения данных.

  3. Выполнение dpkg-sig с опциями GPG, которые используют надежно сохраненную цепочку для ключей:

    dpkg-sig --gpg-options "--secret-keyring /path/to/secret-keyring.gpg"
    
<час>

, Кроме того, можно использовать файл пароля непосредственно с dpkg-sig (, посмотрите редактирование ниже ):

dpkg-sig -f /path/to/pass-phrase ...

Вы могли даже использовать стандартный вход:

printf '%s' "${signPass}" | dpkg-sig -f - ...

Редактирование: кажется, что давнишняя ошибка повреждения -f опция, но можно работать вокруг этого через --gpg-options '--passphrase-file /path/to/pass-phrase' (за исключением того, что Вы не можете использовать имена файлов пароля с пробелом).

2
ответ дан 10 November 2019 в 10:22

Другие вопросы по тегам:

Похожие вопросы: