Gentoo Logo

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

Manual do Gentoo Linux/x86

Conteúdo:

  • Instalando o Gentoo
    Nesta seção você aprende como instalar o Gentoo em seu sistema.
    1. Sobre a instalação do Gentoo Linux
      Este capítulo introduz você ao método de instalação documentado nesta parte.
    2. Escolhendo a mídia de instalação correta
      Você pode instalar o Gentoo de várias maneiras. Este capítulo explica como instalar o Gentoo usando o CD de instalação mínimo, embora a instalação com o CD de instalação universal também seja possível.
    3. Configurando sua rede
      Para poder baixar as últimas versões de código-fonte, você precisa configurar sua rede.
    4. Preparando os discos
      Para poder instalar o Gentoo, você deve criar as partições necessárias. Este capítulo descreve como particionar um disco rígido para uso posterior.
    5. Instalando os arquivos de instalação do Gentoo
      O Gentoo é instalado através de um arquivo de stage3. Neste capítulo nós descrevemos como extrair um arquivo de stage3 e configurar o Portage.
    6. Instalando o sistema básico do Gentoo
      Depois de configurar e instalar um stage3, você terá como resultado um sistema básico do Gentoo a sua disposição. Este capítulo descreve como chegar até este ponto.
    7. Configurando o kernel
      O kernel do Linux é o centro de toda distribuição. Este capítulo explica como configurá-lo.
    8. Configurando seu sistema
      Você precisa editar alguns arquivos de configuração importantes. Neste capítulo você vê quais são esses arquivos e uma explicação de como proceder.
    9. Instalando as ferramentas de sistema necessárias
      Como mencionado antes, o Gentoo é escolha. Neste capítulo iremos ajudá-lo na escolha e instalação de algumas ferramentas importantes.
    10. Configurando o gerenciador de inicialização
      Existem vários gerenciadores de inicialização para a arquitetura x86. Cada um deles tem seu próprio jeito de configurar. Neste passo ensinamos o processo de configuração do gerenciador de inicialização para atender às suas necessidades.
    11. Finalizando a instalação do Gentoo
      Está quase acabando. Iremos somente criar um (ou mais) usuários para seu sistema.
    12. E agora, para onde ir?
      Agora que você instalou o Gentoo, o que temos pela frente?
  • Trabalhando com o Gentoo
    Aprenda como trabalhar com o Gentoo: instalando software, alterando variáveis, modificando o comportamento do Portage e etc...
    1. Uma introdução ao Portage
      Este capítulo explica os "simples" passos que um usuário precisa fazer para cuidar do software em seu sistema.
    2. Variáveis de USE
      As variáveis de USE são um aspecto muito importante do Gentoo. Neste capítulo você irá aprender a trabalhar com variáveis de USE e entender como elas interagem com seu sistema.
    3. Funcionalidades do Portage
      Descubra as funcionalidades que o Portage tem, como suporte para compilação distribuída, ccache e muito mais.
    4. Scripts de inicialização
      O Gentoo usa um formato especial de scripts de inicialização que, além de outras coisas, permite decisões baseadas em dependências e scripts virtuais. Este capítulo explica todos estes aspectos e como trabalhar com estes scripts.
    5. Variáveis de ambiente
      Com o Gentoo você pode facilmente gerenciar as variáveis de ambiente para o seu sistema. Este capítulo explica como fazer isto, e também descreve as variáveis que são usadas com mais freqüência.
  • Trabalhando com o Portage
    "Trabalhando com o Portage" fornece detalhes mais profundos do Portage, a ferramenta de gerenciamento de software do Gentoo.
    1. Arquivos e diretórios
      Se você quiser saber bastante sobre o Portage, você precisa saber onde ele grava seus arquivos e dados.
    2. Configuração através de variáveis
      O Portage é completamente configurável através das diferentes variáveis que você pode ajustar no arquivo de configuração ou como variável de ambiente.
    3. Misturando ramos de software
      O Gentoo fornece software separado em vários ramos, dependendo da estabilidade e suporte arquitetural. "Misturando ramos de software" informa você sobre como esses ramos podem ser configurados e como você pode sobre-escrever a separação individualmente.
    4. Ferramentas do Portage adicionais
      O Portage vem com algumas ferramentas adicionais que podem deixar sua experiência com o Gentoo ainda melhor. Leia mais para descobrir como usar o dispatch-conf e outras ferramentas.
    5. Divergindo da árvore oficial
      "Divergindo da árvore oficial" dá dicas e truques para usar sua própria árvore do Portage, como sincronizar só as categorias que você quer, injetar pacotes e mais.
    6. A aplicação ebuild
      Em "A aplicação ebuild" você é informado sobre os passos que o Portage toma enquanto está instalando software e como você pode fazer o mesmo sozinho usando a aplicação ebuild.
  • Configuração de rede do Gentoo
    Um guia completo de rede no Gentoo.
    1. Começando
      Um guia para colocar sua interface de rede para funcionar nos ambientes mais comuns.
    2. Configuração avançada
      Aqui nós aprendemos sobre como a configuração funciona - você precisa saber isto antes de aprendermos sobre rede modular.
    3. Rede modular
      O Gentoo dá a você uma rede flexível - aqui você é ensinado sobre como escolher diferentes clientes de DHCP, configurar bonding, bridging, VLANs e mais.
    4. Rede wireless
      Wireless não é tão simples. Esperamos colocar para funcionar!
    5. Adicionando funcionalidade
      Se você estiver sentindo-se aventureiro, você pode adicionar suas próprias funções ao sistema de rede.
    6. Gerenciamento de rede
      Para usuários de laptop ou pessoas que usam seus computadores em diferentes redes.

A. Instalando o Gentoo

1. Sobre a instalação do Gentoo Linux

1.a. Introdução

Bem-vindo!

Primeiramente, seja bem-vindo ao Gentoo. Em breve você entrará no mundo das escolhas e da performance. O Gentoo é escolha. Na instalação você verá isso várias vezes -- você pode escolher o quanto você quer compilar pessoalmente, como instalar o Gentoo, qual gerenciador de registros de sistema você quer, etc...

O Gentoo é uma metadistribuição moderna e veloz com um desenho limpo e flexível. O Gentoo foi construído com software livre e não esconde de seus usuários o que está sob o capô. O Portage, sistema de gerenciamento de pacotes usado pelo Gentoo, é escrito em Python, o que significa que você pode facilmente ver e modificar o código-fonte. O sistema de gerenciamento de pacotes do Gentoo usa código-fonte (embora também ofereça suporte a pacotes pré-compilados) e a configuração do Gentoo é toda feita com arquivos de texto normais. Em outras palavras, abertura em todos os pontos.

É muito importante que você entenda que as escolhas são o que movimenta o Gentoo. Nós tentamos não forçar você a nada que você não goste. Se você achar que estamos forçando, por favor relate um bug.

Como é a estrutura da instalação?

A instalação do Gentoo pode ser vista como um procedimento de 10 passos, correspondendo aos capítulos 2 - 11. Cada passo resulta num determinado estado:

  • Após o passo 1, você está num ambiente pronto para instalar o Gentoo
  • Após os passo 2, a sua conexão à Internet está pronta para instalar o Gentoo
  • Após o passo 3, seus discos rígidos estão aptos a abrigar a sua instalação do Gentoo
  • Após o passo 4, seu ambiente de instalação está preparado e você está pronto para fazer o chroot dentro do novo ambiente
  • Após o passo 5, os pacotes-chave, que são os mesmos em todas as instalações do Gentoo, estão instalados
  • Após o passo 6, você compilou seu kernel de Linux
  • Após o passo 7, você escreveu a maioria dos arquivos de configuração de sistema do seu Gentoo
  • Após o passo 8, seu gerenciador de inicialização escolhido foi instalado e configurado
  • Após o passo 9, as ferramentas de sistema necessárias (as quais você pode escolher de uma bela lista) estão instaladas
  • Após o passo 10, você está logado na sua nova instalação do Gentoo

Quando você tem uma certa escolha, tentamos da melhor forma possível explicar os prós e contras de cada opção. Continuaremos então com uma escolha padrão, identificada por "Padrão: " no título. As outras possibilidades são identificadas por "Alternativa: ". Não pense que o padrão é o que recomendamos. É simplesmente a que acreditamos que a maioria dos usuários vai usar.

Eventualmente será oferecido um passo opcional. Esses passos são marcados como "Opcional: " e portanto não são necessários para instalar o Gentoo. No entanto, alguns passos opcionais dependem de decisões anteriores que você fez. Vamos informá-lo quando isso acontecer, tanto quando você fizer a decisão, quanto logo antes de descrevermos o passo opcional.

Quais são minhas opções?

Você pode instalar o Gentoo de muitas formas diferentes. Você pode baixar e instalar a partir dos nossos CDs de instalação, a partir de uma distribuição já existente em seu disco, a partir de um CD inicializável (como o Knoppix), inicializando pela rede, a partir de um disquete de recuperação, etc...

Este documento cobre a instalação usando CDs de instalação do Gentoo, ou em certos casos, inicialização via rede. Esta instalação presume que você quer instalar a última versão de cada pacote. Se você quiser fazer uma instalação sem rede, você deve ler os Manuais do Gentoo 2007.0 que contêm as instruções de instalação para um ambiente sem rede.

Também note que, se você planeja usar GRP (a Gentoo Reference Platform, uma coleção de pacotes pré-construídos feitos para uso imediato após uma instalação do Gentoo), você deve seguir as instruções nos Manuais do Gentoo 2007.0.

Para ajuda em outras formas de instalação, por favor leia nosso Guia Alternativo de Instalação. Nós também fornecemos o documento Dicas & truques de instalação do Gentoo, que pode ser uma ótima leitura também. Se você sente que as instruções de instalação atuais são muito elaboradas, sinta-se livre para usar nosso Guia de instalação rápida disponível a partir de nossos Recursos de documentação se sua arquitetura tiver tal documentação disponível.

Você também tem diversas possibilidades: pode compilar seu sistema inteiro do zero ou usar um ambiente pré-construído para ter seu ambiente Gentoo rodando o mais rápido possível. E é claro que também há soluções intermediárias nas quais você não tem que compilar tudo, começando com um sistema semi-pronto.

Problemas?

Se você encontrar algum problema na instalação (ou na documentação de instalação), por favor visite nosso sistema de rastreamento de bugs e verifique se o bug é conhecido. Se não existir, crie um novo registro de bug para que possamos cuidar dele. Não tenha medo dos desenvolvedores que receberem os (seus) bugs -- normalmente eles não comem pessoas.

Note também que, apesar de a documentação que você está lendo agora seja específica por arquitetura, conterá referências para outras arquiteturas também. Isto deve-se ao fato de que grandes partes do Manual do Gentoo usam comandos e códigos que são comuns para todas as arquiteturas (para evitar duplicação de esforços e desgastes dos esforços de desenvolvimento). Nós tentamos manter isso ao mínimo para evitar confusões.

Se você estiver em dúvida com um problema de usuário (algum erro que você cometeu apesar de ter lido atenciosamente a documentação) ou um problema de software (algum erro que nós cometemos apesar de ter testado atenciosamente a instalação e a documentação), sinta-se à vontade para juntar-se ao #gentoo ou #gentoobr em irc.freenode.net. Obviamente você não precisa dessas dúvidas para ser bem-vindo lá :)

Se você tiver uma questão sobre o Gentoo, verifique nossas Perguntas mais freqüentes, disponíveis na Documentação do Gentoo. Você também pode ver as FAQs (Perguntas mais freqüentes) nos nossos fóruns. Se não conseguir encontrar a resposta lá, pergunte no #gentoo (inglês), ou no #gentoobr, nosso canal de IRC na irc.freenode.net. Sim, muitos de nós são loucos que entram no IRC :-)

2. Escolhendo a mídia de instalação correta

2.a. Requisitos de hardware

Introdução

Antes de começar, primeiro iremos listar que requisitos de hardware você precisa para instalar o Gentoo com sucesso em sua máquina.

Requisitos de hardware

CPU i486 ou mais novo
Memória 64 MB
Espaço em disco 1.5 GB (menos o espaço de swap)
Espaço de swap No mínimo 256 MB

2.b. Os CDs de instalação do Gentoo

Introdução

Os CDs de instalação do Gentoo são CDs carregáveis que contêm um ambiente Gentoo auto-suficiente. Eles permitem que você carregue o Linux a partir do CD. Durante o processo de inicialização seu hardware é detectado e os módulos apropriados são carregados. Eles são mantidos pelos desenvolvedores do Gentoo.

Todos CDs de instalação permitem que você faça inicialização, configure a rede, inicialize suas partições e comece a instalar o Gentoo da Internet. Nós atualmente fornecemos dois CDs de instalação que são igualmente apropriados para se instalar o Gentoo, contanto que você esteja planejando fazer uma instalação com acesso à Internet usando a última versão dos pacotes disponíveis.

Se você quer instalar o Gentoo sem uma conexão de Internet, por favor use as instruções de instalação descritas nos Manuais do Gentoo 2005.1.

Os dois CDs de instalação que nós fornecemos atualmente são:

  • O CD de instalação mínimo do Gentoo, um CD carregável pequeno, sem nada de mais, cujo único propósito é carregar o sistema, preparar a rede e continuar com a instalação do Gentoo.
  • O CD de instalação universal do Gentoo, um CD carregável com as mesmas aptidões do CD de instalação mínimo. Adicionalmente, ele contém várias tarballs de stage3 (otimizadas para cada sub-arquitetura).

Para ajudar a decidir de que CD de instalação você precisa, escrevemos as principais vantagens e desvantagens de cada CD de instalação.

O CD de instalação mínimo do Gentoo

O CD de Instalação mínimo é chamado de install-x86-minimal-2005.1-r1.iso e ocupa somente 58 MB de espaço em disco. Você pode usar este CD de instalação para instalar o Gentoo, mas sempre com uma conexão de Internet disponível.

CD de Instalação mínimo Prós e contras
+ Menor download
- Não contém stage3, cópia da árvore do Portage, pacotes pré-construídos e portanto não serve para uma instalação sem rede

O CD de Instalação universal do Gentoo

O CD de Instalação universal do Gentoo é chamado de install-x86-universal-2005.1-r1.iso e consome 398 MB. Você pode usar este CD de instalação para instalar o Gentoo, e ainda pode usá-lo para instalar o Gentoo sem uma conexão à Internet, se você quiser instalar o Gentoo em um PC diferente do que você está instalando o Gentoo agora :)

CD de instalação universal Prós e contras
+ Contém tudo que você precisa. Você pode até mesmo instalar sem uma conexão de rede.
- Grande download

Outros CDs

Você pode encontrar os CDs de pacotes em um de nossos servidores. Este CD não é um CD de instalação, e sim um recurso adicional que pode ser usado durante uma instalação sem rede. Ele contém pacotes pré-construídos (também conhecidos como conjunto de GRP) que permitem que você instale aplicativos adicionais de maneira fácil e rápida (como OpenOffice.org, KDE, GNOME, ...) imediatamente após a instalação sem rede do Gentoo.

Se você tem a intenção de usar o CD de pacotes para instalar software adicional rapidamente, certifique-se de usar a mesma sub-arquitetura da tarball de stage3 que você usar.

A tarball de Stage3

Uma tarball de stage3 é um arquivo contendo um ambiente Gentoo mínimo, que serve para continuar a instalação do Gentoo usando as instruções deste manual. Antigamente, o Manual do Gentoo descrevia a instalação usando uma de três tarballs de stage. Embora o Gentoo ainda ofereça tarballs de stage1 e stage2, o método de instalação oficial usa a tarball de stage3. Se você estiver interessado em fazer uma instalação do Gentoo usando uma tarball de stage1 ou stage2, por favor leia as perguntas freqüentes do Gentoo sobre Como instalo o Gentoo usando uma tarball de Stage1 ou Stage2?

2.c. Baixe, grave e carregue um CD de Instalação do Gentoo

Baixando e gravando os CDs de Instalação

Você escolheu usar um CD de instalação do Gentoo. Iremos iniciar baixando e gravando o CD de Instalação escolhido. Anteriormente discutimos os vários CDs de instalação disponíveis, mas onde você pode encontrá-los?

Você pode baixar qualquer um dos CDs de Instalação (e, se você quiser, um CD com pacotes também) de um de nossos servidores. Os CDs de instalação estão localizados no diretório releases/x86/2005.1-r1/installcd/.

Dentro deste diretório você irá encontrar arquivos ISO. Eles são imagens completas de CDs que você pode gravar em CD-R.

Caso você não tenha certeza se o arquivo baixado está corrupto ou não, você pode verificar seu MD5 checksum e compará-lo com o MD5 checksum que fornecemos (como install-x86-minimal-2005.1-r1.iso.md5). Você pode verificar o MD5 checksum com a ferramenta md5sum em Linux/Unix ou md5sum para Windows.

Outro jeito de verificar a validade do arquivo baixado é usar o GnuPG para verificar a assinatura criptográfica que fornecemos (o arquivo terminando com .asc). Baixe o arquivo de assinatura e obtenha a chave pública:

Listagem de código 3.1: Obtendo a chave pública

$ gpg --keyserver subkeys.pgp.net --recv-keys 17072058

Agora verifique a assinatura:

Listagem de código 3.2: Verifique a assinatura criptográfica

$ gpg --verify <arquivo de assinatura> <iso baixada>

Para gravar ISO(s) baixada(s), você deve selecionar raw-burning. Como fazer isto depende do programa. Iremos discutir o cdrecord e o K3B aqui; mais informações podem ser encontradas em nosso Guia de perguntas freqüentes do Gentoo.

  • Com o cdrecord, você simplesmente digita cdrecord dev=/dev/hdc <arquivo iso baixado> (substitua /dev/hdc com o caminho de seu drive de CD-RW).
  • Com o K3B, selecione Ferramentas > CD > Gravar imagem. Então você pode encontrar seu arquivo ISO com o campo 'Imagem a gravar'. Finalmente clique Iniciar.

Carregando o CD de instalação

Importante: Leia esta subseção inteira antes de continuar, já que você provavelmente não terá a oportunidade lê-la antes de fazer as coisas depois.

Uma vez que você gravou seu CD de instalação, está na hora de carregá-lo. Tire todos CDs de suas bandejas, reinicie seu sistema e entre na BIOS. Isto normalmente se faz apertando DEL, F1 ou ESC, dependendo da sua BIOS. Dentro da BIOS, mude a ordem de inicialização para que seu CD-ROM seja lido antes do disco-rígido. Isto normalmente é encontrado em "CMOS Setup". Se você não fizer isso, seu sistema irá simplesmente reiniciar a partir do disco-rígido, ignorando o CD-ROM.

Agora coloque o CD de instalação do dispositivo de CD-ROM (obviamente) e reinicie. Você deve ver um prompt de inicialização. Nesta tela, você pode apertar Enter para começar o processo de inicialização com as opções de inicialização padrão, ou carregar o CD de instalação com opções de inicialização personalizadas, especificando um kernel seguido das opções de inicialização e apertando Enter.

Especificando um kernel? Sim, nós fornecemos alguns kernéis em nossos CDs de instalação. O padrão é o gentoo. Outros kernéis são para necessidades específicas de hardware e os variantes de -nofb que não usam framebuffer.

Abaixo você irá encontrar uma breve lista de kernéis disponíveis:

Kernel Descrição
gentoo kernel 2.6 padrão com suporte para CPUs múltiplas
gentoo-nofb Igual ao gentoo, mas sem framebuffer
memtest86 Teste erros na sua memória RAM local

Você pode também fornecer opções de kernel. Elas representam ajustes opcionais que você pode (des)ativar conforme quiser. A lista seguinte é a mesma que você recebe quando você aperta F2 na tela de início.

Listagem de código 3.3: Opções disponíveis para passar ao kernel de sua escolha

- agpgart       carrega o agpgart (use se você tem problemas gráficos,travamentos)
- acpi=on       carrega suporte para firmware de ACPI
- ide=nodma     desliga DMA para dispositivos IDE com problemas
- doscsi        busca dispositivos SCSI (causa conflito com algumas placa de rede)
- dopcmcia      inicia o serviço de pcmcia para cdroms PCMCIA
- nofirewire    desliga módulos de firewire no initrd (para cdroms firewire,etc)
- nokeymap      desliga seleção de mapa de teclado para teclados diferentes do modelo americano
- docache       faz cachê dos arquivos de execução do cd na memória RAM, permitindo que você 
                desmonte o /mnt/cdrom e monte outro cdrom.
- nodetect      faz com que os programas hwsetup/kudzu e hotplug não rodem
- nousb         desliga módulos de usb no initrd, desliga o hotplug
- nodhcp        o dhcp não roda automaticamente se a placa de rede é detectada
- nohotplug     desliga o carregamento do serviço de hotplug
- noapic        desliga o apic (tente se tiver problemas de hardware com placas de rede,scsi,etc)
- noevms        desliga carregamento de módulos de EVMS2
- nolvm2        desliga carregamento de módulos de LVM2
- hdx=stroke    permite que você particione seu disco-rígido inteiro mesmo que sua BIOS
                não suporte discos-rígidos grandes
- noload=módulo1,[módulo2,[...]]
                desliga o carregamento de módulos de kernel específicos

Agora faça a inicialização de seu CD, selecione um kernel (se você não estiver contente com o kernel padrão gentoo) e opções de inicialização. Como um exemplo, nós iremos mostrar como carregar o kernel gentoo, com dopcmcia como um parâmetro de kernel:

Listagem de código 3.4: Carregando um CD de instalação

boot: gentoo dopcmcia

Você verá uma tela de inicialização e uma barra de progresso. Se você estiver instalando o Gentoo em um sistema com um teclado diferente do modelo americano, certifique-se de apertar Alt-F1 para trocar para modo verbal e siga o prompt. Se nenhuma seleção for feita em 10 segundos, o padrão (teclado americano) será aceito e o processo de inicialização irá continuar. Uma vez que o processo de inicialização termine, você será automaticamente logado no Gentoo Linux "Live" como "root", o superusuário. Você deve ter um prompt de administrador (root) ("#") no console atual e também pode mudar para outros consoles apertando Alt-F2, Alt-F3 e Alt-F4. Volte ao console inicial apertando Alt-F1.

Agora continue com a Configuração de hardware adicional.

Configuração de hardware adicional

Quando o CD de instalação carrega, ele tenta detectar todos seus dispositivos de hardware e carregar os módulos de kernel apropriados para suportar seu hardware. Na vasta maioria dos casos, ele faz um bom trabalho. Todavia, em alguns casos, ele pode não carregar automaticamente os módulos de kernel que você precisa. Se a auto-detecção de PCI pulou algum hardware de seu sistema, você terá de carregar o driver apropriado manualmente.

No próximo exemplo nós tentamos carregar o módulo 8139too (suporte para alguns tipos de interface de rede):

Listagem de código 3.5: Carregando módulos de kernel

# modprobe 8139too

Se você precisa de suporte a PCMCIA, você deve rodar o script de init pcmcia:

Listagem de código 3.6: Rodando o script de init de PCMCIA

# /etc/init.d/pcmcia start

Opcional: Ajustando performance de disco rígido

Se você é um usuário avançado, você pode querer ajustar a performance do disco rígido IDE usando o comando hdparm. Com as opções -tT, você pode testar a performance de seu disco (execute várias vezes para ter uma idéia mais precisa):

Listagem de código 3.7: Testando performance de disco

# hdparm -tT /dev/hda

Para ajustar, você pode usar qualquer um dos seguintes exemplos (ou experimentar por contra própria) que usam /dev/hda como o disco (substitua com seu disco):

Listagem de código 3.8: Ajustando performance de disco rígido

Ativando DMA:                             # hdparm -d 1 /dev/hda
Ativando opções de performance seguras:  # hdparm -d 1 -A 1 -m 16 -u 1 -a 64 /dev/hda

Opcional: Contas de usuário

Se você planeja que outras pessoas tenham acesso a seu ambiente de instalação ou você deseja conversar usando o irssi sem privilégios de administrador (root) (por razões de segurança), você precisa criar as contas de usuário necessárias e mudar a senha de administrador (root).

Para mudar a senha de administrador (root), use o comando passwd:

Listagem de código 3.9: Mudando a senha de administrador (root)

# passwd
New password: (Entre sua senha)
Re-enter password: (Entre sua senha novamente)

Para criar uma conta de usuário, primeiro entramos suas credenciais, seguido da senha. Podemos usar useradd e passwd para essas tarefas. No próximo exemplo, iremos criar um usuário chamado "joao".

Listagem de código 3.10: Criando uma conta de usuário

# useradd -m -G users joao
# passwd joao
New password: (Entre a senha do joao)
Re-enter password: (Entre a senha do joao novamente)

Você pode mudar sua id de usuário de administrador (root) para a conta recém criada usando o comando su:

Listagem de código 3.11: Mudando id de usuário

# su - joao

Opcional: Vendo documentação durante a instalação

Se você quiser ler o Manual do Gentoo (tanto do CD como online) durante a instalação, certifique-se que você criou uma conta de usuário (veja Opcional: Contas de usuário). Então aperte Alt-F2 para ir para um novo terminal e fazer log-in.

Se você quiser ver a documentação no CD você pode imediatamente rodar links para lê-la:

Listagem de código 3.12: Vendo a documentação do CD

# links /mnt/cdrom/docs/html/index.html

No entanto, é recomendável que você use o Manual do Gentoo online, uma vez que ele será mais recente que a versão disponível no CD. Você também pode lê-lo usando o comando links, mas somente após terminar o capítulo Configurando sua rede (senão, você não conseguirá acessar a Internet para ver o documento):

Listagem de código 3.13: Vendo a documentação online

# links http://www.gentoo.org/doc/pt_br/handbook/handbook-x86.xml

Você pode voltar a seu terminal original apertando Alt-F1.

Opcional: Iniciando o Daemon do SSH

Se você quiser permitir que outros usuários acessem seu computador durante a instalação do Gentoo (talvez porque esses usuários vão ajudá-lo a instalar o Gentoo, ou instalar o Gentoo para você), você precisa criar uma conta de usuário para eles e talvez até mesmo dar sua senha de administrador (root) ( faça isso se você tem confiança total no usuário).

Para iniciar o daemon do SSH, execute o seguinte comando:

Listagem de código 3.14: Iniciando o daemon do SSH

# /etc/init.d/sshd start

Para usar o sshd, você primeiro precisa configurar sua rede. Continue com o capítulo Configurando sua rede.

3. Configurando sua rede

3.a. Detecção automática de rede

Talvez simplesmente funcione?

Se seu sistema está conectado numa rede Ethernet com um servidor DHCP, é muito provável que sua configuração de rede já foi configurada automaticamente para você. Se foi, você já pode tirar proveito dos comandos de rede inclusos no CD de instalação como ssh, scp, ping, irssi, wget e links, entre outros.

Se a rede foi configurada para você, o comando /sbin/ifconfig deve listar algumas interfaces de rede fora a lo, como a eth0, por exemplo:

Listagem de código 1.1: saída do /sbin/ifconfig para uma configuração de rede funcional

# /sbin/ifconfig
(...)
eth0      Link encap:Ethernet  HWaddr 00:50:BA:8F:61:7A
          inet addr:192.168.0.2  Bcast:192.168.0.255  Mask:255.255.255.0
          inet6 addr: fe80::50:ba8f:617a/10 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1498792 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1284980 errors:0 dropped:0 overruns:0 carrier:0
          collisions:1984 txqueuelen:100
          RX bytes:485691215 (463.1 Mb)  TX bytes:123951388 (118.2 Mb)
          Interrupt:11 Base address:0xe800 

Opcional: Configurando um proxy

Se você acessa a Internet através de um proxy, será necessário configurar as informações do proxy durante a instalação. É muito fácil definir um proxy: você só precisa definir uma variável que contenha as informações do servidor de proxy.

Na maior parte dos casos, você pode definir as variáveis usando o nome do servidor. Como exemplo, presumimos que o proxy se chama proxy.gentoo.org e a porta é 8080.

Listagem de código 1.2: Definindo servidores de proxy

(Se o proxy filtra tráfico de HTTP)
# export http_proxy="http://proxy.gentoo.org:8080"
(Se o proxy filtra tráfico de FTP)
# export ftp_proxy="ftp://proxy.gentoo.org:8080"
(Se o proxy filtra tráfico de RSYNC)
# export RSYNC_PROXY="proxy.gentoo.org:8080"

Se seu proxy requer usuário e senha, você deve usar a seguinte sintaxe para a variável:

Listagem de código 1.3: Adicionando usuário/senha para a variável do proxy

http://username:password@proxy.gentoo.org:8080

Testando a rede

Talvez você queira fazer ping do servidor de DNS de seu provedor de Internet (encontrado em /etc/resolv.conf) e um site da Web de sua escolha, para certificar que seus pacotes estão chegando na rede, que a resolução de DNS está funcionando corretamente, etc...

Listagem de código 1.4: Testes adicionais de rede

# ping -c 3 www.yahoo.com

Se você consegue usar sua rede, você pode pular o restante desta seção e continuar com Preparando os discos. Se não, continue lendo.

3.b. Configuração de rede automática

Se sua conexão de rede não funcionar de imediato, algumas mídias de instalação permitem usar o net-setup (para conexões de rede genéricas ou redes wireless), o adsl-setup (para usuários ADSL) ou o pptp (para usuários PPTP - somente disponível para x86).

Se sua mídia de instalação não contiver nenhuma dessas ferramentas ou sua conexão de rede não estiver funcionando ainda, continue com Configuração de rede manual.

Padrão: usando o net-setup

A maneira mais simples de configurar uma conexão de rede, se não foi configurada automaticamente, é executar o script net-setup:

Listagem de código 2.1: Executando o script net-setup

# net-setup eth0

O net-setup irá fazer algumas perguntas sobre seu ambiente de rede. Quando tudo estiver pronto, você deve ter uma conexão de rede funcionando. Teste sua conexão de rede como mencionado anteriormente. Se os testes forem positivos, parabéns! Você está pronto para instalar o Gentoo. Pule o resto desta seção e continue com Preparando os discos.

Se sua conexão de rede ainda não estiver funcionando, continue com Configuração manual da rede.

Alternativa: usando RP-PPPoE

Presumindo que você precisa de PPPoE para se conectar à Internet, o CD de instalação (qualquer versão) facilitou as coisas para você ao incluir o rp-pppoe. Use o script adsl-setup oferecido para configurar sua conexão. Um prompt será exibido solicitando informações do dispositivo ethernet que está conectado ao seu modem adsl, seu nome de usuário e senha, os IPs dos seus servidores de DNS e se você precisa de um firewall básico ou não.

Listagem de código 2.2: Usando o rp-pppoe

# adsl-setup
# adsl-start

Se algo der errado, verifique novamente se digitou corretamente seu nome de usuário e senha olhando em /etc/ppp/pap-secrets ou /etc/ppp/chap-secrets e certifique-se que está usando o dispositivo correto. Se seu dispositivo ethernet não existir, você terá que carregar o módulo apropriado de rede. Neste caso você deve continuar com a Configuração manual de rede onde explicamos como carregar os módulos apropriados.

Se tudo funcionar, continue com Preparando os discos.

Alternativa: usando PPTP

Nota: Suporte a PPTP só está disponível para x86

Se você precisa de suporte PPTP, pode usar o pptpclient que está disponível nos nossos CDs de instalação. Mas primeiro certifique-se que sua configuração está correta. Edite o /etc/ppp/pap-secrets ou /etc/ppp/chap-secrets para que contenha a combinação correta de usuário/senha:

Listagem de código 2.3: Editando o /etc/ppp/chap-secrets

# nano -w /etc/ppp/chap-secrets

Então ajuste o /etc/ppp/options.pptp se necessário:

Listagem de código 2.4: Editando o /etc/ppp/options.pptp

# nano -w /etc/ppp/options.pptp

Quando tudo estiver pronto, simplesmente execute pptp (juntamente com as opções que não puderem ser configuradas em options.pptp) para conectar ao servidor:

Listagem de código 2.5: Conectando a um servidor dial-in

# pptp <ip do servidor>

Agora continue com Preparando os discos.

3.c. Configuração manual de rede

Carregando os módulos de rede apropriados

Quando o CD de instalação inicia, ele tenta detectar todos os seus dispositivos de hardware e carregar os módulos (drivers) apropriados do kernel que suportem seu hardware. Na maioria dos casos, isto funciona bem. Entretanto, em alguns casos, os módulos necessários podem não ser carregados automaticamente.

Se o net-setup ou o adsl-setup falhou, então é possível que seu adaptador de rede não foi encontrado automaticamente. Isto significa que você terá que carregar o módulo apropriado do kernel manualmente.

Para saber que módulos de kernel nós fornecemos para rede, use ls:

Listagem de código 3.1: Procurando módulos disponíveis

# ls /lib/modules/`uname -r`/kernel/drivers/net

Se encontrar um driver para seu adaptador de rede, use o modprobe para carregar o módulo do kernel:

Listagem de código 3.2: Usando o modprobe para carregar um módulo do kernel

(Como exemplo, carregamos o módulo pcnet32)
# modprobe pcnet32

Para certificar-se de que seu adaptador de rede foi detectado, use ifconfig. Um adaptador de rede deverá ser detectado e o resultado será parecido com isto:

Listagem de código 3.3: Testando se seu adaptador de rede foi carregado, com sucesso

# ifconfig eth0
eth0      Link encap:Ethernet  HWaddr FE:FD:00:00:00:00  
          BROADCAST NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

Se, entretanto, você receber o seguinte erro, o adaptador de rede não foi detectado:

Listagem de código 3.4: Testando se seu adaptador de rede foi carregado, com falhas

# ifconfig eth0
eth0: error fetching interface information: Device not found

Se você tiver adaptadores de rede múltiplos em seu sistema, eles serão nomeados como eth0, eth1, etc. Certifique-se de que o adaptador de rede que você deseja usar esteja funcionando bem e lembre-se de usar o nome correto durante todo o documento. Iremos presumir que o adaptador de rede que será usado seja o eth0.

Presumindo que agora você tem uma placa de rede detectada, você pode tentar novamente o net-setup ou o adsl-setup (que agora devem funcionar), mas, para as pessoas com a mão na massa como você, nós explicamos como configurar sua rede manualmente.

