Gerando Pacotes Debian com o jenkins debian glue - Pandorgalinux/distro GitHub Wiki
- 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+0
20171007132217.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