Como assinar um pacote Deb com dpkg-sig e GPG2 no Ubuntu 16.04?

1

Eu tenho um script que é usado para assinar um deb e construir um repo. O código relevante está abaixo disso e está causando problemas:

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

Isso está funcionando no Ubuntu 14.04, mas assim que eu tento rodar isso em um servidor com o Ubuntu 16.04 instalado, eu recebo os seguintes erros:

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

Pacotes do Ubuntu 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

Pacotes do Ubuntu 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

Eu sei que dpkg-sig chama /usr/bin/gpg diretamente e usei update-alternatives para definir /usr/bin/gpg como gpg2 , mas isso me dá erros com "ioctl inadequado para dispositivo". Qualquer sugestão seria ótima, já que estou batendo com a cabeça por um tempo.

Informações adicionais:

Este script é executado como parte de um trabalho de construção no 'Bamboo'. A senha é passada como uma variável de ambiente, pois é armazenada com segurança. Eu não estou olhando para mudar o pipeline deste aplicativo embora.

    
por BelieveMe 25.09.2017 / 22:07

1 resposta

1

Você diz que a frase secreta em ${signPass} vem de algum armazenamento seguro. Se você puder armazenar uma frase secreta com segurança, também poderá armazenar um chaveiro com chave secreta sem senha com segurança.

  1. Altere a senha da chave para vazia. Você pode usar seu gerenciador de cadeias de chaves favorito ou o seguinte comando:

    GNUPGHOME=... gpg2 --passwd user_id
    
  2. Armazene o chaveiro no armazenamento seguro.

  3. Execute dpkg-sig com opções de GPG que usam o chaveiro armazenado com segurança:

    dpkg-sig --gpg-options "--secret-keyring /path/to/secret-keyring.gpg"
    

Como alternativa, você pode usar um arquivo de frase secreta diretamente com dpkg-sig ( veja a edição abaixo ):

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

Você pode até usar a entrada padrão:

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

Editar: parece que um erro de longa data quebra a opção -f , mas você pode contorná-la via --gpg-options '--passphrase-file /path/to/pass-phrase' (exceto que você não pode usar nomes de arquivos de frase secreta com espaço em branco).

    
por David Foerster 25.09.2017 / 23:01