Selecione uma das seguintes seções com base na sua configuração de rede:

Usando DHCP

DHCP (Dynamic Host Configuration Protocol) torna possível receber informações da conexão de rede automaticamente (Endereço IP, máscara de rede, endereço de broadcast, roteador, servidores de nomes, etc...). Isto só irá funcionar se houver um servidor DHCP na sua rede (ou se seu provedor tiver um serviço de DHCP). Para seu adaptador de rede receber estas informações automaticamente, utilize o dhcpcd:

Listagem de código 3.5: Usando o dhcpcd

# dhcpcd eth0
Alguns administradores de rede solicitam que você use o
nome da máquina e o nome do domínio que o servidor DHCP disponibiliza.
Neste caso, utilize
# dhcpcd -HD eth0

Se isto funcionar (tente executar um ping para algum servidor na internet, como o Google), então tudo está configurado e pronto para continuar. Pule o restante desta seção e continue com Preparando os discos.

Preparando para acesso wireless

Nota: Suporte para o comando iwconfig só está disponível para CDs de instalação para x86, amd64 e ppc. Você ainda pode conseguir que as extensões funcionem seguindo as instruções do linux-wlan-ng project.

Se você estiver usando um cartão wireless (802.11), pode ser necessário configurar suas informações de wireless antes de continuar. Para verificar as configurações atuais do seu cartão wireless, utilize o iwconfig. Ao executar iwconfig você verá algo parecido com:

Listagem de código 3.6: Exibindo suas configurações de wireless atuais

# iwconfig eth0
eth0      IEEE 802.11-DS  ESSID:"GentooNode"                                   
          Mode:Managed  Frequency:2.442GHz  Access Point: 00:09:5B:11:CC:F2    
          Bit Rate:11Mb/s   Tx-Power=20 dBm   Sensitivity=0/65535               
          Retry limit:16   RTS thr:off   Fragment thr:off                       
          Power Management:off                                                  
          Link Quality:25/10  Signal level:-51 dBm  Noise level:-102 dBm        
          Rx invalid nwid:5901 Rx invalid crypt:0 Rx invalid frag:0 Tx          
          excessive retries:237 Invalid misc:350282 Missed beacon:84            

Nota: Alguns cartões de wireless podem ter o nome do dispositivo como wlan0 ou ra0 ao invés de eth0. Rode iwconfig sem parâmetros de linha de comando para determinar o nome correto do dispositivo.

Para a maioria dos usuários, existem somente duas configurações que devem ser importantes para alterar, o ESSID (que é o nome da rede wireless) ou a chave WEP. Se o ESSID e o endereço do Access Point listados são os mesmos que o do seu access point e você não estiver usando WEP, então sua rede wireless está funcionando. Caso precise alterar seu ESSID, ou adicionar uma chave WEP, você pode fazer isso com os seguintes comandos:

Listagem de código 3.7: Alterando o ESSID e/ou adicionando uma chave WEP

(Isto irá alterar o nome da rede para "GentooNode")
# iwconfig eth0 essid GentooNode

(Isto irá configurar uma chave WEP hex)
# iwconfig eth0 key 1234123412341234abcd

(Isto irá configurar uma chave ASCII - prefixe-o com "s:")
# iwconfig eth0 key s:uma-senha

Você pode então confirmar suas configurações wireless utilizando novamente o iwconfig. Se sua conexão wireless estiver funcionando, você pode continuar configurando as opções da rede com relação a IP como descritos na próxima seção (Entendendo a terminologia de rede) ou utilize a ferramenta net-setup como descrito anteriormente.

Entendendo a terminologia de rede

Nota: Se você conhece seu endereço IP, endereço de broadcast, máscara de rede e servidores de nomes, então pode pular o restante dessa sub-seção e continuar com Usando ifconfig e route.

Se tudo acima falhar, você terá que configurar sua conexão de rede manualmente. Não é difícil. Todavia, você deve estar familiarizado com uma certa terminologia de rede, já que você precisará dela para configurar sua rede satisfatoriamente. Quando terminar de ler isto, você irá saber o que é um roteador, para que serve uma máscara de rede, como um endereço de broadcast é formado e porque você precisa de um servidor de nomes.

Em uma rede, hosts são identificados pelo seu endereço IP (endereço de Internet Protocol). Este endereço é uma combinação de quatro números entre 0 e 255. Bem, pelo menos é como nós o percebemos. Na realidade, estes endereços IP consistem de 32 bits (uns (1) e zeros (0)). Vamos ver um exemplo:

Listagem de código 3.8: Exemplo de um endereço IP

Endereço IP (números):   192.168.0.2
Endereço IP (bits):      11000000 10101000 00000000 00000010
                        -------- -------- -------- --------
                           192      168       0        2

Tal endereço IP só pertence a um host no que diz respeito às redes acessíveis (isto é, todos hosts a que você consegue conectar têm endereços IP individuais). Para poder distinguir entre hosts dentro de uma rede e hosts fora de uma rede, o endereço IP é dividido em duas partes: a parte de rede e a parte de host.

A separação é escrita com a máscara de rede, uma coleção de uns seguidos de uma coleção de zeros. A parte do IP que pode ser mapeadas em uns é parte de rede, a outra é a parte de host. Como sempre, a máscara pode ser escrita como um endereço IP.

Listagem de código 3.9: Exemplo da separação de rede/host

Endereço IP:   192      168      0         2
            11000000 10101000 00000000 00000010
netmask:    11111111 11111111 11111111 00000000
               255      255     255        0
           +--------------------------+--------+
                        Rede             Host

Em outras palavras, o 192.168.0.14 faz parte da nossa rede exemplo, mas o 192.168.1.2 não.

O endereço de broadcast é um endereço IP com a mesma parte de rede de sua rede, mas só com uns na parte de host. Cada host em sua rede escuta a este endereço IP. Ele realmente serve para fazer broadcasting de pacotes.

Listagem de código 3.10: Endereço de broadcast

Endereço IP:   192      168      0         2
            11000000 10101000 00000000 00000010
Broadcast:  11000000 10101000 00000000 11111111
               192      168      0        255
           +--------------------------+--------+
                        Rede             Host

Para poder surfar na internet, você precisa saber que host divide a conexão de Internet. Este host é chamado de roteador. Já que é um host normal, ele tem um endereço de IP normal (por exemplo, 192.168.0.1).

Nós dissemos anteriormente que cada host tem seu próprio endereço IP. Para poder alcançar este host através de um nome (ao invés de um endereço IP) você precisa de um serviço que traduz um nome (como dev.gentoo.org) para um endereço IP (como 64.5.62.82). Tal serviço é chamado um serviço de nomes. Para usar tal serviço, você precisa definir os servidores de nome em /etc/resolv.conf.

Em alguns casos, seu roteador também funciona como servidor de nome. Caso contrário, você tem que digitar os servidores de nome dados pelo seu provedor de Internet.

Para resumir, você precisa das seguintes informações para continuar:

Ítem de rede Exemplo
Seu endereço IP 192.168.0.2
Máscara de rede 255.255.255.0
Broadcast 192.168.0.255
Roteador 192.168.0.1
Servidor(es) de nome(s) 195.130.130.5, 195.130.130.133

Usando ifconfig e route

Configurar sua rede consiste de três passos. Primeiro iremos atribuir um endereço IP usando ifconfig. Então configuramos o roteamento para o roteador utilizando route. E terminamos colocando os endereços IP dos servidores de nomes em /etc/resolv.conf.

Para atribuir um endereço IP, você irá precisar do seu endereço IP, endereço de broadcast e máscara de rede. Então execute o seguinte comando, substituindo ${IP_ADDR} com seu endereço IP, ${BROADCAST} com seu endereço de broadcast e ${NETMASK} com sua máscara de rede:

Listagem de código 3.11: Usando o ifconfig

# ifconfig eth0 ${IP_ADDR} broadcast ${BROADCAST} netmask ${NETMASK} up

Agora configure a rota usando o route. Substitua ${GATEWAY} com o endereço IP do seu roteador:

Listagem de código 3.12: Usando o route

# route add default gw ${GATEWAY}

Agora abra o /etc/resolv.conf com seu editor favorito (no nosso exemplo, utilizamos o nano):

Listagem de código 3.13: Criando o /etc/resolv.conf

# nano -w /etc/resolv.conf

Agora defina seu(s) servidor(es) de nomes usando o seguinte como modelo. Tenha certeza que substituiu ${NAMESERVER1} e ${NAMESERVER2} com os endereços apropriados do(s) servidor(es) de nomes:

Listagem de código 3.14: modelo de /etc/resolv.conf

nameserver ${NAMESERVER1}
nameserver ${NAMESERVER2}

Isto é tudo. Agora teste sua rede usando o ping para algum servidor Internet (como Google). Se isto funcionar, parabéns. Agora você está pronto para instalar o Gentoo. Continue com Preparando os discos.

4. Preparando os discos

4.a. Introdução a dispositivos de bloco

Dispositivos de bloco

Iremos estudar os aspectos de manuseio de discos do Gentoo Linux e do Linux em geral, incluindo sistemas de arquivos de Linux, partições e dispositivos de bloco. Uma vez que você estiver familiar com o funcionamento de discos e sistemas de arquivos, iniciaremos o processo de configuração de partições e sistemas de arquivos para sua instalação do Gentoo Linux.

Para começar, iremos introduzir os dispositivos de bloco. O dispositivo de bloco mais famoso é provavelmente aquele que representa o primeiro disco rígido IDE em um sistema Linux, chamado de /dev/hda. Se seu sistema usa discos SCSI ou SATA, então seu primeiro disco rígido será /dev/sda.

Os dispositivos de bloco acima representam uma interface abstrata para o disco. Programas de usuário podem usar os dispositivos de bloco para interagir com seu disco sem preocupação se eles são IDE, SCSI ou outra coisa. O programa pode simplesmente classificar o espaço de armazenagem no disco como um monte de blocos de 512 bytes contíguos acessíveis aleatoriamente.

Partições

Embora seja teoricamente possível usar um disco inteiro para armazenar seu sistema Linux, isto é quase nunca feito na prática. Ao invés disso, dispositivos de bloco de discos são divididos em dispositivos de bloco menores e mais fáceis de manusear. Em sistemas x86, são chamados de partições.

As partições são divididas em três tipos: primária, estendida e lógica.

Uma partição primária é uma partição que tem sua informação gravada no registro mestre de inicialização (MBR). Como um MBR é muito pequeno (512 bytes), somente quatro partições primárias podem ser definidas (por exemplo, de /dev/hda1 até /dev/hda4).

Uma partição estendida é uma partição primária especial (significando que a partição estendida deve ser uma das quatro partições primárias possíveis), que contém mais partições. Tal partição não existia originalmente, mas como quatro partições eram muito pouco, estendeu-se o esquema de formatação sem perder compatibilidade com o método antigo.

Uma partição lógica é uma partição dentro de uma partição estendida. Suas definições não são colocadas dentro do registro mestre de inicialização (MBR), mas são declaradas dentro da partição estendida.

Armazenamento avançado

Os CDs de instalação de x86 oferecem suporte para EVMS e LVM2. EVMS e LVM2 aumentam a flexibilidade oferecida pela sua configuração de particionamento. Durante as instruções de instalação, nós iremos focar em partições "normais", mas ainda é bom saber que EVMS e LVM2 também são suportados.

4.b. Desenhando um esquema de particionamento

Esquema de particionamento padrão

Se você não está interessado em desenhar um esquema de particionamento para seu sistema, você pode usar o esquema de particionamento que usamos neste manual inteiro:

Partição Sistema de arquivos Tamanho Descrição
/dev/hda1 ext2 32M Partição de inicialização (boot)
/dev/hda2 (swap) 512M Partição de swap
/dev/hda3 ext3 Resto do disco Partição raiz (root)

Se você estiver interessado em saber o tamanho que uma partição (ou volume lógico) deve ter, ou mesmo de quantas partições (ou volumes) você precisa, leia mais. Senão, continue com Usando o fdisk para particionar seu disco.

Quantas e de que tamanho?

O número de partições depende muito de seu ambiente. Por exemplo, se você tem muitos usuários, você provavelmente deve ter seu /home separado para aumentar a segurança e tornar backups mais fáceis. Se você estiver instalando o Gentoo para funcionar como um servidor de e-mails, seu /var deve ser separado, uma vez que todos e-mails são gravados dentro de /var. Uma boa escolha de sistema de arquivos irá maximizar sua performance. Servidores de jogos têm uma partição /opt separada, uma vez que a maior parte de servidores de jogos são instalados lá. A razão é semelhante à do /home: segurança e backups. Você deve manter seu /usr grande: não só irá conter a maior parte das aplicações, a árvore do Portage sozinha toma em torno de 500 Mbytes, excluindo as várias fontes que são gravadas nela.

Como você pode ver, muito depende do que você quer fazer. Partições ou volumes separados têm as seguintes vantagens:

  • Você pode escolher o sistema de arquivos de melhor performance para cada partição ou volume
  • Seu sistema inteiro não irá ficar sem espaço se uma ferramenta defunta estiver continuamente escrevendo arquivos em uma partição ou volume
  • Se necessárias, verificações de sistemas de arquivos têm seu tempo reduzido, já que verificações múltiplas podem ser feitas em paralelo (embora esta vantagem seja maior com vários discos que com várias partições)
  • A segurança pode ser melhorada ao montar algumas partições ou volumes como somente-leitura, nosuid (bits de setuid são ignorados), noexec (bits executáveis são ignorados), etc...

No entanto, partições múltiplas têm uma grande desvantagem: se não forem configuradas apropriadamente, você pode acabar com um sistema com muito espaço livre em uma partição e nenhum em outra. Também existe um limite de 15 partições para SCSI e SATA.

Como um exemplo de particionamento, iremos mostrar uma de um disco de 20GB, usado como um laptop de demonstração (contendo um servidor de web, servidor de e-mail, gnome, ...):

Listagem de código 2.1: Exemplo de utilização de sistema de arquivos

$ df -h
Filesystem    Type    Size  Used Avail Use% Mounted on
/dev/hda5     ext3    509M  132M  351M  28% /
/dev/hda2     ext3    5.0G  3.0G  1.8G  63% /home
/dev/hda7     ext3    7.9G  6.2G  1.3G  83% /usr
/dev/hda8     ext3   1011M  483M  477M  51% /opt
/dev/hda9     ext3    2.0G  607M  1.3G  32% /var
/dev/hda1     ext2     51M   17M   31M  36% /boot
/dev/hda6     swap    516M   12M  504M   2% <not mounted>
(Espaço sem particionamento para uso futuro: 2 GB)

A partição /usr está bastante cheia (83% usado) aqui, mas uma vez que todo software está instalado, a /usr não tende a crescer tanto. Embora alocar alguns gigabytes de espaço em disco para /var possa parecer excessivo, lembre-se de que o Portage use esta partição por padrão para compilar pacotes. Se você quiser manter a /var em um tamanho mais razoável, como 1GB, você deve alterar sua variável PORTAGE_TMPDIR no /etc/make.conf para apontar para a partição com espaço livre em disco suficiente para compilar pacotes extremamente grandes como OpenOffice.

4.c. Usando o fdisk para particionar seu disco

As partes seguintes explicam como criar o modelo de partições descrito anteriormente:

Partição Descrição
/dev/hda1 Partição de inicialização (boot)
/dev/hda2 Partição de swap
/dev/hda3 Partição raiz (root)

Mude o seu arranjo de partições de acordo com sua preferência.

Vendo o arranjo de partições atual

O fdisk é uma ferramenta popular e poderosa para dividir seu disco em partições. Inicie o fdisk em seu disco (em nosso exemplo, usamos /dev/hda):

Listagem de código 3.1: Iniciando o fdisk

# fdisk /dev/hda

Uma vez dentro do fdisk, você verá um prompt que se parece com o seguinte:

Listagem de código 3.2: prompt do fdisk

Command (m for help): 

Digite p para ver a configuração de partições atual de seu disco:

Listagem de código 3.3: Um exemplo de configuração de partições

Command (m for help): p

Disk /dev/hda: 240 heads, 63 sectors, 2184 cylinders
Units = cylinders of 15120 * 512 bytes

Device Boot    Start       End    Blocks   Id  System
/dev/hda1             1        14    105808+  83  Linux
/dev/hda2            15        49    264600   82  Linux swap
/dev/hda3            50        70    158760   83  Linux
/dev/hda4            71      2184  15981840    5  Extended
/dev/hda5            71       209   1050808+  83  Linux
/dev/hda6           210       348   1050808+  83  Linux
/dev/hda7           349       626   2101648+  83  Linux
/dev/hda8           627       904   2101648+  83  Linux
/dev/hda9           905      2184   9676768+  83  Linux

Command (m for help): 

Este disco em particular está configurado para armazenar sete sistemas de arquivos Linux (cada um com uma partição correspondente listada como "Linux"), bem como uma partição de swap (listada como "Linux swap").

Apagando todas partições

Iremos primeiro apagar todas partições existentes do disco. Digite d para apagar uma partição. Por exemplo, para apagar um /dev/hda1 já existente:

Listagem de código 3.4: Apagando uma partição

Command (m for help): d
Partition number (1-4): 1

A partição foi agendada para ser apagada. Ela não irá mais aparecer se você digitar p, mas não será apagada até que suas mudanças sejam salvas. Se você cometeu um erro e quiser abortar sem salvar suas mudanças, digite q imediatamente e aperte enter e sua partição não será apagada.

Agora, presumindo que você realmente quer apagar todas partições de seu sistema, aperte p repetidamente para mostrar uma listagem de partições e então digite d e o número da partição para apagá-la. No fim, você terminará com uma tabela de partições sem nada:

Listagem de código 3.5: Uma tabela de partições vazia

Disk /dev/hda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes

Device Boot    Start       End    Blocks   Id  System

Command (m for help):

Agora que a tabela de partições na memória está vazia, estamos prontos para criar as partições. Nós iremos usar o esquema de particionamento padrão que discutimos anteriormente. Lógico, não siga as instruções à risca se você não quer o mesmo esquema de particionamento!

Criando a partição de inicialização (boot)

Primeiro criamos uma pequena partição de inicialização (boot). Digite n para criar uma nova partição, então p para selecionar a partição primária, seguida de 1 para selecionar a primeira partição primária. Quando pedido o primeiro cilindro, aperte enter. Quando pedido o último cilindro, digite +32M para criar uma partição de 32 Mbytes de tamanho:

Listagem de código 3.6: Criando a partição de inicialização (boot)

Command (m for help): n
Command action
  e   extended
  p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-3876, default 1): (Aperte Enter)
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-3876, default 3876): +32M

Agora, quando você digitar p, você verá o seguinte esquema de particionamento:

Listagem de código 3.7: Partição de inicialização (boot) criada

Command (m for help): p

Disk /dev/hda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes

Device Boot    Start       End    Blocks   Id  System
/dev/hda1          1        14    105808+  83  Linux

Nós precisamos fazer esta partição carregável. Digite a para ligar a opção de carregável em uma partição e selecione 1. Se você apertar p de novo, você verá que um * foi colocado na coluna de "Boot".

Criando a partição de swap

Vamos agora criar a partição de swap. Para fazer isto, digite n para criar uma nova partição, então p para dizer ao fdisk que você quer uma partição primária. Então digite 2 para criar a segunda partição primária, /dev/hda2 em nosso caso. Quando for pedido o primeiro cilindro, aperte enter. Quando for pedido o último cilindro, digite +512M para criar uma partição de 512MB. Depois que você fez isso, digite t para ajustar o tipo de partição, 2 para selecionar a partição que você acabou de criar e então digite 82 para ajustar o tipo de partição para "Linux Swap". Depois de completar estes passos, ao digitar p você deve ver uma tabela de partição que se parece com isso:

Listagem de código 3.8: Listagem de partições depois de criar a partição de swap

Command (m for help): p

Disk /dev/hda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes

Device Boot    Start       End    Blocks   Id  System
/dev/hda1 *        1        14    105808+  83  Linux
/dev/hda2         15        81    506520   82  Linux swap

Criando a partição raiz (root)

Finalmente, vamos criar a partição de root. Para fazer isso, digite n para criar uma nova partição, então p para dizer ao fdisk que você quer uma partição primária. Então digite 3 para criar a terceira partição primária, /dev/hda3 em nosso caso. Quando for pedido o primeiro cilindro, aperte enter. Quando for pedido o último cilindro, aperte enter para criar uma partição que toma o resto do espaço disponível em seu disco. Depois de completar estes passos, ao digitar p você deve ver uma tabela de partições parecida com o seguinte:

Listagem de código 3.9: Listagem de partições depois de criar a partição raiz (root)

Command (m for help): p

Disk /dev/hda: 30.0 GB, 30005821440 bytes
240 heads, 63 sectors/track, 3876 cylinders
Units = cylinders of 15120 * 512 = 7741440 bytes

Device Boot    Start       End    Blocks   Id  System
/dev/hda1 *        1        14    105808+  83  Linux
/dev/hda2         15        81    506520   82  Linux swap
/dev/hda3         82      3876  28690200   83  Linux

Salvando o arranjo de partições

Para salvar o arranjo de partições e sair do fdisk, digite w.

Listagem de código 3.10: Salve e saia do fdisk

Command (m for help): w

Agora que suas partições foram criadas, você pode continuar com Criando sistemas de arquivos.

4.d. Criando sistemas de arquivos

Introdução

Agora que suas partições foram criadas, está na hora de colocar um sistema de arquivos nelas. Se você não se importa em escolher o sistema de arquivos e está contente com o que usamos como padrão neste manual, continue com Aplicando um sistema de arquivos a uma partição. Caso contrário, leia mais para aprender sobre os sistemas de arquivos disponíveis...

Sistemas de arquivos?

O kernel do Linux suporta vários sistemas de arquivos. Nós iremos explicar sobre ext2, ext3, ReiserFS, XFS e JFS, já que estes são os sistemas de arquivos mais usados em sistemas Linux.

O ext2 é o sistema mais testado e fiel ao Linux, mas não tem jornal de meta-dados, o que significa que verificações rotineiras de sistemas de arquivo ext2 podem levar bastante tempo. Existe agora uma razoável seleção de sistemas de arquivos de nova geração com jornal que podem ter sua consistência verificada rapidamente e que são geralmente preferíveis aos seus respectivos sistemas sem jornal. Sistemas de arquivo com jornal previnem longas esperas quando você carrega seu sistema e seu sistema de arquivos está em um estado inconsistente.

O ext3 é a versão com jornal do sistema de arquivos ext2, fornecendo jornal de meta-dados para recuperação rápida, fora outros modos de jornal aprimorados como dados completos e dados ordenados. O ext3 é um sistema de arquivos muito bom e confiável. Tem uma opção adicional de catalogar hashed b-trees que permite alta performance em quase todas situações. Você pode ativar este catálogo adicionando -O dir_index ao comando mke2fs. Para resumir, o ext3 é um excelente sistema de arquivos.

O ReiserFS é sistema de arquivos baseado em B*-trees que tem uma performance em geral muito boa e muito superior a tanto o ext2 quanto o ext3 na hora de lidar com arquivos pequenos (de menos de 4k), freqüentemente com um fator de 10x-15x. O ReiserFS também escala extremamente bem e tem jornal de meta-dados. A partir do kernel 2.4.18+, o ReiserFS está sólido e pronto para ser usado tanto como um sistema de arquivos genérico quanto para casos extremos como a criação de sistemas de arquivos enormes, uso de muitos arquivos pequenos, arquivos muito grandes e diretórios contendo dezenas de milhares de arquivos.

O XFS é um sistema de arquivos com jornal de meta-dados que vem com um robusto conjunto de funções e é otimizado para escalabilidade. Só recomendamos usar este sistema de arquivos em sistemas rodando Linux com equipamento SCSI de ponta e/ou armazenamento em canais de fibra e fonte de energia sem interrupção. Pelo fato de o XFS criar cachês agressivamente de dados em uso na memória RAM, programas mal desenhados (que não tomam precauções na hora de escrever os arquivos em disco, e existem muitos deles) podem perder uma grande quantidade de dados se o sistema for desligado sem aviso.

O JFS é o sistema de arquivos com jornal de alta performance da IBM. Recentemente tornou-se pronto para uso em produção e não há experiência suficiente para comentar a favor ou contra sua estabilidade geral neste ponto.

Aplicando um sistema de arquivos a uma partição

Para criar um sistema de arquivos em uma partição ou volume, existem ferramentas disponíveis para cada sistema de arquivos possível:

Sistema de arquivos Comando de criação
ext2 mke2fs
ext3 mke2fs -j
reiserfs mkreiserfs
xfs mkfs.xfs
jfs mkfs.jfs

Por exemplo, para ter a partição de inicialização (boot) (/dev/hda1 em nosso exemplo) em ext2 e a partição de root (/dev/hda3 em nosso exemplo) em ext3 (como em nosso exemplo), você faria:

Listagem de código 4.1: Aplicando um sistema de arquivos a uma partição

# mke2fs /dev/hda1
# mke2fs -j /dev/hda3

Agora crie os sistemas de arquivos em suas partições recém-criadas (ou volumes lógicos).

Ativando a partição de swap

mkswap é o comando usado para iniciar partições de swap:

Listagem de código 4.2: Criando uma assinatura de swap

# mkswap /dev/hda2

Para ativar a partição de swap, use swapon:

Listagem de código 4.3: Ativando a partição de swap

# swapon /dev/hda2

Crie e ative o swap agora com os comandos mencionados acima.

4.e. Montando

Agora que suas partições foram iniciadas e possuem um sistema de arquivos, está na hora de montá-las. Use o comando mount. Não se esqueça de criar os diretórios necessários de montagem para cada partição que você criou. Como exemplo montamos a partição raiz (root) e de inicialização (boot):

Listagem de código 5.1: Montando partições

# mount /dev/hda3 /mnt/gentoo
# mkdir /mnt/gentoo/boot
# mount /dev/hda1 /mnt/gentoo/boot

Nota: Se você quiser que seu /tmp resida em uma partição separada, certifique-se de mudar suas permissões depois de montá-la: chmod 1777 /mnt/gentoo/tmp. O mesmo vale para /var/tmp.

Agora iremos montar o sistema de arquivos proc (uma interface virtual com o kernel) em /proc. Porém, primeiro iremos colocar nossos arquivos nas partições.

Continue com Instalando os arquivos de instalação do Gentoo.

5. Instalando os arquivos de instalação do Gentoo

5.a. Instalando um tarball de estágio (stage)

Configurando a Data/Hora

Antes de continuar, você precisa verificar a data/hora e atualizá-las. Um relógio mal configurado pode levar a resultados estranhos no futuro!

Para verificar a data/hora atual, execute date:

Listagem de código 1.1: Verificando a data/hora

# date
Fri Mar 29 16:21:18 CEST 2005

Se a data/hora for exibida incorretamente, atualize-a usando date MMDDhhmmAAAA sintaxe (Mês, Dia, hora, minuto e Ano). Por exemplo, para configurar a data para 29 de março de 2005, 16:21:

Listagem de código 1.2: Configurando a data/hora

# date 032916212005

Fazendo sua escolha

No próximo passo você precisa executar a instalação de um stage3 no sistema. Você tem a opção de baixar o arquivo da Internet ou, se você iniciou de um dos CDs de instalação universais do Gentoo, copie-o diretamente do CD. Se você tiver um CD de instalação universal e o stage que você quer usar está no CD, baixá-lo da Internet será somente um desperdício de banda já que os arquivos são os mesmos. Na maior parte dos casos, o comando uname -m pode ser usado para ajudar a decidir que arquivo de estágio você deve baixar.

5.b. Padrão: Usando um stage da Internet

Baixando a tarball de estágio

Entre no ponto de montagem do Gentoo onde você montou seu sistema de arquivos (geralmente /mnt/gentoo):

Listagem de código 2.1: Entrando no ponto de montagem do Gentoo

# cd /mnt/gentoo

Dependendo da sua mídia de instalação, você tem uma série de ferramentas disponíveis para baixar o stage. Se você tem disponível o links, então você pode acessar imediatamente a lista de servidores do Gentoo e escolher o melhor servidor para você.

Se você não tiver disponível o links, você deve ter o lynx. Se você precisa usar um proxy, exporte as variáveis http_proxy e ftp_proxy:

Listagem de código 2.2: Configurando informações de proxy para o lynx

# export http_proxy="http://proxy.server.com:port"
# export ftp_proxy="http://proxy.server.com:port"

Iremos presumir que você tem o links disponível.

Escolha o diretório releases/, seguido pela sua arquitetura (por exemplo, x86/) e a versão do Gentoo (2006.0) para terminar no diretório stages/. Lá, você deverá ver todos arquivos de stage disponíveis para sua arquitetura (eles podem estar gravados dentro de subdiretórios nomeados de acordo com a sub-arquitetura individual). Selecione um e aperte D para baixá-lo. Quando você terminar, aperte Q para sair do navegador.

Listagem de código 2.3: Navegando na lista do servidor com o links

# links http://www.gentoo.org/main/en/mirrors.xml

(Se você precisar de suporte a proxy com o links:)
# links -http-proxy proxy.server.com:8080 http://www.gentoo.org/main/en/mirrors.xml

Certifique-se de baixar uma tarball de stage3 - instalações usando tarballs de stage1 e stage2 não são mais suportadas.

Se quiser verificar a integridade do stage baixado, use o md5sum e compare a saída com o MD5 checksum disponível no servidor. Por exemplo, para checar a validade de um stage de x86:

Listagem de código 2.4: Exemplo de verificação de integridade de um stage

# md5sum -c stage3-x86-2006.0.tar.bz2.DIGESTS
stage3-x86-2006.0.tar.bz2: OK

Descompactando um stage

Agora descompacte o stage no seu sistema. Nós usamos o tar, já que para o processar este é o método mais fácil.

Listagem de código 2.5: Descompactando o stage

# tar xvjpf stage3-*.tar.bz2

Certifique-se de que você está usando as mesmas opções (xvjpf). O x significa Extrair, o v significa Verbal, para ver o que acontece durante o processo de extração (opcional), o j para Descompactar com bzip2, o p para Preservar as permissões e o f para definir que queremos extrair um arquivo, ao invés da entrada padrão.

Nota: Os CDs de instalação e imagens de inicialização de algumas arquiteturas (como MIPS) dependem do tar construído no BusyBox que não suporta a opção v atualmente. Use as opções xjpf ao invés disso.

Agora que o stage está instalado, continue com Instalando o Portage.

5.c. Alternativa: Usando um stage do CD de instalação

Extraindo o stage

Importante: Se você estiver em x86 usando o LiveCD de instalação, você não terá os stages em seu CD. Você terá que seguir as instruções para Usar uma tarball de stage da Internet.

Os stages do CD estão no diretório /mnt/cdrom/stages. Para ver uma lista dos stages disponíveis, use ls:

Listagem de código 3.1: Listando todos os stages disponíveis

# ls /mnt/cdrom/stages

Se o sistema retornar um erro, pode ser necessário montar o CD-ROM primeiro:

Listagem de código 3.2: Montando o CD-ROM

# ls /mnt/cdrom/stages
ls: /mnt/cdrom/stages: No such file or directory
# mount /dev/cdroms/cdrom0 /mnt/cdrom
# ls /mnt/cdrom/stages

Agora acesse o ponto de montagem do Gentoo (geralmente /mnt/gentoo):

Listagem de código 3.3: Acessando o diretório /mnt/gentoo

# cd /mnt/gentoo

Iremos agora extrair o stage escolhido. Faremos isso com tar. Certifique-se que está usando as mesmas opções (xvjpf). O argumento v é opcional e não é suportado em algumas versões de tar. No próximo exemplo, nós extraimos a tarball de stage stage3-<sub-arquitetura>-2006.0.tar.bz2. Certifique-se de trocar o nome de arquivo da tarball com seu stage.

Listagem de código 3.4: Extraindo a tarball de stage

# tar xvjpf /mnt/cdrom/stages/stage3-<sub-arquitetura>-2006.0.tar.bz2

Agora que o stage está instalado, continue com Instalando o Portage.

5.d. Instalando o Portage

Extraindo um snapshot do Portage

Agora você irá instalar um snapshot do Portage, uma coleção de arquivos que informam o Portage de que títulos de software você pode instalar, que profiles estão disponíveis, etc...

Baixe e instale um snapshot do Portage

Vá para o ponto de montagem onde você montou seu sistema de arquivos (provavelmente /mnt/gentoo):

Listagem de código 4.1: Indo para o ponto de montagem do Gentoo

# cd /mnt/gentoo

Inicie o links (ou lynx) e vá para nossa lista de servidores do Gentoo. Escolha um servidor próximo a você e abra o diretório snapshots/. Lá, baixe o último snapshot do Portage selecionando-o e apertando D.

Listagem de código 4.2: Navegando na lista de servidores do Gentoo

# links http://www.gentoo.org/main/en/mirrors.xml

Agora saia do seu navegador apertando Q. Você agora terá um snapshot do Portage armazenado em /mnt/gentoo. No próximo passo, nós extraímos o snapshot do Portage em seu sistema de arquivos. Certifique-se de que você usa o comando exato; a última opção é um C maiúsculo, não c minúsculo.

Listagem de código 4.3: Extraindo um snapshot do Portage

(Troque <data> com a data do snapshot baixado)
# tar xvjf /mnt/gentoo/portage-<date>.tar.bz2 -C /mnt/gentoo/usr

5.e. Configurando as opções de Compilação

Introdução

Para otimizar o Gentoo, você pode ajustar um par das variáveis que causarão impacto no comportamento do Portage. Todas essas variáveis podem ser configuradas como variáveis de ambiente (usando export), mas isso não é permanente. Para manter suas configurações, o Portage usa o /etc/make.conf, um arquivo de configuração para o Portage. Este é o arquivo que iremos editar agora.

Nota: Uma listagem comentada de todas as variáveis possíveis pode ser encontrada em /mnt/gentoo/etc/make.conf.example. Para uma instalação com sucesso do Gentoo você só precisa configurar as variáveis conforme mencionado abaixo.

