APT-BUILD

Otimize pacotes Debian para seu sistema

Julien Reveret
shaddai@debian-fr.org
(original)

http://julien.danjou.info/article-apt-build.html
Julien Danjou
acid@debian.org
(tradução para o inglês)

http://grajagan.rg3.net/artigo-apt-build.html
Thiago Scherer
grajagan@gmail.com
(tradução para o português)

INTRODUÇÃO

Desde a chegada das primeiras versões da distribuição Gentoo, algumas pessoas tem dito que "O Debian é bom, mas não é otimizado" (como as distribuições que você roda make o tempo todo). Isto é errado, você é livre para recompilar software que você usa no Debian, usando o apt. Baixar o source, descompactar, rodar os scripts de configuração (configure) e instalar (make install) é uma tarefa fácil para todo usuário Linux, mas esta forma de instalação não é integrada ao sistema de pacotes do Debian. Stow era uma maneira de compilar os softwares sem muito esforço, mas o software compilado não era realmente integrado nas dependencias do apt, ou seja, ficava fora da árvore de pacotes. A solução é usar o apt-build para recompilar um software que já foi empacotado (.deb) para o Debian.


Experimente e voce irá adotá-lo!

Para instalar o apt-build, faça como de costume:

grajagan@debian:~# aptitude install apt-build

Com a instalação completada, o script de pós-instalação irá fazer algumas perguntas sobre o diretório de construção dos pacotes, as opções de otimização para o gcc e arquitetura do processador. Estas informações serão gravadas no arquivo /etc/apt/apt-build.conf. Se você cometeu um erro poderá editar o arquivo manualmente para ajustá-lo. Exemplo:

grajagan@debian:~$ cat /etc/apt/apt-build.conf
build-dir = /var/cache/apt-build/build
repository-dir = /var/cache/apt-build/repository
Olevel = -O3
march = -march=athlon-xp
mcpu = -mcpu=athlon-xp
options = " athlon-xp"

Certifique-se de que os parâmetros build-dir e repository-dir apontem para um diretório em uma partição com bastante espaço livre. Por fim, adicione a linha no arquivo /etc/apt/sources.list, caso não exista:

deb-src ftp://debian_mirror/ [stable|testing|unstable] main contrib

Agora você está pronto para usar o apt-build!

E agora, o que faremos?

Vou começar explicando os comandos principais do apt-build. Como no apt-get, existem alguns comandos como update, upgrade, install, source, clean-build.

Primeiro o comando update; ele atualiza a lista de pacotes instaláveis, nada mais para explicar. O mesmo para o comando upgrade, o qual não necessita maiores explicações. Um exemplo com o comando install:

grajagan@debian:~# apt-build install memstat
-----> Installing build dependencies (for memstat) -----
Reading Package Lists... Done
Building Dependency Tree... Done
0 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
-----> Downloading memstat source (memstat) -----
Reading Package Lists... Done
Building Dependency Tree... Done
Need to get 22.4kB of source archives.
Get:1 ftp://127.0.0.1 1.0.4/main memstat 0.4-1 (dsc) [482B]
Get:2 ftp://127.0.0.1 1.0.4/main memstat 0.4-1 (tar) [21.9kB]
Fetched 22.4kB in 0s (322kB/s)
dpkg-source: extracting memstat in memstat-0.4
-----> Building memstat -----
...
...
...
dpkg-genchanges: binary-only upload - not including any source code
dpkg-buildpackage: binary only upload (no source included)
-----> Moving packages to repository -----
-----> Updating repository -----
Using: -O3 -mcpu=athlon-xp -march=athlon-xp
...
...
Reading Package Lists... Done
Building Dependency Tree... Done
Reading Package Lists... Done
Building Dependency Tree... Done
The following NEW packages will be installed:
memstat

