Gentoo Logo

Aviso : Este documento não é válido e não é mais mantido.


Documentação Gentoo do Distcc

Conteúdo:

1.  Introdução

O que é o distcc?

Distcc é um programa feito para distribuir tarefas de compilação através da rede entre os hosts participantes. É composto de um servidor, distccd, e um cliente , distcc. O Distcc pode trabalhar transparentemente com o ccache,Portage e Automake com pouco trabalho.

Usando o distcc para o bootstrap

Se você está planejando em usar o distcc para ajudar com o bootstrap de uma instalação do gentoo, certifique-se de ler a seção Usando o distcc para o bootstrap, que localiza-se mais abaixo neste documento.

2.  Setup

Dependências

Para usar o Distcc, todos os computadores da sua rede precisam ter a mesma versão do GCC. Por exemplo: misturar versões 3.3.x (onde o x variar) não tem problema, mas misturar versões 3.3.x e 3.2.x poderá resultar em erros de compilação ou execução.

Instalando o Distcc

Existem algumas opções que você deve estar ciente antes de começar a instalar o distcc.

O Distcc vem com um monitor gráfico para monitorar as tarefas que seu computador está enviando para compilação. Se você usa Gnome então adicione 'gnome' em sua USE flag. De qualquer forma, se você não usa Gnome e ainda assim gostaria de ter o monitor, então você deveria adicionar 'gtk' na USE flag.

Listagem de código 2.1: Instalando o distcc

# emerge distcc

Configurando o Portage para usar o Distcc

Configurar o Portage para usar o disctcc é fácil. Execute os passos a seguir em cada sistema que vai participar da compilação distribuída:

Listagem de código 2.2: Integrando o Distcc e o Portage

