Usando o Dropbox como um repositório de pacotes para o yum

Já faz um bom tempo que tenho investido meu aprendizado na criação pacotes rpm para o fedora.  Como criei pacotes de alguns softwares que não encontrei nos repositórios oficiais ou ainda que não são livres — mas muito úteis — decidi criar um repositório simples, de forma que eu pudesse compartilhar com amigos que estivessem interessados em tê-lo também em seus sistemas e evitar a ideia de ter de instalar o software através dos fontes direto o que, diga-se, é tedioso.  O desafio era saber onde diabos eu iria colocar esses pacotes de forma que ficassem acessíveis 24 horas por dia, além de me permitir atualizá-los sempre.

Oras, a solução estava na minha frente, mas demorou para eu perceber. Minha conta no Dropbox tem todas as boas qualidades que permitem criar um repositório e manter os pacotes lá! E não existe limite de tamanho do arquivo se você carregá-lo pela interface com o nautilus (desde que não ultrapasse  a sua quota,  é claro!).  A desvantagem é que ele não me permite listar o conteúdo do diretório quando o acesso é feito pela interface web, mas existe uma maneira elegante de corrigir esse problema através do repoview…

Vou então assumir que você tenha algum pacote rpm modificado, criado por você ou qualquer coisa assim e esteja numa situação parecida com a minha. Vou também assumir que você já tem o nautilus-dropbox instalado no seu fedora e funcionando sem problemas. E por último, também irei considerar que você tem consciência que seus pacotes não podem entrar em conflito com os repositórios do fedora e de preferência, com nenhum outro, além de ter em mente que essa solução é para um uso pessoal, nada de querer fazer algo grande dessa maneira…

Primeiramente, vamos criar uma estrutura de diretórios para os pacotes binários e para os fontes (você vai distribuir os fontes também, não é?):

onde estou criando uma estrutura que conterá os pacotes para fedora 13  e 14,  bem como conterá pacotes de 32 e 64 bits,  além do pacote rpm contendo os fontes do mesmo.  Mude para a(s) versão(ões) que você deseja acima.

Perfeito, agora você deve mover os seus binários de 32 bits para os diretórios i386 e os binários de 64 bits para os diretórios x86_64 , de acordo com a versão do fedora em que foi compilado o pacote. Mova também os fontes do pacote para os diretórios SRPMS para o caso de alguém querer ter acesso a eles.

Depois de mover esses pacotes, precisamos criar os metadados que o yum irá baixar para obter informações sobre o seu repositório. Você pode fazer isso com o comando createrepo. Para isso, acesse os diretórios i386, x86_64 e SRPMS e crie os metadados em cada um deles:

A opção -d, passada ao comando createrepo,  é necessária para criar um banco de dados em sqlite que será usado pelo comando repoview. Isso irá criar um diretório chamado repodata nos diretórios em questão e ele conterá informações sobre os pacotes presentes em cada um desses. É ele que o yum acessa e busca por informações de pacotes presentes no seu repositório. Sempre que mexer nos pacotes ou atualizá-los , rode o comando createrepo da maneira acima, mas também com a opção –update para atualizar esses dados. A fim de não ter de realizar esse serviço repetitivo, decidi criar um script que o faz sempre que você colocar novos pacotes nesse diretório. O script repo-update-metadata.sh é o responsável por isso. Baixe-o, coloque em algum diretório no seu PATH e execute-o sempre que colocar ou atualizar pacotes nesses diretórios. Você pode alterá-lo como quiser, mas assim ele já deve estar funcionando sem grandes problemas.

repo-update-metadata.sh

 

Dica: Aguarde até que os rpms tenham sido completamente sincronizados e então depois crie os metadados. Caso contrário, pode acontecer de os metadados serem enviados primeiro que os pacotes e isso não seria uma boa coisa.

Se você tentar listar um diretório público no Dropbox, irá sempre se deparar com uma mensagem de erro, mas seria interessante que seus amigos pudessem ter acesso a informações a respeito do software bem como quais softwares você colocou no seu repositório. O programa repoview permite que você crie páginas HTML estáticas com todas as informações dos pacotes. Um exemplo de página assim é usada para os pacotes no repositório RPMFusion. Veja aqui.

Assim,  se você criar uma página HTML desse tipo, poderá enviar o link para qualquer pessoa que ela poderá visualizá-las sem grandes problemas,  mesmo no Dropbox,  desde que envie o link absoluto do arquivo html.

Vamos criar essas páginas. Depois de ter criado os metadados,  basta apenas fazer algo similar ao comando abaixo para cada diretório do seu repositórios em que haja pacotes:

A opção -t do repoview se refere ao título dado a página. Isso irá criar um diretório chamado repoview dentro dos diretórios onde já estão os pacotes e dentro dele, estarão as páginas HTML geradas e que dizem respeito a cada um dos pacotes rpm, bem como grupos de pacotes, etc.  Note que há um arquivo index.html dentro. É eles que você precisará passar a seus amigos para que eles possam visualizar o seu conteúdo. Você pode criar um outro arquivo index.html (ou outro nome, nesse caso não faz diferença) com as informações e links para essas páginas estáticas que criamos, o que torna a coisa mais simples. Tenha em mente que você precisa passar o endereço inteiro até com o index.html no URL porque vai receber um erro se não o fizer.  Novamente, para evitar a fadiga, você pode usar o script repo-update-metadata.sh que eu citei acima ou escrever um, caso assim deseje.

Você também pode usar a página que você fez para criar um link para o arquivo fulano.repo (obviamente, coloque um nome melhor nesse arquivo…) que iremos criar agora e que permitirá ao yum ter conhecimento do seu repositório. Mas antes… você precisa de uma informação! Vá até algum arquivo do seu repositório pela interface do nautilus, clique com o botão direito sobre ele, depois Dropbox > Copy Public link e cole esse link em algum lugar. Você  deverá ver algo assim:

Pois é,  o que realmente precisamos nesse link é o número que identifica o seu usuário. No caso acima, esse número é 1281922.  Veja o seu caso  e modifique no arquivo .repo definido abaixo, trocando o número acima pelo seu. Vamos então criar o nosso arquivo fulano.repo.

Note que o repositório de pacotes fontes foi desabilitado por padrão. Seria uma boa ideia mantê-lo assim e somente quando o usuário quiser, o próprio yumdownloader — aplicativo que pode ser utilizado para baixar um pacote fonte — irá habilitar ele.

Pronto, compartilhe esse arquivo com seus amigos e peça para eles o colocarem no diretório /etc/yum.repos.d e instalar os pacotes exatamente como instalaria qualquer outro pacote.  Para que eles possam ver os pacotes existentes,  faça como eu sugeri acima com o repoview. Note que no exemplo acima, foi considerado que os pacotes não estavam assinados e por isso a opção gpgchek foi definida como sendo zero. Caso assine seus pacotes, defina esse valor como sendo 1(um) e use a opção gpgkey para passar o URL de onde se encontra a chave pública necessária para verificar se os pacotes são legítimos.

2 Comments

  1. Rafael disse:

    Opa bem legal o tutorial, encontrei ele através do planet fedora, pretendo testar a dica para manter alguns pacotes que não tem no repositório oficial do fedora, mas ainda estou estudando sobre empacotamento e criação de pacotes rpm, se você tiver algum tutorial que pude-se me passar ficaria grato pois atualmente estou utilizando as wikis do fedora mas não tem algo mais prático e específico para aprendizado, de qualquer forma parabéns pelo blog gostei da dica !

Leave a Reply

Notifique-me de novos comentários via e-mail. Você também pode se inscrever sem comentar.