Empacotando software com Conary
Muitas pessoas já tinham me pedido para escrever um pequeno tutorial sobre como empacotar software para o Foresight Linux. Para quem ainda não conhece o sistema de gerenciamento de pacotes Conary, uma forma de descrevê-lo seria compará-lo com um sistema de controle de versões e gerenciamento de pacotes. Isso quer dizer que você tem um controle sobre as modificações do código no mesmo estilo do CVS ou SVN, e qualquer modificação feita pelo mantenedor do código original é implementado em seu pacote em fragmentos, equivalentes às linhas que foram adicionadas ou modificadas.
Agora que estou lendo o parágrafo acima, notei que a explicação não foi muito bem feita. Quem sabe um exemplo mais simples ajudaria a causa?
Imagine então que você instalou seu programa preferido de ler fontes de notÃcias RSS. Beleza! Vamos então imaginar que amanhã o desenvolvidor/mantenedor deste programa descobre um erro, e rapidamente modifica uma linha de seu código para consertar este bug. Note a ênfase em uma linha. Eu, como desenvolvidor do Foresight empacoto esta versão e a habilito em nossos repositórios para consumo geral. Quando um usuário atualizar seu sistema, ele estará baixando o equivalente à aquela uma linha de código… e só! Em qualquer outro sistema de empacotamento, você tem de baixar o código (compilado) do programa inteiro para atualizar, mas o Conary te permite atualizar somente a diferença (diff)!
Bem, vamos então imaginar que você está preparado para empacotar algo usando o Conary. Existem alguns passos importantes que são necessários antes de você poder empacotar, mas vou deixar estes detalhes para um próximo artigo. Por agora, vou usar o meu próprio programa, BillReminder, como exemplo.
BillReminder é um código escrito em python e pygtk, atualmente hospedado no SourceForge.net. A versão atual disponibilizada para download é a versão 0.1.1. O motivo porque estou mencionando isso ficará mais claro em alguns segundos.
Para empacotar qualquer coisa com o Conary, tudo que você precisa fazer é criar um arquivo com instruções sobre onde e como conseguir o código fonte, entre outras coisas. Este arquivo, conhecido pelas pessoas acostumados com o Conary como “recipe”, ou “receita” em português, possui uma sintaxe bem “pythônica”, simples e clara. Segue abaixo minha pequena receita:
class BillReminder(PackageRecipe):
name = ‘billreminder’
version = ’0.1.1′buildRequires = []
def setup(r):
r.addArchive(‘mirror://sourceforge/%(name)s/’)r.PythonSetup()
Este modelo de receita é bem básico, especial para empacotar programas escritos em python. Note as informações básicas, como nome, versão, e localização do código fonte. Devido ao seu “sabor” de python, podemos utilizar de expansão de variáveis para criar um URL dinâmico. a linha
r.addArchive(‘mirror://sourceforge/%(name)s/’)
então é “traduzida” para: baixe a fonte em algum mirror do sourceforge.net, e procure pelo programa %(name)s, ou seja, billreminder. O sistema conary consegue “adivinhar” de forma lógica qual o pacote fonte para baixar, utilizando o nome e a versão para distinguir de qualquer outro programa ou versão disponÃvel no mesmo local. Se você fosse então empacotar outro programa que também estivesse hospedado no Sourceforge.net, bastaria você modificar a variável “name” e “version”. Caso o código fonte estivesse em um outro servidor (sem mirrors), você modificaria o URL.
r.addArchive(‘http://[servidor]/%(name)s/’)
Depois de fazer e salvar nossa receita como billreminder.recipe (o final do nome do arquivo tem de ser .recipe), é hora de “cozinharmos”. Geralmente, você “cozinha” sua receita 2 vezes. Na primeira vez, o sistema conary irá baixar o código fonte, compilá-lo, e completamente (e automaticamente) nos informar sobre todas as dependências necessárias para empacotar o programa. Rodando o comando:
cvc cook billreminder.recipe
nos devolve, entre muitas linhas de saÃda, a seguinte lista de dependências:
‘python-setuptools:python’, ‘dbus-python:python’, ‘desktop-file-utils:runtime’, ‘notify-python:python’, ‘pygobject:python’, ‘pygtk:python’, ‘python-sqlite:python’
Ou seja, estes são os nomes dos pacotes e componentes requeridos pelo BillReminder. Editamos mais uma vez nossa “receita”, adicionando as dependências na variável “buildRequires”.
class BillReminder(PackageRecipe):
name = ‘billreminder’
version = ’0.1.1′buildRequires = ['python-setuptools:python', 'dbus-python:python', 'desktop-file-utils:runtime', 'notify-python:python', 'pygobject:python', 'pygtk:python', 'python-sqlite:python']
def setup(r):
r.addArchive(‘mirror://sourceforge/%(name)s/’)r.PythonSetup()
e cozinhamos mais uma vez com o mesmo comando anterior. Depois de mais alguns minutos, um arquivo contendo o programa compilado e todos os arquivos por ele usado será gerado. O nome deste arquivo é geralmente formado pelo nome do programa, billreminder, e a versão, 0.1.1, separados por um hÃfen, e terminando com um “.css”. Para instalar o programa, basta agora usar o conary.
sudo conary update billreminder-0.1.1.css
e pronto! Como eu tinha mencionado antes, existem algumas coisas que eu não mencionei aqui, coisas que te ajudam a disponibilizar este pacote em um repositório para que outros possam consumÃ-lo. Prometo que vou detalhar estes detalhes em um próximo artigo, mas só para terminar o processo, uma vez que seu pacote esteja em um repositório, outras pessoas poderão instalá-lo usando somente o nome do pacote (sem a versão e o .css).
Uma outra coisa muito interessante do conary, é o novo recurso de “cozinhar” código diretamente de um repositório SVN, CVS, ou Mercurial. Este recurso foi lançado ainda ontem (conary versão 1.1.23) e eu já tenho planos de empacotar o BillReminder desta forma.
Bem, espero não ter sido muito técnico ou vago neste artigo. Ainda estou aprendendo sobre o conary, e pretendo descrever em meu blog mais detalhes desta fascinante tecnologia!
You can follow any responses to this entry through the RSS 2.0 feed. Both comments and pings are currently closed.













April 26th, 2007 at 7:42 am
Og, coloca este post no wiki da rPath… est???? ????timo para uma introdu????????o em portugu????s!
April 26th, 2007 at 10:23 am
Beleza cara? Anda sumido do IRC…
Segui teu conselho e criei: http://wiki.rpath.com/wiki/Tutorial:Empacotando_software_com_Conary
Grande abraco,
Og
April 29th, 2007 at 10:52 pm
Caro Og, sabendo de seu envolvimento no projeto do Foresight Linux e seu grande interesse pela difus????o de Linux em l????ngua portuguesa, venho dar not????cia de que traduzi a p????gina do Foresight na Wikipedia (http://pt.wikipedia.org/wiki/Foresight_Linux). Se houver um tempo, por favor, d???? uma olhada/editada por l????.
Na realidade fiz isso enquanto espero o Foresight ser instalado aqui com o VirtualBox, pois pretendo test????-lo antes de eventualmente substituir o Ubuntu Feisty que est???? rodando perfeitamente. Eis algo demorado, heim… ser???? que quando resolver instalar de verdade ser???? mais r????pido? H???? mais de meia hora est???? em “Running post installation scripts”. Como n????o h???? indica????????o gr????fica no pr????prio sistema de instala????????o, s???? n????o digo que travou porque o processador est???? direto a 100% de carga.