У меня есть сценарий, который используется, чтобы подписать 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:
Пакеты Ubuntu 16.04:
Я знаю это dpkg-sig
вызовы /usr/bin/gpg
непосредственно, и я использовал update-alternatives
установить /usr/bin/gpg
быть gpg2
но это дает мне ошибки с “inappropiate ioctl для устройства”. Любые предложения были бы большими, поскольку я ударял по голове некоторое время.
Дополнительная информация:
Этот скрипт запущен как часть задания сборки на 'Бамбуке'. Через пароль проходят как переменная среды, поскольку он надежно хранится. Я не надеюсь изменять конвейер этого приложения все же.
Вы говорите, что пароль в ${signPass}
прибывает из некоторого безопасного устройства хранения данных. Если можно сохранить пароль надежно, Вы могли бы также снабдить цепочку для ключей секретный ключ пароля меньше надежно.
Изменение пароль ключа для освобождения. Можно использовать любимого менеджера по цепочке для ключей или следующую команду:
GNUPGHOME=... gpg2 --passwd user_id
Хранилище цепочка для ключей в безопасном устройстве хранения данных.
Выполнение 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'
(за исключением того, что Вы не можете использовать имена файлов пароля с пробелом).