Abra seu editor favorito (neste tutorial usamos o nano), assim poderemos alterar as variáveis de otimização que discutiremos abaixo.

Listagem de código 5.1: Abrindo o /etc/make.conf

# nano -w /mnt/gentoo/etc/make.conf

Como você provavelmente observou, o arquivo make.conf.example é estruturado de uma maneira genérica: linhas de comentário começam com "#", outras linhas definem variáveis usando a sintaxe VARIÁVEL="conteúdo". O arquivo make.conf usa a mesma sintaxe. Diversas dessas variáveis serão discutidas abaixo.

CHOST

A variável CHOST declara a arquitetura de construção para seu sistema. Já deve estar ajustada a seu valor correto. Não a edite, já que isto pode quebrar seu sistema. Se a variável CHOST parecer estar incorreta, você pode estar usando a tarball de stage3 errada.

CFLAGS e CXXFLAGS

As variáveis CFLAGS e CXXFLAGS definem as opções de otimização para os compiladores de C e C++ do gcc respectivamente. Embora geralmente sejam definidas aqui, você só irá obter máxima performance se otimizar as opções para cada programa separadamente. A razão disto é que cada programa é diferente.

No make.conf você deve definir as opções de otimização que você pensa que irão deixar seu sistema com uma melhor resposta em geral. Não coloque configurações experimentais nesta variável; muitas otimizações podem fazer o programa não se comportar bem ("dar pau", ou ainda pior, mal funcionamento).

Não iremos explicar todas as opções de otimização possíveis. Se quiser conhecê-las, leia o GNU Online Manual(s) ou a página info do gcc (info gcc -- só funciona em um sistema Linux já funcionando). O próprio arquivo make.conf.example contém inúmeros exemplos e informações; não se esqueça de lê-lo também.

A primeira configuração é a opção -march=, que especifica o nome da arquitetura alvo. Possíveis opções são descritas no arquivo make.conf.example (com comentários). Por exemplo, para uma arquitetura x86 Athlon XP:

Listagem de código 5.2: Configurando o GCC march

# Usuários de AMD64 que quiserem usar um sistema nativo de 64 bit devem usar -march=k8
# Usuários de EM64T devem usar -march=nocona
-march=athlon-xp

A segunda é a opção -O (que é um O maiúsculo, não é um zero), que especifica a classe da opção de otimização da gcc. Possíveis classes são s (para otimização de tamanho), 0 (zero - para não otimizar), 1, 2 ou 3 para opções com otimizações de velocidade (toda classe tem as mesmas opções que a anterior, com alguns extras). Por exemplo, para uma otimização de classe 2:

Listagem de código 5.3: Configurando o ajuste do O do GCC

-O2

Outra otimização popular é a opção -pipe (usar pipes ao invés de arquivos temporários é melhor para comunicação entre os vários estágios de compilação).

Saiba você que usar -fomit-frame-pointer (que não mantém o frame pointer em um registro para as funções que não necessitam de um) pode ter sérias repercussões na eliminação de erros das aplicações!

Quando você define as CFLAGS e CXXFLAGS, pode-se combinar diversas opções de otimização, como o exemplo a seguir:

Listagem de código 5.4: Definindo as variáveis CFLAGS e CXXFLAGS

CFLAGS="-march=athlon-xp -pipe -O2"   # Usuários de AMD64 devem usar march=k8
                                      # Usuários de EM64T usam march=nocona  
CXXFLAGS="${CFLAGS}"                  # Use as mesmas configurações da variável acima

MAKEOPTS

Com MAKEOPTS você define quantas compilações paralelas deverão ocorrer quando instalar um pacote. Uma boa escolha é o número de CPUs no seu sistema mais um, mas esta regra não é perfeita.

Listagem de código 5.5: MAKEOPTS para um sistema normal de 1 CPU

MAKEOPTS="-j2"

Tudo pronto!

Atualize seu /mnt/gentoo/etc/make.conf com suas preferências e salve (usuários do nano podem pressionar Ctrl-X). Agora você está pronto para continuar com Instalando o sistema base do Gentoo.

6. Instalando o sistema básico do Gentoo

6.a. Fazendo o chroot

Opcional: Selecionando servidores alternativos

Para poder baixar código fonte rapidamente, é recomendado selecionar um servidor veloz. O Portage irá procurar em seu arquivo make.conf a variável GENTOO_MIRRORS e usar os servidores listados nela. Você pode surfar em nossa lista de servidores e procurar um servidor (ou servidores) próximo(s) a você (já que são freqüentemente os mais rápidos), mas nós também fornecemos uma boa ferramenta chamada mirrorselect, que oferece uma interface agradável para selecionar os servidores que você deseja.

Listagem de código 1.1: Usando mirrorselect para a variável GENTOO_MIRRORS

# mirrorselect -i -o >> /mnt/gentoo/etc/make.conf

Aviso: Não selecione nenhum servidor de IPv6. Nossos stages atualmente não suportam IPv6.

Um segundo ajuste importante é o de SYNC no make.conf. Esta variável contém o servidor de rsync que você quer usar para atualizar sua árvore do Portage (a coleção de ebuilds, scripts contendo todas informações que o Portage precisa para baixar e instalar software). Embora você possa digitar um servidor de SYNC manualmente, o mirrorselect pode facilitar a operação para você:

Listagem de código 1.2: Selecionando um servidor de rsync usando mirrorselect

# mirrorselect -i -r -o >> /mnt/gentoo/etc/make.conf

Depois de rodar mirrorselect é aconselhável verificar novamente os ajustes no /mnt/gentoo/etc/make.conf!

Copiando informações de DNS

Uma coisa que ainda precisa ser feita antes de entrarmos no novo ambiente é copiar as informações de DNS do /etc/resolv.conf. Você precisa fazer isso para ter certeza de que a rede ainda funcionará mesmo depois de entrar no novo ambiente. O /etc/resolv.conf contém os servidores de nome para sua rede.

Listagem de código 1.3: Copiando informações de DNS

(A opção "-L" é necessária para ter certeza de que não copiamos um link simbólico)
# cp -L /etc/resolv.conf /mnt/gentoo/etc/resolv.conf

Montando o sistema de arquivos /proc e /dev

Monte o sistema de arquivos /proc em /mnt/gentoo/proc para permitir que a instalação use as informações fornecidas pelo kernel, dentro do ambiente de chroot. A seguir, monte com bind o sistema de arquivos /dev.

Listagem de código 1.4: Montando /proc e /dev

# mount -t proc none /mnt/gentoo/proc
# mount -o bind /dev /mnt/gentoo/dev

Entrando no novo ambiente

Agora que todas partições foram iniciadas e o ambiente de base está instalado, está na hora de entrar no nosso novo ambiente de instalação fazendo chroot nele. Isto quer dizer que mudamos o nosso ambiente de instalação atual (CD de instalação ou outro método de instalação) para seu sistema instalado (as partições iniciadas).

O processo de chroot é feito em três passos. Primeiro iremos mudar a raiz (root) de / (na mídia de instalação) para /mnt/gentoo (em sua partição) usando o chroot. Então iremos criar um novo ambiente usando o env-update, que essencialmente cria variáveis de ambiente. Finalmente, nós carregamos essas variáveis na memória usando source.

Listagem de código 1.5: Fazendo chroot no novo ambiente

# chroot /mnt/gentoo /bin/bash
# env-update
 * Caching service dependencies...
# source /etc/profile
# export PS1="(chroot) $PS1"

Parabéns! Você agora está dentro de seu ambiente do Gentoo Linux. Claro que está longe de acabar, mas é por isso mesmo que a instalação ainda tem outras seções :-)

6.b. Configurando o Portage

Atualizando sua árvore do Portage

Você agora deve atualizar sua árvore do Portage para a última versão. emerge --sync faz isso para você.

Listagem de código 2.1: Atualizando sua árvore do Portage

# emerge --sync
(Se você estiver usando um terminal lento, como alguns framebuffers ou um
console serial, você pode adicionar a opção --quiet para agilizar o processo:)
# emerge --sync --quiet

Se você estiver atrás de uma firewall que bloqueia tráfego de rsync, você pode usar emerge-webrsync, que irá baixar e instalar um snapshot do portage para você.

Se você for avisado de que uma nova versão do Portage está disponível e que você deve atualizar o Portage, ignore-a. O Portage será atualizado mais tarde durante a instalação.

Escolhendo o profile correto

Primeiro, uma pequena definição é feita.

Um profile (perfil) é um bloco de construção para qualquer sistema Gentoo. Ele não só especifica os valores padrão para CHOST, CFLAGS e outras variáveis importantes, mas também trava o sistema em um certo alcance de versões de pacotes. Tudo isto é mantido pelos desenvolvedores do Gentoo.

Antigamente, o profile mal era tocado pelo usuário. Todavia, usuários de x86, hppa e alpha podem escolher entre dois profiles, um para um kernel 2.4 e outro para um kernel 2.6. Este requerimento foi imposto para melhorar a integração dos kernéis 2.6. As arquiteturas ppc e ppc64 também têm vários profiles disponíveis. Iremos falar sobre eles mais tarde.

Você pode ver que profile você está usando atualmente com o seguinte comando:

Listagem de código 2.2: Verificando o profile de sistema

# ls -FGg /etc/make.profile
lrwxrwxrwx  1 48 Apr  8 18:51 /etc/make.profile -> ../usr/portage/profiles/default-linux/x86/2006.0/

Se você estiver usando uma das três arquiteturas mencionadas acima, o profile padrão irá fornecer um sistema baseado em Linux 2.6. Este é o padrão recomendado, mas você também tem a opção de escolher outro profile.

Alguns usuários podem desejar instalar um sistema baseado em um profile antigo de Linux 2.4. Se você tiver um bom motivo para fazer isto, você deve primeiro verificar se um profile adicional existe. Em x86, nós podemos fazer isto com o seguinte comando:

Listagem de código 2.3: Verificando se um profile adicional existe

# ls -d /usr/portage/profiles/default-linux/x86/no-nptl/2.4
/usr/portage/profiles/default-linux/x86/no-nptl/2.4

O exemplo acima mostra que o profile de 2.4 adicional existe (isto é, não reclamou sobre o diretório ou arquivo faltando). É recomendável que você siga com o padrão, mas se você desejar mudar, você pode fazer como a seguir:

Listagem de código 2.4: Trocando para um profile de 2.4

(Certifique-se de usar a arquitetura certa, o exemplo abaixo é para x86)
# ln -snf /usr/portage/profiles/default-linux/x86/no-nptl/2.4 /etc/make.profile
(Listar os arquivos do profile 2.4)
# ls -FGg /etc/make.profile/
total 12
-rw-r--r--  1 939 Dec 10 14:06 packages
-rw-r--r--  1 347 Dec  3  2004 parent
-rw-r--r--  1 573 Dec  3  2004 virtuals

Para ppc, existem vários profiles oferecidos com o 2006.0.

Listagem de código 2.5: Profiles para PPC

(profile de PPC genérico, para todas máquinas PPC, mínimo)
# ln -snf /usr/portage/profiles/default-linux/ppc/ppc32/2006.0 /etc/make.profile
(profile para G3)
# ln -snf /usr/portage/profiles/default-linux/ppc/ppc32/2006.0/G3 /etc/make.profile
(profile para G3 Pegasos)
# ln -snf /usr/portage/profiles/default-linux/ppc/ppc32/2006.0/G3/Pegasos/ /etc/make.profile
(profile para G4 (Altivec))
# ln -snf /usr/portage/profiles/default-linux/ppc/ppc32/2006.0/G4 /etc/make.profile
(profile para G4 (Altivec) Pegasos)
# ln -snf /usr/portage/profiles/default-linux/ppc/ppc32/2006.0/G4/Pegasos/ /etc/make.profile

Para ppc64, existem vários profiles oferecidos com o 2006.0.

Listagem de código 2.6: Profiles para PPC64

(profile de ferramentas de usuário de 64-bits genérico, para todas máquinas PPC64)
# ln -snf /usr/portage/profiles/default-linux/ppc/ppc64/2006.0/64bit-userland /etc/make.profile
(profile de ferramentas de usuário de 32-bits genérico, para todas máquinas PPC64)
# ln -snf /usr/portage/profiles/default-linux/ppc/ppc64/2006.0/32bit-userland /etc/make.profile
(Cada tipo de ferramenta de usuário tem sub-profiles como a seguir, com (userland) trocado com as ferramentas de usuário escolhidas acima)
(profile de 970 para JS20)
# ln -snf /usr/portage/profiles/default-linux/ppc/ppc64/2006.0/(userland)/970 /etc/make.profile
(profile para G5)
# ln -snf /usr/portage/profiles/default-linux/ppc/ppc64/2006.0/(userland)/970/pmac /etc/make.profile
(profile para POWER3)
# ln -snf /usr/portage/profiles/default-linux/ppc/ppc64/2006.0/(userland)/power3 /etc/make.profile
(profile para POWER4)
# ln -snf /usr/portage/profiles/default-linux/ppc/ppc64/2006.0/(userland)/power4 /etc/make.profile
(profile para POWER5)
# ln -snf /usr/portage/profiles/default-linux/ppc/ppc64/2006.0/(userland)/power5 /etc/make.profile
(O profile multilib ainda não está estável neste lançamento.)

Configurando a variável USE

A variável USE é uma das variáveis mais poderosas que o Gentoo oferece a seus usuários. Vários programas podem ser compilados com ou sem suporte opcional para certos itens. Por exemplo, alguns programas podem ser compilados com ou sem suporte a gtk, ou com suporte a qt. Outros podem ser compilados com ou sem suporte a SSL. Alguns programas podem até mesmo ser compilados com suporte a framebuffer (svgalib) ao invés de suporte a X11 (servidor de X).

A maior parte das distribuições compila seus pacotes com suporte para o máximo possível, aumentando o tamanho dos programas e seu tempo de inicialização, sem mencionar uma grande quantidade de dependências. Com o Gentoo você pode definir que opções um pacote deve usar para a compilação. Aí que entra a variável USE.

Na variável USE você define palavras-chave que são mapeadas nas opções de compilação. Por exemplo, ssl irá compilar suporte de ssl nos programas que suportam ssl. -X irá remover suporte a servidor de X (note o sinal de menos na frente). gnome gtk -kde -qt irá compilar seus programas com suporte a gnome (e gtk), e sem suporte a kde (e qt), fazendo com que seu sistema seja completamente voltado para o GNOME.

As configurações padrão de USE são colocadas no arquivo make.defaults de seu profile. Você encontra os arquivos make.defaults no diretório para o qual /etc/make.profile aponta e todos os subdiretórios também. Os ajustes padrão de USE são a soma de todos os ajustes de USE em todos arquivos make.defaults. O que você colocar no /etc/make.conf é calculado contra estes ajustes. Se você adicionar algo ao ajuste de USE, ele é adicionado à lista padrão. Se você remover algo do ajuste de USE (colocando um sinal de menos na frente), o algo é removido da lista padrão (se estava na lista padrão para começar). Nunca altere nada dentro do diretório /etc/make.profile; ele será sobre-escrito quando você atualizar o Portage!

Uma descrição completa da USE pode ser encontrada na segunda parte do Manual do Gentoo, opções de USE. Uma lista completa das opções de USE disponíveis pode ser encontrada em seu sistema em /usr/portage/profiles/use.desc.

Listagem de código 2.7: Vendo todas opções de USE disponíveis

# less /usr/portage/profiles/use.desc
(Você pode rolar usando as teclas de seta, e sair apertando 'q')

Como um exemplo nós iremos mostrar um ajuste de USE para um sistema baseado em KDE com suporte a DVD, ALSA e gravação de CD:

Listagem de código 2.8: Abrindo o /etc/make.conf

# nano -w /etc/make.conf

Listagem de código 2.9: ajustes de USE

USE="-gtk -gnome qt kde dvd alsa cdr"

Opcional: locales de GLIBC

Você provavelmente só usa um ou dois locales em seu sistema. Até agora, depois de compilar o glibc uma lista completa de locales é criada. A partir de agora você pode ativar a opção de USE userlocales e especificar só os locales de que você irá precisar em /etc/locales.build. Só faça isso se você sabe que locales escolher.

Listagem de código 2.10: Ativando a opção de USE userlocales especialmente para o glibc

# mkdir -p /etc/portage
# echo "sys-libs/glibc userlocales" >> /etc/portage/package.use

Agora especifique os locales que você quer poder usar:

Listagem de código 2.11: Abrindo /etc/locales.build

# nano -w /etc/locales.build

Os locales da lista seguinte são um exemplo de como ter tanto inglês (americano), alemão (da Alemanha) e Português (do Brasil) com os formatos de caracteres correspondentes (como UTF-8).

Listagem de código 2.12: Especifique seus locales

en_US/ISO-8859-1
en_US.UTF-8/UTF-8
de_DE/ISO-8859-1
de_DE@euro/ISO-8859-15
pt_BR/ISO-8859-1
pt_BR.UTF-8/UTF-8

Continue agora com Configurando o kernel.

7. Configurando o kernel

7.a. Fuso horário

Você deve primeiro selecionar seu fuso horário para que seu sistema saiba onde está localizado. Procure seu fuso horário em /usr/share/zoneinfo, então copie-o para /etc/localtime. Por favor evite as zonas de fuso horário em /usr/share/zoneinfo/Etc/GMT*, já que seus nomes não refletem as zonas esperadas. Por exemplo, GMT-8 é na verdade GMT+8.

Listagem de código 1.1: Configurando informação de fuso horário

# ls /usr/share/zoneinfo
(Suponha que você queira usar GMT)
# cp /usr/share/zoneinfo/GMT /etc/localtime

7.b. Instalando as fontes

Escolhendo um kernel

O centro através do qual todas distribuições são construídas é o kernel do Linux. Ele fica entre os programas de usuário e o hardware do sistema. O Gentoo permite que seus usuários escolham dentro de uma variedade de fontes de kernel. Uma lista completa com descrições pode ser encontrada no Guia de Kernel do Gentoo.

Para sistemas baseados em x86 nós temos, entre outros kernéis, vanilla-sources (a fonte de kernel padrão como desenvolvida pelos desenvolvedor do kernel do Linux) gentoo-sources (fonte de kernel com patches de melhoria de performance e funções), ...

Escolha sua fonte de kernel e instale-a usando o comando emerge. USE="-doc" é necessário para evitar instalar xorg-x11 ou outras dependências neste ponto. USE="symlink" não é necessário para uma nova instalação, mas garante a criação correta do link simbólico /usr/src/linux.

Listagem de código 2.1: Instalando uma fonte de kernel

# USE="-doc symlink" emerge gentoo-sources

Quando você olhar em /usr/src você deve perceber um link simbólico chamado linux apontando para a seu fonte do kernel. Neste caso, as fontes de kernel instaladas apontam para gentoo-sources-2.6.12-r10. Sua versão pode ser diferente, mantenha isto em mente.

Listagem de código 2.2: Vendo o link simbólico para a fonte do kernel

# ls -l /usr/src/linux
lrwxrwxrwx    1 root     root      12 Oct 13 11:04 /usr/src/linux -> linux-2.6.12-gentoo-r10

Agora está na hora de configurar e compilar sua fonte do kernel. Você pode usar o comando genkernel para fazer isto, que irá construir um kernel genérico parecido com o do CD de instalação. Iremos, porém, explicar a configuração manual primeiro, já que é a melhor maneira de otimizar seu ambiente.

Se você quiser configurar seu kernel manualmente, continue agora com Padrão: Configuração manual. Se você quiser usar o comando genkernel, você deve ler Alternativa: Usando o genkernel.

7.c. Padrão: Configuração manual

Introdução

Configurar um kernel manualmente é freqüentemente tido como o procedimento mais difícil que um usuário de Linux tem de fazer. Grande mentira -- depois de configurar uns dois kernéis você nem lembrará que foi difícil ;)

No entanto, uma coisa é verdade: você deve conhecer seu sistema quando você começar a configurar o kernel manualmente. A maior parte das informações pode ser obtida instalando o pciutils (emerge pciutils), que contém o lspci. Você poderá usar o lspci dentro do ambiente de chroot. Você pode seguramente ignorar quaisquer avisos de pcilib (como pcilib: cannot open /sys/bus/pci/devices) que o lspci der. Alternativamente, você pode rodar lspci de um ambiente fora do chroot. Os resultados são os mesmos. Você também pode rodar lsmod para quer ver módulos de kernel o CD de Instalação usa (pode dar uma boa dica sobre o que ativar).

Agora vá para o diretório da fonte do kernel e execute make menuconfig. Isto irá iniciar um menu de configuração baseado em ncurses.

Listagem de código 3.1: Rodando o menuconfig

# cd /usr/src/linux
# make menuconfig

Você verá várias seções de configuração. Iremos primeiro listar algumas opções que você deve ativar (ou o Gentoo não irá funcionar, ou não irá funcionar sem mudanças adicionais).

Ativando as opções necessárias

Antes de tudo, ative o uso de código/drivers em desenvolvimento e experimentais. Você precisa disso, senão muito código/drivers importantes não irão aparecer:

Listagem de código 3.2: Selecionando código/drivers experimentais, General setup

Code maturity level options --->
  [*] Prompt for development and/or incomplete code/drivers
General setup  --->
  [*] Support for hot-pluggable devices

Certifique-se de que todo driver que é vital no processo de inicialização de seu sistema (como controlador SCSI, ...) está compilado no kernel e não como módulo, caso contrário seu sistema não será capaz de inicializar completamente.

Agora escolha a família correta de processador:

Listagem de código 3.3: Selecionando a família correta de processador

 Processor type and features --->
   (Change according to your system)
   (Athlon/Duron/K7) Processor family
 

Agora vá para File Systems e selecione suporte para o sistema de arquivos que você usa. Não os compile como módulos, caso contrário seu sistema Gentoo não será capaz de montar suas partições. Também selecione Virtual memory e /proc file system. Se você estiver usando um kernel 2.4, você precisa selecionar /dev file system já que kernéis 2.4 não suportam udev.

Listagem de código 3.4: Selecionando sistemas de arquivos necessários

(Com um kernel 2.4.x)
 File systems --->
  [*] Virtual memory file system support (former shm fs)
  [*] /proc file system support
  [*] /dev file system support (EXPERIMENTAL)
  [*]   automatically mount /dev at boot
  [ ] /dev/pts file system for Unix98 PTYs
 
(Com um kernel 2.6.x)
File systems --->
  Pseudo Filesystems --->
    [*] /proc file system support
    [*] Virtual memory file system support (former shm fs)


(Selecione uma ou mais das seguintes opções conforme necessárias ao seu sistema)
  <*> Reiserfs support
  <*> Ext3 journalling file system support
  <*> JFS filesystem support
  <*> Second extended fs support
  <*> XFS filesystem support

Se sua BIOS não puder lidar com discos rígidos grandes e você colocou jumpers para relatar um tamanho limitado, você tem que ativar a seguinte opção para ter acesso a seu disco inteiro:

Listagem de código 3.5: Selecionando suporte de redimensionamento de autogeometria

(só kernel 2.4.x)
ATA/IDE/MFM/RLL support --->
  IDE, ATA and ATAPI Block devices --->
    <*>   Include IDE/ATA-2 DISK support
    [ ]     Use multi-mode by default
    [*]     Auto-Geometry Resizing support

Não se esqueça de ativar DMA para seus discos:

Listagem de código 3.6: Ativando DMA

Device Drivers --->
  ATA/ATAPI/MFM/RLL support --->
    [*] Generic PCI bus-master DMA support
    [*]   Use PCI DMA by default when available

Se você estiver usando PPPoE para conectar à Internet ou estiver usando um modem discado, você irá precisar das seguintes opções no kernel:

Listagem de código 3.7: Selecionando drivers necessários para PPPoE

(Com um kernel 2.4.x)
Network device support --->
  <*> PPP (point-to-point protocol) support
  <*>   PPP support for async serial ports
  <*>   PPP support for sync tty ports

(Com um kernel 2.6.x)
Device Drivers --->
  Networking support --->
    <*> PPP (point-to-point protocol) support
    <*>   PPP support for async serial ports
    <*>   PPP support for sync tty ports

As duas opções de compressão não fazem mal, mas não são absolutamente necessárias, bem como a opção PPP over Ethernet, que somente pode ser usada pelo comando rp-pppoe quando configurado para fazer PPPoE em modo de kernel.

Se você precisar, não se esqueça de incluir suporte no kernel para sua placa de rede.

Se você tiver uma CPU Intel que suporta HyperThreading (tm), ou tem um sistema de várias CPUs, você deve ativar "Symmetric multi-processing support":

Listagem de código 3.8: Ativando suporte a SMP

Processor type and features  --->
  [*] Symmetric multi-processing support

Se você usa dispositivos USB (como teclado ou mouse) não se esqueça de ativá-los também:

Listagem de código 3.9: Ativando suporte a USB para dispositivos de entrada

USB Support --->
  <*>   USB Human Interface Device (full HID) support

Usuários de laptop que querem suporte a PCMCIA não devem usar os drivers de PCMCIA se escolherem usar um kernel 2.4. Drivers mais recentes estão disponíveis através do pacote pcmcia-cs que será instalado depois. Usuários de kernel 2.6, todavia, devem usar os drivers de PCMCIA do kernel.

Listagem de código 3.10: Ativando suporte a PCMCIA para kernéis 2.6

Bus options (PCI, PCMCIA, EISA, MCA, ISA)  --->
  PCCARD (PCMCIA/CardBus) support  --->
    <*> PCCard (PCMCIA/CardBus) support
(selecione 16 bit se você precisar de suporte para cartões PCMCIA antigos. A maior parte das pessoas deve colocar isso.)
    <*>   16-bit PCMCIA support
    [*]   32-bit CardBus support
(selecione as pontes relevantes abaixo)
    --- PC-card bridges
    <*> CardBus yenta-compatible bridge support (NEW)
    <*> Cirrus PD6729 compatible bridge support (NEW)
    <*> i82092 compatible bridge support (NEW)
    <*> i82365 compatible bridge support (NEW)
    <*> Databook TCIC host bridge support (NEW)

Quando você terminar de configurar o kernel, continue com Compilando e instalando.

Compilando e instalando

Agora que seu kernel está configurado, está na hora de compilá-lo e instalá-lo. Saia da configuração e comece o processo de compilação:

Listagem de código 3.11: Compilando o kernel

(Para um kernel 2.4)
# make dep && make bzImage modules modules_install

(Para um kernel 2.6)
# make && make modules_install

Quando o kernel terminar de compilar, copie a imagem do kernel para /boot. Use o nome que você achar mais adequado para sua escolha de kernel e lembre-se dele, já que você irá precisar dele quando você for configurar seu gerenciador de inicialização. Lembre-se de substituir <versão-do-kernel> com o nome e versão de seu kernel.

Listagem de código 3.12: Instalando o kernel

# cp arch/i386/boot/bzImage /boot/<versão-do-kernel>

Agora continue com Módulos do kernel.

7.d. Alternativa: Usando o genkernel

Se você estiver lendo esta seção, você escolheu usar nosso script genkernel para configurar o kernel para você.

Agora que a árvore fonte de seu kernel está instalada, está na hora de compilar seu kernel usando nosso script genkernel para construir um kernel automaticamente para você. O genkernel funciona configurando um kernel praticamente idêntico ao modo que nosso kernel do CD de instalação é configurado. Isto significa que quando você usar o comando genkernel para construir seu kernel, seu sistema irá geralmente detectar seu hardware na hora da inicialização, como no CD de instalação. Dado que o genkernel não necessita de nenhuma configuração manual, é uma solução ideal para aqueles usuários que não se sentem confortáveis compilando seus próprios kernéis.

Agora vamos ver como usar o genkernel. Primeiro, faça emerge da ebuild do genkernel:

Listagem de código 4.1: Instalando o genkernel

# emerge genkernel

A seguir, se você for configurar um kernel 2.6, copie a configuração de kernel usada no CD de instalação para o local onde o genkernel procura pela configuração padrão de kernel:

Listagem de código 4.2: Copiando a configuração do kernel do CD de instalação

(Só faça isso se você for configurar um kernel 2.6)
# zcat /proc/config.gz > /usr/share/genkernel/x86/kernel-config-2.6

Agora, compile sua fonte de kernel rodando genkernel all. Esteja alerta, entretanto, de que como o genkernel compila um kernel que suporta quase todos hardwares, esta compilação irá demorar bastante para terminar!

Note que se sua partição de inicialização (boot) não usa ext2 ou ext3 como sistema de arquivos você precisará configurar manualmente seu kernel usando o comando genkernel --menuconfig all e adicionando suporte para seu sistema de arquivos dentro do kernel (isto é, não como módulo). Usuários de EVMS2 ou LVM2 devem adicionar --evms2 ou --lvm2 como argumento também.

Listagem de código 4.3: Rodando o genkernel

# genkernel all

Quando o genkernel terminar, um kernel, um conjunto completo de módulos e um initial root disk (initrd) serão criados. Nós iremos usar o kernel e o initrd quando formos configurar um gerenciador de inicialização numa parte mais adiantada deste documento. Escreva os nomes do kernel e initrd, uma vez que você irá precisar deles quando for escrever o arquivo de configuração do gerenciador de inicialização. A initrd será iniciada imediatamente após a inicialização para fazer a auto-detecção de hardware (igual ao CD de instalação), antes de seu sistema "de verdade" iniciar.

Listagem de código 4.4: Verificando o nome da imagem de kernel criada e initrd

# ls /boot/kernel* /boot/initramfs*

Agora, vamos fazer mais um passo para deixar nosso sistema mais parecido com o CD de instalação -- vamos instalar o coldplug. Enquanto o initrd detecta automaticamente hardware que é necessário para carregar seu sistema, o coldplug detecta o resto. Para instalar e habilitar o coldplug, digite o seguinte:

Listagem de código 4.5: Instalando e ativando o coldplug

# emerge coldplug
# rc-update add coldplug boot

7.e. Módulos do kernel

Configurando os módulos

Você deve listar os módulos que você quer carregar automaticamente em /etc/modules.autoload.d/kernel-2.4 (ou kernel-2.6). Você pode colocar opções adicionais aos módulos também se quiser.

Para ver todos módulos disponíveis, rode o seguinte comando usando o find. Não se esqueça de substituir "<versão do kernel>" com a versão do kernel que você acaba de compilar:

Listagem de código 5.1: Vendo todos módulos disponíveis

# find /lib/modules/<versão do kernel>/ -type f -iname '*.o' -or -iname '*.ko'

Por exemplo, para carregar o módulo 3c59x.o automaticamente, edite o arquivo kernel-2.4 ou kernel-2.6 e coloque o nome do módulo nele.

Listagem de código 5.2: Editando o /etc/modules.autoload.d/kernel-2.4

(Examplo para kernéis 2.4)
# nano -w /etc/modules.autoload.d/kernel-2.4

Listagem de código 5.3: /etc/modules.autoload.d/kernel-2.4 ou kernel-2.6

3c59x

Continue a instalação com Configurando seu sistema.

8. Configurando seu sistema

8.a. Informações sobre os sistemas de arquivos

O que é o fstab?

No Linux, todas as partições usadas pelo sistema deve estar listadas em /etc/fstab. Este arquivo contém os pontos de montagem das partições (onde elas são vistas na estrutura do sistema de arquivos), como elas devem ser montadas e com que opções especiais (automaticamente ou não, usuários podem ou não montá-las, etc...)

Criando o /etc/fstab

O /etc/fstab usa uma sintaxe especial. Cada linha consiste de seis campos, separados por espaços em branco (espaço(s), tabs ou ambos). Cada campo tem seu próprio significado:

  • O primeiro campo mostra a partição descrita (o caminho para o arquivo de dispositivo)
  • O segundo campo mostra o ponto de montagem no qual a partição deve ser montada
  • O terceiro campo mostra o sistema de arquivos usado pela partição
  • O quarto campo mostra as opções de montagem usadas pelo mount quando a partição for montada. Como cada sistema de arquivos tem suas próprias opções de montagem, é aconselhado que você leia o manual do mount (man mount) para uma listagem completa. Opções múltiplas são separadas por vírgulas.
  • O quinto campo é usado pelo dump para determinar se a partição precisa de um dump ou não. Geralmente você pode deixar isso como 0 (zero).
  • O sexto campo é usado pelo fsck para determinar a ordem em que os sistemas de arquivos devem ser verificados se o sistema não foi desligado corretamente. O sistema de arquivos raiz (root) deve ter o valor 1, enquanto o restante deve ter 2 (ou 0 caso uma verificação no sistema de arquivos não seja necessária).

O arquivo /etc/fstab padrão não é um arquivo de fstab válido, portanto inicie o nano (ou seu editor favorito) para criar seu /etc/fstab:

Listagem de código 1.1: Abrindo o /etc/fstab

# nano -w /etc/fstab

Vejamos como nós escrevemos as opções para a partição /boot. É só um exemplo, então se sua arquitetura não precisa de uma partição /boot (como máquinas Apple PPC), não copie ao pé da letra.

Em nosso exemplo padrão x86 de particionamento /boot é a partição /dev/hda1, com um sistema de arquivos ext2. Ela precisa ser verificada durante a inicialização, então nós escrevemos:

Listagem de código 1.2: Um exemplo de linha para /boot no /etc/fstab

/dev/hda1   /boot     ext2    defaults        1 2

Alguns usuários não querem que sua partição /boot seja montada automaticamente para melhorar a segurança de seu sistema. Estas pessoas devem trocar defaults por noauto. Isto significa que você precisa montar manualmente esta partição cada vez que você quiser usá-la.

Agora, para melhorar a performance, a maioria deve adicionar a opção noatime como opção de montagem, que resulta em um sistema mais rápido, já que o tempo de acesso não é registrado (você não precisará tanto disto):

Listagem de código 1.3: Uma linha melhor para /boot no /etc/fstab

/dev/hda1   /boot     ext2    defaults,noatime    1 2

Se continuarmos assim, nós terminamos com as seguintes três linhas (para /boot, / e a partição swap):

Listagem de código 1.4: Três linhas do /etc/fstab

/dev/hda1   /boot     ext2    defaults,noatime  1 2
/dev/hda2   none      swap    sw                0 0
/dev/hda3   /         ext3    noatime           0 1