Podemos ver que o apt-build realiza vários passos: instalação dos pacotes necessários para a compilação, download do código-fonte, e então a compilação e instalação do pacote requerido. Quando você compila um pacote com o dpkg, o dpkg-buildpackage não instala as dependências como o apt-build faz e a compilação pode se tornar dificil. Até agora, nós vimos uma recompilação simples, para otimizar o software, mas se você quer modificar o código-fonte, ou outros arquivos no diretório debian/, o apt-build pode ser útil, e trazer para você a possibilidade de ver todos os arquivos e diretórios do pacote. Entretanto, eu recomendo a leitura do maintainer guide.

O que mais?

Vamos dar uma olhada no comando source. Ele baixa o source do pacote contendo o diretório debian/ no qual você vai encontrar os arquivos necessários para construir o pacote (rules, control, changelog, etc) e o arquivo diff, coloca os arquivos baixados no build-dir e então descompacta-os no source do pacote e finalmente aplica o patch com o arquivo diff. Exemplo:

grajagan@debian:~# apt-build source ethereal
-----> Downloading ethereal source (ethereal) -----
Reading Package Lists... Done
Building Dependency Tree... Done
Need to get 6170kB of source archives.
Get:1 ftp://127.0.0.1 1.0.4/main ethereal 0.10.4-2.1 (dsc) [821B]
Get:2 ftp://127.0.0.1 1.0.4/main ethereal 0.10.4-2.1 (tar) [6154kB]
Get:3 ftp://127.0.0.1 1.0.4/main ethereal 0.10.4-2.1 (diff) [14.6kB]
Fetched 6170kB in 1s (3533kB/s)
dpkg-source: extracting ethereal in ethereal-0.10.4

Pode-se notar que um terceiro arquivo é baixado, a descrição do pacote (dsc). Agora você tem o source do software, com o diretório debian/ e os arquivos necessários para a compilação do pacote, onde você pode modificar como quiser para atender as suas necessidades. Realizadas as modificações, você pode construir e instalar o pacote usando o comando apt-build install pacote_modificado.

As opções principais foram vistas, mas ainda existem algumas opções que fazem a diferença, como: clean-build, que é para o apt-build o que o comando clean é para o apt-get, ou seja, ele limpa o build-dir, mas não o repository-dir. Você pode remover um pacote com o comando remove ou obter informações com o comando info.

Dê uma olhada nas páginas de manual do apt-build, as quais contêm algumas opções interessantes. Mas eu deixei o melhor para o final.

Construindo o mundo com o apt-build

O último comando que vou falar é o world, ele deve lembrar algo para as pessoas que adoram o BSD. Nos sistemas BSD, você pode recompilar todos os ports, simplesmente mudando o diretório para /usr/ports e digitando make world. Este conceito está sendo usado pelo autor do apt-build, e isso é o que acontece quando você "reconstrói o mundo":

grajagan@debian:~#apt-build world
-----> Rebuilding the world ! -----
You should read README.Debian first

A leitura deste README parece ser obrigatória, e ensina que devemos criar uma lista de pacotes que queremos recompilar e instalar no lugar dos pacotes atuais, lista na qual devemos remover pacotes como gcc, libc6, entre outros. Vamos criar a lista:

grajagan@debian:~#dpkg --get-selections | awk '{if ($2 == "install") print $1}' > /etc/apt/apt-build.list

Editada a lista, é possível usar o apt-build world para recompilar e otimizar todo o seu sistema.

Já é tarde

É hora de ir. Espero ter dado a vocês dicas de como usar o apt-build, que é uma ferramenta interessante e muito útil. Eu quero alertá-lo mais uma vez, o autor do apt-build cuidadosamente avisa você a não compilar o gcc e outros softwares. Nem eu nem ele somos responsáveis pelas suas atitudes. Então se você danificar seu Debian, não me escreva (exceto se quiser me fazer rir). Note também que o apt-build não inventa novos pacotes e se o software que você quer instalar não é empacotado oficialmente pelo Debian, o apt-build não poderá baixar o source de um mirror Debian e compilá-lo (você deverá pedir pelo empacotamento e esperar até que seja aceito).

Changelog

27/10/2004
Julien Reveret
* First version of this article

21/12/2004
Thiago Scherer
* Primeira edição traduzida para o pt_BR