Como criar pacotes para o Arch Linux

Graças às ferramentas e a filosofia da distribuição, criar pacotes para o Arch Linux é bem mais fácil do que parece (e do que nas outras distribuições). Neste artigo você vai saber como.

[ Hits: 30.296 ]

Por: Hugo Doria em 26/05/2008 | Blog: http://hugodoria.org


Construindo o pacote



Durante este artigo usarei o billreminder 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 licença, as instruçõ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=("dependências")
    license=("Licença")
    source=(url do source)
    md5sums=("md5sum do source")

    build() {
    instruçõ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 variá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:
  • A descrição tem que ser em inglês.
  • E você não deve colocar o nome do pacote na descrição também. Seria errado colocar a descrição desta forma:

    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 licença 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.
  • A primeira linha serve para que você entre no diretório onde o source (geralmente em .tar.gz ou .tar.bz2) foi descompactado. ${startdir}, ${pkgname} e {pkgver} são variáveis que são trocadas pelo valor do diretório inicial (onde está o PKGBUILD), o nome do pacote e a versão dele, respectivamente.
  • A segunda linha é o ./configure normal e o --prefix=/usr serve para indicar o caminho de instalação. O padrão é /usr/local, mas o Arch usa o /usr mesmo.
  • Em seguida o make é rodado normalmente (o return serve para indicar se houve, ou não erro durante o make).
  • A última linha talvez seja a mais diferente. Ela deveria ser um puro e simples make install, mas tem um DESTDIR de intruso ali. Esse DESTDIR=$startdir/pkg faz com que toda a compilação/instalação/criação do pacote seja feita dentro do sub-diretório pkg. Isso é ótimo pois evita que você danifique seu sistema enquanto está construindo milhões de pacotes. =)

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Construindo o pacote
   3. Finalizando a construção
Outros artigos deste autor

ProFTPD com autenticação via MySQL

AUR - Arch Linux User-Community Repository

Python no PSP: "Olá Mundo"

KDEMod 4.1 no Arch Linux

Personalizando o Blackbox

Leitura recomendada

Listando os serviços Linux com o Systemctl

Use Linux!

Particionamento de disco com o openSUSE

Linux, uma história sem fim!

Resumo LPI 102: Tópico 108 - Serviços Essenciais do Sistema

  
Comentários
[1] Comentário enviado por removido em 26/05/2008 - 16:57h

muito bom Hugo,
agora todos podem colaborar com o AUR .....

[2] Comentário enviado por snort em 28/05/2008 - 02:15h

Parabéns Small nose =)

[3] Comentário enviado por removido em 28/07/2008 - 12:01h


Show o artigo.

[4] Comentário enviado por kalib em 31/07/2008 - 08:06h

Excelente artigo..Demonstrou o quão simples é criar pacotes para o Arch Linux. Distribuição esta que vem ganhando cada vez mais prestígio por conta de sua estabilidade e eficiência no que se prontifica a fazer seguindo sua filosofia. ;]

[]'s

[5] Comentário enviado por corvolino em 30/12/2008 - 09:32h

doria no hal da fama =d

[6] Comentário enviado por removido em 19/04/2009 - 01:51h

Deu até animo de criar uns pacotinhos...

[7] Comentário enviado por gregh em 23/04/2009 - 14:45h

Simples, porém, essencial!

[8] Comentário enviado por ghregory em 08/05/2009 - 09:40h

Gosteei ;]

[9] Comentário enviado por nicolo em 07/07/2009 - 12:11h

É muito simples e fácil mesmo, pra quem costuma integrar equação diferencial do quinto grau com números complexos é mole.

[10] Comentário enviado por julio_hoffimann em 25/08/2011 - 22:24h

Oi Hugo,

Parabéns pelo ótimo artigo, a simplicidade na construção de pacotes para o Arch é impressionante. :-)

Abraço!

[11] Comentário enviado por M4rQu1Nh0S em 13/12/2012 - 09:36h

a tarefa já seria muito util com o makepkg -cis

com ele voce compila, baixa dependencias antes de compilar e instala em seguida...

se tiver como por isso.. ficarei satisfeito.. mas assim tá otimo tbm... vlwww

[12] Comentário enviado por edivandjs em 22/01/2019 - 16:15h

Muito bom! Sempre aprendendo mais com a comunidade.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts