Há algum tempo 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 procedimento é um pouco diferente.
A diferença é, basicamente, em algumas linhas do PKGBUILD. É preciso prestar atenção nas variáveis conflicts, provides, svntrunk e pkgver.
De maneira geral um PKGBUILD para svn é assim:
# Contributor: Seu nome
pkgname=nome-do-pacote-svn
pkgver=versão
pkgrel=release
pkgdesc='Descrição do pacote'
arch=('arquitetura')
url='url do software'
depends=('dependências')
license=('Licença')
source=()
md5sums=()
provides=()
conflicts=()
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 <hugo at archlinux.org>
pkgname: É aqui que você coloca o nome do pacote. Exemplo:
pkgname=billreminder-svn
ou
pkgname=billreminder-cvs
NOTA: Perceba que você precisa adicionar os sufixos svn ou cvs no nome do pacote. Isso serve para diferenciar os pacotes normais dos de versões em desenvolvimento.
pkgver: Aqui fica a versão do programa que está sendo empacotado. Como se trata de uma versão em desenvolvimento, esta variável não tem número fixo e muda constantemente. Tente sempre colocar a data ou o número da revisão aqui (no final do tutorial há uma dica de como fazer isso).
pkgver=4098
pkgrel: Aqui fica o release do pacote. Em pacotes svn e cvs esta variável nem tem tanta importância. Ela geralmente será 1, já que o pkgver muda constantemente.
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ê 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).
makedepends: Aqui você coloca as dependências necessárias para se criar o pacote. Por exemplo, para se criar um pacote de uma versão cvs é preciso, claro, que o próprio cvs esteja instalado. Exemplos:
makedepends=('cvs')
ou
makedepends=('subversion')
NOTA: Não coloque aqui as dependências necessárias para que o software funcione. Faça isso na variável depends.
License: Aqui você coloca licença do programa. O Arch se preocupa 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. Como em um pacote svn ou cvs, não existe um arquivo de source em si esta variável deve ficar em branco. Exemplo:
source=()
md5sums: Segue o mesmo princípio da variável acima.
md5sums=()
NOTA: Mesmo vazias estas duas variáveis devem estar presentes no PKGBUILD.
provides: Esta variável serve para definir que o 'pacote-svn' provê 'pacote' também. O billreminder-svn, por exemplo, provê billreminder. Isto serve para que programas que precisem do billreminder, por exemplo, possam reconhecer que ele está instalado no sistema. Dessa forma dependências quebradas são evitadas. ;)
Exemplo:
provides=('billreminder')
conflicts: Aqui você diz quais os pacotes que conflitam com o seu. Um meupacote-svn conflita, por natureza, com meupacote. Exemplo:
conflicts=('billreminder')
_svntrunk: Aqui você coloca a url da árvore svn que você quer baixar. Exemplo:
_svntrunk=https://billreminder.svn.sourceforge.net/svnroot/billreminder
_svnmod: Aqui você coloca o diretório onde será armazenado o conteúdo do trunk.
Exemplo:
_svnmod=billreminder
NOTA: O _ no início das variáveis é um padrão que é usado para indicar que elas são variáveis customizadas, ou seja, que não são parte da estrutura real de um PKGBUILD. Você pode criar quantas quiser, mas só quando for realmente necessário.
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ê usar ./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.
De uma maneira geral o procedimento para svn/cvs/git/bzr é:
- entrar no diretório src;
- fazer checkout do trunk;
- rodar os comandos de construção (configure, make e make install, por exemplo);
- remover arquivos temporários.