No tutorial anterior, construímos um binhost dedicado para compilar seus pacotes. Agora é a hora de configurar seus servidores para consumir esses pacotes. Neste guia de continuidade, configuraremos seus servidores. Ao apontar suas instalações do Portage para o seu binhost, essas máquinas poderão instalar e atualizar pacotes em minutos, em vez de levar um dia inteiro.

Pré-requisitos e Suposições

  • Armazenamento Compartilhado: Supomos que cada servidor tenha acesso a uma pasta remota (via NFS, SMB ou um drive de nuvem montado) em um ponto de montagem específico ao qual nos referiremos como <path>. Adicionar outra camada de complexidade mantendo um canal lateral para distribuição, como rsync via ssh, é uma dor de cabeça desnecessária.
  • Estrutura de Pastas: Nesse caminho, o binhost populou <path>/<host>/binpkgs com os pacotes compilados do último guia e <path>/gentoo com a árvore do repositório Portage.
  • Sem Sincronizações Locais: Como o repositório é compartilhado, essas máquinas clientes não devem mais executar emerge --sync. Elas sempre lerão o estado do repositório gerenciado pelo binhost.
  • A Chave Pública: Certifique-se de que o arquivo binhost-public.asc (gerado na Parte 1) foi copiado para o diretório de trabalho atual do seu servidor cliente. Tudo isso precisa ser feito apenas uma vez.

Etapa 1: Centralizando o Repositório e o Cache de Binários

Para garantir que seu servidor cliente sempre use exatamente os mesmos pacotes e repositório que o seu binhost, removeremos as cópias locais da árvore do Gentoo e do cache de binários, substituindo-as por links simbólicos para o seu armazenamento compartilhado. Primeiro, limpe quaisquer pacotes binários locais existentes para economizar espaço em disco:

rm -rf /var/cache/binpkgs

Em seguida, remova a árvore local do repositório Portage:

rm -rf /var/db/repos/gentoo

Agora, vincule seu cache de binários diretamente aos pacotes compilados do binhost. Substitua <path> pelo seu ponto de montagem e <host> pelo nome do host da máquina do seu binhost:

ln -s <path>/<host>/binpkgs /var/cache/binpkgs

Vincule a árvore Portage à pasta do repositório compartilhado:

ln -s <path>/gentoo /var/db/repos/gentoo

Por que fazer isso? Ao usar links simbólicos, sua máquina cliente nunca ficará dessincronizada com a máquina compiladora. Como o repositório agora é compartilhado, esta máquina cliente não precisa mais executar emerge --sync. O binhost lida com a sincronização e o cliente simplesmente lê os dados compartilhados.

Etapa 2: Assinatura do Binhost

O Portage se recusará a instalar pacotes binários a menos que confie na chave GPG que os assinou. Precisamos importar a chave pública do nosso binhost e dizer ao Portage que ela é a autoridade máxima para esses pacotes. Importe a chave pública para o diretório home específico do GPG do Portage:

gpg --homedir=/etc/portage/gnupg --import "binhost-public.asc"

Abra o editor de chaves do GPG para alterar o nível de confiança para esta chave:

gpg --homedir=/etc/portage/gnupg --edit-key <keyid>

Quando o prompt do GPG aparecer, digite trust. Um menu será apresentado. Selecione 5 (Confiança absoluta) e confirme. Isso diz ao Portage para confiar automaticamente em qualquer pacote assinado por esta chave, sem pausar para pedir confirmação do usuário. Digite quit para sair. Verifique se o banco de dados de confiança foi atualizado corretamente:

gpg --homedir=/etc/portage/gnupg --check-trustdb

Etapa 3: Atualizando o Sistema via Binários

Agora chega a parte mais satisfatória. Atualizaremos o sistema usando os arquivos binários. Como estamos nos baseando em um repositório compartilhado em vez de realizar sincronizações locais, você não receberá aquela mensagem tradicional dizendo para atualizar seu portage. Basta fazer isso toda vez ou criar um script para verificar a versão a cada atualização.

emerge --oneshot sys-apps/portage

Execute uma atualização completa do sistema:

emerge --update --deep --newuse --ask @world

O que está acontecendo aqui? O Portage irá analisar o conjunto @world, calcular as dependências e procurar os pacotes necessários em /var/cache/binpkgs. Em vez de baixar o código-fonte e compilá-lo na máquina cliente, ele usará os arquivos pré-compilados da sua pasta compartilhada. Para uma máquina velha ou fraca, isso transforma uma atualização de 12 horas em um processo de 15 minutos!

Por fim, limpe as dependências órfãs:

emerge --depclean

Conclusão

Seu servidor cliente está agora totalmente integrado ao ecossistema do seu binhost! A partir de agora, a manutenção do sistema, as atualizações de pacotes e as mudanças nas flags USE podem ser implementadas em toda a sua frota de máquinas quase instantaneamente.