Para finalizar, você deve adicionar regras para /proc, tmpfs (requerido) e para o seu CD-ROM (e claro, se você tiver outras partições ou dispositivos, para eles também):

Listagem de código 1.5: Um exemplo completo do /etc/fstab

/dev/hda1   /boot     ext2    defaults,noatime     1 2
/dev/hda2   none      swap    sw                   0 0
/dev/hda3   /         ext3    noatime              0 1

none        /proc     proc    defaults             0 0
none        /dev/shm  tmpfs   nodev,nosuid,noexec  0 0

/dev/cdroms/cdrom0    /mnt/cdrom    auto      noauto,user    0 0

A opção auto faz com que o mount descubra o sistema de arquivos (recomendado para mídias removíveis já que podem ser criadas com vários tipos de sistemas de arquivos) e a opção user faz com que seja possível usuários além do administrador (root) possam montar o CD.

Agora use o exemplo acima para criar o seu /etc/fstab. Se você é um usuário de um SPARC, você deve também adicionar a seguinte linha ao seu /etc/fstab:

Listagem de código 1.6: Adicionando um sistema de arquivos openprom ao /etc/fstab

none        /proc/openprom  openpromfs    defaults      0 0

Confira o seu /etc/fstab, salve e saia para continuar.

8.b. Informações de Rede

Nome do host, domínio, etc...

Uma das escolhas que o usuário deve fazer é dar um nome ao PC. Isto parece ser bem fácil, mas muitos usuários tem dificuldades em achar um nome apropriado para seus Linux-pc. Para acelerar as coisas, saiba que qualquer nome que você escolher pode ser mudado depois. Para que possamos continuar, você pode chamar seu sistema simplesmente tux com domínio homenetwork.

Nós usamos esses valores nos próximos exemplos. Primeiro configuramos o nome do host:

Listagem de código 2.1: Configurando o nome do host

# nano -w /etc/conf.d/hostname

(Configure a variável HOSTNAME com seu nome de host)
HOSTNAME="tux"

Em seguida nós configuramos o nome do domínio:

Listagem de código 2.2: Configurando o nome do domínio

# nano -w /etc/conf.d/domainname

(Configure a variável DNSDOMAIN com seu nome de domínio)
DNSDOMAIN="homenetwork"

Se você tiver um domínio NIS (se você não sabe o que é isso, é sinal de que você não tem um), você também precisa defini-lo:

Listagem de código 2.3: Configurando o nome do domínio NIS

# nano -w /etc/conf.d/domainname

(Configure a variável NISDOMAIN com seu nome de domínio NIS)
NISDOMAIN="my-nisdomain"

Agora adicione o script de init domainname ao runlevel default:

Listagem de código 2.4: Adicionando o domainname ao runlevel default

# rc-update add domainname default

Configurando sua rede

Antes de você pensar "Ei, nós já fizemos isto!", você deve lembrar que a rede que você configurou no início da instalação do Gentoo era somente para a instalação. Neste momento você irá configurar a rede para o sistema Gentoo permanente.

Nota: Informações mais detalhadas sobre rede, incluindo tópicos avançados como bonding (junção), bridging (pontes), VLANs 802.1Q ou rede wireless são cobertas na seção Configuração de rede do Gentoo.

Toda informação de rede é reunida no /etc/conf.d/net. É usada uma sintaxe simples, mas não intuitiva se você não sabe como configurar a rede manualmente. Mas não se assuste, iremos explicar tudo. Um exemplo totalmente comentado que cobre as várias configurações diferentes está disponível em /etc/conf.d/net.example.

DHCP é usado por padrão e não necessita de configuração adicional.

Se você precisa configurar sua conexão de rede tanto porque você precisa de opções específicas de DHCP ou porque você não usa DHCP, abre /etc/conf.d/net com seu editor favorito (nano é usado neste exemplo):

Listagem de código 2.5: Abrindo o /etc/conf.d/net para edição

# nano -w /etc/conf.d/net

Você verá o seguinte arquivo:

Listagem de código 2.6: /etc/conf.d/net padrão

# Esta configuração em branco irá usar DHCP automaticamente para quais scripts
# net.* em /etc/init.d. Para criar uma configuração mais completa,
# por favor veja /etc/conf.d/net.example e salve sua configuração
# em /etc/conf.d/net (este arquivo :]!).

Para entrar seu próprio endereço IP, máscara de rede e roteador, você precisa configurar tanto config_eth0 como routes_eth0:

Listagem de código 2.7: Configurando informação de IP manualmente para eth0

config_eth0=( "192.168.0.2 netmask 255.255.255.0 brd 192.168.0.255" )
routes_eth0=( "default gw 192.168.0.1" )

Para usar DHCP e adicionar opções específicas de DHCP, defina config_eth0 e dhcp_eth0:

Listagem de código 2.8: Obter um endereço IP automaticamente para eth0

config_eth0=( "dhcp" )
dhcp_eth0="nodns nontp nonis"

Por favor, leia /etc/conf.d/net.example para uma lista com todas opções disponíveis.

Se você tiver várias interfaces de rede, repita os passos acima para config_eth1, config_eth2, etc.

Agora salve a configuração e saia para continuar.

Iniciando a rede automaticamente na inicialização

Para ter sua(s) interface(s) de rede ativada(s) na inicialização, você precisa adicioná-la(s) ao runlevel default. Se você tiver interfaces PCMCIA você não precisa fazer isto, já que as interfaces PCMCIA são iniciadas pelo script de init PCMCIA.

Listagem de código 2.9: Adicionando net.eth0 ao runlevel default

# rc-update add net.eth0 default

Se você tiver várias interfaces de rede, você precisa criar os scripts de init net.eth1, net.eth2 etc... apropriados para elas. Você pode usar o ln para fazer isso:

Listagem de código 2.10: Criando scripts de init adicionais

# cd /etc/init.d
# ln -s net.eth0 net.eth1
# rc-update add net.eth1 default

Escrevendo informações de rede

Você precisa informar o Linux sobre sua rede. Isto é definido em /etc/hosts e ajuda na resolução dos nomes dos hosts para endereços IP de hosts que não são resolvidos pelo seu servidor de nomes. Por exemplo, se sua rede interna consiste de três PCs chamados jenny (192.168.0.5), benny (192.168.0.6) e tux (192.168.0.7 - este sistema) você abriria o /etc/hosts e preencheria os valores:

Listagem de código 2.11: Abrindo o /etc/hosts

# nano -w /etc/hosts

Listagem de código 2.12: Preenchendo as informações de rede

127.0.0.1     localhost
192.168.0.5   jenny.homenetwork jenny
192.168.0.6   benny.homenetwork benny
192.168.0.7   tux.homenetwork tux

Se o seu sistema é o único sistema (ou o servidor de nomes cuida de toda a resolução de nomes) uma única linha é suficiente. Por exemplo, se você quiser chamar seu sistema de tux:

Listagem de código 2.13: /etc/hosts para PCs solitários ou totalmente integrados

127.0.0.1     localhost tux

Salve e saia do editor para continuar.

Se você não tiver PCMCIA, você pode continuar com Informações do sistema. Usuários de PCMCIA devem ler o seguinte tópico sobre PCMCIA.

Opcional: Tenha o PCMCIA funcionando

Nota: pcmcia-cs só está disponível para as plataformas x86, amd64 e ppc.

Usuários de PCMCIA devem primeiramente instalar o pacote pcmcia-cs. Isto também inclui usuários que irão trabalhar com kernéis 2.6 (mesmo que eles não usem drivers PCMCIA deste pacote). A opção USE="-X" é necessária para evitar a instalação do xorg-x11 neste momento:

Listagem de código 2.14: Instalando o pcmcia-cs

# USE="-X" emerge pcmcia-cs

Quando o pcmcia-cs for instalado, adicione pcmcia ao runlevel default:

Listagem de código 2.15: Adicionando pcmcia ao runlevel default

# rc-update add pcmcia default

8.c. Informações do Sistema

Senha de administrador (root)

Primeiro nós configuramos a senha de administrador (root) digitando:

Listagem de código 3.1: Configurando a senha de administrador (root)

# passwd

Se você quiser que o administrador (root) possa logar-se através de uma porta serial, adicione tts/0 ao arquivo /etc/securetty:

Listagem de código 3.2: Adicionando tts/0 ao /etc/securetty

# echo "tts/0" >> /etc/securetty

Informações do Sistema

O Gentoo usa o /etc/rc.conf para configurações gerais de todo o sistema. Abra o /etc/rc.conf e aproveite todos os comentários do arquivo. :)

Listagem de código 3.3: Abrindo o /etc/rc.conf

# nano -w /etc/rc.conf

Quando você terminar de configurar o /etc/rc.conf, salve e saia.

Como você pode ver, o arquivo é bem comentado para ajudar você a ajustar as variáveis de configuração necessárias. Você pode configurar seu sistema para usar unicode, definir seu editor padrão e seu gerenciador de display (como gdm ou kdm).

O Gentoo usa /etc/conf.d/keymaps para lidar com a configuração de teclado. Edite-o para configurar seu teclado.

Listagem de código 3.4: Opening /etc/conf.d/keymaps

# nano -w /etc/conf.d/keymaps

Dê atenção especial à variável KEYMAP: se você selecionar o KEYMAP errado você terá resultados estranhos quando digitar em seu teclado.

Nota: Usuários de sistemas SPARC baseados em USB e clones do SPARC têm que selecionar um mapa de teclado de i386 (como "us") ao invés de "sunkeymap". O PPC usa mapas de teclado x86 na maior parte dos sistemas. Usuários que quiserem usar mapas de teclado ADB na hora da inicialização têm que ativar envio de keycodes de ADB no kernel e configurar um mapa de teclado mac/ppc no /etc/conf.d/keymaps.

Quando você terminar de configurar o /etc/conf.d/keymaps, salve e saia.

O Gentoo usa /etc/conf.d/clock para configurar opções de relógio. Edite-o de acordo com suas necessidades.

Listagem de código 3.5: Opening /etc/conf.d/clock

# nano -w /etc/conf.d/clock

Se o relógio de seu hardware não estiver usando UTC, você precisa adicionar CLOCK="local" ao seu arquivo. Caso contrário você perceberá bagunça no relógio. Também, o Windows presume que seu relógio de hardware usa horário local, então, se você quiser usá-lo em paralelo, você deve configurar esta variável adequadamente, senão seu relógio ficará maluco.

Quando você terminar de configurar /etc/conf.d/clock, salve e saia.

Se você não estiver instalando o Gentoo em um sistema IBM PPC64, continue com Instalando as ferramentas de sistema necessárias.

Configurando o console

Nota: A seguinte seção aplica-se a plataformas de hardware IBM PPC64.

Se você estiver rodando o Gentoo em hardware IBM PPC64 e usando um console virtual, você descomentar a linha adequada em /etc/inittab para que o console virtual inicie um prompt de log-in.

Listagem de código 3.6: Ativando suporte a hvc ou hvsi no /etc/inittab

hvc0:12345:respawn:/sbin/agetty -L 9600 hvc0
hvsi:12345:respawn:/sbin/agetty -L 19200 hvsi0

Você também deve proveitar para verificar se o console adequado está listado em /etc/securetty.

Você pode agora continuar com Instalando as ferramentas de sistema necessárias.

9. Instalando as ferramentas de sistema necessárias

9.a. Gerenciador de dispositivos

Se você estiver usando um kernel 2.4 e estiver instalando o Gentoo do stage 3, existem algumas coisas que você precisa fazer. Já que o Gentoo agora usa udev por padrão e o udev não é suportado por kernéis 2.4, você tem que usar o devfsd e remover o udev.

Listagem de código 1.1: Instalando o devfsd

(Para aqueles usando kernéis 2.4.x com uma instalação de stage 3)
# emerge --unmerge udev
# emerge devfsd

9.b. Logger do Sistema

Algumas ferramentas estão faltando do arquivo de stage3 porque vários pacotes fornecem a mesma funcionalidades. Está na hora de você escolher quais você quer instalar.

A primeira ferramenta que você precisa escolher deve fornecer capacidades de registro para nosso sistema. Unix e Linux têm um excelente histórico com relação a registros -- se você desejar, você pode registrar tudo que acontece em seu sistema em arquivos de registro. Isto é feito através do logger de sistema.

O Gentoo oferece muitos loggers de sistema para escolher. Há o sysklogd, que é o conjunto tradicional de daemons de registro de sistema, syslog-ng, um logger de sistema avançado e o metalog, que é um logger de sistema altamente configurável. Outros podem estar disponíveis pelo Portage também - nosso número de pacotes disponíveis aumenta diariamente.

Se você pretende usar sysklogd ou syslog-ng você deve instalar o logrotate mais tarde, já que esses loggers de sistema não oferecem nenhum mecanismo de rotação para os arquivos de registro.

Para instalar o logger de sistema de sua escolha, faça um emerge nele e adicione-o ao runlevel default usando rc-update. O exemplo seguinte instala o syslog-ng. É claro, substitua pelo logger de sua escolha:

Listagem de código 2.1: Instalando um logger de sistema

# emerge syslog-ng
# rc-update add syslog-ng default

9.c. Opcional: daemon de cron

O próximo é o daemon de cron. Apesar de opcional e não necessário para o sistema, é interessante instalá-lo. Mas o que será daemon de cron? Um daemon de cron executa comandos agendados. É uma mão na roda se você necessita executar alguns comandos regularmente (seja ele diário, semanal ou mensal).

O Gentoo oferece três possíveis daemons de cron: dcron, fcron e vixie-cron. Instalar qualquer um deles é semelhante a instalar um logger de sistema. Entretanto, dcron e fcron requerem um comando de configuração extra, que é crontab /etc/crontab. Se você não sabe qual escolher, use o vixie-cron.

Nós fornecemos apenas vixie-cron para instalações sem internet. Se você deseja instalar outro daemon de cron você pode esperar e instalá-lo mais tarde.

Listagem de código 3.1: Instalando um daemon de cron

# emerge vixie-cron
# rc-update add vixie-cron default
(Apenas se tiver escolhido dcron ou fcron) # crontab /etc/crontab

9.d. Opcional: Indexamento de Arquivos

Se você deseja indexar seus arquivos de sistema para que você possa localizá-los rapidamente usando a ferramenta locate, você precisa instalar sys-apps/slocate.

Listagem de código 4.1: Instalando slocate

# emerge slocate

9.e. Ferramentas de Sistema de Arquivo

Dependendo do sistema de arquivos que você está usando, você precisa instalar alguns utilitários (para verificar a integridade do sistema de arquivos, criar sistemas de arquivos adicionais, etc...).

A tabela seguinte lista as ferramentas que você precisa instalar para cada sistema de arquivo:

Sistema de Arquivo Ferramenta Comando de Instalação
XFS xfsprogs emerge xfsprogs
ReiserFS reiserfsprogs emerge reiserfsprogs
JFS jfsutils emerge jfsutils

Se você é um usuário de EVMS, você também precisa instalar evms:

Listagem de código 5.1: Instalando utilitários de EVMS

# USE="-gtk" emerge evms

O USE="-gtk" irá prevenir a instalação de dependências. Se você quiser ativar as ferramentas gráficas do evms, você pode recompilar o evms mais tarde.

Se você não precisa de mais nenhuma ferramenta relacionada com rede (como rp-pppoe ou cliente dhcp) continue com Configurando o gerenciador de inicialização.

9.f. Ferramentas de rede

Opcional: Instalando um cliente de DHCP

Se você quiser que o Gentoo obtenha automaticamente um endereço IP para sua(s) interface(s), você precisa instalar dhcpcd (ou qualquer outro cliente de DHCP) em seu sistema. Se você não o fizer agora, você pode não conseguir conectar à internet após a instalação!

Listagem de código 6.1: Instalando dhcpcd

# emerge dhcpcd

Opcional: instalando um cliente de PPPoE

Se você precisa de rp-pppoe para se conectar à rede, você precisa disso.

Listagem de código 6.2: Instalando rp-pppoe

# USE="-X" emerge rp-pppoe

O USE="-X" irá excluir a instalação do xorg-x11 como dependência (rp-pppoe possui ferramentas gráficas; se você deseja ativá-las, você pode recompilar o rp-pppoe mais tarde ou instalar xorg-x11 agora -- o que vai levar um bom tempo para compilar).

Opcional: Utilitários de RAID para hardware IBM

Se você estiver usando SCSI RAID em um sistema baseado em POWER5, você deve considerar a instalação do iprutils que permitem que você trabalhe com o array de discos RAID, obter o status dos discos nas arrays, e atualizar microcode, entre outras funções.

Listagem de código 6.3: Instalando iprutils

# emerge iprutils

Continue agora com Configurando o gerenciador de inicialização.

10. Configurando o gerenciador de inicialização

10.a. Fazendo sua escolha

Introdução

Agora que o seu kernel está configurado e compilado e os arquivos de configuração necessários para o sistema estão preenchidos corretamente, está na hora de instalar um programa que irá chamar o seu kernel quando você iniciar o sistema. Tal programa é chamado de gerenciador de inicialização. Para x86, o Gentoo Linux fornece o GRUB e o LILO. Porém, antes de instalarmos um destes gerenciadores de inicialização, informaremos a você como configurar o framebuffer (caso você o queira, claro). Com o framebuffer você pode rodar a linha de comando do Linux com funções gráficas limitadas (como a bela imagem de bootsplash que o Gentoo oferece).

Opcional: framebuffer

Se você configurou o kernel com suporte a framebuffer (ou se você usou a configuração padrão do genkernel), você pode ativá-lo adicionando uma expressão de vga e/ou video ao arquivo de configuração de seu gerenciador de inicialização.

Primeiro você deve saber que tipo de dispositivo de framebuffer você está usando. Se você usa uma árvore de kernel com os patches do Gentoo (como gentoo-sources), você terá a possibilidade de selecionar vesafb-tng como o driver de tipo VESA (que é padrão para essas fontes de kernel). Se este for o caso, você está usando vesafb-tng e não precisa configurar uma expressão de vga. Caso contrário você está usando o driver vesafb e precisa configurar a expressão vga.

A expressão vga controla a resolução e profundidade de cor de sua tela de framebuffer para vesafb. Como dito em /usr/src/linux/Documentation/fb/vesafb.txt (que é instalado quando você instala um pacote de fonte de kernel), você precisa passar o número de VESA correspondente à resolução requisitada e profundidade de cor.

A seguinte tabela lista as resoluções disponíveis e profundidades de cor e dá os valores que você precisa passar à expressão vga.

640x480 800x600 1024x768 1280x1024
256 0x301 0x303 0x305 0x307
32k 0x310 0x313 0x316 0x319
64k 0x311 0x314 0x317 0x31A
16M 0x312 0x315 0x318 0x31B

A expressão video controla as opções de display do framebuffer. Ela precisa receber o driver de framebuffer (vesafb para kernéis 2.6, ou vesa para kernéis 2.4) seguido de expressões de controle que você quiser ativar. Todas variáveis são listadas em /usr/src/linux/Documentation/fb/vesafb.txt, mas iremos informá-lo sobre as três opções mais usadas:

Controle Descrição
ywrap Presumir que a placa gráfica pode fazer wrap em sua memória (isto é, continuar no começo quando alcançar o final)
mtrr Configurar registradores de MTRR
mode (só para vesafb-tng)
Configurar a resolução, profundidade de cor e taxa de retorno. Por exemplo, 1024x768-32@85 para uma resolução de 1024x768, profundidade de cor de 32 bits e uma taxa de retorno de 85 Hz.

O resultado das duas expressões pode ser algo como vga=0x318 video=vesafb:mtrr,ywrap ou video=vesafb:mtrr,ywrap,1024x768-32@85. Lembre-se (ou anote) seu ajuste; você precisará dele em breve.

Agora continue com a instalação do GRUB ou do LILO.

10.b. Padrão: usando o GRUB

Entendendo a terminologia do GRUB

A parte mais crítica na compreensão do GRUB é sentir-se confortável com como o GRUB se refere aos discos rígidos e partições. Sua partição Linux /dev/hda1 será provavelmente chamada de (hd0,0) no GRUB. Note os parênteses no hd0,0 - eles são requeridos.

Discos rígidos contam a partir de 0 (zero) ao invés de "a" e as partições iniciam em 0 (zero) ao invés de 1 (um). Esteja atento para isto com os dispositivos hd, somente os discos rígidos são contados, não dispositivos atapi-ide tais como leitores e gravadores de cdrom. O mesmo acontece com dispositivos SCSI. (Normalmente eles recebem números maiores que os dispositivos ide exceto quando a BIOS está configurada para iniciar a partir do SCSI.) Quando você pede à BIOS que inicie de um disco rígido diferente (por exemplo seu escravo primário), aquele disco rígido é visto como hd0.

Presumindo que você tem um disco rígido em /dev/hda, um tocador de cdrom em /dev/hdb, um gravador em /dev/hdc, um segundo disco rígido em /dev/hdd e nenhum disco rígido SCSI, /dev/hdd7 é traduzido como (hd1,6). Pode parecer complicado e realmente é, mas como veremos, o GRUB oferece um mecanismo de completação com o tab que ajuda muito aqueles que têm muitos discos rígidos e partições e que ficam um pouco perdidos com o esquema de numeração do GRUB.

Tendo entendido a situação, está na hora de instalar o GRUB.

Instalando o GRUB

Para instalar o GRUB, vamos primeiro fazer emerge dele.

Listagem de código 2.1: Instalando o GRUB

# emerge grub

Embora agora o GRUB esteja instalado, nós ainda precisamos escrever um arquivo de configuração para ele e instalar o GRUB no registro mestre de inicialização (MBR) para que ele carregue automaticamente seu novo kernel. Crie /boot/grub/grub.conf com o nano (ou, se for o caso, outro editor):

Listagem de código 2.2: Criando o /boot/grub/grub.conf

# nano -w /boot/grub/grub.conf

Agora nós vamos escrever o grub.conf. Abaixo você encontrará dois grub.conf possíveis para o exemplo de particionamento que usamos neste guia. Nós somente fizemos comentários extensivos para o primeiro grub.conf. Certifique-se de usar o arquivo de imagem do seu kernel e, se for apropriado, o arquivo de imagem da sua initrd.

  • O primeiro grub.conf é para pessoas que não usaram o genkernel para construir seu kernel
  • O segundo grub.conf é para pessoas que usaram o genkernel para construir seu kernel

Nota: Se seu sistema de arquivos raiz (root) for JFS, você deve adicionar " ro" à linha kernel, já que o JFS precisa rodar seu registro antes de permitir a montagem de leitura-escrita.

Listagem de código 2.3: grub.conf para quem não usou genkernel

# Que item para carregar como padrão; 0 é o primeiro, 1 é o segundo, etc...
default 0
# Quantos segundos para esperar antes do ítem padrão ser carregado.
timeout 30
# Uma bela imagem de splash para deixar as coisas mais interessantes :)
# Comente a linha se você não tem uma placa gráfica instalada
splashimage=(hd0,0)/boot/grub/splash.xpm.gz

title=Gentoo Linux 2.6.12-r10
# Partição onde a imagem de kernel (ou sistema operacional) está localizada
root (hd0,0)
kernel /boot/kernel-2.6.12-gentoo-r10 root=/dev/hda3

# As próximas quatro linhas só são para quem tem Windows instalado paralelamente.
# Neste caso, o Windows está em /dev/hda6.
title=Windows XP
rootnoverify (hd0,5)
makeactive
chainloader +1

Listagem de código 2.4: grub.conf para usuários do genkernel

default 0
timeout 30
splashimage=(hd0,0)/boot/grub/splash.xpm.gz

title=Gentoo Linux 2.6.12-r10
root (hd0,0)
kernel /boot/kernel-genkernel-x86-2.6.12-gentoo-r10 root=/dev/ram0 init=/linuxrc ramdisk=8192 real_root=/dev/hda3 udev
initrd /boot/initramfs-genkernel-x86-2.6.12-gentoo-r10

# Só se você tiver Windows em paralelo
title=Windows XP
rootnoverify (hd0,5)
makeactive
chainloader +1

Nota: O udev mencionado no final da linha do kernel é necessário para contornar um bug em algumas versões do genkernel se você usar udev para começar (que é o comportamento padrão).

Se você usou um esquema de particionamento diferente e/ou imagem de kernel, ajuste de acordo. No entanto, certifique-se de que qualquer coisa depois de um dispositivo do GRUB (como (hd0,0)) é relativo ao ponto de montagem, não a raiz. Em outras palavras, (hd0,0)/grub/splash.xpm.gz é na realidade /boot/grub/splash.xpm.gz, uma vez que (hd0,0) é /boot.

Além disso, se você escolheu usar um esquema de particionamento diferente e não colocou /boot em uma partição separada, o prefixo /boot usado nas amostras de código acima é realmente necessário. Se você seguiu nosso plano de particionamento sugerido, o prefixo /boot não é necessário, mas um link simbólico boot faz funcionar. Em resumo, os exemplos acima devem funcionar tanto com uma partição de /boot separada ou não.

Se você precisa passar opções adicionais para o kernel, simplesmente adicione-as ao final da linha de comando do kernel. Já estamos passando uma opção (root=/dev/hda3 ou real_root=/dev/hda3), mas você pode passar outras também, como as expressões video e/ou vga para framebuffer que nós discutimos anteriormente.

Se você estiver usando um kernel 2.6.7 e colocou jumpers em seu disco rígido porque a BIOS não consegue lidar com discos rígidos grandes, você precisará anexar a opção hdx=stroke.

Usuários do genkernel devem saber que seus kernéis usam as mesmas opções de inicialização que as usadas no CD de instalação. Por exemplo, se você tiver dispositivos SCSI, você deve adicionar doscsi como uma opção de kernel.

Agora salve o arquivo grub.conf e saia. Nós ainda precisamos instalar o GRUB no registro mestre de inicialização (MBR), todavia, para que o GRUB seja executado automaticamente quando você ligar seu sistema.

Os desenvolvedores do GRUB recomendam o uso do grub-install. Porém, se por algum motivo o grub-install não funcionar corretamente, você ainda tem a opção de instalar o GRUB manualmente.

Continue com Padrão: Configurando o GRUB usando o grub-install ou Alternativa: Configurando o GRUB manualmente.

Padrão: Configurando o GRUB usando o grub-install

Para instalar o GRUB você irá precisar rodar o comando grub-install. No entanto, o grub-install não irá funcionar sem ajustes porque estamos dentro de um ambiente de chroot. Precisamos criar o /etc/mtab, que lista todos sistemas de arquivos montados. Felizmente, existe um jeito fácil de fazê-lo - simplesmente copiar /proc/mounts para /etc/mtab, excluindo a linha rootfs se você não criou uma partição de inicialização (boot) separada. O seguinte comando irá funcionar em ambos casos:

Listagem de código 2.5: Criando o /etc/mtab

# grep -v rootfs /proc/mounts > /etc/mtab

Agora podemos instalar o GRUB usando o grub-install:

Listagem de código 2.6: Rodando o grub-install

# grub-install /dev/hda

Se você tem mais perguntas sobre o GRUB, por favor consulte o GRUB FAQ ou o Manual do GRUB.

Continue com Reiniciando o sistema.

Alternativa: Configurando o GRUB manualmente

Para iniciar a configuração do GRUB, digite grub. Você verá o prompt de comando do grub, grub>. Agora, você tem que digitar os comandos corretos para instalar os arquivos de inicialização do GRUB em seu disco rígido.

Listagem de código 2.7: Iniciando o shell do GRUB

# grub

Nota: Se o seu sistema não tem dispositivos de disquete, adicione a opção --no-floppy ao comando acima para prevenir que o GRUB procure os dispositivos de disquete (não-existentes).

Na configuração de exemplo, nós queremos instalar o GRUB de maneira que ele leia sua informação da partição de inicialização (boot) /dev/hda1 e instale o arquivo de inicialização do GRUB no registro mestre de inicialização (MBR) do disco rígido de forma que a primeira coisa que vejamos quando ligamos o computador é o prompt do GRUB. Lógico, se você não seguiu as configurações de exemplo durante a instalação, mude os comandos de acordo.

O mecanismo de completação de tab do GRUB pode ser usado de dentro do GRUB. Por exemplo, se você digitar "root (" seguido de um TAB, você verá uma lista de dispositivos (como hd0). Se você digitar "root (hd0," seguido de um TAB, você receberá uma lista de partições disponíveis para escolher (como hd0,0).

Usando a completação de tab, configurar o GRUB não é tão difícil. Vamos configurar o GRUB agora? :-)

Listagem de código 2.8: Instalando o GRUB no MBR

grub> root (hd0,0)          (Coloque onde sua partição /boot reside)
grub> setup (hd0)           (Instale o GRUB no MBR)
grub> quit                  (Saia do shell do GRUB)

Nota: Se você não quiser instalar o GRUB no registro mestre de inicialização (MBR) e sim numa partição, você tem de alterar o comando setup para que ele aponte para a partição correta. Por exemplo, se você quer o GRUB instalado em /dev/hda3, então o comando vira setup (hd0,2). Poucos usuários, no entanto, devem fazer isso.

Se você tem mais perguntas em relação ao GRUB, por favor consulte o GRUB FAQ ou o Manual do GRUB.

Nota: Quando você reinstalar um kernel, você não precisa mais copiar os arquivos. Simplesmente rode make install depois de compilar o kernel; isto irá copiar os arquivos necessários automaticamente e ajustar a configuração do GRUB.

Continue com Reiniciando o sistema.

10.c. Alternativa: Usando o LILO

Instalando o LILO

LILO, o LInuxLOader, é mais testado e o mais antigo dos gerenciadores de inicialização de Linux. No entanto, ele não tem algumas funções que o GRUB tem (que é a razão pela qual o GRUB está ganhando popularidade atualmente). O motivo pelo qual o LILO ainda é usado é que, em alguns sistemas, o GRUB não funciona e o LILO sim. Claro, também é usado porque algumas pessoas conhecem o LILO e querem continuar usando ele. De qualquer maneira, o Gentoo suporta ambos, e aparentemente você escolheu usar o LILO.

Instalar o LILO é moleza; apenas use emerge.

Listagem de código 3.1: Instalando o LILO

# emerge lilo

Configurando o LILO

Para configurar o LILO, você deve criar o arquivo /etc/lilo.conf. Inicie seu editor favorito (neste manual nós usamos o nano para consistência) e crie o arquivo.

Listagem de código 3.2: Criando o /etc/lilo.conf

# nano -w /etc/lilo.conf

Algumas seções atrás nós perguntamos a você para lembrar-se do nome da imagem do kernel que você criou. No próximo exemplo do arquivo lilo.conf nós usamos o exemplo de esquema de partições. Existem duas partes separadas:

  • Uma para aqueles que não usaram o genkernel para gerar o kernel
  • Uma para aqueles que usaram o genkernel para gerar o kernel

Tenha certeza de usar o nome de arquivo da sua imagem de kernel e, se apropriado, o nome de arquivo de sua imagem de initrd.

Nota: Se seu sistema de arquivos raiz (root) for JFS, você deve adicionar append="ro" uma linha depois de cada item de inicialização, já que o JFS precisa rodar seu registro antes de permitir a montagem de leitura-escrita.

Listagem de código 3.3: Exemplo de /etc/lilo.conf

boot=/dev/hda             # Instalar o LILO no MBR
prompt                    # Dar chance ao usuário de selecionar outra seção
timeout=50                # Esperar 5 (cinco) segundos antes de carregar a seção padrão
default=gentoo            # Quando o timeout acabar, carregar a seção "gentoo"

# Para quem não usou genkernel
image=/boot/kernel-2.6.12-gentoo-r10
  label=gentoo            # Nome que damos à seção
  read-only               # Começar com uma raiz só de leitura. Não mude!
  root=/dev/hda3          # Local do sistema de arquivos raiz (root)

# Para quem usou genkernel
image=/boot/kernel-genkernel-x86-2.6.12-gentoo-r10
  label=gentoo
  read-only
  root=/dev/ram0
  append="init=/linuxrc ramdisk=8192 real_root=/dev/hda3 udev"
  initrd=/boot/initramfs-genkernel-2.6.12-gentoo-r10

# As próximas duas linhas são só para quem tem Windows instalado em paralelo.
# Neste caso, o Windows está armazenado em /dev/hda6.
other=/dev/hda6
  label=windows

Nota: O udev mencionado no final da linha do kernel é necessário para contornar um bug em algumas versões do genkernel se você usar udev para começar (que é o comportamento padrão).

Nota: Se você usa um esquema de particionamento diferente e/ou imagem de kernel, ajuste de acordo.

Para passar quaisquer opções adicionais ao kernel, adicione um comando append à seção. Como exemplo, nós adicionamos o comando video para ativar o framebuffer:

Listagem de código 3.4: Usando o append para adicionar opções de kernel

image=/boot/kernel-2.6.12-gentoo-r10
  label=gentoo
  read-only
  root=/dev/hda3
  append="video=vesafb:mtrr,ywrap,1024x768-32@85"

Se você estiver usando um kernel 2.6.7 e colocou jumpers em seu disco rígido porque a BIOS não consegue lidar com discos rígidos grandes você precisará anexar a opção hdx=stroke.

Usuários do genkernel devem saber que seus kernéis usam as mesmas opções de inicialização que as usadas no CD de instalação. Por exemplo, se você tem dispositivos SCSI, você deve adicionar doscsi como uma opção de kernel.

Agora salve o arquivo e saia. Para terminar, você tem que rodar /sbin/lilo para que o LILO aplique o /etc/lilo.conf a seu sistema (isto é, instalar-se no disco). Tenha em mente que você também terá que rodar /sbin/lilo toda vez que você instalar um kernel novo ou fizer mudanças ao menu.

Listagem de código 3.5: Finalizando a instalação o LILO

# /sbin/lilo

Nota: Quando você reinstalar um kernel, você não precisa copiar os arquivos de novo. Só rode make install depois de compilar o kernel; ele irá copiar os arquivos necessários e ajustar a configuração do LILO automaticamente.

Você pode agora continuar com Reiniciando o sistema.

10.d. Reiniciando o sistema

