[ anterior ] [ Conteúdo ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ próximo ]


Como usar o APT
Capítulo 5 - Construindo a partir dos fontes


5.1 Fazendo o download de pacotes-fonte

É comum no mundo do software livre estudar código fonte ou mesmo fazer correções para códigos bugados. Construir a partir dos fontes pode também ser útil se você quer habilitar funcionalidades que estão desabilitadas no pacote oficial, ou desabilitar algumas que estão habilitadas. Para fazer isso você terá que fazer o download do código fonte do programa. O sistema APT oferece uma maneira fácil de obter o código fonte de muitos programas contidos na distribuição, incluindo todos os arquivos necessários para criar um .deb para o programa.

Outro uso comum de pacotes-fonte no Debian é para adaptar uma versão mais recente de um programa, a partir de uma distribuição instável (unstable), por exemplo, para usar com uma distribuição estável (stable). Compilar um pacote no estável irá gerar .debs com dependências ajustadas para os pacotes disponíveis nesta distribuição.

Para efetivar isso, a entrada deb-src no seu /etc/apt/sources.list deve ser apontanda para unstable. Deve também estar habilitada (descomentada). Veja a seção O arquivo /etc/apt/sources.list, Seção 3.1.

O Gerenciador de Pacotes Debian, Aptitude, é voltado para pacotes binários. Para usar pacotes-fonte nós teremos que usar o apt-get. Para baixar pacotes-fonte, você usará o seguinte comando:

     $ apt-get source nomedopacote

Isto irá baixar três arquivos: um .orig.tar.gz, um .dsc e um .diff.gz. No caso de pacotes nativos debian, este último não é baixado e o primeiro provavelmente não terá "orig" no nome.

O arquivo .dsc é utilizado pelo dpkg-source para descompactar o pacote fonte dentro do diretório nomedopacote-versao. Em cada pacote-fonte baixado existe um diretório debian/ que contém os arquivos necessários para se criar o pacote .deb.

Para auto-construir o pacote quando ele é baixado, apenas adicione -b na linha de comando, como abaixo:

     $ apt-get -b source nomedopacote

Se você decidir não criar o .deb no momento do download, você poderá criar ele depois rodando o seguinte comando dentro do diretório que foi criado para o pacote depois do download:

     $ dpkg-buildpackage -rfakeroot -uc -b

Observe que para construir pacotes você irá precisar pelo menos dos pacotes: devscripts, dpkg-dev, debhelper, fakeroot, dê uma olhada em Instalando e reinstalando pacotes, Seção 4.4 e instale-os antes de proceder. A maioria dos pacotes irão depender de ferramentas de compilação, então pode ser útil instalar o pacote build-essential também. Outros pacotes podem ser necessários, veja Pacotes necessários para compilar pacotes-fonte, Seção 5.2 para mais informações.

Para instalar o pacote construído pelos comandos acima deve-se utilizar o gerenciador de pacotes diretamente. Dê uma olhada em Instalado manualmente pacotes debian que foram baixados ou criados localmente, Seção 4.5. Uma ferramenta útil é oferecida pelo pacote devscripts: debi. Se você rodar o debi dentro do diretório dos fontes do pacote ele verá o arquivo .changes no diretpório pai para descobrir quais são os pacotes binários que o pacote produz e irá rodar o dpkg para instalar todos eles. Enquanto isto não é muito útil se seus fontes produzem pacotes que conflitam, ele será na maioria das circunstâncias. É claro que você precisa de permissões de root para realizar isso.

Há uma diferença entre o método de fonte do apt-get e seus outros métodos. O método de fonte (source method) pode ser usado por usuários normais, sem necessidade de poderes especiais de root. Os arquivos são baixados para o diretório no qual o comando apt-get source pacote foi chamado.


5.2 Pacotes necessários para compilar pacotes-fonte

