Documentação Gentoo do Distcc
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
MAKEOPTS="-jN"
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
|
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 |
# rc-update add distccd default
# /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}"
|
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
FEATURES="distcc"
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 |
# /usr/bin/distcc-config --set-hosts "localhost host1 host2 host3 ..."
|
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
# distccmon-gnome
# DISTCC_DIR="/var/tmp/portage/.distcc/" distccmon-text N
# 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.
|
O conteúdo deste documento está licenciado pela licença Creative Commons -
Attribution / Share Alike.
|