Eis o formato de um
PKGBUILD:
# Contributor: Seu Nome <seuemaill@dominio.com>
pkgname=NOME
pkgver=VERSAO
pkgrel=1
pkgdesc=""
arch=()
url=""
license=('GPL')
groups=()
depends=()
makedepends=()
provides=()
conflicts=()
replaces=()
backup=()
install=
source=($pkgname-$pkgver.tar.gz)
noextract=()
md5sums=() #gerado com 'makepkg -g'
build() {
cd "$srcdir/$pkgname-$pkgver"
./configure --prefix=/usr
make || return 1
make DESTDIR="$pkgdir/" install
}
Entendendo os parâmetros:
- pkgname: o nome do pacote;
- pkgver: a versão do pacote;
- pkgrel: a versão release' do pacote modificado quando o PKGBUILD é editado;
- pkgdesc: uma breve descrição do pacote;
- arch: arquiteturas em que o pacote será compilado;
- url: a página do pacote;
- license: a licença de distribuição do pacote;
- provides: o que o pacote provê (outro pacote);
- depends: dependências do pacote;
- makedepends: dependências para compilar o pacote;
- conflicts: pacotes que não podem coexistir;
- replaces: mostra o pacote que este substitui;
- backup: arquivos de backup quando o pacote é removido;
- install: nome do script de instalação do pacote;
- source: o caminho para download do código-fonte;
- md5sums: somas md5 do pacote para checagem de integridade.
A função
build(), como você já notou, possui os comandos para a compilação do pacote, ou seja, é o velho e manjado "./configure, make, make install", (o mantra dos slackers).
Você pode alterar o
PKGBUILD para, por exemplo, mudar o local de instalação. Ou se preferir pode comentar a linha corresponde ao "install" da função build(), para que o pacote não seja instalado, mas tão somente compilado. Você pode inserir outros parâmetros ao "install" para habilitar certas funções. Resumindo, aquilo que você gostaria de fazer compilando "na mão", você coloca como parâmetro no script e roda o
makepkg.
Relembro ao leitor que o objetivo do artigo é fornecer um apanhado geral, caso queira mais informações sobre o assunto consulte:
ABS_PKGBUILD_Explained
Uma diferença entre Arch Linux e Gentoo
De cara percebemos que enquanto o Arch originalmente disponibiliza pacotes binários pré-compilados, o
Gentoo baixa o código e faz todo o processo de compilação. Assim, no Gentoo, tem-se um maior controle por parte do usuário em configurar os parâmetros de compilação, no entanto, o preço disso é o aumento do tempo que se leva para construir o sistema.
No Arch, devido à pré-compilação, a construção do sistema é mais rápida, mas o controle sobre os parâmetros não são tão grandes como no Gentoo.
Notamos que, embora o
Arch Linux tenha mecanismos para compilação a partir dos fontes, o mesmo é muito primitivo em relação ao
Portage do Gentoo que automatiza todo o processo.
Então a próxima pergunta lógica que nos fazemos é: pode o
Arch Linux, de alguma forma, automatizar esse processo de baixar e compilar direto dos fontes, como o Gentoo faz utilizando o comando "emerge"?
A resposta mais sincera: Não. Como o comando "emerge", não.
Mas há algo semelhante. É possível compilar TUDO a partir dos fontes, de forma automática, através do
makeworld. Os parâmetros de compilação "universais" são aplicados através do
makepkg.conf, que veremos mais a frente.
Makeworld
Para compilar tudo de uma vez no Arch Linux é preciso usar o comando:
# makeworld -c [ponto de montagem] [repositório1] [repositório2] [repositório]
Para mais informações:
makeworld --help
Veremos apenas um simples exemplo compilando todo o "core" de forma segura...
Atualizando a árvore:
# abs
Copiando os scripts para um ponto diferente (para não alterar os originais):
# cp -r /var/abs /home/abs
Criando diretório para utilização e aplicando seu usuário como dono:
# mkdir -p /home/packages
# chown -R seuusuario /home/abs
# chown -R seuusuario /home/packages
Indo para o diretório dos scripts:
cd /home/abs
Iniciando compilação e instalação do repositório core, tendo o diretório packages como ponto de montagem:
# makeworld --as-root -c -i /home/packages/ core
Agora vá dormir ou vá estudar/trabalhar, depois ver um filme, namorar... o processo levará um bom tempo (a lá Gentoo).
Mas claro que tudo isso só valerá a pena, só fará diferença, após a configuração do makepkg, nosso próximo tópico.