Clone trooper e wall-e empilhando pacotes

Neste post irei mostrar como configurar um repositório de pacotes Debian GNU/Linux usando dput + mini-dinstall + nginx. O Debian é um sistema operacional livre criado e mantido por um grupo independente de desenvolvedores espalhados pelo mundo, o projeto foi iniciado em 1993 e tem sido desenvolvido abertamente desde então sempre seguindo o espírito do projeto GNU.

Uma das características mais interessantes do Debian é o seu sistema de gerenciamento de pacotes.

“Um sistema de gerenciamento de pacotes é uma coleção de ferramentas que oferece um método automático para instalar, atualizar, configurar e remover pacotes de um sistema operacional. É tipicamente usado em sistemas operacionais tipo Unix, que consistem de centenas de pacotes distintos, para facilitar a identificação, instalação e atualização” (fonte: Wikipédia)

O sistema de gerenciamento de pacotes Debian chamado APT foi criado originalmente pelos desenvolvedores do projeto e lançado pela primeira vez em 9 Março de 1999 no Debian 2.1 (Slink) e conta hoje com um total de 44893 pacotes (44 mil !!!) em seus repositórios oficiais. Esta enorme quantidade de softwares disponíveis nos repositórios oficiais do projeto torna extremamente simple pesquisar, instalar, atualizar ou remover qualquer coisa do computador.

Os pacotes disponibilizados nos repositórios oficiais do Debian passam por um rígido controle de qualidade liderado pelos desenvolvedores oficiais do projeto e aberto à contribuição de qualquer pessoa. Então se você está empacotando algo veja o Guia do Novo Mantenedor Debian para saber como incluir isso nos repositórios oficiais.

Mas se isso não for possível ou se você não puder esperar o pacote entrar no Debian seja por qual motivo for, então a solução será criar um repositório pessoal ou Private Package Archive (PPA). É isto que será descrito aqui a partir de uma solução proposta inicialmente por Stefano Zacchiroli em seu blog no post howto: uploading to people.d.o using dput.

Atenção! Todas as instruções a seguir são baseadas em meu próprio ambiente, isto inclui nomes de usuários, domínios, diretórios, etc. Você deve adaptar estas informações com base em sua realidade.

Configurando o servidor para receber pacotes

  • Sistema Operacional: Debian Wheezy
  • Domínio: debian.joenio.me

Acesse o servidor via SSH e instale o mini-dinstall:

mini-dinstall is a tool for installing Debian packages into a personal APT repository


# apt-get install mini-dinstall

Crie o diretório onde os pacotes serão copiados:


$ mkdir -p ~/debian.joenio.me/mini-dinstall/incoming

Crie o arquivo ~/.mini-dinstall.conf:

[DEFAULT]
mail_on_success = false
incoming_permissions = 0750
architectures = all, i386, amd64
archive_style = flat
dynamic_reindex = 1
archivedir = /home/joenio/debian.joenio.me/
generate_release = 1
release_label = Joenio
release_description = Unofficial Debian packages maintained by Joenio Costa
verify_sigs = 0

Preparando a estação de trabalho para enviar pacotes

  • Sistema Operacional: Debian Testing

Instale o dput em seu computador:

dput allows you to put one or more Debian packages into the archive


# apt-get install dput

Exporte sua chave pública GnuPG para para o arquivo signing.asc.


$ gpg --armor --output signing.asc --export D5609CBE

D5609CBE é a minha chave, substitua este valor pelo identificador da sua própria chave.

Copie o arquivo signing.asc para o servidor:


$ scp signing.asc debian.joenio.me:~/debian.joenio.me/

Crie arquivo ~/.dput.cf em seu $HOME:

[debian.joenio.me]
fqdn = debian.joenio.me
method = scp
login = *
incoming = ~/debian.joenio.me/mini-dinstall/incoming
allow_unsigned_uploads = 0
post_upload_command = ssh debian.joenio.me mini-dinstall -b && sign-remote --no-batch debian.joenio.me:debian.joenio.me/unstable/Release

Os pacotes serão assinados com a chave GnuPG ao serem enviados pelo dput ao servidor. Isso será feito pelo script sign-remote disponível aqui. Copie este arquivo em seu computador e adicione a localização dele ao $PATH, se não sabe do que estou falando leia isso.

O dput irá reclamar se a distribuição do pacote não for unstable, isto é definido no arquivo changelog do pacote, veja o capítulo 4 Required files under the debian directory no Guia do Novo Mantenedor Debian para entender como fazer isso.

Bem, aqui já temos tudo pronto para fazer upload dos nossos pacotes ao servidor, basta executar o seguinte comando:


$ dput debian.joenio.me <pacote>.changes

Isto irá copiar o pacote .deb e o arquivo .changes dele, irá atualizar os arquivos Sources e Packages com as informações do pacote e irá assinar o arquivo Release com a chave pública GnuPG.

Disponibilizando acesso ao repositório publicamente

Até aqui já temos um repositório com pacotes hospedados, mas sem acesso público aos pacotes ninguém poderá utilizá-lo. Para resolver isto vamos configurar acesso via HTTP usando o servidor web Nginx.

Instale o Nginx no servidor:


# apt-get install nginx

Crie o arquivo de configuração /etc/nginx/sites-available/debian.joenio.me:

server {
  server_name debian.joenio.me;
  access_log /var/log/nginx/debian.joenio.me.access.log;
  location / {
    root /home/joenio/debian.joenio.me;
    autoindex on;
  }
}

Habilite o arquivo de configuração e reinicie o serviço:


# cd /etc/nginx/sites-enabled/
# ln -s /etc/nginx/sites-available/debian.joenio.me
# service nginx restart

Com o Nginx configurado e rodando já temos o repositório e seus pacotes disponíveis no seguinte endereço:

Testando o repositório e instalando pacotes

Para usar este repositorio adicione as seguintes entradas no /etc/apt/sources.list do computador local:

deb http://debian.joenio.me unstable/
deb-src http://debian.joenio.me unstable/

Adicione a chave de assinatura ao banco de dados de segurança do APT:


# wget -O - http://debian.joenio.me/signing.asc | apt-key add -

Atualize a lista de pacotes e teste a instalação de algum pacote disponível no repositório:


# apt-get update
# apt-get install <pacote>

Pronto, temos o nosso próprio repositório de pacotes Debian disponível publicamente. Você pode agora publicar qualquer pacote que esteja criando e divulgar o endereço do repositório para que outros usuários Debian possam instalar os seus pacotes mais facilmente.

Na wiki do Debian em How to setup a Debian repository tem uma lista de ferramentas para configuração de repositórios Debian, não usei a maioria das ferramentas listadas lá, mas dentre elas o aptly parece uma boa opção para criar repositório pessoal de pacotes Debian e pode ser uma boa alternativa para o setup descrito aqui neste post.

Sobre a foto no título deste post: Os cubos (pacotes) de papel utilizados na imagem foram feitos seguindo o tutorial "Como Fazer um Cubo de Origami" .