Saia do ambiente de chroot e desmonte todas partições montadas. Então digite aquele comando mágico que você estava esperando: reboot.

Listagem de código 4.1: Desmontando todas partições e reiniciando

# exit
cdimage ~# cd
cdimage ~# umount /mnt/gentoo/boot /mnt/gentoo/dev /mnt/gentoo/proc /mnt/gentoo
cdimage ~# reboot

Claro, não se esqueça de tirar o CD carregável, ou o CD será carregado novamente ao invés de seu novo sistema Gentoo.

Uma vez iniciada sua instalação do Gentoo, termine com Completando sua instalação do Gentoo.

11. Finalizando a instalação do Gentoo

11.a. Administração de usuários

Adicionando um usuário para uso diário

Trabalhar como administrador (root) em um sistema Unix/Linux é perigoso e deve ser evitado sempre que possível. Por isso é altamente recomendável adicionar um usuário para o uso no dia-a-dia.

Os grupos de que um usuário é membro definem que atividades o usuário pode fazer.A tabela seguinte lista um número de grupos importantes que você pode usar:

Grupo Descrição
audio poder acessar dispositivos de áudio
cdrom poder acessar dispositivos óticos diretamente
floppy poder acessar dispositivos de disquete diretamente
games poder jogar jogos
portage poder usar o comando emerge --pretend como usuário normal
usb poder acessar dispositivos USB
plugdev Poder montar e usar dispositivos plugáveis como câmeras e sticks USB
video poder acessar hardware de captura de vídeo e usar aceleração de hardware
wheel poder usar o su

Por exemplo, para criar um usuário chamado joao que é membro dos grupos wheel, users e audio, entre como administrador (root) primeiro (só o administrador pode criar usuários) e rode useradd:

Listagem de código 1.1: Adicionando um usuário para o uso do dia-a-dia

Login: root
Password: (Sua senha de administrador)

# useradd -m -G users,wheel,audio -s /bin/bash joao
# passwd joao
Password: (Entre a senha do joao)
Re-enter password: (Entre a senha do joao novamente para verificar)

Se um usuário precisar fazer alguma tarefa como administrador (root), ele pode usar su - para receber privilégios de administrador (root) temporariamente. Outro jeito é usar o pacote sudo, que é muito seguro, se configurado corretamente.

12. E agora, para onde ir?

12.a. Documentação

Parabéns! Você tem um sistema funcionando com o Gentoo. Mas para onde ir depois disto? Quais são suas opções agora? O que explorar primeiro? O Gentoo oferece a seus usuários várias possibilidades, e portanto muitas características documentadas (ou menos documentadas).

Certamente você deve olhar a próxima parte do Manual do Gentoo intitulada Trabalhando com o Gentoo, que explica como manter os programas atualizados, como instalar mais programas, o que são as variáveis de USE, como o sistema de inicialização do Gentoo funciona, etc...

Se você estiver interessado na otimização do sistema para desktop, ou quiser aprender como configurar seu sistema para se ter um desktop completo e funcional, consulte nossos extensos Recursos relacionados ao Desktop do Gentoo. Além disso, você pode usar nosso guia de localização para adequar seu sistema ao seu país.

Também temos o Manual de segurança do Gentoo, que vale ser lido.

Para uma listagem completa da documentação disponível verifique nossa página de Recursos de documentação.

12.b. Gentoo Online

Você, é claro, sempre bem-vindo em nossos Fóruns do Gentoo ou em um de nossos vários canais de IRC do Gentoo.

Nós também temos várias listas de e-mail abertas a todos nossos usuários. Informações de como cadastrar-se estão contidas naquela página.

Iremos calar-nos agora e deixar você aproveitar sua instalação :)

B. Trabalhando com o Gentoo

1. Uma introdução ao Portage

1.a. Bem-vindo ao Portage

O Portage é provavelmente a inovação mais notável do Gentoo no gerenciamento de software. Com sua alta flexibilidade e enorme quantidade de funções, é freqüentemente visto como a melhor ferramenta de gerenciamento de software disponível para Linux.

O Portage é completamente escrito em Python e Bash e portanto totalmente visíveis a seus usuários já que as duas são linguagens de scripting.

A maior parte dos usuários usa o Portage através da ferramenta emerge. Este capítulo não é feito para duplicar a informação disponível na página de man do emerge. Para uma listagem completa das opções do emerge, por favor consulte sua página de man:

Listagem de código 1.1: Lendo a página de man do emerge

$ man emerge

1.b. A árvore do Portage

Ebuilds

Quando nós falamos de pacotes, nós queremos dizer títulos de software que estão disponíveis para os usuários do Gentoo através da árvore do Portage. A árvore do Portage é uma coleção de ebuilds, arquivos que contêm toda informação que o Portage precisa para manter o software (instalar, procurar, ...). As ebuilds residem em /usr/portage por padrão.

Quando você pedir ao Portage tomar alguma ação com relação a títulos de software, ele usará as ebuilds em seu sistema como base. Logo, é importante que você atualize as ebuilds em seu sistema regularmente para que o Portage saiba sobre novo software, atualizações de segurança, etc...

Atualizando a árvore do Portage

A árvore do Portage é normalmente atualizada com o rsync, um programa rápido de transferência de arquivos incremental. Atualizar é simples, já que o comando emerge tem um front-end para o rsync:

Listagem de código 2.1: Atualizando a árvore do Portage

# emerge --sync

Se você não consegue fazer rsync devido a restrições de firewall, você ainda pode atualizar sua árvore do Portage usando nossos snapshots diários da árvore do Portage. A ferramenta emerge-webrsync baixa e instala o último snapshot em seu sistema automaticamente:

Listagem de código 2.2: Rodando emerge-webrsync

# emerge-webrsync

1.c. Mantendo software

Procurando software

Para procurar títulos de software na árvore do Portage, você pode usar as funções de procura incluídas no emerge. Por padrão, emerge --search retorna os nomes dos pacotes cujos títulos coincidem (inteiramente ou parcialmente) com o termo de procura.

Por exemplo, para procurar por todos pacotes que tenham "pdf" em seu nome:

Listagem de código 3.1: Procurando todos pacotes com nome contendo pdf

$ emerge --search pdf

Se você deseja pesquisar também as descrições você pode usar a opção --searchdesc (ou -S):

Listagem de código 3.2: Procurando pacotes relacionados a pdf

$ emerge --searchdesc pdf

Quando você vir a saída, você perceberá que ela dá muita informação a você. Os campos são claramente marcados para que nós não termos que adivinhar seus significados:

Listagem de código 3.3: Exemplo de saída de emerge --search

*  net-print/cups-pdf
      Latest version available: 1.5.2
      Latest version installed: [ Not Installed ]
      Size of downloaded files: 15 kB
      Homepage:    http://cip.physik.uni-wuerzburg.de/~vrbehr/cups-pdf/
      Description: Provides a virtual printer for CUPS to produce PDF files.
      License:     GPL-2

Instalando software

Quando você encontrar um título de software de que você gosta, você pode instalá-lo facilmente com o emerge: simplesmente adicione o nome do pacote. Por exemplo, para instalar o gnumeric:

Listagem de código 3.4: Instalando o gnumeric

# emerge gnumeric

Já que muitas aplicações dependem uma da outra, qualquer tentativa de instalar um certo pacote pode resultar na instalação de várias dependências também. Não se preocupe, o Portage lida bem com dependências. Se você quiser descobrir o que o Portage instalaria quando você pedir para ele instalar um certo pacote, adicione a opção --pretend. Por exemplo:

Listagem de código 3.5: Fingir instalar o gnumeric

# emerge --pretend gnumeric

Quando você pede ao Portage para instalar um pacote, ele irá baixar o código fonte necessário da Internet (se necessário) e gravá-lo por padrão em /usr/portage/distfiles. Depois disso irá descompactar, compilar e instalar o pacote. Se você quiser que o Portage só baixe as fontes sem instalá-las, adicione a opção --fetchonly ao comando emerge:

Listagem de código 3.6: Baixando o código-fonte do gnumeric

# emerge --fetchonly gnumeric

Encontrando documentação instalada por pacotes

Muitos pacotes vêm com sua própria documentação. Às vezes, a opções de USE doc determina se documentação do pacote deve ser instalada ou não. Você pode verificar a existência de uma opção de USE doc com o comando emerge -vp <nome do pacote>.

Listagem de código 3.7: Verificando a existência de uma opção de USE doc

(alsa-lib é só um exemplo, claro.)
# emerge -vp alsa-lib
[ebuild  N    ] media-libs/alsa-lib-1.0.9_rc3  +doc -jack 674 kB

Você pode ativar ou desativar a opção de USE doc tanto globalmente no arquivo /etc/make.conf como por pacote no arquivo /etc/portage/package.use. O capítulo Variáveis de USE cobre este aspecto com detalhe.

Uma vez o pacote instalado, sua documentação geralmente é encontrada em um subdiretório com o nome do pacote no diretório /usr/share/doc. Você também pode listar todos arquivos instalados com a ferramenta equery, que é parte do pacote app-portage/gentoolkit.

Listagem de código 3.8: Localizando documentação de pacote

# ls -l /usr/share/doc/alsa-lib-1.0.9_rc3
total 28
-rw-r--r--  1 root root  669 May 17 21:54 ChangeLog.gz
-rw-r--r--  1 root root 9373 May 17 21:54 COPYING.gz
drwxr-xr-x  2 root root 8560 May 17 21:54 html
-rw-r--r--  1 root root  196 May 17 21:54 TODO.gz

(Alternativamente, use equery para localizar arquivos interessantes:)
# equery files alsa-lib | less
media-libs/alsa-lib-1.0.9_rc3
* Contents of media-libs/alsa-lib-1.0.9_rc3:
/usr
/usr/bin
/usr/bin/alsalisp
(Saída trancada)

Removendo software

Quando você quiser remover um pacote de software de seu sistema, use emerge --unmerge. Isto dirá para o Portage remover todas arquivos instalados por aquele pacote de seu sistema exceto os arquivos de configuração da aplicação se você os alterou depois da instalação. Deixar os arquivos de configuração permite que você continue trabalhando com o pacote se você decidir que quer instalá-lo novamente.

Todavia, um grande aviso é aplicável: o Portage não irá verificar se o pacote que você quer remover é necessário para outro pacote. Ele irá, no entanto, avisar quando você quiser remover um pacote importante que quebraria seu sistema se você desinstalasse-lo.

Listagem de código 3.9: Removendo o gnumeric do sistema

# emerge --unmerge gnumeric

Quando você remove um pacote de seu sistema, as dependências do pacote que foram instaladas automaticamente são deixadas. Para que o Portage localize todas dependências que podem ser removidas agora, use a função --depclean do emerge. Nós iremos falar mais disso adiante.

Atualizando seu sistema

Para manter seu sistema em perfeita forma (e sem mencionar instalar as últimas atualizações de segurança) você precisa atualizar seu sistema regularmente. Uma vez que o Portage só verifica as ebuilds em sua árvore do Portage, você primeiro tem que atualizar sua árvore do Portage. Quando sua árvore do Portage é atualizada, você pode atualizar seu sistema com emerge --update world. No próximo exemplo, também usaremos a opção ask para dizer ao Portage para mostrar a lista de pacotes que ele quer atualizar e perguntar para você se você quer continuar:

Listagem de código 3.10: Atualizando seu sistema

# emerge --update --ask world

O Portage irá procurar novas versões das aplicações que você tem instaladas. Todavia, ele só irá verificar as versões das aplicações que você instalou explicitamente - não as dependências. Se você quiser atualizar todos pacotes em seu sistema, adicione o argumento --deep:

Listagem de código 3.11: Atualizando o sistema inteiro

# emerge --update --deep world

Já que atualizações de segurança também acontecem em pacotes que você não instalou explicitamente em seu sistema (mas que são puxados como dependências de outros programas), também é recomendado que você rode isto de vez em quando.

Se você alterou qualquer uma das suas variáveis de USE, você deve adicionar --newuse também. O Portage irá então verificar se a mudança necessita a instalação de novos pacotes ou recompilação dos instalados:

Listagem de código 3.12: Fazendo um update completo

# emerge --update --deep --newuse world

Meta pacotes

Alguns pacotes na árvore do Portage não têm nenhum conteúdo real, mas são usados para instalar uma coleção de pacotes. Por exemplo, o pacote kde irá instalar um ambiente KDE completo em seu sistema ao instalar os vários pacotes relacionados ao KDE como dependências.

Se você quiser remover um pacote desses de seu sistema, rodar emerge --unmerge neste pacote não terá muito efeito já que as dependências permanecem no sistema.

O Portage tem a funcionalidade de remover dependências órfãs também, mas já que a disponibilidade do software é dinamicamente dependente, você primeiro precisar atualizar seu sistema completamente, incluindo as novas mudanças que você fez quando mudou as opções de USE. Depois disso você pode rodar emerge --depclean para remover as dependências órfãs. Quando isso é feito, você precisa reconstruir as aplicações que foram linkadas dinamicamente aos títulos de software a que foram linkados dinamicamente mas que não são mais necessários.

Tudo isso é feito com os três seguintes comandos:

Listagem de código 3.13: Removendo dependências órfãs

# emerge --update --deep --newuse world
# emerge --depclean
# revdep-rebuild

O revdep-rebuild é fornecido pelo pacote gentoolkit; não se esqueça de instalá-lo primeiro:

Listagem de código 3.14: Instalando o pacote

# emerge gentoolkit

1.d. Quando o Portage estiver reclamando...

Sobre SLOTs, virtuals, branches, arquiteturas e profiles

Como dissemos antes, o Portage é extremamente poderoso e suporta muitas funções que outras ferramentas de gerenciamento de software não têm. Para entender isso, nós explicamos alguns dos aspectos do Portage sem entrar em muitos detalhes.

Com o Portage, as diferentes versões de um único pacote podem coexistir em um sistema. Enquanto outras distribuições costumam nomear os pacotes com as versões (como freetype e freetype2), o Portage usa uma tecnologia chamada SLOTs. Uma ebuild declara um certo SLOT para sua versão. Ebuilds com SLOTs diferentes podem coexistir em um mesmo sistema. Por exemplo, o pacote freetype tem ebuilds com SLOT="1" e SLOT="2".

Também existem pacotes que fornecem a mesma funcionalidade, mas que são implementados de maneira diferente. Por exemplo, metalogd, sysklogd e syslog-ng são todos loggers de sistema. Aplicações que dependem da disponibilidade de um "logger de sistema" não podem depender, por exemplo, do metalogd, já que outros loggers de sistema são tão bons quanto. O Portage permite o uso de virtuals: cada logger de sistema fornece a dependência virtual/syslog para que as aplicações possam depender de virtual/syslog.

O software na árvore do Portage pode residir em diferentes ramos. Por padrão seu sistema só aceita pacotes que o Gentoo considera estável. A maior parte dos títulos de software novos, quando colocados na árvore, são adicionados no ramo de testes, significando que mais testes devem ser feitos antes de serem marcados estáveis. Embora você veja as ebuilds deste software na árvore do Portage, o Portage não irá atualizá-los antes de serem colocados no ramo estável.

Alguns softwares só estão disponíveis para algumas arquiteturas. Ou o software não funciona em outras arquiteturas, ou precisa de mais testes, ou o desenvolvedor que colocou o software na árvore do Portage não pôde verificar se o pacote funciona em arquiteturas diferentes.

Cada instalação do Gentoo adere a um certo profile (perfil) que contém, entre outras informações, a lista de pacotes que são necessários para que um sistema funcione normalmente.

Pacotes bloqueados

Listagem de código 4.1: Aviso do Portage sobre pacotes bloqueados (com --pretend)

[blocks B     ] mail-mta/ssmtp (is blocking mail-mta/postfix-2.2.2-r1)

Listagem de código 4.2: Aviso do Portage sobre pacotes bloqueados (sem --pretend)

!!! Error: the mail-mta/postfix package conflicts with another package.
!!!        both can't be installed on the same system together.
!!!        Please use 'emerge --pretend' to determine blockers. 

As ebuilds contêm certos campos específicos que informam ao Portage sobre suas dependências. Existem duas dependências possíveis: dependências de construção, declaradas em DEPEND e dependências de execução, declaradas em RDEPEND. Quando uma dessas dependências marca um pacote ou virtual como sendo explicitamente não compatível, ele faz um bloqueio.

Para consertar um bloqueio, você pode escolher não instalar o pacote ou desinstalar o pacote conflituoso primeiro. No exemplo dado, você pode não instalar o postfix ou remover o ssmtp primeiro.

Também é possível que dois pacotes que ainda não foram instalados bloqueiem um ao outro. Neste caso raro, você deve descobrir por que você precisa instalar os dois. Na maior parte dos casos, você pode se satisfazer com um pacote. Se não, por favor relate um bug no Sistema de rastreamento de bugs do Gentoo.

Pacotes mascarados

Listagem de código 4.3: Aviso do Portage sobre pacotes mascarados

!!! all ebuilds that could satisfy "bootsplash" have been masked. 

Listagem de código 4.4: Aviso do Portage sobre pacotes mascarados - motivo

!!! possible candidates are:

- gnome-base/gnome-2.8.0_pre1 (masked by: ~x86 keyword)
- lm-sensors/lm-sensors-2.8.7 (masked by: -sparc keyword)
- sys-libs/glibc-2.3.4.20040808 (masked by: -* keyword)
- dev-util/cvsd-1.0.2 (masked by: missing keyword)
- media-video/ati-gatos-4.3.0 (masked by: package.mask)
- sys-libs/glibc-2.3.2-r11 (masked by: profile)

Quando você quiser instalar um pacote que não está disponível em seu sistema, você receberá este erro de máscara. Você pode tentar instalar uma aplicação diferente que está disponível para seu sistema ou esperar até que o pacote fique disponível. Sempre existe um motivo para um pacote estar mascarado:

  • ~arch keyword significa que a aplicação não foi testada o suficiente para estar no ramo estável. Espere alguns dias ou semanas e tente novamente.
  • -arch keyword ou -* keyword significa que a aplicação não funciona em sua arquitetura. Se você acredita que o pacote funciona preencha um bug em nosso website do bugzilla.
  • missing keyword significa que a aplicação não foi testada na sua arquitetura ainda. Peça ao time de porting de arquiteturas que teste o pacote ou teste para eles e relate sua experiência em nosso website do bugzilla.
  • package.mask significa que o pacote está corrupto, instável ou pior e foi deliberadamente marcado como não usável.
  • profile significa que o pacote não é cabível a seu profile. A aplicação pode quebrar seu sistema se for instalada ou simplesmente não é compatível com o profile que você usa.

Dependências faltando

Listagem de código 4.5: Aviso do Portage sobre dependências faltando

emerge: there are no ebuilds to satisfy ">=sys-devel/gcc-3.4.2-r4".

