Gerando Pacotes Debian com o jenkins debian glue - Pandorgalinux/distro GitHub Wiki

  1. Assinando Pacotes

O que é uma Assinatura Digital: Ao criar uma assinatura digital, é possível assinar digitalmente um arquivo, E-mail ou mensagem de forma que, caso ela seja alterada, este não poderá ser mais verificado. Isto garante a integridade da mensagem, mas neste caso, não sua criptografia.

Ao criar uma assinatura, um chave privada e uma pública serão criadas. Com a chave privada, assina-se os arquivos, e com a chave pública, pode-se verificar se o arquivo é mesmo íntegro ou foi alterado. A chave privada deve ser guardada de forma que somente a pessoa que a criou possa usa-la. Normalmente, ela deve ser protegida por senha para aumentar sua segurança. Já a chave pública deve ser disponibilizada para quem deseja verificar a integridade do arquivo. Existem servidores públicos de chaves como o Debian Public Key Server que vamos usar mais tarde.

"As chaves públicas e privadas são armazenadas nos arquivos pubring.gpg e secring.gpg respectivamente, dentro do subdiretório ~/.gnupg de sua pasta pessoal ($HOME). Convém tirar um cópia de segurança desses arquivos, para isso basta copiar os arquivos citados acima em uma mídia segura (pen-drive, CD-ROM, etc)." GnuPG Ubuntu Wiki

Os pacotes usados no live-wrapper precisam ser assinados e estarem em repositórios também assinados com assinaturas públicas. Os seguintes passos serão necessários para criar o pacote Debian:

  • Criar uma assinatura digital utilizando o gnuPG2
  • Exportar a assinatura
  • Importar a assinatura no servidor que irá gerar o pacote
  • Configurar o jenkins-debian-glue para usar assinaturas digital
  • Enviar a assinatura à um servidor público, no nosso caso o do Debian

1.1 Criando uma assinatura digital com o gnuPG2

Para esta etapa, você ter instalado o gpg2: # apt-get install gnupg2

Para criar uma nova assinatura, usa-se o seguinte comando: # gpg2 --gen-key

Será perguntado seu nome e endereço de e-mail como no exemplo a seguir: `Nome completo: Pandorga GNU/Linux Team Endereço de correio eletrônico: [email protected] Comentário: Você selecionou este identificador de usuário: "Pandorga GNU/Linux Team [email protected]"

Muda (N)ome, (C)omentário, (E)ndereço ou (O)k/(S)air? O `

Por fim sua chave será criada e importada para seu usuário. Vamos verificar:

# gpg2 --list-keys --keyid-format LONG

pub rsa2048/B0EDC6B772BBE2F4 2017-10-07 [SC] [expira: 2019-10-07] E105B3A88F88C7B191DDBFCBB0EDC6B772BBE2F4 uid [ ultimativ ] Pandorga GNU/Linux Team <[email protected]> sub rsa2048/354B092B43DD53CF 2017-10-07 [E] [expira: 2019-10-07]

OBS: No Debian, temos que usar o parâmetro --keyid-format LONG para exibir o número da chave. Esta será importante na hora de exporta-la ou gerar o pacote assinado.

1.2. Exportando a assinatura digital

Vamos exportar a assinatura como back-up e também para enviar ao servidor de Debian. Primeiro vamos exportar a chave pública:

# gpg2 --export B0EDC6B772BBE2F4 > public.key

Note que o ID da chave "B0EDC6B772BBE2F4" foi mostrado no comando anterior, você deve usar o ID gerado em sua chave.

Agora vamos exportar a chave privada:

# gpg2 --export-secret-key B0EDC6B772BBE2F4 > secret.key

Pronto, temos a assinatura e exportamos as chaves 👍

1.3 Opcional: Importando a chave privada no servidor que irá gerar o pacote Debian

Caso o computador ou usuário que irá gerar os pacotes não seja o mesmo que você criou a assinatura, deve-se importar a chave privada. Mas cuidado para não expor sua assinatura à outras pessoas.

Envie a chave privada ao servidor e depois importe-a: $ gpg2 --import secret.key

1.4 Configurando o jenkins-debian-glue para assinar os pacotes Debian

Para configurar o plugin do jenkins-debian-glue, basta editar o arquivo /etc/jenkins/debian_glue e adicionar a opcao a seguir:

KEY_ID=B0EDC6B772BBE2F4

Isto fará com que o jenkins use esta chave para assinar os pacotes e também o repositório Debian.

OBS: Pode ser que o plugin não encontre a chave privada, como alternativa, adicione do link simbólico no diretório de instalação do jenkins para o Home do usuário que roda o Jenkins (neste exemplo o "jenkins"):

# ln -s /home/jenkins/.gnupg/ /opt/jenkins/.gnupg

No logs do Jenkins é possível encontrar informacoes sobre a assinatura:

`

  • '[' -n B0EDC6B772BBE2F4 ']'
  • echo '*** Found environment variable KEY_ID, set to B0EDC6B772BBE2F4, signing source package ***' *** Found environment variable KEY_ID, set to B0EDC6B772BBE2F4, signing source package *** ++ which debsign
  • '[' -x /usr/bin/debsign ']'
  • debsign -kB0EDC6B772BBE2F4 ../pandorga-base_6.0.1+020171007132217.81.gbpacd931_source.changes signfile dsc ../pandorga-base_6.0.1+020171007132217.81.gbpacd931.dsc B0EDC6B772BBE2F4`

1.5 Enviando a chave ao servidor público do Debian

Agora que os pacotes e o repositório estão assinados, é preciso enviar a chave ao servidor de chaves públicas do Debian para que o APT reconheça e aceite sua chave.

gpg2 --keyserver keyring.debian.org --send-keys B0EDC6B772BBE2F4

Pronto. Porém o servidor atualiza seu banco de dados quase que mensalmente, até lá é preciso ter paciência...

Enquanto isso, você pode adicionar a chave pública manualmente:

apt-key add public.key

public.key é o arquivo exportado no passo 1.2

⚠️ **GitHub.com Fallback** ⚠️