# emerge distcc
# nano -w /etc/make.conf
(Ajuste o N para um número apropriado para o seu caso)
(Uma estratégoa comum é duas vezes o número total de CPU's + 1)
MAKEOPTS="-jN"
(Adicione distcc em sua variável FEATURES)
FEATURES="distcc"

Especificando os hosts partitipantes

Use o comando distcc-config para ajustar a lista de hosts. Abaixo um exemplo de alguns hosts que podem estar na sua lista:

Listagem de código 2.3: Exemplo da definição de hosts

192.168.0.1          192.168.0.2                       192.168.0.3
192.168.0.1/2        192.168.0.2                       192.168.0.3/10
192.168.0.1:4000/2   192.168.0.2/1                     192.168.0.3:3632/4
@192.168.0.1         @192.168.0.2:/usr/bin/distccd     192.168.0.3
(Existe também muitos outros métodos de ajustar os hosts. Veja a página
de manual do distcc para mais detalhes.)
Se você deseja compilar localmente na maquina, deves colocar 'localhost'
na lista de hosts. Já se você não quer usar a maquina local para compilar 
(que geralmente é o caso) não adicione-a na lista de hosts. Numa maquina
lenta, usá-la pode deixar as coisas mais lentas ainda. Certifique-se de testar suas
configurações para performance.

Pode parecer tudo complicado, mas uma variação da linha 1 ou 2 irá funcionar.

Já que a maioria das pessoas não usarão as linhas 3 ou 4, irei apontá-los para a documentação do distcc (man distcc) para mais informações.

Por exemplo, para ajustar a primeira linha no exemplo anterior:

Listagem de código 2.4: Comando de exemplo para ajustar os hosts

# /usr/bin/distcc-config --set-hosts "192.168.0.1 192.168.0.2 192.168.0.3"

Edite o arquivo /etc/conf.d/distccd de acordo com suas necessidades e certifique-se de ajustar a diretiva --allow para permitir somentes hosts de sua confiança. Para mais segurança, você também deveria usar a diretiva --listen para informar ao distcc em qual IP escutar (para sistemas com vários endereços ). Mais informações sobre segurança do distcc pode ser encontrado em Distcc Security Design.

Importante: É importante usar --allow e --listen. Favor leia a página de manual do distcc ou o documento sobre segurança acima para mais informações.

Agora inicie o serviço do distcc em todos os computadores participantes:

Listagem de código 2.5: Iniciando o serviço distcc

(Adicione o distcc ao runlevel padrão)
# rc-update add distccd default
(Inicie o serviço distcc)
# /etc/init.d/distccd start

Configurando o Distcc para trabalhar com Automake

Em alguns casos, é mais fácil que a configuração com o Portage. O que você precisa fazer é ajustar a variável PATH e incluir /usr/lib/distcc/bin na frente do diretório que contém o gcc (/usr/bin). De qualquer forma, existe uma dica. Se você usa o ccache, você tem que por o distcc após a parte do ccache:

Listagem de código 2.6: Configurando a variável $PATH

# export PATH="/usr/lib/ccache/bin:/usr/lib/distcc/bin:${PATH}"
Você pode por isto em seu .bashrc ou arquivo equivalente para ter o PATH
configurado sempre que você efetuar o login.

Agora, da mesma forma que você digita make, você pode digitar make -jN (onde N é um inteiro). O valor de N depende da sua rede e dos computadores que você está usando para compilar. Teste suas próprias configurações para achar o número que resulta na melhor performance.

3.  Cross-compiling

Cross-compiling é usar uma arquitetura para construir programas para uma outra arquitetura. Isto pode ser tão simples como usar um Athlon (i686) para construir um programa para K6-2 (i586), ou usar um Sparc para construir um programa para um ppc. Isto é documentado no Guia de cross-compiling de Distcc.

4.  Usando o distcc para o Bootstrap

Passo 1: Configure o Portage

Inicie sua nova maquina com um LiveCD do Gentoo Linux e siga as instruções de instalação até a parte do bootstrap. Então configure o Portage para usar o distcc:

Listagem de código 4.1: Configuração preliminar

# nano -w /etc/make.conf
(Adicione distcc a variável FEATURES)
FEATURES="distcc"
(Modifique a variável MAKEOPTS e inclua o valor -jN com N sendo inteiro)
MAKEOPTS="-jN"

Listagem de código 4.2: Ajustando o caminho

# export PATH="/usr/lib/ccache/bin:/usr/lib/distcc/bin:${PATH}"

Passo 2: Baixando o distcc

Antes da instalação do distcc, um usuário chamado distcc deve ser adicionado ao /etc/passwd:

Listagem de código 4.3: Crie o usuário distcc

# echo "distcc:x:240:2:distccd:/dev/null:/bin/false" >> /etc/passwd

Importante: É importante notar que adicionando usuários desta forma é péssimo. Nós somente fazemos isto aqui por que não existe o utilitário useradd (que você normalmente usa para adicionar usuários) neste estágio da instalação.

Instale o distcc:

Listagem de código 4.4: Pondo o distcc no novo sistema

# USE='-*' emerge --nodeps sys-devel/distcc

Passo 3: Configurando o distcc

Execute distcc-config --install para configurar o distcc:

Listagem de código 4.5: Configuração final do distcc

(Substitua host1, host2, ... com os números de IP dos hosts participantes)
# /usr/bin/distcc-config --set-hosts "localhost host1 host2 host3 ..."
Um exemplo: /usr/bin/distcc-config --set-hosts "localhost 192.168.0.4 192.168.0.6"

Distcc está agora configurado para o bootstrap! Continue com as instruções de instalaçao oficiais e não esqueça de reinstalar o distcc após o emerge system. Isto é para garantir que todas as dependências que você quer estão instaladas corretamente.

Nota: Durante o bootstrap e o emerge system, o distcc não deve aparentar estar sendo usado. Isto é esperado já que alguns ebuilds não funcionam bem com o distcc, então eles são intencionalmente desabilitados.

5.  Resolvendo problemas

Mozilla e Xfree

Ao instalar vários pacotes, você irá notar que alguns deles não estão sendo distribuídos (e não estão sendo construídos em pararelo). Isto é por que os desenvolvedores dos ebuilds do Mozilla e do Xfree desabilitam intencionalmente construição paralela por causa de problemas conhecidos.

Algumas vezes o distcc pode falhar ao compilar algum pacote. Se isto acontecer com você, por favor reporte para nós.

Uma mistura de hosts hardened-gcc e não-hardened-gcc falhará

Com um título tão longo qualquer explicação aqui é quase irrelevante. De qualquer forma, se você planeja usar o distcc entre hosts que tem o PaX/hardened-gcc e outros que não o tem, você terá problemas.

A solução requer um pouco de *foresight da sua parte; você terá que executar hardened-gcc -R no host que tem PaX/hardened-gcc, ou terá que habilitar proteções PaX no seu kernel e executar emerge hardened-gcc. Ambas opções são boas coisas a fazer já que na maior parte as proteções oferecidas pelos dois pacotes são boas e transparentes para o usuário.

Misturas de versões do GCC

Se você tem diferentes versões do GCC em seus hosts, acontecerão problemas bem estranhos. A solução é fazer com que todos os hosts tenham a mesma versão do GCC.

Atualizações recentes do Portage fazem o portage usar ${CHOST}-gcc ao invés de gcc. Isto significa que se você está misturando maquinas i686 com outros tipos (i386, i586) você terá problemas. Uma solução para isto pode ser executar um export CC='gcc' CXX='c++' ou por isso no /etc/make.conf.

Importante: Fazendo isto, claramente redefine algum comportamento do Portage e podem haver alguns resultados estranhos no futuro. Somente faça isto se você está misturando CHOST.

6.  Extras sobre Distcc

Monitores para o distcc

Distcc vem com dois monitores. O baseado em texto é sempre construído e é chamado de distccmon-text. Executá-lo pela primeira vez pode ser um pouco confuso, mas é realmente fácil de usar. Se você executar o programa sem nenhum parametro ele executará uma vez. Já se você passar um número para ele, ele atualizará a cada N segundos, onde N é o argumento que você passou.

O outro monitor é somente ativado se você habilitar gtk ou gnome na variável USE. Este monitor é baseado em GTK+, executa num ambiente X e é bem bonitinho.

Listagem de código 6.1: Iniciando os monitores

# distccmon-text N
(Ou)
# distccmon-gnome
Para monitorar o distcc do Portage podes usar:
# DISTCC_DIR="/var/tmp/portage/.distcc/" distccmon-text N
(Ou)
# DISTCC_DIR="/var/tmp/portage/.distcc/" distccmon-gnome

Importante: Se seu diretório do distcc está em outro lugar, modifique a variável DISTCC_DIR de acordo.



Imprimir

Atualizado 25 de janeiro de 2006

A versão original desta tradução não é mais mantida

Resumo: Este documento é um COMO-FAZER para usar o distcc com o Gentoo.

Lisa Seelye
Autor

Mike Frysinger
Editor

Erwin
Editor

Sven Vermeulen
Editor

Lars Weiler
Editor

Tiemo Kieft
Revisor

Enderson Maia
Tradutor

Claudio Pereira da Costa
Tradutor

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.