Geralmente, cabeçalhos (headers) específicos e bibliotecas compartilhadas precisam estar presentes para um pacote-fonte ser compilado. Todos os pacotes têm um campo nos seus arquivos de controle (control) chamado 'Build-Depends:' que indica quais pacotes adicionais são necessários para os pacotes serem construídos a partir dos fontes. Alguns pacotes básicos são também necessários, veja Fazendo o download de pacotes-fonte, Seção 5.1 antes de continuar.

o APT tem uma forma simples de baixar esses pacotes. Apenas rode apt-get build-dep pacote, onde 'pacote' é o nome do pacote que você está querendo construir. Por exemplo:

     # apt-get build-dep gmc
     Lendo Lista de Pacotes... Pronto
     Construindo Árvore de Dependências... Pronto
     Os NOVOS pacotes a seguir serão instalados:
       comerr-dev e2fslibs-dev gdk-imlib-dev imlib-progs libgnome-dev libgnorba-dev
       libgpmg1-dev 
     0 pacotes atualizados, 7 pacotes novos instalados, 0 a serem removidos e 1 não atualizados.
     É preciso fazer o download de 1069kB de arquivos.
     Depois de desempacotamento, 3514kB adicionais de espaço em disco serão usados.
     Quer continuar? [S/n]

Os pacotes que serão instalados são os pacotes necessários para gmc ser construído corretamente. É importante observar que este comando não fará o download do pacote fonte a ser compilado. Você irá ainda precisar rodar apt-get source para pegar ele.

Se tudo que você quer é checar quais pacotes são necessários para construir um dado pacote, existe um método showpkg para o comando apt-cache (veja Obtendo informações sobre pacotes., Capítulo 6), que irá mostrar, além de outras informações, a linha Build-Depends daquele pacote.

     # apt-cache showsrc pacote

5.3 Construindo um pacote de depuração

Se você quiser construir um pacote para propósitos de depuração, por exemplo, reportar um bug -- ou consertar um, você pode usar variáveis de ambientes que são suportadas pela maioria dos pacotes Debian.

Para construir um pacote que contém binários com símbolos de depuração [6] tudo o que você precisa fazer é prefixá-lo com DEB_BUILD_OPTIONS=nostrip. Otimizações podem também tornar depurações mais difíceis, então você pode desativá-las adicionando a string noopt na variável DEB_BUILD_OPTIONS. Exemplo:

     $ DEB_BUILD_OPTIONS="nostrip noopt" dpkg-buildpackage -rfakeroot -uc -b

5.4 Opções para construção de pacotes personalizados

Se o que você quer é personalizar a forma como o pacote é construído, você terá que editar o arquivo debian/rules. Isto significa: dentro do diretório principal criado quando o pacote fonte é extraído haverá um diretório debian, que contém muitos arquivos. Um deles é especial: o arquivo rules.

Esse arquivo é normalmente um Makefile que tem alvos para a configurar (configure), construir (build), instalar (install) e criar o pacote. Por exemplo, se eu quero ter o pacote luola[7] sem som eu posso, depois de fazer o download e extrair seus fontes editar o arquivo debian/rules dessa forma:

     [...]
     configure: configure-stamp
     configure-stamp:
     	dh_testdir
     	# Add here commands to configure the package.
     	./configure $(confflags) \
     		--prefix=/usr \
     		--mandir=share/man \
     		--infodir=share/info \
     		--datadir=share/games \
     		--bindir=games \
     		--enable-sound
     #		 --enable-sdl-gfx	
     
     	touch configure-stamp
     [...]

Está vendo o --enable-sound? Se eu removê-lo ou repassá-lo com --disable-sound e então reconstruir o pacote usando a técnica descrita em Fazendo o download de pacotes-fonte, Seção 5.1 eu terei um pacote luola construído para não usar som.

Se você realamente quer trabalhar com pacotes fonte no dia-a-dia eu sugiro que leia o Guia dos Novos Mantenedores Debian e o Manual de Políticas Debian, principalmente. Outros documentos disponíveis no Canto dos Desenvolvedores Debian podem ser úteis também.


