[ anterior ] [ Conteúdo ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ próximo ]
É 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.
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
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
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.
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 2006kov@debian.org