!!! Problem with ebuild sys-devel/gcc-3.4.2-r2
!!! Possibly a DEPEND/*DEPEND problem. 

A aplicação que você está tentando instalar depende em um outro pacote que não está disponível para seu sistema. Veja no bugzilla se o problema é conhecido, e se não for, por favor relate-o. A menos que você esteja misturando ramos isso não deve acontecer e logo é um bug.

Nomes de ebuild ambíguos

Listagem de código 4.6: Aviso do Portage sobre nomes de ebuild ambíguos

!!! The short ebuild name "aterm" is ambiguous.  Please specify
!!! one of the following fully-qualified ebuild names instead:

    dev-libs/aterm
    x11-terms/aterm

A aplicação que você quer instalar tem um nome que corresponde a mais de um pacote. Você precisa dar a categoria também. O Portage irá informar você sobre as possíveis alternativas a se escolher.

Dependências circulares

Listagem de código 4.7: Aviso do Portage sobre dependências circulares

!!! Error: circular dependencies: 

ebuild / net-print/cups-1.1.15-r2 depends on ebuild / app-text/ghostscript-7.05.3-r1
ebuild / app-text/ghostscript-7.05.3-r1 depends on ebuild / net-print/cups-1.1.15-r2 

Dois (ou mais) pacotes que você quer instalar dependem um do outro e logo não podem ser instalados. Isto é provavelmente um bug na árvore do Portage. Por favor sincronize depois de um tempo e tente novamente. Você também pode ver no bugzilla se o problema é conhecido, e se não for, relatá-lo.

Problema ao baixar arquivos

Listagem de código 4.8: Aviso do Portage sobre problema ao baixar arquivos

!!! Fetch failed for sys-libs/ncurses-5.4-r5, continuing...
(...)
!!! Some fetch errors were encountered.  Please see above for details.

O Portage não conseguiu baixar as fontes para a aplicação dada e tentará continuar com as outras aplicações (se aplicável). Este problema pode ser devido a um servidor que não sincronizou corretamente ou porque a ebuild aponta para um local incorreto. O servidor onde residem as fontes também pode estar desligado por algum motivo.

Tente de novo uma hora depois para ver se o problema ainda persiste.

Proteção de sistema pelo profile

Listagem de código 4.9: Aviso do Portage sobre pacotes protegidos pelo profile

!!! Trying to unmerge package(s) in system profile. 'sys-apps/portage'
!!! This could be damaging to your system.

Você pediu para remover um pacote que é central para o seu sistema. Ele está listado em seu profile como necessário e não deve ser removido de seu sistema.

2. Variáveis de USE

2.a. O que são as opções de USE?

As idéias por trás das opções de USE

Quando você está instalando o Gentoo (ou qualquer outra distribuição, até mesmo sistema operacional) você faz escolhas que dependem do ambiente com que você está trabalhando. Uma configuração para servidores difere de uma configuração de uma estação de trabalho. Uma estação de jogos difere de uma estação de gráficos 3D.

Isso não somente é verdade para os pacotes que você quer instalar, mas também que funções um pacote deve suportar. Se você não precisa de OpenGL, por que se preocupar em instalar o OpenGL e construir suporte para OpenGL na maior parte de seus pacotes? Se você não quer usar o KDE, por que compilar pacotes com suporte a KDE se eles irão funcionar perfeitamente sem suporte a KDE?

Para ajudar os usuários na decisão sobre o que instalar/ativar e o que não, nós quisemos que o usuário especificasse seu ambiente de uma maneira fácil. Isto força o usuário a decidir sobre o que eles realmente querem e facilita o processo para o Portage, nosso sistema de gerenciamento de pacotes, tornando as decisões úteis.

Definição de uma opção de USE

Entre com as opções de USE. Tal opção é uma palavra-chave que junta suporte e informações de dependências com um certo conceito. Se você define uma certa opção de USE, o Portage saberá que você quer suporte para a palavra-chave escolhida. Claro que isso também altera as informações de dependências de um pacote.

Vamos ver um exemplo específico: a palavra-chave kde. Se você não tiver esta palavra-chave na sua variável de USE, todos pacotes que tem suporte opcional ao KDE serão compilados sem suporte ao KDE. Todos pacotes que tem uma dependência opcional do KDE serão instalados sem instalar as bibliotecas do KDE (como dependência). Se você definiu a palavra-chave kde, então estes pacotes serão compilados com suporte a KDE, e as bibliotecas do KDE serão instaladas como dependência.

Ao definir as palavras-chave corretamente você recebe um sistema feito especificamente para suas necessidades.

Que opções de USE existem?

Existem dois tipos de opções de USE: variáveis globais e locais.

  • Uma opção de USE global é usada por vários pacotes, pelo sistema inteiro. Isto é o que a maior parte das pessoas entende como opções de USE.
  • Uma opção de USE local é usada só por um único pacote para decisões específicas a ele.

Uma lista das opções de USE disponíveis globalmente pode ser encontrada online ou localmente em /usr/portage/profiles/use.desc.

Uma lista de opções de USE locais pode ser encontrada localmente em /usr/portage/profiles/use.local.desc.

2.b. Usando as opções de USE

Declarando opções de USE permanentes

Esperando ter convencido você da importância das opções de USE, nós iremos informá-lo sobre como declarar as opções de USE.

Como mencionado anteriormente, todas opções de USE são declaradas dentro da variável de USE. Para facilitar ao usuários a busca e escolha de opções de USE, nós já fornecemos uma configuração de USE padrão. Esta configuração é uma coleção de opções de USE que achamos ser usada comumente pelos usuários do Gentoo. A configuração padrão é declarada na parte dos arquivos make.defaults de seu profile (perfil).

O profile que seu sistema escuta é apontado pelo link simbólico /etc/make.profile. Cada profile funciona em cima de outro profile maior, e o resultado final é a soma de todos profiles. O profile de topo é o profile base (/usr/portage/profiles/base).

Vamos ver a configuração padrão para o profile 2004.3:

Listagem de código 2.1: Variável de USE cumulativa para o profile 2004.3

(Este exemplo é a soma de todos ajustes em base, default-linux,
 default-linux/x86 e default-linux/x86/2004.3)
USE="x86 oss apm arts avi berkdb bitmap-fonts crypt cups encode fortran f77
     foomaticdb gdbm gif gpm gtk imlib jpeg kde gnome libg++ libwww mad
     mikmod motif mpeg ncurses nls oggvorbis opengl pam pdflib png python qt
     quicktime readline sdl spell ssl svga tcpd truetype X xml2 xmms xv zlib"

Como você pode ver, esta variável já contém várias palavras-chave. Não altere nada no arquivo make.defaults para ajustar as variáveis de USE às suas necessidades: mudanças nesse arquivo serão desfeitas quando você atualizar o Portage!

Para mudar este ajuste padrão, você precisa adicionar ou remover palavras-chave à variável USE. Isto é feito globalmente ao definir a variável USE no arquivo /etc/make.conf. Nesta variável você pode adicionar opções de USE adicionais de que você precisa, ou remover as opções de USE que você não quer. Para remover opções, coloque a palavra-chave prefixada do sinal de menos ("-").

Por exemplo, para remover suporte para KDE e QT e adicionar suporte para ldap, as seguintes opções de USE podem ser definidas no /etc/make.conf:

Listagem de código 2.2: Um exemplo de configuração de USE no /etc/make.conf

USE="-kde -qt ldap"

Declarando opções de USE para pacotes individuais

Às vezes você quer declarar uma opção de USE para umas (ou algumas) aplicações, mas não para todo o sistema. Para fazê-lo, você precisará criar o diretório /etc/portage (se ainda não existir) e editar o arquivo /etc/portage/package.use.

Por exemplo, se você não quiser suporte de berkdb global, mas você quer ele para o mysql, você deve adicionar:

Listagem de código 2.3: exemplo de /etc/portage/package.use

dev-db/mysql berkdb

Você pode, lógico, também desligar opções de USE para uma certa aplicação. Por exemplo, se você não quer suporte de java no PHP:

Listagem de código 2.4: segundo exemplo de /etc/portage/package.use

dev-php/php -java

Declarando opções de USE temporárias

Às vezes você quer que um certa opção de USE só uma vez. Ao invés de editar o /etc/make.conf duas vezes (para fazer e desfazer mudanças à variável de USE) você pode simplesmente declarar a variável de USE como uma variável de ambiente. Lembre-se disso, quando você fizer emerge novamente ou atualizar a aplicação (tanto explicitamente como parte de uma atualização de sistema) suas mudanças serão perdidas!

Como um exemplo nós iremos remover o java temporariamente das opções de USE durante a instalação do mozilla.

Listagem de código 2.5: Usando a USE como variável de ambiente

# USE="-java" emerge mozilla

Opções de USE automáticas

Depois de certos pacotes terem sido instalados, opções adicionais de USE serão automaticamente ativadas para você se você não desativá-las explicitamente. Para ver a lista de pacotes que ligam opções de USE automáticas, por favor veja os arquivos /etc/make.profile/use.defaults e use.defaults dos profiles pais.

Listagem de código 2.6: Um trecho de /etc/make.profile/use.defaults

gnome           gnome-base/gnome
gtk             x11-libs/gtk+
qt              x11-libs/qt
kde             kde-base/kdebase
motif           x11-libs/openmotif

Precedência

Lógico que há uma certa precedência sobre qual configuração tem prioridade sobre a variável de USE. Você não deve querer declarar USE="-java" só para descobrir que java é ainda usado devido a um ajuste que tem maior prioridade. A precedência para o ajuste de USE é, em ordem de prioridade (o primeiro tem menor prioridade):

  1. Configurações padrões declarada nos arquivos do make.defaults, parte de seu profile
  2. Configurações de USE herdadas se um pacote do profile use.defaults for instalado
  3. Configurações de USE definidas pelo usuário em /etc/make.conf
  4. Configurações de USE definidas pelo usuário em /etc/portage/package.use
  5. Configurações definidas pelo usuário como uma variável de ambiente

Para ver a configuração de USE final como o Portage enxerga ela, rode emerge --info. Isto irá listar todas variáveis relevantes (incluindo a variável de USE) com o conteúdo usado pelo Portage.

Listagem de código 2.7: Rodando emerge --info

# emerge info

Adaptando seu sistema inteiro a novas opções de USE

Se você alterou suas opções de USE e quiser atualizar seu sistema inteiro para que ele use as novas flags de USE, use a opção --newuse do emerge:

Listagem de código 2.8: Reconstruindo seu sistema inteiro

# emerge --update --deep --newuse world

A seguir, rode o depclean do Portage para remover quaisquer dependências condicionais que foram instaladas em seu sistema "antigo", mas que viraram obsoletas com as novas opções de USE.

Aviso: Rodar emerge --depclean é uma operação perigosa e deve ser feita com cuidado. Verifique a lista de pacotes "obsoletos" dada para ter certeza que nenhum pacote de que você precisa seja removido. No exemplo seguinte nós adicionamos a opção -p para que o depclean só liste os pacotes sem removê-los.

Listagem de código 2.9: Removendo pacotes obsoletos

# emerge -p --depclean

Quando o depclean terminar, rode revdep-rebuild para reconstruir as aplicações que são linkadas dinamicamente contra objetos compartilhados fornecidos por pacotes possivelmente removidos. O revdep-rebuild é parte do pacote gentoolkit; não se esqueça de fazer emerge dele primeiro:

Listagem de código 2.10: Rodando revdep-rebuild

# revdep-rebuild

Quando tudo isso for feito, seu sistema estará usando as novas opções de USE.

2.c. Opções de USE específicas a pacotes

Vendo opções de USE disponíveis

Vamos tomar o exemplo do mozilla: que opções de USE ele escuta? Para descobrir, nós usamos o emerge com as opções --pretend e --verbose:

Listagem de código 3.1: Vendo todas opções de USE

# emerge --pretend --verbose mozilla
These are the packages that I would merge, in order:

Calculating dependencies ...done!
[ebuild   R   ] www-client/mozilla-1.7.12-r2  USE="crypt gnome java mozsvg ssl
truetype xprint -debug -ipv6 -ldap -mozcalendar -mozdevelop -moznocompose
-moznoirc -moznomail -moznoxft -postgres -xinerama" 0 kB

O emerge não é a única ferramenta para esta tarefa. Na verdade, temos uma ferramenta dedicada a informações de pacotes chamada equery que reside no pacote gentoolkit. Primeiro, instale o gentoolkit:

Listagem de código 3.2: Instalando o gentoolkit

# emerge gentoolkit

Agora rode equery com o argumento uses para ver as opções de USE de um certo pacote. Por exemplo, para o pacote gnumeric:

Listagem de código 3.3: Usando o equery para ver opções de USE

# equery uses gnumeric
[ Colour Code : set unset ]
[ Legend      : (U) Col 1 - Current USE flags        ]
[             : (I) Col 2 - Installed With USE flags ]

 U I [ Found these USE variables in : app-office/gnumeric-1.2.0 ]
 - - libgda  : Adds GNU Data Access (CORBA wrapper) support for gnumeric
 - - gnomedb : unknown
 + + python  : Adds support/bindings for the Python language
 + + bonobo  : Adds support for gnome-base/bonobo (Gnome CORBA interfaces)

3. Funcionalidades do Portage

3.a. Funcionalidades do Portage

O Portage tem várias funções adicionais que tornam sua experiência com o Gentoo ainda melhor. Várias dessas funcionalidades dependem de algumas ferramentas de software que melhoram performance, confiabilidade, segurança ...

Para ligar ou desligar algumas funcionalidades do Portage você precisa editar a variável FEATURES do arquivo /etc/make.conf, que contém as várias palavras-chave de funcionalidades, separadas por espaços em branco. Em vários casos você também precisará instalar uma ferramenta adicional de qual a funcionalidade depende.

Nem todas as funções que o Portage suporta estão listadas aqui. Para uma lista completa, consulte a página de manual do make.conf:

Listagem de código 1.1: Consultando a página de manual do make.conf

$ man make.conf

Para descobrir o que está ajustado por padrão em FEATURES, rode emerge --info e procure pela variável FEATURES ou pegue-a com o grep:

Listagem de código 1.2: Descobrindo o que já está na variável FEATURES

$ emerge --info | grep FEATURES

3.b. Compilação distribuída

Usando distcc

O distcc é um programa usado para distribuir compilações através de várias máquinas, não necessariamente idênticas, em uma rede. O cliente de distcc envia toda informação necessária para os servidores de distcc (rodando distccd) para que eles possam compilar pedaços de código fonte para o cliente. O resultado final é um tempo de compilação menor.

Você pode encontrar mais informações sobre o distcc (e como fazer com que funcione com o Gentoo em nossa Documentação de distcc do Gentoo.

Instalando o distcc

O distcc vem com um monitor gráfico para controlar tarefas que o seu computador está enviando para compilação. Se você usa Gnome, coloque 'gnome' em sua variável de USE. Senão, se você não usa gnome e ainda quiser ter o monitor, você deve colocar 'gtk' na variável de USE.

Listagem de código 2.1: Instalando o distcc

# emerge distcc

Ativando suporte no Portage

Adicione distcc à variável FEATURES dentro de /etc/make.conf. A seguir, edite a variável MAKEOPTS de acordo com sua preferência. Um guia padrão é colocar "-jX" onde X é o número de CPUs rodando distccd (incluindo o host atual) mais um, mas você pode ter resultados melhores com outros números.

Agora rode distcc-config e digite a lista de servidores de distcc disponíveis. Por simples exemplo, presumimos que os servidores de DistCC disponíveis são 192.168.1.102 (o host atual), 192.168.1.103 e 192.168.1.104 (dois hosts remotos):

Listagem de código 2.2: Configurando o distcc para usar os três servidores de distcc disponíveis

# distcc-config --set-hosts "192.168.1.102 192.168.1.103 192.168.1.104"

Não se esqueça de rodar o daemon de distccd também:

Listagem de código 2.3: Iniciando os daemons de distccd

# rc-update add distccd default
# /etc/init.d/distccd start

3.c. Fazendo cachê da compilação

Sobre o ccache

O ccache é um cachê para compilações rápidas. Quando você compila um programa, ele fará cachê de resultados intermediários para que, quando quer que você recompilar o mesmo programa, o tempo de compilação seja drasticamente reduzido. Em compilações comuns isso pode resultar em compilações de 5 a 10 vezes mais rápidas.

Se você estiver interessado no funcionamento do ccache, por favor visite a homepage do ccache.

Instalando o ccache

Para instalar o ccache, rode emerge ccache:

Listagem de código 3.1: Instalando o ccache

# emerge ccache

Ativando suporte no Portage

Abra o /etc/make.conf e coloque ccache na variável FEATURES. A seguir, adicione a variável chamada CCACHE_SIZE e ajuste-a para "2G":

Listagem de código 3.2: Editando o CCACHE_SIZE no /etc/make.conf

CCACHE_SIZE="2G"

Para ver se o ccache está funcionando, peça ao ccache que dê suas estatísticas. Já que o Portage usa um diretório de home de ccache diferente, você também precisa configurar a variável CCACHE_DIR:

Listagem de código 3.3: Vendo estatísticas do ccache

# CCACHE_DIR="/var/tmp/ccache" ccache -s

O local /var/tmp/ccache é o diretório home de ccache padrão do Portage; se você quiser alterar este ajuste, você pode configurar a variável CCACHE_DIR no /etc/make.conf.

No entanto, se você rodar ccache, ele irá usar o local padrão ${HOME}/.ccache, motivo pelo qual você precisou configurar a variável CCACHE_DIR na hora de pedir as estatísticas de ccache (do Portage).

Usando o ccache em compilações alheias ao Portage

Se você quiser usar o ccache para compilações alheias ao Portage, adicione /usr/lib/ccache/bin ao começo de sua variável PATH (antes de /usr/bin). Isto pode ser feito editando /etc/env.d/00basic, que é o primeiro arquivo ambiental que define a variável PATH:

Listagem de código 3.4: Editando /etc/env.d/00basic

PATH="/usr/lib/ccache/bin:/opt/bin"

3.d. Suporte a pacotes binários

Criando pacotes pré-construídos

O Portage suporta a instalação de pacotes pré-construídos. Embora o Gentoo não forneça pacotes construídos (fora os snapshots de GRP), pode-se tornar o Portage totalmente ciente de pacotes pré-construídos.

Para criar um pacote pré-construído você pode usar o comando quickpkg se o pacote já estiver instalado em seu sistema, ou emerge com as opções --buildpkg ou --buildpkgonly.

Se você quiser que o Portage crie pacotes pré-construídos de cada pacote que você instalar, adicione buildpkg à variável FEATURES.

Suporte estendido para criar estágios de pacotes pré-construídos pode ser obtido com o catalyst. Para mais informações sobre o catalyst por favor leia o Manual de Referência do Catalyst e o Guia de perguntas freqüentes do Catalyst.

Instalando pacotes pré-construídos

Embora o Gentoo não forneça um, você pode criar um repositório central onde você grava pacotes pré-construídos. Se você quiser usar este repositório, você precisa tornar o Portage ciente dele fazendo com que a variável PORTAGE_BINHOST aponte para ele. Por exemplo, se os pacotes pré-construídos estiverem em ftp://buildhost/gentoo:

Listagem de código 4.1: Configurando PORTAGE_BINHOST no /etc/make.conf

PORTAGE_BINHOST="ftp://buildhost/gentoo"

Quando você quiser instalar um pacote pré-construído, adicione a opção --getbinpkg ao comando emerge junto com a opção --usepkg. A primeira opção diz ao emerge para baixar os pacotes pré-construídos do servidor definido anteriormente, enquanto a segunda pede ao emerge que tente instalar o pacote pré-construído primeiro antes de baixar as fontes e compilá-las.

Por exemplo, para instalar o gnumeric com pacotes pré-construídos:

Listagem de código 4.2: Instalando um pacote pré-construído do gnumeric

# emerge --usepkg --getbinpkg gnumeric

Mais informações sobre as opções dos pacotes pré-construídos do emerge podem ser encontradas na página de manual do emerge:

Listagem de código 4.3: Lendo a página de manual do emerge

$ man emerge

4. Scripts de inicialização

4.a. Runlevels

Carregando seu sistema

Quando você carregar seu sistema, você perceberá textos passarem. Se você prestar atenção, você verá que o texto é o mesmo toda vez que você reinicia seu sistema. A seqüência dessas ações é chamada de seqüência de início e é (mais ou menos) definida estaticamente.

Primeiro, seu gerenciador de inicialização irá carregar a imagem de kernel que você tem definida na configuração do gerenciador na memória, depois falando para a CPU rodar o kernel. Quando o kernel é carregado e rodado, ele inicializa todas estruturas e tarefas específicas do kernel e roda o processo de init.

O processo então verifica que todos sistemas de arquivos (definidos em /etc/fstab) estão montados e prontos para serem usados. Então ele executa vários scripts localizados em /etc/init.d, o que inicia os serviços que você precisa para ter um sistema carregado com sucesso.

Finalmente, quando todos scripts são executados, o init ativa os terminais (na maior parte só os consoles virtuais que estão escondidos através de Alt-F1, Alt-F2, etc.) chamando um processo especial chamado agetty. Este processo irá então certificar-se que você poder se logar nos terminais rodando login.

Scripts de init

O init não roda os scripts em /etc/init.d aleatoriamente. Mais ainda, ele não roda todos scripts em /etc/init.d, só os que são ditos para ele executar. Ele decide que scripts executar olhando em /etc/runlevels.

Primeiro, o init roda todos scripts de /etc/init.d que têm links simbólicos dentro de /etc/runlevels/boot. Normalmente, ele irá iniciar os scripts em ordem alfabética, mas alguns scripts tem informações sobre dependências neles, avisando o sistema de que outro script deve ser rodado antes dele poder ser iniciado.

Quando todos scripts de referência de /etc/runlevels/boot são executados, o init continua carregando os scripts que têm um link simbólico para eles em /etc/runlevels/default. Novamente, ele usa a ordem alfabética para decidir que script rodar primeiro, a menos que um script tenha informações de dependências nele, caso em que a ordem é mudada para a fornecer uma seqüência de inicialização válida.

Como o init funciona

Claro que o init decide tudo sozinho. Ele precisa de um arquivo de configuração que especifica que ações devem ser tomadas. Este arquivo de configuração chama-se /etc/inittab.

Se você lembra da seqüência de inicialização que acabamos de descrever, você irá lembrar-se que a primeira ação do init é montar os sistemas de arquivos. Isto é definido na seguinte linha do /etc/inittab:

Listagem de código 1.1: A linha de inicialização de sistema em /etc/inittab

si::sysinit:/sbin/rc sysinit

A linha diz para o init que ele deve rodar /sbin/rc sysinit para inicializar o sistema. O script /sbin/rc toma conta da inicialização, o que permite que você diga que o init não faz tanto -- ele delega tarefas de inicialização do sistema para outro processo.

Segundo, o init executou todos scripts que tinham links simbólicos em /etc/runlevels/boot. Isto é definido na seguinte linha:

Listagem de código 1.2: A inicialização do sistema, continuado

rc::bootwait:/sbin/rc boot

Novamente o script rc faz as tarefas necessárias. Note que a opção dada para o rc (boot) é a mesma que o subdiretório de /etc/runlevels que é usado.

Neste ponto o init verifica seu arquivo de configuração para ver que runlevel ele deve rodar. Para decidir isso, ele lê a seguinte linha do /etc/inittab:

Listagem de código 1.3: A linha initdefault

id:3:initdefault:

Neste caso (que é o que a maioria dos usuários do Gentoo usam), o id do runlevel é 3. Usando essa informação, o init verifica o que ele deverodar para iniciar o runlevel 3:

Listagem de código 1.4: As definições de runlevel

l0:0:wait:/sbin/rc shutdown
l1:S1:wait:/sbin/rc single
l2:2:wait:/sbin/rc nonetwork
l3:3:wait:/sbin/rc default
l4:4:wait:/sbin/rc default
l5:5:wait:/sbin/rc default
l6:6:wait:/sbin/rc reboot

A linha que define o level 3, novamente, usa o script rc para iniciar os serviços (agora com o argumento default). Novamente note que o argumento do rc é o mesmo que o subdiretório de /etc/runlevels.

Quando o rc termina, o init decide que consoles virtuais ele deve ativar e que comandos precisam ser rodados em cada console:

Listagem de código 1.5: A definição de consoles virtuais

c1:12345:respawn:/sbin/agetty 38400 tty1 linux
c2:12345:respawn:/sbin/agetty 38400 tty2 linux
c3:12345:respawn:/sbin/agetty 38400 tty3 linux
c4:12345:respawn:/sbin/agetty 38400 tty4 linux
c5:12345:respawn:/sbin/agetty 38400 tty5 linux
c6:12345:respawn:/sbin/agetty 38400 tty6 linux

O que é um runlevel?

Você viu que o init usa um esquema de numeração para decidir que runlevel ele deve ativar. Um runlevel é um estado em que seu sistema está rodando e contém uma coleção de scripts (scripts de runlevel ou initscripts) que devem ser executados quando você entra ou sai de um runlevel.

No Gentoo, existem sete runlevels definidos: três runlevels internos, e quatro definidos pelo usuário. Os runlevels internos são chamados de sysinit, shutdown e reboot e fazem exatamente o que seus nomes implicam: iniciar o sistema, desligar o sistema e reiniciar o sistema.

Os runlevels definidos por usuário são aqueles com um subdiretório /etc/runlevels acompanhante: boot, default, nonetwork e single. O runlevel boot inicia todos serviços necessários ao sistema que os outros runlevels usam. Os três runlevels restantes diferem em que serviços eles iniciam: O default é usado para operações rotineiras, nonetwork é usado em caso nenhuma conexão de rede é necessária, e single é usado para quando você necessita consertar o sistema.

Trabalhando com scripts de init

Os scripts que o processo rc chama podem ser executados com os argumentos start, stop, restart, pause, zap, status, ineed, iuse, needsme, usesme ou broken.

Para iniciar, parar ou reiniciar um serviço (e todos serviços dependentes), start, stop e restart devem ser usados:

Listagem de código 1.6: Iniciando o postfix

# /etc/init.d/postfix start

Nota: Só os serviços que precisam (need) do serviço são parados ou reiniciados. Os outros serviços dependentes (aqueles que usam (use) o serviço mas não precisam dele) não são tocados.

Se você quiser parar um serviço, mas não os serviços que dependem dele, você pode usar o argumento pause:

Listagem de código 1.7: Parando o postfix mas mantendo os serviços dependentes rodando

# /etc/init.d/postfix pause

Se você quiser ver que status um serviço tem (iniciado, parado, pausado, ...) você pode usar o argumento status:

Listagem de código 1.8: Informações de status do postfix

# /etc/init.d/postfix status

Se as informações de status disserem que o serviço está rodando, mas você sabe que não, você pode voltar o status da informação para "parado" com o argumento zap:

Listagem de código 1.9: Voltando as informações de status para o postfix

# /etc/init.d/postfix zap

Para também pedir que dependências um serviço tem, você pode usar iuse ou ineed. Com ineed você pode ver que serviços são realmente necessários para o funcionamento correto do serviço. iuse por outro lado mostra que serviços são usados pelo serviço, mas não são necessários para o funcionamento correto.

Listagem de código 1.10: Pedindo uma lista de todos serviços necessários do qual o postfix depende

# /etc/init.d/postfix ineed

De maneira parecida, você pode perguntar que serviços necessitam do serviço (needsme) ou podem usá-lo (usesme):

Listagem de código 1.11: Pedindo uma lista de todos serviços que precisam do postfix

# /etc/init.d/postfix needsme

Finalmente, você pode perguntar que dependências o serviço precisa que estão faltando:

Listagem de código 1.12: Pedindo uma lista de dependências que estão faltando para o postfix

# /etc/init.d/postfix broken

4.b. Trabalhando com o rc-update

O que é o rc-update?

O sistema de inicialização do Gentoo usa uma árvore de dependências para decidir que serviço precisa ser iniciado primeiro. Como isso é uma tarefa tediosa e não poderíamos esperar que nossos usuários tivessem de fazê-lo manualmente, nós criamos ferramentas que facilitam a administração dos runlevels e scripts de init.

Com o rc-update você pode adicionar ou remover scripts de init de um runlevel. A ferramenta rc-update irá então pedir automaticamente para o script depscan.sh reconstruir a árvore de dependências.

Adicionando e removendo serviços

Você já adicionou os scripts de init ao runlevel "default" durante a instalação do Gentoo. Naquela hora você talvez não tinha idéia do que "default" era, mas agora você deve ter. O script rc-update necessita de um segundo argumento que define a ação: add (adicionar), del (remover) ou show (mostrar).

Para adicionar ou remover um script de init, apenas dê ao rc-update o argumento add (adicionar) ou del (remover), seguido pelo script de init e runlevel. Por exemplo:

Listagem de código 2.1: Removendo o postfix do runlevel default

# rc-update del postfix default

O comando rc-update show irá mostrar todos scripts de init disponíveis e listar em que runlevels eles executam:

Listagem de código 2.2: Recebendo informações dos scripts de init

# rc-update show

4.c. Configurando serviços

Por que a necessidade de configuração adicional?

Os scripts de init podem ser bem complexos. Portanto, não é realmente desejável fazer com que os usuários editem o script de init diretamente, o que faria a tarefa mais capaz de erros. No entanto, é importante poder configurar tal serviço. Por exemplo, você pode querer dar mais opções ao serviço.

Um segundo motivo para ter a configuração fora do script de init é poder atualizar os scripts de init sem medo de que mudanças na configuração sejam desfeitas.

O diretório /etc/conf.d

O Gentoo fornece um jeito fácil de configurar um serviço: cada script de init que pode ser configurado em um arquivo em /etc/conf.d. Por exemplo, o script de init do apache2 (chamado de /etc/init.d/apache2) tem um arquivo de configuração chamado de /etc/conf.d/apache2, que pode conter as opções que você quer dar ao servidor do Apache 2 quando ele é iniciado:

Listagem de código 3.1: Variável definida em /etc/conf.d/apache2

APACHE2_OPTS="-D PHP4"

Um arquivo de configuração contém variáveis e somente variáveis (como o /etc/make.conf), tornando fácil a configuração de serviços. Também permite a nos dar mais informações sobre as variáveis (como comentários).

4.d. Escrevendo scripts de init

O que eu tenho que fazer?

Não, escrever um script de init não é normalmente necessário já que o Gentoo fornece scripts de init prontos para todos os serviços fornecidos. No entanto, talvez você queira instalar um serviço sem usar o Portage, casto tal em que você provavelmente vai ter que criar um script de init.

Não use o script de init fornecido pelo serviço se ele não for explicitamente escrito para o Gentoo: os scripts de init do Gentoo não são compatíveis com os scripts de init usados por outras distribuições!

Arranjo

O arranjo básico de um script de init é mostrado abaixo.

Listagem de código 4.1: Arranjo básico de um script de init

#!/sbin/runscript

depend() {
  (Informações de dependências)
}

start() {
  (Comandos necessários para iniciar o serviço)
}

stop() {
  (Comandos necessários para parar o serviço)
}

restart() {
  (Comandos necessários para reiniciar o serviço)
}

Qualquer script de init precisa de uma função start() definida. Todas outras seções são opcionais.

Dependências

Existem duas dependências que você pode definir: use e need. Como nós já mencionamos, a dependência need é mais rígida que a dependência use. Após o tipo de dependência você digitar o serviço de que você depende, ou a dependência virtual.

Uma dependência virtual é uma dependência que um serviço fornece, mas não é somente fornecido por aquele serviço. Seu script de init pode depender de um logger de sistema, mas existem muitos loggers de sistema disponíveis (metalogd, syslog-ng, sysklogd, ...). Como você não pode precisar (need) de cada um deles (nenhum sistema normal tem todos esses loggers de sistemas instalados e rodando) nós nos certificamos que todos esses serviços fornecem (provide) uma dependência virtual.

Vamos ver as informações de dependência do serviço do postfix.

Listagem de código 4.2: Informações de dependência do postfix

depend() {
  need net
  use logger dns
  provide mta
}

Como você pode ver, o serviço do postfix:

  • precisa duma dependência (virtual) net (que é fornecida, por exemplo, por /etc/init.d/net.eth0)
  • usa uma dependência (virtual) logger (que é fornecida, por exemplo, por /etc/init.d/syslog-ng)
  • usa uma dependência (virtual) dns (que é fornecida, por exemplo, por /etc/init.d/named)
  • fornece a dependência (virtual) mta (que é comum para todos servidores de e-mail)

Controlando a ordem

Em alguns casos você pode não precisar de um serviço, mas que querer que seu serviço seja iniciado antes (before) (ou depois, after) de outro serviço se ele estiver disponível no sistema (note a condição - não é mais uma dependência) e rodar no mesmo runlevel (note a condição - só serviços do mesmo runlevel estão envolvidos). Você pode fornecer esta informação usando os ajustes before e after.

Como um exemplo nós vemos as configurações do serviço portmap:

Listagem de código 4.3: A função depend() no serviço portmap

depend() {
  need net
  before inetd
  before xinetd
}

Você também pode usar "*" para englobar todos serviços do mesmo runlevel, embora isso não seja recomendável.

Listagem de código 4.4: Rodando um script de init como o primeiro script do runlevel

depend() {
  before *
}

Funções padrão

Próximo da função do depend(),você também precisa definir a função start(). Esta contém todos comandos necessários para iniciar seu serviço. É recomendável usar as funções ebegin e eend para informar o usuário sobre o que está acontecendo:

Listagem de código 4.5: Exemplo de função start()

start() {
  ebegin "Iniciando meu_serviço"
  start-stop-daemon --start --quiet --exec /caminho/para/meu_serviço
  eend $?
}

Se você precisa de mais exemplos da função start(), por favor leia o código fonte de scritps de init disponíveis no diretório /etc/init.d. Para o start-stop-daemon, existe uma excelente página de man disponível se você precisar de mais informações:

Listagem de código 4.6: Lendo a página de man para o start-stop-daemon

# man start-stop-daemon

Outras funções que você pode definir são: stop() e restart(). Você não é obrigado a definir essas funções! Nosso sistema de init é inteligente o suficiente para preencher essas funções sozinho se você usar o start-stop-daemon.

A sintaxe do script de init do Gentoo é baseada em Bourne Again Shell (bash), então você é livre para usar construções compatíveis com bash dentro de seu script de init.

Adicionando opções personalizadas

Se você quiser que seu script de init suporte mais opções que as que você já encontrou, você deve adicionar a opção à variável opts variable, e criar uma função com o mesmo nome da opção. Por exemplo, para suportar uma opção chamada restartdelay:

Listagem de código 4.7: Suportando a opção restartdelay

opts="${opts} restartdelay"

restartdelay() {
  stop
  sleep 3    # Esperar 3 segundos antes de começar de novo
  start
}

Variáveis de configuração de serviço

Você não precisa fazer nada para suportar um arquivo de configuração em /etc/conf.d: se seu script de init é executado, os seguintes arquivos são automaticamente lidos (isto é, as variáveis estão disponíveis para uso):

  • /etc/conf.d/<seu script de init>
  • /etc/conf.d/basic
  • /etc/rc.conf

Também, se seu script de init fornece uma dependência virtual (como net), o arquivo associado com aquela dependência (como /etc/conf.d/net) será lido também.

4.e. Mudando o comportamento do runlevel

Quem pode tirar proveito disso?

Muitos usuários de laptop conhecem a situação: em casa precisam iniciar o net.eth0, enquanto você não quer iniciar o net.eth0 quando você está fora (já que não há rede disponível). Como o Gentoo você pode mudar o comportamento do runlevel de acordo com sua vontade.

Por exemplo você pode criar um segundo runlevel "default" que você pode iniciar que tem scripts de init associados. Você pode então selecionar na hora da inicialização que runlevel default você quer usar.

Usando o softlevel

Antes de tudo, criamos o diretório runlevel para o segundo runlevel "default". Como um exemplo, nós criamos o runlevel offline:

Listagem de código 5.1: Criando um diretório de runlevel

# mkdir /etc/runlevels/offline

Adicione os scripts de init aos runlevels recentemente criados. Por exemplo, se você quer ter uma cópia exata de seu runlevel default atual sem o net.eth0:

Listagem de código 5.2: Adicionando os scripts de init necessários

(Copie todos serviços do runlevel default para o runlevel offline)
# cd /etc/runlevels/default
# for service in *; do rc-update add $service offline; done
(Remova serviços não desejados do runlevel offline)
# rc-update del net.eth0 offline
(Mostrar serviços ativos para o runlevel offline)
# rc-update show offline
(Exemplo parcial de saída)
               acpid | offline
          domainname | offline
               local | offline
            net.eth0 |

Agora edite sua configuração de gerenciador de inicialização e adicione uma entrada para o runlevel offline. Por exemplo, no /boot/grub/grub.conf:

Listagem de código 5.3: Adicionando uma entrada para o runlevel offline

title Gentoo Linux uso offline
  root (hd0,0)
  kernel (hd0,0)/kernel-2.4.25 root=/dev/hda3 softlevel=offline

Pronto, está tudo configurado. Se você iniciar seu sistema e selecionar a nova entrada na inicialização, o runlevel offline será usado no lugar do default.

Usando o bootlevel

Usar o bootlevel é completamente análogo ao softlevel. A única diferença aqui é que você define um segundo runlevel de "boot" ao invés de um segundo runlevel "default".

5. Variáveis de ambiente

5.a. Variáveis de ambiente?

O que são

Uma variável de ambiente é um objeto nomeado que contém informações usadas por um ou mais aplicativos. Muitos usuários (especialmente os novos no Linux) acham isso um pouco estranho e inútil. Mas isso é errado: as variáveis de ambiente permitem modificar a configuração de um ou mais aplicativos facilmente.

Exemplos importantes

A tabela a seguir lista diversas variáveis usadas por um sistema Linux e descreve seu uso. Valores de exemplo são apresentados após a tabela.

Variável Descrição
PATH Esta variável contém uma lista de diretórios separados por dois-pontos nos quais o seu sistema procurará arquivos executáveis. Se você entrar com o nome de um executável (como por exemplo ls, rc-update ou emerge), mas esse executável não estiver localizado num diretório listado, o seu sistema não o executará (a menos que você entre o caminho completo no comando, como /bin/ls).
ROOTPATH Esta variável tem a mesma função de PATH, porém só lista os diretórios que devem ser verificados quando o superusuário digitar um comando.
LDPATH Esta variável contém uma lista de diretórios separados por dois-pontos nos quais o linkador dinâmico procura bibliotecas.
MANPATH Esta variável contém uma lista de diretórios separados por dois-pontos nos quais o comando man deve procurar as páginas de manual.
INFODIR Esta variável contém uma lista de diretórios separados por dois-pontos nos quais o comando info procura as páginas de info.
PAGER Esta variável contém o caminho para o programa usado para listar os conteúdos dos arquivos (como less ou more, por exemplo).
EDITOR Esta variável contém o caminho para o programa usado para modificar o conteúdo de arquivos (como nano ou vi).
KDEDIRS Esta variável contém uma lista de diretórios separados por dois-pontos que contém material específico do KDE.
CLASSPATH Esta variável contém uma lista de diretórios separados por dois-pontos que contêm as classes de Java.
CONFIG_PROTECT Esta variável contém uma lista delimitada por espaçosde diretórios que devem ser protegidos pelo Portage durante atualizações.
CONFIG_PROTECT_MASK Esta variável contém uma lista de diretórios separados por espaços que devem ser protegidos pelo Portage durante as atualizações.

Abaixo você encontra um exemplo de definição de todas essas variáveis:

Listagem de código 1.1: Exemplos de definições

PATH="/bin:/usr/bin:/usr/local/bin:/opt/bin:/usr/games/bin"
ROOTPATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin"
LDPATH="/lib:/usr/lib:/usr/local/lib:/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3"
MANPATH="/usr/share/man:/usr/local/share/man"
INFODIR="/usr/share/info:/usr/local/share/info"
PAGER="/usr/bin/less"
EDITOR="/usr/bin/vim"
KDEDIRS="/usr"
CLASSPATH="/opt/blackdown-jre-1.4.1/lib/rt.jar:."
CONFIG_PROTECT="/usr/X11R6/lib/X11/xkb /opt/tomcat/conf \
                /usr/kde/3.1/share/config /usr/share/texmf/tex/generic/config/ \
                /usr/share/texmf/tex/platex/config/ /usr/share/config"
CONFIG_PROTECT_MASK="/etc/gconf

5.b. Definindo variáveis globalmente

O diretório /etc/env.d

Para centralizar as definições dessas variáveis, o Gentoo introduziu o diretório /etc/env.d. Dentro deste diretório você encontrará diversos arquivos, como por exemplo 00basic, 05gcc, etc... que contêm as variáveis necessárias para o aplicativo mencionado no nome.

Por exemplo, quando você instalou o gcc, um arquivo chamado 05gcc foi criado pelo ebuild, contendo as definições das seguintes variáveis:

Listagem de código 2.1: /etc/env.d/05gcc

PATH="/usr/i686-pc-linux-gnu/gcc-bin/3.2"
ROOTPATH="/usr/i686-pc-linux-gnu/gcc-bin/3.2"
MANPATH="/usr/share/gcc-data/i686-pc-linux-gnu/3.2/man"
INFOPATH="/usr/share/gcc-data/i686-pc-linux-gnu/3.2/info"
CC="gcc"
CXX="g++"
LDPATH="/usr/lib/gcc-lib/i686-pc-linux-gnu/3.2.3"

Outras distribuições dizem para você alterar ou adicionar essas variáveis de ambiente em /etc/profile ou outros locais. O Gentoo, por outro lado, torna fácil para você (e para o Portage) manter e gerenciar as variáveis de ambiente sem ter que prestar atenção aos inúmeros arquivos que podem contê-las.

Por exemplo, quando o gcc é atualizado, o arquivo /etc/env.d/05gcc também é atualizado sem precisar de interação com o usuário.

Isto beneficia não só o Portage, mas você também, como usuário. Eventualmente pode ser pedido a você que determine uma certa variável de ambiente de sistema. Como exemplo, vejamos a variável http_proxy. Em vez de mexer em /etc/profile, você agora pode simplesmente criar um arquivo (/etc/env.d/99local) e entrar as suas definições nele:

Listagem de código 2.2: /etc/env.d/99local

http_proxy="proxy.server.com:8080"

Usar o mesmo arquivo para todas as suas variáveis é uma forma de ter uma rápida visão das variáveis que você definiu pessoalmente.

O script env-update

Vários arquivos em /etc/env.d definem a variável PATH. Isto não está errado: quando você executa env-update, as várias definições são adicionadas antes de atualizar as variáveis de ambiente, desta forma tornando fácil para os pacotes (ou usuários) adicionarem suas próprias definições de variáveis de ambiente sem interferir com os valores já existentes.

O script env-update acrescentará os valores em ordem alfabética dos arquivos em /etc/env.d. Os nomes de arquivos devem começar com dois dígitos decimais.

Listagem de código 2.3: Ordem de atualização usada pelo env-update

         00basic        99kde-env       99local
     +-------------+----------------+-------------+
PATH="/bin:/usr/bin:/usr/kde/3.2/bin:/usr/local/bin"

A concatenação de variáveis nem sempre acontece, só com as seguintes variáveis: KDEDIRS, PATH, CLASSPATH, LDPATH, MANPATH, INFODIR, INFOPATH, ROOTPATH, CONFIG_PROTECT, CONFIG_PROTECT_MASK, PRELINK_PATH e PRELINK_PATH_MASK. Para todas outras variáveis, o último valor definido (em ordem alfabética dos arquivos em /etc/env.d) é usado.

Quando você executa env-update, o script cria todas as variáveis de ambiente e as coloca em /etc/profile.env (que é usado pelo /etc/profile). Ele também extrai as informações da variável LDPATH e as usa para criar o /etc/ld.so.conf. Em seguida, ele roda o ldconfig para recriar o arquivo /etc/ld.so.cache usado pelo linkador dinâmico.

Se você quiser ter uma idéia do efeito do env-update, imediatamente após rodá-lo execute o seguinte comando para atualizar seu ambiente. Os usuários que instalaram eles próprios o Gentoo provavelmente se lembrarão disso das instruções de instalação:

Listagem de código 2.4: Atualizando o ambiente

# env-update && source /etc/profile

Nota: O comando acima só atualiza as variáveis em seu terminal atual, novos consoles e seus derivados. Portanto, se você estiver trabalhando no X11, você precisará ou digitar source /etc/profile em cada novo terminal que você abrir ou reiniciar o X para que todos novos terminais herdem as novas variáveis. Se você usar um gerenciador de log-in, torne-se administrador (root) e digite /etc/init.d/xdm restart. Se não, você precisará fazer log-out e log-in para que o X abra novos terminais com os novos valores de variáveis.

5.c. Definindo variáveis localmente

Especificas do usuário

Nem sempre você deve definir uma variável de ambiente globalmente. Por exemplo, você pode querer adicionar o diretório /home/usuario/bin e o diretório de trabalho atual (o diretório em que você está) à variável PATH, sem que todos os outros usuários do sistema a tenham em seus PATHs. Se você quiser definir uma variável de ambiente localmente, deve usar o ~/.bashrc ou o ~/.bash_profile:

Listagem de código 3.1: Estendendo o PATH para uso local no ~/.bashrc

PATH="${PATH}:/home/usuario/bin"

Quando você re-logar, a sua variável PATH será atualizada.

Específico para a sessão

Às vezes definições ainda mais estritas são necessárias. Você pode querer usar binários de um diretório temporário que você criou sem usar o caminho até os binários nem editar o ~/.bashrc para o pouco tempo que você precisará dele.

Neste caso, você pode simplesmente definir a variável PATH na sua sessão atual usando o comando export. Enquanto você não se deslogar, a variável PATH usará as definições temporárias.

Listagem de código 3.2: Definindo uma variável de ambiente específica a uma sessão

# export PATH="${PATH}:/home/meu_usuário/tmp/usr/bin"

C. Trabalhando com o Portage

1. Arquivos e diretórios

1.a. Arquivos do Portage

Diretivas de configuração

O Portage vem com um arquivo de configuração padrão gravado em /etc/make.globals. Quando você olhar, perceberá que toda configuração do Portage é feita através de variáveis. Quais variáveis o Portage escuta e para que servem é descrito mais adiante.

Já que muitas diretivas de configuração diferem entre arquiteturas, o Portage também tem o arquivos de configuração padrão como parte de seu profile (perfil). Seu profile é apontado pelo link simbólico /etc/make.profile; As configurações do Portage estão gravadas nos arquivos make.defaults de seu profile e todos outros profiles. Nós iremos explicar mais sobre os profiles e o diretório /etc/make.profile mais adiante.

Se você estiver planejando mudar uma variável de configuração, não altere /etc/make.globals ou make.defaults. Ao invés disso, use o arquivo /etc/make.conf que tem precedência sobre os arquivos anteriores. Você também irá encontrar um /etc/make.conf.example. Como o nome indica, é meramente um arquivo de exemplo - que o Portage não lê.

Você também pode definir uma variável de configuração do Portage como uma variável de ambiente, mas não recomendamos fazer isso.

Informações específicas de profiles (perfis)

Nós já encontramos o diretório /etc/make.profile Bem, esse não é exatamente um diretório, mas um link simbólico para um profile, por padrão um dentro de /usr/portage/profiles, embora você possa criar seu próprio profile em outro lugar e apontar para ele. O profile para o qual esse link simbólico aponta é o profile a que seu sistema adere.

Um profile contém informações de específicas de cada arquitetura para o Portage, como uma lista de pacotes que pertencem ao sistema correspondendo àquele profile, uma lista de pacotes que não funcionam (ou estão mascarados) para aquele profile, etc...

Configurações específicas de usuário

Quando você precisar sobre-escrever o comportamento do Portage em relação à instalação de software, você deverá editar arquivos dentro de /etc/portage. É muito recomendável que você use os arquivos dentro de /etc/portage e muito desencorajado a sobre-escrita através de variáveis de ambiente!

Dentro de /etc/portage você pode criar os seguintes arquivos:

  • package.mask que lista os pacotes que você nunca quer que o Portage instale
  • package.unmask que lista os pacotes que você quer poder instalar, embora os desenvolvedores do Gentoo desencorajem que você os instale
  • package.keywords que lista que pacotes você quer poder instalar, embora o pacote (ainda) não tenha sido tido como apropriado para seu sistema ou arquitetura
  • package.use que lista as opções de USE que você quer usar para certos pacotes sem que o sistema inteiro use essas opções de USE

Mais informações sobre o diretório /etc/portage e uma lista completa de arquivos possíveis que você pode criar podem ser encontrados na página de man do Portage:

Listagem de código 1.1: Lendo a página de man do Portage

$ man portage

Mudando locais de arquivos & diretórios do Portage

Os arquivos de configuração mencionados anteriormente não podem ser guardados em outros locais - o Portage sempre irá buscar os arquivos de configuração nesses locais exatos. Todavia, o Portage usa outros locais para vários outros propósitos: diretório de construção, armazenamento de código-fonte, local da árvore do Portage, ...

Todos os propósitos tem locais padrões bem conhecidos, mas que podem ser alterados para seu próprio gosto através do /etc/make.conf. O resto deste capítulo explica que locais de propósito especial o Portage usa e como alterar sua colocação em seu sistema de arquivos.

Este documento não é para ser tomado como referência, no entanto. Se você precisa de cobertura 100% completa, por favor consulte as páginas de man do Portage e do make.conf:

Listagem de código 1.2: Lendo as páginas de man do Portage e do make.conf

$ man portage
$ man make.conf

1.b. Gravando arquivos

A árvore do Portage

O local padrão da árvore do Portage é /usr/portage. Isto é definido pela variável PORTDIR. Quando você grava a árvore do Portage em outro lugar (ao alterar esta variável), não se esqueça de mudar o link simbólico /etc/make.profile de acordo.

Se você alterar a variável PORTDIR, você deve alterar as seguintes variáveis já que elas não irão notar a mudança do PORTDIR. Isto é devido a como o Portage lida com as variáveis: PKGDIR, DISTDIR, RPMDIR.

Binários pré-construídos

Embora o Portage não use pacotes binários pré-construídos por padrão, ele tem suporte extensivo para eles. Quando você pede para o Portage trabalhar com pacotes pré-construídos, ele irá procurá-los em /usr/portage/packages. Este local é definido pela variável PKGDIR.

Código-fonte

O código-fonte das aplicações é gravado em /usr/portage/distfiles por padrão. Este local é definido pela variável DISTDIR.

Arquivos RPM

Embora o Portage não possa usar arquivos RPM, é possível gerá-los usando o comando ebuild (veja A aplicação ebuild). O local padrão onde o Portage armazena arquivos RMP é /usr/portage/rpm e é definido pela variável RPMDIR.

Banco de dados do Portage

O Portage guarda o estado de seu sistema (que pacotes são instalados, que arquivos pertencem a cada pacote, ...) em /var/db/pkg. Não altere estes arquivos manualmente! Pode causar problemas no conhecido do Portage sobre seu sistema.

Cachê do Portage

O cachê do Portage (com horas de modificação, virtuals, informações da árvore de dependência, ...) é guardado em /var/cache/edb. Este local é realmente um cachê: você pode limpá-lo senão estiver rodando nenhuma aplicação relacionada ao Portage no momento.

1.c. Construindo software

Arquivos temporários do Portage

Os arquivos temporários do Portage são gravados em /var/tmp por padrão. Isto é definido pela variável PORTAGE_TMPDIR.

Se você alterar a variável PORTAGE_TMPDIR, você deve alterar as seguintes variáveis já que elas não irão perceber a mudança da PORTAGE_TMPDIR. Isto é devido ao modo com que o Portage lida com variáveis: BUILD_PREFIX.

Diretório de construção

O Portage cria diretórios específicos para cada pacote que eles instalada dentro de /var/tmp/portage. Este local é definido pela variável BUILD_PREFIX.

Local de sistema de arquivos em uso

Por padrão o Portage instala todos arquivos no sistema de arquivos atual (/), mas você pode mudar este ajuste usando a variável de ambiente ROOT. Isto é útil quando você quer criar imagens de construção.

1.d. Funções de registro

Registro de ebuilds

O Portage pode criar arquivos de registro por ebuild, mas só quando a variável PORT_LOGDIR está configurada para algum lugar onde o Portage pode escrever (o usuário portage). Por padrão a variável está em branco.

2. Configuração através de variáveis

2.a. Configuração do Portage

Como notamos anteriormente, o Portage é configurado através de muitas variáveis que você deve definir em /etc/make.conf. Por favor verifique o manual do make.conf para informações mais completas:

Listagem de código 1.1: Lendo a página de man do make.conf

$ man make.conf

2.b. Opções específicas de construção

Opções de configuração e compilação

Quando o Portage constrói aplicações, ele passa os conteúdos das seguintes variáveis aos scripts de compilador e configuração:

  • CFLAGS & CXXFLAGS definem as opções de compilador para a compilação de C e C++.
  • CHOST define informações da máquina de construção para o script de configuração da aplicações
  • MAKEOPTS é passado ao comando make e normalmente é usado para definir a quantidade de paralelismo usado durante a compilação. Mais informações sobre opções de make podem ser encontradas na página de man do make.

A variável de USE também é usada durante configuração e compilação, mas já foi explicada com grande detalhe em capítulos anteriores.

Opções de instalação

Quando o Portage instalou uma nova versão de um certo título de software, ele irá remover os arquivos obsoletos de uma versão mais antiga de seu sistema. O Portage dá ao usuário 5 segundos de espera antes de desinstalar a versão antiga. Esses 5 segundos são definidos pela variável CLEAN_DELAY.

2.c. Proteção de arquivos de configuração

Locais protegidos do Portage

O Portage sobre-escreve arquivos fornecidos por novas versões de um título se os arquivos não estão gravados em um local protegido. Estes locais protegidos são definidos pela variável CONFIG_PROTECT e são geralmente locais de arquivos de configuração. A lista de diretórios é delimitada por espaços.

Um arquivo que seria escrito em um local protegido é renomeado e o usuário é avisado sobre uma nova versão do arquivo (presumivelmente) de configuração.

Você pode saber o ajuste atual do CONFIG_PROTECT usando a saída do comando emerge --info:

Listagem de código 3.1: Obtendo o ajuste de CONFIG_PROTECT

$ emerge --info | grep 'CONFIG_PROTECT='

Mais informações sobre a proteção de arquivos de configuração do Portage está disponível através do emerge:

Listagem de código 3.2: Mais informações sobre a proteção de arquivos de configuração do Portage

$ emerge --help config

Excluindo diretórios

Para 'desproteger' certos sub-diretórios de locais protegidos você pode usar a variável CONFIG_PROTECT_MASK.

2.d. Opções para baixar arquivos

Locais dos servidores

Quando a informação ou dado pedido não está disponível em seu sistema, o Portage irá baixar da Internet. As localizações de servidores para os vários canais de informações e dados são definidos pelas seguintes variáveis:

  • GENTOO_MIRRORS define uma lista de locais de servidores que contêm código fonte (distfiles)
  • PORTAGE_BINHOST define um local de um servidor particular que contém pacotes pre-construídos para seu sistema

Um terceiro ajuste envolve a localização do servidor de rsync que você pode usar quando atualizar sua árvore do Portage:

  • SYNC define um servidor particular que o Portage usa para sincronizar a árvore do Portage

As variáveis GENTOO_MIRRORS e SYNC podem ser configuradas automaticamente através da aplicação mirrorselect. Você precisa fazer emerge mirrorselect primeiro antes de poder usá-la. Para mais informações, veja a informação online do mirrorselect:

Listagem de código 4.1: Mais informações sobre o mirrorselect

# mirrorselect --help

Se seu ambiente necessita que você use um servidor de proxy, você pode usar as variáveis HTTP_PROXY, FTP_PROXY e RSYNC_PROXY para declarar um servidor de proxy.

Comandos para baixar

Quando o Portage precisa baixar código-fonte, ele usa o comando wget por padrão. Você pode usar isso através da variável FETCHCOMMAND.

O Portage pode continuar a baixar arquivos de código-fonte parcilamente baixado. Ele usa o wget por padrão, mas isso pode ser alterado através da variável RESUMECOMMAND.

Certifique-se de que seu FETCHCOMMAND e RESUMECOMMAND gravem o código-fonte no local correto. Dentro das variáveis você deve usar \${URI} e \${DISTDIR} para apontar o local de código-fonte e de distfiles respectivamente.

Você também pode definir ajustes específicos de protocolo com FETCHCOMMAND_HTTP, FETCHCOMMAND_FTP, RESUMECOMMAND_HTTP, RESUMECOMMAND_FTP, e assim em diante.

Ajustes de rsync

Você não pode alterar o comando de rsync usado pelo Portage para atualizar a ávore do Portage, mas você pode ajustar algumas variáveis relacionadas ao comando rsync:

  • RSYNC_EXCLUDEFROM aponta para uma lista de arquivos com pacotes e/ou categorias que o rsync deve ignorar durante o processo de atualização
  • RSYNC_RETRIES define quantas vezes o rsync deve tentar conectar ao servidor apontado pela variável SYNC antes de desistir. O padrão da variável é 3.
  • RSYNC_TIMEOUT define quantos segundos uma conexão de rsync pode ficar ociosa antes de o rsync ver a conexão como "timed-out". Esta variável tem como padrão 180, mas usuários de conexão discada provavelmente devem mudar isso para 300 ou mais.

2.e. Configuração do Gentoo

Seleção de ramos

Você pode mudar seu ramo padrão com a variável ACCEPT_KEYWORDS. Como padrão ela aponta para o ramo estável de seu arquitetura. Mais informações sobre os ramos do Gentoo pode ser encontrada no próximo capítulo.

Funções do Portage

Você pode ativar certas funções do Portage através da variável FEATURES. As funções do Portage foram discutidas nos capítulos anteriores, como em Funções do Portage.

2.f. Comportamento do Portage

Gerenciamento de recursos

Com a variável PORTAGE_NICENESS você pode augmentar ou reduzir o valor de nice com que o Portage roda. O valor PORTAGE_NICENESS é adicionado ao valor de nice atual.

Para mais informações sobre valores de nice, veja as páginas de man do nice:

Listagem de código 6.1: Mais informações sobre o nice

$ man nice

Comportamento da saída

A variável NOCOLOR, que tem como padrão "false", define se o Portage deve desligar o uso de saídas coloridas.

3. Misturando ramos de software

3.a. Usando um ramo

O ramo estável

A variável ACCEPT_KEYWORDS define que ramo de software você usa em seu sistema. Por padrão ela é o ramo de software estável para sua arquitetura, por exemplo, x86.

Nós recomendados que você só uso o ramo estável. No entanto, se você não se importa muito com estabilidade e quer ajudar o Gentoo enviando relatos para o http://bugs.gentoo.org, leia mais.

O ramo de testes

Se você quiser usar o software mais recente disponível, você pode considerar usar o ramo de testes. Para que o Portage use o ramo de testes, adicione um ~ na frente de sua arquitetura.

O ramo de testes é exatamente o que diz ser - de testes Se um pacote estiver em testes, significa que os desenvolvedores acham que funciona, mas não foi testado completamente. Você pode muito bem ser o primeiro a descobrir um bug no pacote, caso em que você pode fazer um relato de bug para que os desenvolvedores saibam sobre ele.

Esteja alerta, no entanto, de que você pode perceber problemas de estabilidade, manuseio incorreto de pacotes (como dependências erradas/faltando), atualizações muito freqüentes (resultando em muita construção) ou pacotes quebrados. Se você não sabe como o Gentoo funciona e como resolver problemas, nós recomendamos que você fique com o ramo estável e testado.

Por exemplo, para selecionar o ramo de testes da arquitetura x86, edite o /etc/make.conf e coloque:

Listagem de código 1.1: Configurando a variável ACCEPT_KEYWORDS

ACCEPT_KEYWORDS="~x86"

Se você atualizar seu sistema agora, você verá que muitos pacotes serão atualizados. Esteja avisado, no entanto: quando você tiver atualizado seu sistema para usar o ramo de testes, normalmente não há jeito fácil de voltar ao ramo estável oficial (exceto com o uso de backups, claro).

3.b. Misturando ramo estável com de testes

O arquivo package.keywords

Você pode pedir ao Portage para permitir o ramo de testes para um pacote em especial, mas usar o ramo estável para o resto do sistema. Para fazer isso, adicione a categoria do pacote e nome que você quer usar ao ramo de testes no arquivo /etc/portage/package.keywords. Por exemplo, para usar o ramo de testes para o gnumeric:

Listagem de código 2.1: configuração do /etc/portage/package.keywords para gnumerica, linha completa

app-office/gnumeric ~x86

Versões de teste particulares

Se você quiser usar uma versão específica de um software do ramo de testes, mas você não quiser que o Portage use o ramo de testes para versões subseqüentes, você deve adicionar a versão no arquivo package.keywords. Neste caso você deve usar o operador =. Você também pode colocar uma amplitude de versões usando os operadores <=, <, > ou >=.

De qualquer forma, se você colocar informações de versão, você deve usar um operador. Se você deixar informações de versão de fora, você não pode usar um operador.

No exemplo seguinte nós pedimos que o Portage aceite o gnumeric-1.2.13:

Listagem de código 2.2: Ativando uma versão de testes em particular do gnumeric

=app-office/gnumeric-1.2.13 ~x86

3.c. Usando pacotes mascarados

O arquivo package.unmask

Os desenvolvedores do Gentoo não suportam o uso destes arquivos. Por favor tome o cuidado necessário na hora de usá-los. Pedidos de suporte relacionados a package.unmask e/ou package.mask não serão respondidos. Você foi avisado.

Quando um pacote foi mascarado pelos desenvolvedores do Gentoo e você ainda quer usá-lo, mesmo depois de ler o motivo mencionado no arquivo package.mask (localizado em /usr/portage/profiles por padrão), adicione a exata mesma linha em /etc/portage/package.unmask.

Por exemplo, se o =net-mail/hotwayd-0.8 estiver mascarado, você pode tirar a máscara adicionando a mesma exata linha no arquivo package.unmask:

Listagem de código 3.1: /etc/portage/package.unmask

=net-mail/hotwayd-0.8

O arquivo package.mask

Quando você não quer que o Portage leve um certo pacote ou versão específica em consideração, você pode mascará-la você mesmo colocando uma linha apropriada em /etc/portage/package.mask.

Por exemplo se você não quer que o Portage instale novas fontes de kernel acima da gentoo-sources-2.6.8.1, você adiciona a seguinte linha ao package.mask:

Listagem de código 3.2: exemplo de /etc/portage/package.mask

>sys-kernel/gentoo-sources-2.6.8.1

4. Ferramentas do Portage adicionais

4.a. etc-update

O etc-update é uma ferramenta que ajuda na instalação de arquivos ._cfg0000_<nome>. Ele fornece um ambiente de instalação interativo e também pode instalar automaticamente mudanças triviais. Arquivos ._cfg0000_<nome> são gerados pelo Portage quando ele quer sobre-escrever um arquivo em um diretório protegido pela variável CONFIG_PROTECT.

Rodar o etc-update é bem simples:

Listagem de código 1.1: Rodando o etc-update

# etc-update

Depois de instalar as mudanças simples, você verá uma lista com arquivos protegidos que tem uma atualização pendente. No final você verá as opções possíveis:

Listagem de código 1.2: opções de etc-update

Please select a file to edit by entering the corresponding number.
              (-1 to exit) (-3 to auto merge all remaining files)
                           (-5 to auto-merge AND not use 'mv -i'):

Se você digitar -1, o etc-update irá sair sem fazer mais alterações. Se você apertar -3 ou -5, todos arquivos de configuração listados serão sobre-escritos com novas versões. É, portanto, muito importante selecionar primeiro os arquivos de configuração que não devem ser atualizados automaticamente. Isto é feito digitando o número listado à esquerda do arquivo de configuração.

Como um exemplo, nós selecionamos o arquivo de configuração /etc/pear.conf:

Listagem de código 1.3: Atualizando um arquivo de configuração específico

Beginning of differences between /etc/pear.conf and /etc/._cfg0000_pear.conf
[...]
End of differences between /etc/pear.conf and /etc/._cfg0000_pear.conf
1) Replace original with update
2) Delete update, keeping original as is
3) Interactively merge original with update
4) Show differences again

Você pode ver agora as diferenças entre os dois arquivos. Se você acredita que o arquivo de configuração atualizado pode ser usado sem problemas, digite 1. Se você acredita que o arquivo de configuração atualizado não é necessário, ou não dá nenhuma informação nova ou útil, digite 2. Se você quiser atualizar o arquivo de configuração atual interativamente, digite 3.

Não existe motivo para elaborar o processo de atualização interativo aqui. Para sermos mais completos, nós listaremos os comando possíveis que você pode usar quando você está juntando dois arquivos interativamente. Você verá duas linhas (a original e a proposta) e um prompt no qual você pode digitar um dos seguintes comandos:

Listagem de código 1.4: Comandos disponíveis para atualização interativa

ed:     Editar e usar as duas versões, cada uma decorada com um cabeçalho.
eb:     Editar e usar as duas versões.
el:     Editar e usar a versão da esquerda.
er:     Editar e usar a versão da direita.
e:      Editar uma versão nova.
l:      Usar a versão da esquerda.
r:      Usar a versão da direita.
s:      Incluir silenciosamente linhas comuns.
v:      Incluir linhas comuns de maneira verbal.
q:      Sair.

Quando você terminar de atualizar os arquivos de configuração importantes, você pode atualizar automaticamente todos outros arquivos de configuração. O etc-update irá sair se não encontrar mais arquivos de configuração que podem ser atualizados.

4.b. dispatch-conf

Ao usar o dispatch-conf você pode juntar atualizações a seus arquivos de configuração, monitorando todas mudanças. O dispatch-conf grava as diferenças entre os arquivos de configuração como patches ou usando o sistema de revisão RCS.

Como com o etc-update, você pode pedir para manter o arquivo de configuração como está, usar o novo arquivo de configuração, editar o atual ou juntar as mudanças interativamente. No entanto, o dispatch-conf também tem funções adicionais úteis:

  • Juntar atualizações de arquivos de configuração automaticamente para atualizações somente de comentários
  • Juntar atualizações de arquivos de configuração automaticamente para atualizações que só variam em número espaços usados

Certifique-se de editar o /etc/dispatch-conf.conf primeiro e crie o diretório referenciado pela variável archive-dir.

Para mais informações, veja a página de manual do dispatch-conf:

Listagem de código 2.1: Lendo a página de manual do dispatch-conf

$ man dispatch-conf

4.c. quickpkg

Com o quickpkg você pode criar arquivos dos pacotes que já estão instalados em seu sistema. Esses arquivos podem ser usados como pacotes pré-construídos. Rodar quickpkg é simples: só adicione os nomes dos pacotes que você quer arquivar.

Por exemplo, para arquivar curl, arts e procps:

Listagem de código 3.1: Exemplo de uso do quickpkg

# quickpkg curl arts procps

Os pacotes pré-construídos serão gravados em $PKGDIR/All (/usr/portage/packages/All por padrão). Links simbólicos que apontam para esses pacotes são colocados em $PKGDIR/<categoria>.

5. Divergindo da árvore oficial

5.a. Usando um sub-conjunto da árvore do Portage

Excluindo pacotes/categorias

Você pode fazer atualizações seletivas de certas categorias/pacotes e ignorar as outras categorias/pacotes. Nós podemos fazer isso ao dizer para o rsync excluir categorias/pacotes durante o passo emerge --sync.

Você precisa definir o nome do arquivo que contém os padrões de exclusão na variável RSYNC_EXCLUDEFROM em seu /etc/make.conf.

Listagem de código 1.1: Definindo o arquivo de exclusão em /etc/make.conf

RSYNC_EXCLUDEFROM=/etc/portage/rsync_excludes

Listagem de código 1.2: Excluindo todos tipos de games em /etc/portage/rsync_excludes

games-*/*

