web-dev-qa-db-ja.com

Ubuntu 16.04でdpkg-sigとGPG2を使用してDebパッケージに署名する方法は?

Debに署名してレポを作成するスクリプトがあります。問題を引き起こしている関連コードは以下のとおりです。

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

buntu 14.04パッケージ:

  • gnupg-1.4.16-1ubuntu2.3
  • gnupg-agent-2.0.22-3ubuntu1.3
  • gnupg2-2.0.22-3ubuntu1.3
  • gpgv-1.4.16-1ubuntu2.3

buntu 16.04パッケージ:

  • gnupg-1.4.20-1ubuntu3.1
  • gnupg-agent 2.1.11-6ubuntu2
  • 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/gpggpg2に設定したことを知っていますが、それは「デバイスの不適切なioctl 」。私はしばらく頭を叩いてきたので、どんな提案でも素晴らしいでしょう。

追加情報:

このスクリプトは、「Bamboo」のビルドジョブの一部として実行されます。パスワードは安全に保存されるため、環境変数としてパススルーされます。ただし、このアプリのパイプラインを変更するつもりはありません。

1
BelieveMe

${signPass}のパスフレーズは安全なストレージから来ていると言います。パスフレーズを安全に保存できる場合は、password-less secret keyを使用してキーチェーンを安全に保存することもできます。

  1. キーのパスワードを空に変更します。お気に入りのキーチェーンマネージャーまたは次のコマンドを使用できます。

    GNUPGHOME=... gpg2 --passwd user_id
    
  2. キーチェーンを安全なストレージに保管します。

  3. 安全に保存されたキーチェーンを使用するGPGオプションでdpkg-sigを実行します。

    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
David Foerster