5.5 Mas ei, eu não quero usar essas funcionalidades do Debian!

Sometimes, people want to use a specific version of a program available only on source code, with no Debian package. But the packaging system can be a trouble when doing this. Suppose you want to compile a new version of your email server. All is fine, but many packages in Debian depend on an MTA (Mail Transfer Agent). Since you installed something you compiled by yourself, the packaging system doesn't know about it.

É aí que o equivs entra em cena. Para usá-lo, instale o pacote com esse nome. Equivs cria um pacote vazio que "simula" as dependências, fazendo com que o sistema de empacotamento acredite que as dependências estão satisfeitas.

Antes de começarmos, é bom relembrar que existem maneiras mais seguras de compilar um programa que já é empacotado para Debian com diferentes opções, e que nesse caso não se deve usar equivs para repassar dependências se não se sabe o que está fazendo. Veja Fazendo o download de pacotes-fonte, Seção 5.1 para mais informações.

Continuando com o exemplo do MTA, você apenas instalou seu novo postfix compilado e foi instalar o pacote mutt. De repente você descobre que o mutt que instalar outro MTA. Mas você já tem o seu instalado.

Vá para algum diretório (/tmp, por exemplo) e rode:

     # equivs-control nome

Repasse nome pelo nome do arquivo de controle (control) que você quer criar. O arquivo será criado como se segue:

     Section: misc
     Priority: optional
     Standards-Version: 3.5.10
      
     Package: <enter package name; defaults to equivs-dummy>
     Version: <enter version here; defaults to 1.0>
     Maintainer: Your Name <yourname@foo.com>
     Pre-Depends: <packages>
     Depends: <packages>
     Recommends: <packages>
     Suggests: <package>
     Provides: <(virtual)package>
     Architecture: all
     Copyright: <copyright file; defaults to GPL2>
     Changelog: <changelog file; defaults to a generic changelog>
     Readme: <README.Debian file; defaults to a generic one>
     Extra-Files: <additional files for the doc directory, commaseperated>
     Description: <short description; defaults to some wise words>
      long description and info
      .
      second paragraph

Nós apenas precisamos modificar isso para o que nós queremos. Tenha atenção no formato dos campos e nas suas descrições, aqui não é necessário explicar cada um, vamos fazer o que é preciso:

     Section: misc
     Priority: optional
     Standards-Version: 3.0.1
     
     Package: mta-local
     Provides: mail-transport-agent

Sim, isso é tudo. O mutt depende do mail-transport-agent, que é um pacote virtual oferecido por todos MTAs, o "registro" mta-local é como um mail-transport-agent usando o campo Provides.

The Conflicts and Replaces fields are needed, too, so that APT and dpkg will understand they should remove the currently installed MTA package in favour of the new one you're installing.

Agora você somente precisa construir o pacote:

     # equivs-build nome
     dh_testdir
     touch build-stamp
     dh_testdir
     dh_testroot
     dh_clean -k
     # Add here commands to install the package into debian/tmp.
     touch install-stamp
     dh_testdir
     dh_testroot
     dh_installdocs
     dh_installchangelogs
     dh_compress
     dh_fixperms
     dh_installdeb
     dh_gencontrol
     dh_md5sums
     dh_builddeb
     dpkg-deb: building package `name' in `../nome_1.0_all.deb'.
     
     The package has been created.
     Attention, the package has been created in the current directory,

E instale o .deb. resultante. Veja Instalado manualmente pacotes debian que foram baixados ou criados localmente, Seção 4.5.

Como se pode ver, há diversas utilidades para equivs. Uma é poder criar um pacote meus-favoritos, que é dependência de programas que você usualmente instala, por exemplo. Libere sua imaginação, mas seja cuidadoso.

É importante observar que há exemplos de arquivos de controle (control) em /usr/share/doc/equivs/examples. Dê uma olhada neles.


[ anterior ] [ Conteúdo ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ próximo ]


Como usar o APT

2.0.2 - October 2006

Gustavo Noronha Silva kov@debian.org