Note, no entanto, que isso pode levar a problemas de dependência, já que novos pacotes permitidos podem dependender de novos pacotes que foram excluídos na atualização.

5.b. Adicionando ebuilds não-oficiais

Definindo um diretório de overlay para o Portage

Você pode pedir para o Portage usar ebuilds que não estão disponíveis oficialmente através da árvore do Portage. Crie um novo diretório (por exemplo /usr/local/portage) em que você grava ebuilds de terceiros. Use a mesma estrutura de diretórios da árvore oficial do Portage!

Defina PORTDIR_OVERLAY no /etc/make.conf e faça com que aponte para o diretório definido anteriormente. Quando você usar o Portage agora, ele irá considerar essas ebuilds também sem removê-las/sobre-escrevê-las da próxima vez que você rodar emerge --sync.

Trabalhando com vários overlays

Para os usuários avançados que desenvolvem usando vários overlays, testam pacotes antes de chegar na árvore do Portage ou só querem usar ebuilds não-oficiais de várias fontes, o pacote app-portage/gentoolkit-dev traz gensync, uma ferramenta para ajudá-lo a manter os repositórios de overlay atualizados.

Com gensync você pode atualizar todos repositórios de uma vez, ou selecionar apenas alguns deles. Cada repositório deve ter um arquivo chamado .syncsource no diretório de configuração /etc/gensync/, contendo local do repositório, nome, identificação, etc...

Suponha que você tem dois repositórios adicionais chamados java (para ebuilds de java em desenvolvimento) e entapps (para aplicativos desenvolvidos em casa para seu negócio). Você pode atualizar estes repositórios da seguinte maneira:

Listagem de código 2.1: Usando gensync para atualizar repositórios

# gensync java entapps

5.c. Software não-gerenciado pelo Portage

Usando o Portage com software gerenciado manualmente

Em alguns casos você quer configurar, instalar e manter software você mesmo, sem que o Portage automatize o processo para você, mesmo se o Portage puder fornecer os títulos de software. Casos comuns são fontes de kernel e drivers da nvidia. Você pode configurar o Portage para que ele saiba que certo pacote está instalado manualmente em seu sistema. Este processo é chamado de injeção e é suportado pelo Portage através do arquivo /etc/portage/profile/package.provided.

Por exemplo, se você quer informar o Portage sobre o vanilla-sources-2.6.11.6 que você instalou manualmente, adicione a seguinte linha ao /etc/portage/profile/package.provided:

Listagem de código 3.1: Linha de exemplo para o package.provided

sys-kernel/vanilla-sources-2.6.11.6

6. A aplicação ebuild

6.a. Emerge e ebuild

A aplicação ebuild é uma interface de baixo nível com o sistema do Portage. Usando a aplicação você pode executar ações específicas em uma dada ebuild. Por exemplo, você pode fazer passos de instalação individuais você mesmo.

Usar ebuild serve mais para propósitos de desenvolvimento; mais informações sobre ebuild pode, logo, ser encontrado no Manual dos Desenvolvedores, em inglês. No entanto, iremos explicar que instâncias do ebuild são invocados pelo Portage durante o processo de instalação de um certo título de software, e como invocar os passos de pós-configuração que algumas ebuilds pedem que você faça.

6.b. Instalando software manualmente

Baixando as fontes & fazendo checksum delas

Quando você invoca ebuild em um dado arquivo de ebuild, ele verifica se as checksums de todos arquivos envolvidos são iguais às do Manifest acompanhante ou arquivo files/digest-<nome>-<versão>. Isso só acontece depois das fontes terem sido baixadas.

Para baixar as fontes usando ebuild, rode:

Listagem de código 2.1: Baixando as fontes

# ebuild path/to/ebuild fetch

Se o md5sum da ebuild não bater com o listado no arquivo Manifest, ou uma das fontes baixadas não bater com as litadas no arquivo files/digest-<pacote>, você irá receber um erro parecido com o seguinte:

Listagem de código 2.2: Erro no checksum de um ebuild

!!! File is corrupt or incomplete. (Digests do not match)
>>> our recorded digest: db20421ce35e8e54346e3ef19e60e4ee
>>>  your file's digest: f10392b7c0b2bbc463ad09642606a7d6

A linha subseqüente irá mencionar o arquivo com erro.

Se você tiver certeza que as fontes que você baixou e o ebuild em si são válidos, você pode gerar manualmente o Manifest e o arquivo digest-<pacote> usando a função digest do ebuild:

Listagem de código 2.3: Gerando novo Manifest e digest

# ebuild caminho/para/ebuild digest

Desempacotando as fontes

Para desempacotar as fontes em /var/tmp/portage (ou qualquer outro local que você especificou em /etc/make.conf), rode a função unpack da ebuild:

Listagem de código 2.4: Desempacotando as fontes

# ebuild caminho/para/ebuild unpack

Isto irá executar a função src_unpack() da ebuild (que tem como padrão a extração normal se nenhuma função src_unpack() é definida). É também nesse passo que todos patches necessários são aplicados.

Compilando as fontes

O próximo passo no processo de instalação é compilar as fontes. A função compile da ebuild faz esse passo ao executar a função src_compile() da ebuild. Isto também faz os passos de configuração se necessários.

Listagem de código 2.5: Compilando as fontes

# ebuild caminho/para/ebuild compile

É recomendado que você edite a função src_compile() da ebuild se você quiser mudar as instruções de compilação. No entanto, você também pode enganar o Portage a acreditar que a aplicação ebuild terminou os passos de compilação. Rode todos comandos necessários você mesmo e crie um arquivo vazio chamado .compiled no diretório de trabalho:

Listagem de código 2.6: Informando o Portage sobre trabalhos de compilação terminados

# touch .compiled

Instalando os arquivos em um local temporário

No próximo passo o Portage irá instalar todos arquivos necessários em um local temporário. Este diretório irá conter todos arquivos que serão instalados no sistema de arquivos de uso. Você pode fazer isso rodando a função install da ebuild, que executa a função src_install() da ebuild:

Listagem de código 2.7: Instalando os arquivos

# ebuild caminho/para/ebuild install

Instalando os arquivos em um sistema de arquivos de uso

O passo final é instalar todos arquivos no sistema de arquivos de uso e registrá-los no backend do Portage. O ebuild chama o passo de "qmerge" e envolve os seguintes passos:

  • Executar a função pkg_preinst() se especificada
  • Copiar todos arquivos para o sistema de arquivos de uso
  • Registrar os arquivos no backend do Portage
  • Executar a função pkg_postinst() se especificada

Rode a função qmerge do ebuild para fazer esses passos:

Listagem de código 2.8: Instalando so arquivos no sistema de arquivos de uso

# ebuild caminho/para/ebuild qmerge

Limpando o diretório temporário

Finalmente, você pode limpar o diretório temporário usando a função clean do ebuild:

Listagem de código 2.9: Limpando o diretório temporário

# ebuild caminho/para/ebuild clean

6.c. Funções adicionais do ebuild

Rodando todos comandos relacionados ao merge

Usando a função merge do ebuild você pode rodar os comando fetch, unpack, compile, install e qmerge de uma só vez:

Listagem de código 3.1: Instalando software

# ebuild caminho/para/ebuild merge

Fazendo ações de configuração

Algumas aplicações incluem instruções que configuram o pacote para uso em seu sistema. As instruções podem ser interativa e portanto não são executadas automaticamente. Para rodar os passos de configuração, que estão listadas na função opcional config() da ebuild, use a função config do ebuild:

Listagem de código 3.2: Configurando um pacote

# ebuild caminho/para/ebuild config

Construindo um pacote (RPM)

Você pode instruir o Portage para criar um pacote binário de uma ebuild ou até mesmo um arquivo RPM. Use a função package ou rpm do ebuild para criar os arquivos. Existem algumas diferenças entre as duas funções, todavia:

  • A função package é bem parecida com a função merge, executando todos passos necessários (fetch, unpack, compile, install) antes de criar o pacote
  • A função rpm cria um pacote RPM dos arquivos criados depois de ter rodado a função install do ebuild

Listagem de código 3.3: Criando pacotes

(Para um pacote binário compatível com o Portage)
# ebuild caminho/para/ebuild package

(Para um pacote RPM)
# ebuild caminho/para/ebuild rpm

O arquivo RPM criado, no entanto, não tem a informação de dependências da ebuild.

6.d. Mais informações

Por favor, consulte as seguintes páginas de man para mais informações sobre o Portage, a aplicação ebuild e os arquivos do ebuild:

Listagem de código 4.1: Página de man

$ man portage    (O próprio Portage)
$ man emerge     (O comando emerge)
$ man ebuild     (O comando ebuild)
$ man 5 ebuild   (sintaxe de arquivos ebuild)

Você também pode encontrar mais informações relacionadas a desenvolvimento no Manual dos Desenvolvedores, em inglês.

D. Configuração de rede do Gentoo

1. Começando

1.a. Começando

Nota: Este documento presume que você configurou seu kernel corretamente, seus módulos para seu hardware e que você conhece o nome de interface de seu hardware. Também presumimos que você está configurando eth0, mas também pode ser eth1, wlan0, etc.

Nota: Este documento precisa de que você esteja rodando baselayout-1.11.11 ou superior.

Para iniciar a configuração de sua placa de rede, você precisa contar ao sistema de RC do Gentoo sobre ela. Isto é feito criando um link simbólico de net.lo para net.eth0 em /etc/init.d

Listagem de código 1.1: Fazendo link simbólico de net.eth0 para net.lo

# cd /etc/init.d
# ln -s net.lo net.eth0

O sistema de RC do Gentoo agora conhece a intercace. Ele também precisa saber como configurá-la. Todas interfaces de rede são configuradas em /etc/conf.d/net. Abaixo está um exemplo de configuração para DHCP e endereços estáticos.

Listagem de código 1.2: Exemplos para /etc/conf.d/net

# Para DHCP
config_eth0=( "dhcp" )

# Para IP estático usando notação CIDR
config_eth0=( "192.168.0.7/24" )
routes_eth0=( "default via 192.168.0.1" )

# Para IP estático usando notação netmask
config_eth0=( "192.168.0.7 netmask 255.255.255.0" )
routes_eth0=( "default gw 192.168.0.1" )

Nota: Se você não especificar uma configuração para sua interface, DHCP é presumido.

Nota: CIDR significa Classless InterDomain Routing. Originalmente, endereços de IPv4 eram classificados como A, B, ou C. O sistema de classificação inicial não englobou a popularidade massiva da Internet e está em perigo de não ter endereços singulares novos. CIDR é um esquema de endereçamento que permite que um endereço IP designe muitos endereços IP. Um endereço IP CIDR parece igual ao um endereço IP normal, exceto por terminar com uma barra seguida de um número; por exemplo, 192.168.0.0/16. CIDR é descrito no RFC 1519.

Agora que nós configuramos nossa interface, nós podemos iniciá-la e pará-la usando os comandos abaixo.

Listagem de código 1.3: Iniciando e parando scripts de rede

# /etc/init.d/net.eth0 start
# /etc/init.d/net.eth0 stop

Importante: Durante a resolução de problemas de rede, é recomendável configurar RC_VERBOSE="yes" no /etc/conf.d/rc para que você obtenha mais informações sobre o que está acontecendo.

Agora que você iniciou e parou sua interface de rede, você pode querer iniciá-la automaticamente quando o Gentoo iniciar. Aqui está como fazê-lo. O último comando "rc" instrui o Gentoo a iniciar quaisquer scripts no runlevel atual que não foram iniciados ainda.

Listagem de código 1.4: Configurando uma interface de rede para carregar durante a inicialização

# rc-update add net.eth0 default
# rc

2. Configuração avançada

2.a. Configuração avançada

A variável config_eth0 é o coração da configuração de uma interface. É uma lista de instruções de alto nível para configurar a interface (eth0 neste caso). Cada comando na lista de instruções é feito seqüencialmente. A interface é considerada OK se pelo menos um comando funcionar.

Aqui está uma lista de instruções internas.

Comando Descrição
null Não fazer nada
noop Se a interface estiver levantada e houver um endereço, abortar a configuração com sucesso
um endereço IPv4 ou IPv6 Adicionar o endereço à interfaceAdicionar o endereço à interface
dhcp, adsl ou apipa (ou comando personalizado de um módulo de terceiros) Rodar o módulo que fornece o comando. Por exemplo, dhcp irá rodar um módulo que fornece DHCP, que pode ser tanto dhcpcd, udhcpc, dhclient ou pump.

Se um comando falhar, você pode especificar uma alternativa. A alternativa tem que bater com a estrutura de configuração exatamente.

Você pode encadear estes comandos juntamente. Aqui estão alguns exemplos do mundo real.

Listagem de código 1.1: Exemplos de configuração

# Adicionando três endereços IPv4
config_eth0=(
  "192.168.0.2/24"
  "192.168.0.3/24"
  "192.168.0.4/24"
)

# Adicionando um endereço IPv4 e dois endereços IPv6
config_eth0=(
  "192.168.0.2/24"
  "4321:0:1:2:3:4:567:89ab"
  "4321:0:1:2:3:4:567:89ac"
)

# Manter nosso endereço designado pelo kernel, a menos que a interface
# caia, neste caso obter outro via DHCP. Se DHCP falhar, então adicionar um
# endereço estático determinado por APIPA
config_eth0=(
  "noop"
  "dhcp"
)
fallback_eth0=(
  "null"
  "apipa"
)

Nota: Quando usar o módulo ifconfig e adicionar mais que um endereço, aliases de interface são criados para cada endereço adicional. Com os dois exemplos acima, você obterá as interfaces eth0, eth0:1 e eth0:2. Você não pode fazer nada especial com essas interfaces, já que o kernel e outros programas irão simplesmente tratar eth0:1 e eth0:2 como eth0.

Importante: A ordem da alternativa é importante! Se você não especificar a opção null, o comando apipa só será rodado se o comando noop falhar.

Nota: APIPA e DHCP são discutidos mais tarde.

2.b. Dependências de rede

Scripts de init em /etc/init.d podem depender de uma interface de rede específica ou só net. net pode ser definido em /etc/conf.d/rc para significar diferentes coisas usando a variável RC_NET_STRICT_CHECKING.

Valor Descrição
none O serviço net é considerado como sempre funcionando
no Basicamente significa que pelo menos um serviço net.* fora net.lo deve estar funcionando. Isto pode ser usado por usuários de notebooks que têm wifi e um nic estático, e só precisam de um funcionando para que o serviço net seja visto como funcionando.
lo É igual a opção no, mas net.lo também é contado. Deve ser útil para pessoas que não se importam se alguma interface específica está funcionando durante o carregamento.
yes TODAS interfaces de rede DEVEM estar funcionando para o serviço net ser considerado como funcionando.

Mas e o net.br0 dependendo de net.eth0 e net.eth1? net.eth1 pode ser um dispositivo wireless ou ppp que precisa de configuração antes de ser adicionado à ponte. Isto não pode ser feito em /etc/init.d/net.br0 já que é um link simbólico para net.lo.

É resposta é criar sua própria função depend() em /etc/conf.d/net.

Listagem de código 2.1: dependência net.br0 em /etc/conf.d/net

# Você pode usar qualquer dependência (use, after, before) como encontradas em scripts atuais
depend_br0() {
  need net.eth0 net.eth1
}

Para uma discussão mais detalhada sobre dependência, consulte a seção Escrevendo scripts de init no Manual do Gentoo.

2.c. Nomes de variáveis e valores

Nomes de variáveis são dinâmicos. Normalmente seguem a estrutura variable_${interface|mac|essid|apmac}. Por exemplo, a variável dhcpcd_eth0 tem os valores das opções de dhcpcd para eth0 e dhcpcd_essid tem o valor das opções de dhcpcd quando qualquer interface conecta-se ao ESSID "essid".

