Mantendo o repositório e criando novos pacotes

Criando uma chave pública com GPG

Gerando a chave

O primeiro passo para configurar o repositório é criar uma chave encriptada com a qual serão assinados tanto o repositório quanto os pacotes. Para isso se utiliza o pacote gpg.

No terminal executar o comando

$ gpg --gen-key

Em seguida o programa pede algumas opções para criação da chave, na ordem:

  • Tipo de chave desejado (RSA, DSA, etc.)
  • Tamanho de chave (em bytes)
  • Tempo de validade

Para a maioria das aplicações não tem problema utilizar as opções default. O próximo passo é identificar o dono da chave informando seu nome completo, um email para contato, e um nickname, esses dados estarão disponíveis publicamente. Por último é necessário informar uma senha que será exigida ao se criar os pacotes e repositórios.

As configurações do usuário estão prontas, basta agora esperar sua máquina gerar entropia suficiente para garantir uma chave suficientemente randômica. Uma dica para acelerar esse processo é executar tarefas que façam muitos acessos em disco (esse tipo de ação gera bastante entropia). Para isso pode-se usar o comando

$ find /

Que irá buscar no disco todas entradas de arquivos que contenham o caractere '/'. Caso uma varredura não seja suficiente, pode-se executar o comando até a chave ficar pronta.

Exportando o arquivo de chave-pública

Antes de configurar o repositório é necessário gerar um arquivo para a chave-pública. Esse arquivo deve ser disponibilizado (através do repositório mesmo) para os usuários a fim de permitir a transferência de arquivos.

Para gerar a chave-pública executa-se

$ gpg --armor --output <nome>.gpg.key --export <key-id>

A entrada de <key-id> é o valor que identifica as chaves existentes na máquina e para encontrar seu valor é necesário listar todas chaves com

$ gpg --list-key

A saída desse comando desse conter algo do tipo

pub   2048R/F82EEF43 2015-05-01
uid                  Neo (the-chosen) <one@matrix.com>
sub   2048R/F742DFG3 2015-05-01

Nesse caso <key-id> é F742DFG3.

Agora basta guardar esse arquivo e tudo está configurado para começar a criar os pacotes.

Criando os metapacotes

Utilizando o programa meta.py

Para criar o arquivo .deb o sistema precisa de algumas informações - que estão melhor documentadas em Criando repositórios e pacotes assinados. Nessa seção estão algumas sugestões para cada paramêtro. O link para download se encontra no final da página.

  • Nome e Versão são autoexplicatívos
  • Seção recebe main, contrib, non-free dependendo da aplicação. Para o TropOS, usa-se geralmente main
  • Prioridade recebe required, important, standard, optional, extra. Por default tudo que não é essencial entra como optional, que é o caso da maioria dos metapacotes do TropOS
  • Arquitetura também é autoexplicativo, as opções mais comuns: i386, amd64, armel. O mesmo pacote pode suportar mais de uma arquitetura
  • Pacotes aqui é onde se escolhe quais o pacotes serão empacotados. É preciso escrever cada um tomando cuidado com a grafia - como especificado pelo programa
  • Mantenedor é o responsável por manter o pacote. Seu email será divulgado no repositório e é ele o responsável por manter os pacotes atualizados, consertar bugs, etc. Para assinar o pacote basta informar o nome do mantenedor da mesma maneira que foi informada na criação da chave (e.g. Neo (the-chosen) <one(at)matrix.com>), contanto que o pacote e chave tenham sido criados na mesma máquina.
  • Por fim, Descrição recebe uma breve descrição do pacote.

Tendo completado todas etapas, o programa pede onde salvar o arquivo .deb e encerra. A próxima etapa é criar um repositório para hospedar os metapacotes criados.

Criando um repositório

O pacote reprepro e os repositórios Debian-like

Os repositórios que seguem o estilo Debian devem conter uma certa estrutura de arquivos que é checada quando o usuário atualiza sua source.list sincronizar com um determinado repositório. Para facilitar as etapas de criação existe o pacote chamado reprepro, que configura todos arquivos necessários a partir de algumas entradas informadas num arquivo de entrada. Por não ser um pacote da instalação padrão antes de mais nada é necessário baixá-lo com apt-get.

Configurando o reprepro

Com o reprepro instalado deve-se escolher o local do repositório e preparar o arquivo de configuração. (OBS: essas etapas assumem que o web-servidor já foi configurado e que a pasta selecionada para criar o repositório será acessível para os usuários - mais informações sobre configurar web-servidor em: LINK)

Primeiramente, cria-se a pasta conf no diretório principal do repo

$ mkdir -p /var/www/project-X/repo/conf

em seguida cria-se o arquivo distributions dentro da pasta conf. Abaixo um template para um possível repositório. Ajuste como necessário

Origin: Nome do projeto
Label: Nome do projeto
Codename: <osrelease> (e.g. wheezy, jessie, etc.)
Architectures: i386 amd64
Components: main
Description: Repositório para o projeto X
SignWith: <key-id> 

Atenção para informar a <key-id> correta pois essa é chave que vai assinar o repositório e deve ser a mesma criada nas etapas anteriores.

Opcionalmente pode-se criar um segundo arquivo com as opções de montagem. No diretório conf criar o arquivo options. As opções a seguir são algumas sugestões

verbose
basedir /var/www/project-X/repo
ask-passphrase

verbose configura os retornos do processo, basedir configura aonde deve ser criada a estrutura de arquivos, e ask-passphrase faz com que a senha da chave seja exigida durante o processo, por segurança.

OBS: Pode-se aproveitar a pasta conf para fazer uma cópia do arquivo de chave-pública gerado nas etapas anteriores. Dessa maneira os usuários podem baixá-la facilmente.

Criando o repositório e adicionando os pacotes

O repositório agora está pronto para ser criado e isso é feito quando se adiciona o seu primeiro pacote usando o próprio reprepro através do comando

$ reprepro includedeb <osrelease> <debfile>

Nesse caso includedeb diz para o reprepro esperar um arquivo .deb, osrelease é uma versão do Debian, e debfile é o caminho completo até onde está salvo o arquivo.

Adicionado o primeiro pacote, o repositório está criado e basta repetir o mesmo comando para adicionar os demais pacotes.

Removendo pacotes

TODO

Atualizando o source.list

Os procedimentos dessa seção devem ser feitos para os usuários que desejam baixar os pacotes do repositório.

Baixando a chave-pública

Assumindo que a chave-pública foi disponibilizada na pasta conf como sugerido, o comando a seguir faz o download e já adiciona a chave à lista acessada pelo apt-get para conferir os seus repositórios de confiança

$ wget -O - http://www.domain.com/project-X/repos/conf/neo.gpg.key | sudo apt-key add -

Atualizando o source.list

Por último o usuário deve acessar o source.list da sua máquina e adicionar ao fim do arquivo as linhas a seguir

# Repositório do projeto X
deb http://www.domain.com/project-X/repo jessie main

Onde jessie e main devem ser alterados conforme as configurações do repo.

Feito isso, basta rodar o comando

$ sudo apt-get update

Quando a atualização terminar basta baixar o pacote adicionado utilizando apt-get install

Referências

Boa parte desse tutorial foi baseado na página disponibilizada pelo Debian. As informações sobre os arquivos de configuração do metapacote foram tiradas desse manual.


Página criada por Lucas Leal, publicada sob licença CC-BY-SA

meta.py - Script para criação de metapacotes do tipo .deb (3,5 KB) Lucas Leal, 06/05/2015 00:09