Muita gente me pergunta como fazer para criar um pacote para o Arch Linux e, por causa disso, resolvi escrever este artigo. Graças às ferramentas, e a filosofia da distribuição, criar pacotes para o Arch é bem mais fácil do que parece (e do que nas outras distribuições). Antes de colocar a mão na massa, porém, você precisa saber duas coisas:
1) Como é o fomato dos pacotes no Arch
Um pacote no Arch tem o seguinte formato:
nomedopacote-versão-release-arquitetura.pkg.tar.gz
Por exemplo:
firefox-2.0.0.14-1-i686.pkg.tar.gz
2) Para qual software você deseja criar um pacote.
Não adianta nada querer fazer um pacote se você não tem um programa para empacotar, né?
Agora que você já sabe isso podemos começar.
Durante este artigo eu usarei o billremider como exemplo para mostrar a criação de um pacote. Eu escolhi o billreminder porque ele é um ótimo programa que costumo usar, foi criado pelo amigo Og Maciel e a criação do pacote dele é bem simples.
Para criar um pacote você vai precisar de duas coisas. Um PKGBUILD e o makepkg. O PKGBUILD é um arquivo texto que contém todas as informações necessárias para se criar o pacote. Lá você vai ter o nome do mesmo, a versão, a url do source, a licensa, as intruções de compilação etc.
O makepkg é o responsável por pegar todas essas instruções do PKGBUILD e transformá-las no seu pacote.
A estrutura do PKGBUILD é a seguinte:
# Contributor: Seu nome
pkgname=nome-do-pacote
pkgver=versão
pkgrel=release
pkgdesc="Descrição do pacote"
arch=('arquitetura')
url="url do software"
depends=('dependencias')
license=('Licensa')
source=(url do source)
md5sums=('md5sum do source')build() {
intruções de compilação
}
O arquivo é bem simples e de fácil entendimento. É basicamente atribuição de variável. De qualquer forma vou fazer uma melhor descrição de cada campo.
# Contributor: Esta primeira linha do PKGBUILD não é obrigatória. Ela é usada apenas para mostrar quem criou o PKGBUILD e seu email (que será utilizado para troca de informações, sugestões, dúvidas etc). Apesar de não ser obrigatório, este campo é praticamente um padrão entre os empacotadores. Exemplo:
# Contributor: Hugo Doria <hugodoria at archlinux-br.org>
pkgname: É aqui que você coloca o nome do pacote. Exemplo:
pkgname=billreminder
pkgver: Aqui fica a versão do programa que está sendo empacotado. Se você estiver criando um pacote para versão 0.3.1 do billreminder, então esta viariável ficará assim:
pkgver=0.3.1
pkgrel: Aqui fica o release do pacote.
Pkgrel=1
pkgdesc: Aqui é a descrição do software. Exemplo do billreminder:
pkgdesc=“small and quick accounting application designed to allow for easy tracking of bills”
Só duas observações:
pkgdesc=“Billreminder is a small and quick accounting application designed to allow for easy tracking of bills”.
Foi decidido que o nome do pacote não entraria na descrição do mesmo para facilitar a visualização no pacman e não causar duplicidade.
arch: aqui é a arquitetura para a qual o software está disponível. Você pode por quantas quiser (desde que seja verdade) e deve por cada uma entre aspas simples. Exemplo:
arch=('i686' 'x86_64')
url: Aqui você coloca o endereço da página do programa que você está empacotando.
url="http://billreminder.sourceforge.net/"
depends: Esta é uma das partes mais importantes do PKGBUILD. É aqui que você vai colocar todas as dependências necessárias para que o programa funcione. Cada dependência deve ficar entre aspas simples e você pode adicionar quantas dependências forem necessárias.
Supondo que você esteja criando um pacote para um programa que dependa do python, firefox, e thunderbird a variável ficaria assim:
depends=('python' 'firefox' 'thunderbird')
E no caso do billreminder:
depends=('python-pysqlite' 'python-notify' 'dbus-python' 'setuptools' 'desktop-file-utils' 'pygobject' 'pygtk' 'pil' 'perlxml')
Para descobrir quais dependências um determinado programa tem você pode visitar o site do mesmo, usar o comando ldd ou o namcap (uma ferramenta própria do Arch para isso).
License: Aqui você coloca licensa do programa. O Arch se preocupe bastante com isso e você deve prestar muita atenção aqui. Exemplos:
license=('MIT')
ou
license=('GPL')
source: aqui fica o caminho para o source do pacote. Exemplo:
source=(http://billreminder.googlecode.com/files/billreminder-0.3.1.tar.bz2)
md5sums: Aqui fica o md5sum do source acima. Geralmente o próprio desenvolvedor disponibiliza esta soma. Se não, você pode usar o comando abaixo, por exemplo:
$ md5sum arquivo.tar.gz
Exemplo:
md5sums=('d2ee06635ae8fc1f5746634c28e48858')
build(): Aqui dentro você vai colocar todos os comandos necessários para se compilar o pacote. Geralmente você coloca os mesmos comandos que usaria para compilar o pacote normalmente.
Se você iriar ./configure; make; make install então é isso que você vai colocar dentro da função build(). Se você usa ./arquivo.sh –install-and-do-it-now, então é isso que você deve colocar.
O billreminder, por exemplo, usa o famoso configure, make, make install. A função no final ficou assim:
build() {
cd ${startdir}/src/${pkgname}-${pkgver}
./configure --prefix=/usr
make || return 1
make DESTDIR=$startdir/pkg install
}
Se você prestar atenção, existem algumas informações a mais e, por isso, vou destrinchar um pouco este passo.
O PKGBUILD final do billreminder ficou:
# Contributor: Hugo Doria <hugodoria at archlinux-br.org>
pkgname=billreminder
pkgver=0.3.1
pkgrel=1
pkgdesc="small and quick accounting application designed to allow for easy tracking of bills"
arch=('i686' 'x86_64')
url="http://billreminder.sourceforge.net/"
depends=('python-pysqlite' 'python-notify' 'dbus-python' 'setuptools' 'desktop-file-utils' 'pygobject' 'pygtk' 'pil' 'perlxml')
license=('MIT')
source=(http://billreminder.googlecode.com/files/${pkgname}-${pkgver}.tar.bz2)
md5sums=('d2ee06635ae8fc1f5746634c28e48858')build() {
cd ${startdir}/src/${pkgname}-${pkgver}
./configure --prefix=/usr
make || return 1
make DESTDIR=$startdir/pkg install
}
Agora que você tem um PKGBUILD pronto, basta entrar no diretório onde ele está e digitar:
$ makepkg
Deixe-o trabalhar e se tudo estiver certo depois de algum tempo você verá uma mensagem como essa:
==> Finished making: billreminder (Thu May 8 20:34:57 BRT 2008)
Isso significa que seu pacote foi criado com sucesso e está pronto para uso. É só distribuir pros amigos ou instalá-lo com:
# pacman -U pacote.pkg.tar.gz
Pronto. É isso. Pode parecer assustador de início, mas depois de uns três pacotes você vai pegar o jeito e ver que tudo é muito, muito simples. Depois de alguma pratica você vai estar criando pacotes em 5 minutos. Pode apostar. :P
Existem, claro, pacotes que são mais complexos de serem criados (é o caso do kernel), mas a maioria é bem simples mesmo. Eu ainda farei um artigo mostrando algumas dicas e alguns usos mais complexos do PKGBUILD. Por enquanto você pode ir lendo a manpage do PKGBUILD (man PKGBUILD) e os artigos abaixo:
Recomendo que você crie alguns pacotes para os programas que mais gosta e depois coloque-os no AUR (uma outra coisa bem legal do Arch). Se os pacotes forem legais e o pessoal gostar, eles vão votar e há uma boa chance de seu pacote entrar nos repositórios oficiais do Arch e, dependendo das suas contribuições, você virar um Trusted User. Eu falarei mais sobre o AUR e os Trusted Users em outro artigo. Por hoje chega. #)
Ótimo artigo para os iniciantes que não encontram o que desejam no Arch e desejam contribuir.
Keep Going
Muito bom o artigo Hugo!
Bem explicativo e, por consequência, de fácil entendimento.
Estou no aguardo dos demais prometidos.
Parabéns pelo artigo Hugo!
Bom trabalho!
Uia, é simples demais… vou tentar tb.
abçs!
Ótimo artigo, apesar que até hoje não precisei disso, já que todos os pacotes que preciso sempre encontro nos repositórios do arch :)
[...] off the brand new section “Pimp My Project“! It was also featured as an exemple on packaging software for Arch Linux (sorry, Brazilian Portuguese only) written by Hugo [...]
[...] O meu programa BillReminder foi demonstrado no terceiro episódio do ProgBox, inaugurando a nova seção “Pimp My Project“! Isso depois do Hugo Dória ter usado o BillReminder como exemplo em seu guia de empacotamento de software. [...]
Agora já tenho o básico pra testar o arch no P3 500 em casa. Recomenda alguma configuração pra deixar bem leve? (OBS: 512 RAM e 8 MB Video) Com Gnome os videos em flash são exibidos quadro a quadro :(
[...] deste diretório estão todos os arquivos necessários para se construir o pacote do Firefox, incluindo o PKGBUILD. Rode os comandos abaixo para fazer as mudanças necessárias: $ [...]
[...] no Linux, foi quando pesquisei sobre a criaão de pacotes no Arch Linux e acabei encontrando Como criar pacotes para o Arch Linux no blog do Hdoria, não perdi tempo, comecei na mesma hora a criar os meus [...]
[...] algum tempo eu fiz um tutorial mostrando como criar pacotes para o Arch Linux. O tutorial serve para a maioria dos pacotes, mas quando se trata de algo usando svn ou cvs o [...]
[...] criar pacotes para o Arch Linux, parte II “Há algum tempo eu fiz um tutorial mostrando como criar pacotes para o Arch Linux. O tutorial serve para a maioria dos pacotes, mas quando se trata de algo usando svn ou cvs o [...]
[...] off the brand new section “Pimp My Project“! It was also featured as an exemple on packaging software for Arch Linux (sorry, Brazilian Portuguese only) written by Hugo [...]
Legal cara , enviei meu primeiro pacote para o repositorio AUR,
pretendo continuar ajudando …
doria, na parte de colocar os comandos para compilar o arquivo.. existe algum padrão? Caso eu coloque apenas ./configure ; make ; make install não ‘pega mal’ para o criador do pacote? Brevemente estarei fazendo uns pacotes para ajudar no projeto.. vou ler mais vezes para ‘pegar’ o processo de criação! valeu ;*
A parte mais difícil é achar um programa que não tenha no AUR e seja interessante ao mesmo tempo…