No entanto, não existe nenhuma regra rígida e pronta que diz que nomes de interface devem ser ethx. Na verdade, muitas interfaces wireless têm nomes como wlanx, rax bem como ethx. Também, algumas intercaces definidas por usuários como pontes podem receber qualquer nome, como foo. Para tornar a vida mais interessante, pontos de acesso (AP) de wireless podem ter nomes com caracteres não alfa-numéricos neles - isto é importante porque você pode configurar parâmetros de rede por ESSID.

O ponto negativo disto é que o Gentoo usa variáveis de bash para rede - e o bash não pode usar nada fora caracteres ingleses alfa-numéricos. Para contornar esta limitação nós trocamos cada caractere que não é inglês alfa-numérico em um caractere _.

Outro ponto negativo do bash é o conteúdo das variáveis - alguns caracteres precisam de escape. Isto pode ser feito colocando o caractere \ na frente do caractere que precisa ser escapado. A seguinte lista de caracteres precisa ser escapada do seguinte jeito: ", ' e \.

Neste exemplo nós usados ESSID de wireless já que contêm o maior escopo de caracteres. Nós usaremos a ESSID My "\ NET:

Listagem de código 3.1: exemplo de nome de variável

# Isto funciona, mas o domínio é inválido
dns_domain_My____NET="My \"\\ NET"

# A parte acima configura o domínio de dns para My "\ NET quando um cartão de wireless
# conecta-se a um AP cujo ESSID é My "\ NET

3. Rede modular

3.a. Módulos de rede

Nós agora suportamos scripts de rede modulares, o que significa que nós podemos facilmente adicionar suporte para novos tipos de interface e módulos de configuração, mantendo compatibilidade com os existentes.

Os módulos carregam por padrão se o pacote de que eles precisam está instalado. Se você especificar um módulo aqui que não tem seu pacote instalado, você obtém um erro dizendo que pacote você precisa instalar. Idealmente, você só usa o ajuste de módulos quando você tem dois ou mais pacotes instalados que fornecem o mesmo serviço e você precisa escolher um no lugar do outro.

Listagem de código 1.1: Preferência de módulo

# Preferir iproute2 ao invés de ifconfig
modules=( "iproute2" )

# Você também pode especificar outros módulos para uma interface
# Neste caso nós preferimos udhcpc ao invés de dhcpcd
modules_eth0=( "udhcpc" )

# Você também pode especificar que módulos não usar - por exemplo, você pode estar
# usando um suplicante ou linux-wlan-ng para controlar a configuração wireless, mas
# você ainda quer configurar ajustes de rede por cada ESSID associado.
modules=( "!iwconfig" )

3.b. Gerenciadores de interface

Nós atualmente oferecemos dois gerenciadores de interface: ifconfig e iproute2. Você precisa de um deles para qualquer tipo de configuração de rede.

ifconfig é o padrão do Gentoo e é incluído no profile (perfil) de sistema. iproute2 é um pacote mais poderoso e flexível, mas não é incluído por padrão.

Listagem de código 2.1: Para instalar iproute2

# emerge sys-apps/iproute2

# Para preferir iproute2 ao invés de ifconfig se ambos estiverem instalados
modules=( "iproute2" )

Já que ambos ifconfig e iproute2 fazem coisas parecidas, nós precisamos que sua configuração básica funcione com os dois. Por exemplo, os dois trechos de código abaixo funcionam com qualquer módulo que você estiver usando.

Listagem de código 2.2: exemplos de ifconfig e iproute2

config_eth0=( "192.168.0.2/24" )
config_eth0=( "192.168.0.2 netmask 255.255.255.0" )

# Também podemos especificar broadcast
config_eth0=( "192.168.0.2/24 brd 192.168.0.255" )
config_eth0=( "192.168.0.2 netmask 255.255.255.0 broadcast 192.168.0.255" )

3.c. DHCP

DHCP é um meio de obter informação de rede (endereço de IP, servidores de DNS, roteador, etc) de um servidor de DHCP. Isto significa que se há um servidor de DHCP rodando na rede, você só tem que dizer a cada cliente para usar DHCP e ele irá configurar a rede sozinho. Claro, você terá que configurar outras coisas como wireless, PPP ou outras coisas se forem necessárias antes de poder usar DHCP.

DHCP pode ser fornecido por dhclient, dhcpcd, pump ou udhcpc. Cada módulo de DHCP tem seus prós e contras - aqui está uma rápida lista.

Módulo de DHCP Pacote Prós Contras
dhclient net-misc/dhcp Feito pela ISC, as mesmas pessoas por trás do software BIND DNS. Muito configurável Configuração demasiadamente complexa, software é bem inflado, não pode obter servidores de NTP do DHCP, não envia nome de host por padrão
dhcpcd net-misc/dhcpcd Padrão do Gentoo por muito tempo, não precisa de ferramentas exteriores Não é mais mantido pelos desenvolvedores, pode ser lento às vezes, não vira daemon quando o lease é infinito
pump net-misc/pump Peso leve, não precisa de ferramentas exteriores Não é mais mantido pelos desenvolvedores, não confiável, em especial com modems, não pode obter servidores de NIS do DHCP
udhcpc net-misc/udhcp Peso leve - menor cliente de DHCP existente, feito para sistemas embedded Não testado - nenhuma distribuição usa por padrão, não pode definir um timeout maior que 3 segundos

Se você tiver mais de um cliente de DHCP instalado, você precisa especificar qual usar - caso contrário o padrão é dhcpcd se disponível.

Para enviar opções específicas para o módulo de DHCP, use module_eth0="..." (troque module pelo módulo de DHCP que você está usando - por exemplo dhcpcd_eth0)

Nós tentamos e tornamos o DHCP relativamente agnóstico - assim nós suportamos os seguintes comandos usando a variável dhcp_eth0. O padrão é não usar nenhum deles.

  • release - solta o endereço de IP para novo uso
  • nodns - não sobre-escrever /etc/resolv.conf
  • nontp - não sobre-escrever /etc/ntp.conf
  • nonis - não sobre-escrever /etc/yp.conf

Listagem de código 3.1: Exemplo de configuração de DHCP em /etc/conf.d/net

# Só necessário se você tiver mais que um módulo de DHCP instalado
modules=( "dhcpcd" ) 

config_eth0=( "dhcp" )
dhcpcd_eth0="-t 10" # Desistir após 10 segundos
dhcp_eth0="release nodns nontp nonis" # Só obter um endereço

Nota: dhcpcd, udhcpc e pump enviam o nome de host atual para o servidor de DHCP por padrão, então você não precisa mais especificá-lo.

3.d. Modem ADSL

Primeiro nós precisamos instalar o software ADSL.

Listagem de código 4.1: Install the rp-pppoe package

# emerge net-dialup/rp-pppoe

Aviso: baselayout-1.11.x só suporta PPPoE
Espera-se que versões futuras suportem PPPoA

Agora nós precisamos instruir configure eth0 para ser uma interface de ADSL e digitar nosso nome de usuário.

Listagem de código 4.2: Configure eth0 para ADSL

config_eth0=( "adsl" )
adsl_user_eth0="nomedeusuario"

Finalmente você precisa definir seu nome de usuário e senha em /etc/ppp/pap-secrets.

Listagem de código 4.3: exemplo de /etc/ppp/pap-secrets

# O * é importante
"usuario"  *  "senha"

3.e. APIPA (Automatic Private IP Addressing)

APIPA tenta encontrar um endereço livre no alcance 169.254.0.0-169.254.255.255 enviando arps de endereços aleatórios no alcance da interface. Se nenhuma resposta é ouvida, nós designamos o endereço à interface.

Isto só é útil para LANs onde não há servidor de DHCP e você não conecta-se diretamente à Internet e todos outros computadores usam APIPA.

Para suporte a APIPA, faça emerge net-misc/iputils ou net-analyzer/arping.

Listagem de código 5.1: Configuração de APIPA em /etc/conf.d/net

# Tentar DHCP primeiro - se falhar, usar como alternativa APIPA
config_eth0=( "dhcp" )
fallback_eth0=( "apipa" )

# Simplesmente usar APIPA
config_eth0=( "apipa" )

3.f. Bonding (junção)

Para bonding/trunking de links, faça emerge net-misc/ifenslave

Bonding é usado para aumentar a banda da rede. Se você tem duas placas de rede usando a mesma rede, você pode fazer bond delas para que suas aplicações vejam só uma interface, mas na verdade usem as duas.

Listagem de código 6.1: configuração de bonding em /etc/conf.d/net

#Juntando interfaces
slaves_bond0="eth0 eth1 eth2"

# Você pode não querer designar um IP à interface juntada
config_bond0=( "null" )

# Depende em eth0, eth1 e eth2 já que elas podem precisar de configuração adicional
depend_bond0() {
  need net.eth0 net.eth1 net.eth2
}

3.g. Bridging (ponte) (suporte a 802.1d)

Para suporte a bridging, faça emerge net-misc/bridge-utils

Bridging é usado para unir duas redes. Por exemplo, você pode ter um servidor que conecta-se à Internet via um modem ADSL e uma placa de acesso wireless para permitir que outros computadores conectem-se à rede via o modem ADSL. Você pode criar uma ponte para unir as duas interfaces.

Listagem de código 7.1: Configuração de ponte em /etc/conf.d/net

# Configure a ponte - "man btctl" para mais detalhes
brctl_br0=( "setfd 0" "sethello 0" "stp off" )

# Para adicionar portas à ponte br0
bridge_br0="eth0 eth1"

# Você precisa configurar todas portas com valores nulos para que o dhcp não seja iniciado
config_eth0=( "null" )
config_eth1=( "null" )

# Finalmente, dê um endereço para a ponte - você pode usar DHCP também
config_br0=( "192.168.0.1/24" )

# Depender de eth0 e eth1 já que podem necessitar de configuração adicional
depend_br0() {
  need net.eth0 net.eth1
}

Importante: Para usar algumas configurações de ponte, você pode consultar a documentação de nome de variável.

3.h. Endereço de MAC

Você não precisa instalar nada para mudar o endereço MAC de sua interface se você tiver sys-apps/baselayout-1.11.14 ou mais novo e quiser mudar para um endereço de MAC específico. No entanto, se você precisa mudar para um endereço de MAC aleatório ou tem um baselayout mais antigo que a versão mencionada acima, você precisa fazer emerge de net-analyzer/macchanger para poder fazer uso desta funcionalidade.

Listagem de código 8.1: Exemplo de mudança de endereço de MAC

# Para configurar o endereço de MAC de uma interface
mac_eth0="00:11:22:33:44:55"

# Para tornar apenas os últimos 3 bytes aleatórios
mac_eth0="random-ending"

# Para tornar aleatório dentro do mesmo tipo físico de conexão (como fibra,
# cobre, wireless) , todos fabricantes
mac_eth0="random-samekind"

# Para tornar aleatório dentro de qualquer tipo físico de conexão (como fibra,
# cobre, wireless) , todos fabricantes
mac_eth0="random-anykind"

# Aleatório completo - AVISO: alguns endereços de MAC gerados assim podem
# NÃO funcionar como esperado
mac_eth0="random-full"

3.i. Tunnelling (túneis)

Você não precisa instalar nada para fazer túneis já que o gerenciador de interfaces pode fazê-lo para você.

Listagem de código 9.1: Configuração de túneis em /etc/conf.d/net

# Para túneis GRE
iptunnel_vpn0="mode gre remote 207.170.82.1 key 0xffffffff ttl 255"

# Para túneis IPIP
iptunnel_vpn0="mode ipip remote 207.170.82.2 ttl 255"

# Para configurar a interface
config_vpn0=( "192.168.0.2 peer 192.168.1.1" ) 

3.j. VLAN (suporte a 802.1q)

Para suporte a VLAN, faça emerge net-misc/vconfig.

Virtual LAN é um grupo de dispositivos de rede que agem como se estivessem conectados a um único segmento de rede - embora possam não estar. Membros de VLAN só podem ser membros da mesma VLAN, mesmo que estejam dentro da mesma rede física.

Listagem de código 10.1: configuração de VLAN em /etc/conf.d/net

# Especifique os números de VLAN para interface como abaixo
# Por favor certifique-se que as IDs de VLAN NÃO sejam com zeros
vlans_eth0="1 2"

# Você também pode configurar a VLAN
# veja a página de man de vconfig para mais detalhes
vconfig_eth0=( "set_name_type VLAN_PLUS_VID_NO_PAD" )
vconfig_vlan1=( "set_flag 1" "set_egress_map 2 6" )

# Configure a interface como normalmente
config_vlan1=( "172.16.3.1 netmask 255.255.254.0" )
config_vlan2=( "172.16.2.1 netmask 255.255.254.0" )

Importante: Para usar algumas configurações de VLAN, você pode precisar consultar a documentação de nomes de variáveis.

4. Rede wireless

4.a. Introdução

Atualmente nós suportamos configurações wireless tanto através de wireless-tools ou wpa_supplicant. É importante lembrar que você deve configurar para redes wireless com base global e não com base em interface.

wpa_suppliant é a melhor escolha, mas não suporta todos drivers. Para uma lista de drivers suportados, leia o site do wpa_supplicant. Também, o wpa_supplicant só pode conectar atualmente a um SSID que você tenha configurado.

wireless-tools suporta quase todos cartões e drivers, mas não pode conectar a pontos de acesso (APs) só de WPA.

Aviso: O driver linux-wlan-ng não é suportado pelo baselayout neste momento. Isto ocorre porque o linux-wlan-ng tem seus próprios ajustes e configuração que são completamente diferentes do resto. Existe um boato de que os desenvolvedores do linux-wlan-ng estejam mudando sua configuração para a do wireless-tools - quando isto acontecer, você poderá usar o linux-wlan-ng com o baselayout.

4.b. WPA Supplicant (suplicante)

WPA Supplicant é um pacote que permite que você se conecte a pontos de acesso com WPA. Sua configuração é bagunçada já que ainda está em beta - no entanto, funciona bem na maior parte.

Listagem de código 2.1: Instale o wpa_supplicant

# emerge net-wireless/wpa_supplicant

Importante: Você deve ter CONFIG_PACKET ativado em seu kernel para que o wpa_supplicant funcione.

Agora nós configuramos o /etc/conf.d/net para que prefiramos wpa_supplicant ao invés de wireless-tools (se ambos estiverem instalados, o wireless-tools é o padrão).

Listagem de código 2.2: configure /etc/conf.d/net para wpa_supplicant

# Preferir wpa_supplicant ao invés de wireless-tools
modules=( "wpa_supplicant" )

# É importante dizer ao wpa_supplicant que driver nós devemos
# usar já que ele ainda não é bom em adivinhar
wpa_supplicant_eth0="-Dmadwifi"

Nota: Se você estiver usando o driver host-ap, você precisará colocar o cartão em modo gerenciado antes de poder ser usado com wpa_supplicant corretamente. Você pode usar iwconfig_eth0="mode managed" para fazer isto no /etc/conf.d/net.

Foi simples, não foi? Todavia, ainda precisamos configurar o próprio wpa_supplicant, o que é um pouco complicado dependendo da segurança dos pontos de acesso a que você está tentando conectar. O exemplo abaixo é tirado e simplificado do /etc/wpa_supplicant.conf.example que vem com o wpa_supplicant.

Listagem de código 2.3: um exemplo de /etc/wpa_supplicant.conf

# A linha abaixo não pode ser mudada, senão não funcionamos
ctrl_interface=/var/run/wpa_supplicant

# Certificar que só o administrador (root) pode ler a configuração de WPA
ctrl_interface_group=0

# Permitir que o wpa_supplicant tome conta do escaneamento e seleção de AP
ap_scan=1

# Caso simples: WPA-PSK, PSK como uma senha ASCII, permitir todas cifras válidas
network={
  ssid="simples"
  psk="senha super secreta"
  # Quanto maior a prioridade, mais rápido somos encontrados
  priority=5
}

# Igual ao anterior, mas pedir escaneamento específico de SSID (para APs que rejeitam
# broadcast SSID)
network={
  ssid="segundo ssid"
  scan_ssid=1
  psk="senha super secreta"
  priority=2
}

# Só WPA-PSK é usado. QUalquer combinação válida de cifras é usada
network={
  ssid="exemplo"
  proto=WPA
  key_mgmt=WPA-PSK
  pairwise=CCMP TKIP
  group=CCMP TKIP WEP104 WEP40
  psk=06b4be19da289f475aa46a33cb793029d4ab3db7a23ee92382eb0106c72ac7bb
  priority=2
}

# Conexão de texto simples (sem WPA, sem IEEE 802.1X)
network={
  ssid="textosimples-teste"
  key_mgmt=NONE
}

# Conexão de chave WEP compartilhada (sem WPA, sem IEEE 802.1X)
network={
  ssid="static-wep-test"
  key_mgmt=NONE
  wep_key0="abcde"
  wep_key1=0102030405
  wep_key2="1234567890123"
  wep_tx_keyidx=0
  priority=5
}

# Conexão de chave WEP compartilhada (sem WPA, sem IEEE 802.1X) usando chave compartilhada
# com autenticação IEEE 802.11
network={
  ssid="static-wep-test2"
  key_mgmt=NONE
  wep_key0="abcde"
  wep_key1=0102030405
  wep_key2="1234567890123"
  wep_tx_keyidx=0
  priority=5
  auth_alg=SHARED
}

# rede IBSS/ad-hoc com WPA-None/TKIP
network={
  ssid="test adhoc"
  mode=1
  proto=WPA
  key_mgmt=WPA-NONE
  pairwise=NONE
  group=TKIP
  psk="senha secreta"
}
							

4.c. Wireless Tools (ferramentas de wireless)

Configuração inicial e modo gerenciado

Wireless Tools fornecem um modo genérico de configurar interfaces de wireless básicas até o nível de segurança WEP. Embora o WEP seja um método de segurança fraco, também é o predominante.

A configuração do Wireless Tools é controlada por algumas variáveis principais. O arquivo de configuração abaixo deve descrever tudo de que você precisa. Uma coisa para ter em mente é que nenhuma configuração significa "conectar ao ponto de acesso sem criptografia mais forte" - nós sempre iremos tentar e conectar você com alguma coisa.

Listagem de código 3.1: Instale o wireless-tools

# emerge net-wireless/wireless-tools

Nota: Embora você possa gravar seus ajustes de wireless em /etc/conf.d/wireless este guia recomenda que você guarde-os em /etc/conf.d/net.

Importante: Você irá precisar consultar a documentação de nomes de variáveis.

Listagem de código 3.2: exemplo de ajuste de iwconfig em /etc/conf.d/net

# Preferir iwconfig ao invés de wpa_supplicant
modules=( "iwconfig" )

# Configurar chaves de WEP para pontos de acesso chamados ESSID1 e ESSID2
# Você pode configurar até 4 chaves WEP, mas só 1 pode estar ativa
# durante qualquer hora, então damos um índice padrão [1] para configurar a chave [1] e então
# novamente depois para mudar a chave ativa para [1]
# Fazemos isto caso você defina outros ESSID's para usar as chaves WEP fora 1
#
# Prefixar a chave com s: significa que é uma chave ASCII, caso contrário é uma chave HEX
#
# enc open specified open security (mais seguro)
# enc restricted specified restricted security (menos seguro)
key_ESSID1="[1] s:suachaveaqui key [1] enc open"
key_ESSID2="[1] aaaa-bbbb-cccc-dd key [1] enc restricted"

# O abaixo só funciona quando escaneamos pontos de acesso disponíveis

# Às vezes mais de um ponto de acesso está visível, então precisamos
# definir um preferido para conectar
preferred_aps=( "ESSID1" "ESSID2" )

Ajustes finos de seleção de pontos de acesso

Você pode encontrar algumas opções adicionais para fazer ajustes finos a sua seleção de pontos de acesso, mas não são normalmente necessários.

Você pode decidir se apenas conectamos aos pontos de acesso preferidos ou não. Por padrão, se tudo configurado falhar e pudermos conectar a um ponto de acesso sem criptografia, faremos isso. Isto pode ser controlado pela variável associate_order. Aqui está uma tabela de valores e como eles controlam isso.

Valor Descrição
any Comportamento padrão
preferredonly Só iremos conectar a pontos de acesso visíveis na lista de preferência
forcepreferred Nós iremos forçar a conexão a pontos de acesso na ordem preferida se não forem encontrados em um escaneamento
forcepreferredonly Não escanear pontos de acesso - ao invés disso, conectar-se a cada um em ordem
forceany Igual a forcepreferred + conectar a qualquer outro ponto de acesso disponível

Finalmente nós temos algumas seleções de blacklist_aps e unique_ap. blacklist_aps funciona de uma forma parecida a preferred_aps. unique_ap é um valor yes ou no que diz se uma segunda interface de wireless pode conectar-se ao mesmo ponto de acesso que a primeira interface.

Listagem de código 3.3: exemplo de blacklist_aps e unique_ap

# Às vezes você não deseja conectar-se a certos pontos de acesso
blacklist_aps=( "ESSID3" "ESSID4" )

# Se você tiver mais que um cartão wireless, você pode dizer se você quer
# permitir que cada cartão se associe com o mesmo ponto de acesso ou não
# Valores são "yes" e "no"
# O padrão é "yes"
unique_ap="yes"

Modos Ad-Hoc e Master

Se você quiser configurar-se como um node de Ad-Hoc se você não conseguir se conectar a nenhum ponto de acesso em modo gerenciado, você também pode fazê-lo.

Listagem de código 3.4: alternativa de modo ad-hoc

adhoc_essid_eth0="Este node de Adhoc"

E conectar-se a redes Ad-Hoc ou rodar em modo Master para tornar-se um ponto de acesso? Aqui está uma configuração para isto! Você pode precisar especificar chaves de WEP como mostrado acima.

Listagem de código 3.5: exemplo de configuração de ad-hoc/master

# Configurar o modo - pode ser gerenciado (padrão), ad-hoc ou master
# Nem todos drivers suportam todos modos
mode_eth0="ad-hoc"

# Configure o ESSID da interface
# Em modo gerenciado, isto força a interface a tentar e conectar-se ao
# ESSID especificado e nada mais
essid_eth0="Este node de Adhoc"

# Nós usamos o canal 3 se você não especificar um
channel_eth0="9"

Importante: O abaixo é tirado diretamente da documentação de wavelan do BSD encontrada na documentação do NetBSD. Existem 14 canais possíveis; É dito a nós que os canais 1-11 são legais para a América do Norte, canais 1-13 para a maior parte da Europa, canais 10-13 para a França, e só canal 14 para o Japão. Se em dúvida, por favor faça referência à documentação que veio junto com seu cartão ou ponto de acesso. Certifique-se de que o canal que você selecionar é o mesmo canal de seu ponto acesso (ou o mesmo cartão na rede ad-hoc). O padrão para cartões vendidos na América do Norte e a maior parte da Europa é 3; o padrão para cartões vendidos na França é 11, e o padrão para cartões vendidos no Japão é 14.

Resolvendo problemas com o Wireless Tools

Existem mais algumas variáveis que você pode usar para colocar sua conexão wireless para funcionar devido a problemas de driver ou ambiente. Aqui está uma tabela com outras coisas que você pode tentar.

Variável Valor padrão Descrição
iwconfig_eth0 Veja a página de manual do iwconfig para detalhes sobre o que enviar ao iwconfig
iwpriv_eth0 Ver a página de manual do iwpriv para detalhes sobre o que enviar ao iwpriv
sleep_scan_eth0 0 O número de segundos para dormir antes de tentar escanear. Isto é necessário quando o driver/firmware precisa de mais tempo para ser ativado antes de ser usado.
sleep_associate_eth0 5 O número de segundos para esperar que a interface se associe com um ponto de acesso antes de tentar o próximo
associate_test_eth0 MAC Alguns drivers não resetam o endereço de MAC associado com um inválido quando perdem ou tentam associação. Alguns drivers não resetam o nível de qualidade quando perdem ou tentam associação. Valores válidos são MAC, quality e all.
scan_mode_eth0 Alguns drivers aqui tem que escanear em modo ad-hoc, então se o escaneamento falhar, tentar configurar ad-hoc aqui
iwpriv_scan_pre_eth0 Envia alguns comandos de iwpriv para a interface antes de escanear. Ver a página de manual do iwpriv para mais detalhes
iwpriv_scan_post_eth0 Envia alguns comandos de iwpriv para a interface após escanear. Ver a página de manual do iwpriv para mais detalhes

4.d. Definindo configuração de rede por ESSID

Às vezes, você precisa de um IP estático quando você se conecta ao ESSID1 e você precisa de DHCP quando você se conecta ao ESSID2. Na verdade, a maior parte das variáveis de módulos podem ser definidas por ESSID. Aqui está como fazemos isto.

Nota: O seguinte funciona se você estiver usando WPA Supplicant ou Wireless Tools.

Importante: Você irá precisar consultar a documentação de nomes de variáveis.

Listagem de código 4.1: sobrepor ajustes de rede por ESSID

config_ESSID1=( "192.168.0.3/24 brd 192.168.0.255" )
routes_ESSID1=( "default via 192.168.0.1" )

config_ESSID2=( "dhcp" )
fallback_ESSID2=( "192.168.3.4/24" )
fallback_route_ESSID2=( "default via 192.168.3.1" )

# Nós também podemos definir servidores de nome e outras coisas
# NOTA: O DHCP irá sobrepor o seguinte a menos que seja dito o contrário
dns_servers_ESSID1=( "192.168.0.1" "192.168.0.2" )
dns_domain_ESSID1="algum.domínio"
dns_search_domains_ESSID1="procurar.este.domínio. procurar.aquele.domínio"

# Você sobrepõe por endereço de MAC do ponto de acesso
# É útil se você vai para diferentes lugares que tem o mesmo ESSID
config_001122334455=( "dhcp" )
dhcpcd_001122334455="-t 10"
dns_servers_001122334455=( "192.168.0.1" "192.168.0.2" )

5. Adicionando funcionalidade

5.a. Ganchos de função padrão

Quatro funções podem ser definidas que serão chamadas em torno das operações start/stop. As funções são chamadas com o nome da interface primeiro para que uma função possa controlar múltiplos adaptadores.

Os valores de retorno para as funções preup() e predown devem ser 0 (sucesso) para indicar que a configuração ou desconfiguração da interface pode continuar. Se preup() retornar um valor não-nulo, então a configuração de interface será abortada. Se o predown() retornar um valor não-nulo, então a interface não poderá continuar a desconfiguração.

Os valores de retorno para as funções postup() e postdown são ignorados, já que não há nada a fazer se eles indicarem falhas.

${IFACE} é configurado para a interface ser levantada/abaixada. ${IFVAR} é ${IFACE} convertido para um nome de variável permitido pelo bash

Listagem de código 1.1: exemplos de função pre/post up/down

preup() {
  # Testar link na interface antes de levantá-la. Isto
  # só funciona com alguns adaptadores de rede e precisa de que o pacote
  # mii-diag esteja instalado.
  if mii-tool ${IFACE} 2> /dev/null | grep -q 'no link'; then
    ewarn "No link on ${IFACE}, aborting configuration"
    return 1
  fi

  Testar link na interface antes de levantá-la. Isto
  # só funciona com alguns adaptadores de rede e precisa de que o pacote
  # ethtool esteja instalado.
  if ethtool ${IFACE} | grep -q 'Link detected: no'; then
    ewarn "No link on ${IFACE}, aborting configuration"
    return 1
  fi

  # Lembre-se de retornar 0 em caso de sucesso
  return 0
}

predown() {
  # O padrão no script é testar por raiz de NFS e proibir
  # abaixar interfaces no caso. Note que se você especificar uma
  # função predown() você irá sobrepor a lógica. Aqui está, em
  # caso que você ainda queira...
  if is_net_fs /; then
    eerror "sistema de arquivos raiz está montado em rede -- ${IFACE} não pode ser parada"
    return 1
  fi

  # Lembre-se de retornar 0 em caso de sucesso
  return 0
}

postup() {
  # Esta função pode ser usada, por exemplo, para registrar com
  # um serviço de DNS dinâmico. Outra possibilidade seria
  # enviar/receber correio uma vez que a interface for configurada.
  return 0
}

postdown() {
  # Esta função está aqui para ser completo... Não
  # pensei de nada interessante para fazer com ela ainda ;-)
  return 0
}

5.b. Ganchos de função para ferramentas wireless

Nota: Isto não irá funcionar com WPA suplicante - mas as variáveis ${ESSID} e ${ESSIDVAR} estão disponíveis na função postup().

Duas funções podem ser definidas que irão ser chamadas em torno da função associada. As funções são chamadas com o nome da interface primeiro para que uma função possa controlar múltiplos adaptadores.

Os valores de retorno para uma função preassociate() devem ser 0 (sucesso) para indicar que a configuração ou desconfiguração da interface pode continuar. Se preassociate() retornar um valor não-nulo, então a configuração de interface será abortada.

O valor de retorno para a função postassociate() é ignorado já que não há nada a fazer se indicar falha.

${ESSID} é configurado como o ESSID exato do AP a que você está se conectando. ${ESSIDVAR} é ${ESSID} convertido para um nome de variável permitido pelo bash

Listagem de código 2.1: funções pre/post association

preassociate() {
  # Abaixo são adicionadas duas variáveis de configuração leap_user_ESSID
  # e leap_pass_ESSID. Quando as duas são configuradas para o ESSID
  # sendo conectado, então nós rodamos o script CISCO LEAP

  local user pass
  eval user=\"\$\{leap_user_${ESSIDVAR}\}\"
  eval pass=\"\$\{leap_pass_${ESSIDVAR}\}\"

  if [[ -n ${user} && -n ${pass} ]]; then
    if [[ ! -x /opt/cisco/bin/leapscript ]]; then
      eend "Para suporte a LEAP support, por favor faça emerge net-misc/cisco-aironet-client-utils"
      return 1
    fi
    einfo "Esperando autenticação de LEAP em \"${ESSID//\\\\//}\""
    if /opt/cisco/bin/leapscript ${user} ${pass} | grep -q 'Login incorrect'; then
      ewarn "Login falhou para ${user}"
      return 1
    fi
  fi

  return 0
}

postassociate() {
  # Esta função está aqui para ser completo... Não
  # pensei de nada interessante para fazer com ela ainda ;-)

  return 0
}

Nota: ${ESSID} e ${ESSIDVAR} não estão disponíveis nas funções predown() e postdown().

6. Gerenciamento de rede

6.a. Gerenciamento de rede

Se você e seu computador estiverem sempre em tráfego, você pode nem sempre ter um cabo de ethernet plugado ou um ponto de acesso (AP) disponível. Também, nós podemos desejar que a rede funcione automaticamente se um cabo de ethernet for plugado ou um ponto de acesso encontrado.

Aqui você encontra algumas ferramentas que ajudam a gerenciar isto.

Nota: Este documento só fala sobre o ifplugd, mas existem alternativas que você pode considerar, como quickswitch.

6.b. ifplugd

ifplugd é um daemon que iniciar e pára interfaces quando um cabo de ethernet é inserido ou removido. Também pode gerenciar a detecção de associação a pontos de acesso ou quando novos entram em alcance.

Listagem de código 2.1: Instalando o ifplugd

# emerge sys-apps/ifplugd

A configuração do ifplugd é bem simples também. O arquivo de configuração fica em /etc/conf.d/ifplugd. Rode man ifplugd para detalhes sobre o que fazem as variáveis.

Listagem de código 2.2: exemplo de configuração de ifplug

# Definir que interfaces monitorar
INTERFACES="eth0"

AUTO="no"
BEEP="yes"
IGNORE_FAIL="yes"
IGNORE_FAIL_POSITIVE="no"
IGNORE_RETVAL="yes"
POLL_TIME="1"
DELAY_UP="0"
DELAY_DOWN="0"
API_MODE="auto"
SHUTDOWN="no"
WAIT_ON_FORK="no"
MONITOR="no"
ARGS=""

# Parâmetros adicionais para ifplugd para a interface especificada. Note que
# a variael global é ignorada quando uma variável com esta é ajustada para uma
# interface
MONITOR_wlan0="yes"
DELAY_UP_wlan0="5"
DELAY_DOWN_wlan0="5"

Imprimir

Atualizado 1 de julho de 2007

A versão original deste documento foi atualizada em 25 de setembro de 2014

Resumo: Este é o Manual do Gentoo, um esforço para a centralização de informações sobre o Gentoo/Linux. Este manual contém instruções de instalação para uma instalação com acesso à Internet em sistemas x86 e partes sobre como trabalhar com o Gentoo e o Portage.

Sven Vermeulen
Autor

Roy Marples
Autor

Daniel Robbins
Autor

Chris Houser
Autor

Jerry Alexandratos
Autor

Seemant Kulleen
Desenvolvedor do Gentoo x86

Tavis Ormandy
Desenvolvedor do Gentoo Alpha

Jason Huebel
Desenvolvedor do Gentoo AMD64

Guy Martin
Desenvolvedor do Gentoo HPPA

Pieter Van den Abeele
Desenvolvedor do Gentoo PPC

Joe Kallar
Desenvolvedor do Gentoo SPARC

John P. Davis
Editor

Pierre-Henri Jondot
Editor

Eric Stockbridge
Editor

Rajiv Manglani
Editor

Jungmin Seo
Editor

Stoyan Zhekov
Editor

Jared Hudson
Editor

Colin Morey
Editor

Jorge Paulo
Editor

Carl Anderson
Editor

Jon Portnoy
Editor

Zack Gilburd
Editor

Jack Morgan
Editor

Benny Chuang
Editor

Erwin
Editor

Joshua Kinard
Editor

Tobias Scherbaum
Editor

Xavier Neys
Editor

Grant Goodyear
Revisor

Gerald J. Normandin Jr.
Revisor

Donnie Berkholz
Revisor

Ken Nowack
Revisor

Lars Weiler
Colaborador

Enderson Maia
Tradutor Responsável

Marcelo Góes
Tradutor

Eduardo Magalhães
Tradutor

Marcelo Azambuja
Tradutor

Marcos Vinicius Buzo
Tradutor

Donate to support our development efforts.

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