Estou curioso para saber como as pessoas estão implementando as portas do FreeBSD em seu ambiente. Suponho que a maioria das pessoas que usam o FreeBSD realmente esteja usando o Ports (e geralmente portupgrade para atualizar com os binários). No entanto, estou interessado em saber como você tem essa configuração, pois não estou satisfeito com o funcionamento das versões recentes. Agora estou executando o FreeBSD 9.0 e estou tendo problemas.
Eu configurei as coisas da seguinte maneira:
- / usr / ports é compartilhado via NFS a partir de um nó (com 'atualização de busca de portsnap' noturna).
- Cada nó monta / usr / ports com leitura / gravação
- Eu configurei "WRKDIRPREFIX = / usr / tmp" no /etc/make.conf em todos os nós
- Eu configurei o Portsnap para usar um índice local adicionando o seguinte ao /usr/local/etc/pkgtools.conf:
ENV['LOCALINDICES'] ||= '/var/db'
ENV['PORTS_INDEX'] ||= ENV['LOCALINDICES'] + '/INDEX.local'
Posso executar portupgrade -p package
com êxito para criar um pacote e depois portupgrade -P package
instalar o binário nos outros nós.
No entanto, em algum momento recebo o seguinte problema: /var/db/INDEX.local:23265:dbm_store failed
Não consigo pensar em outras otimizações que posso fazer no sistema, pois o índice agora reside localmente, e a única coisa realmente exportada é a árvore de portas e nada é escrito nele a partir dos nós.
Respostas:
Nunca fiquei totalmente satisfeito com o sistema de portas em um ambiente amplo - sempre parece que você precisa aplicar algum gerenciamento externo a ele para fazê-lo funcionar bem.
Minhas melhores dicas (em ordem de preferência crescente, solução "pior" para solução "melhor"):
Se você está construindo em cada host, não .
Se necessário, não faça isso no NFS com montagens de leitura e gravação como você descreve: Geralmente, você pode confiar nas portas para fazer a coisa certa e não pisar na árvore de portas se você fornecer diretórios de trabalho alternativos, mas é sempre melhor lembre-se: execute um espelho CVS / csup local e csup todos os seus hosts nessa caixa e construa localmente como faria se fossem máquinas individuais.
Sim, eu sei que isso significa ter mais espaço em disco nos hosts e uma etapa extra. Também é quase garantido que está livre de problemas.
Embargo: Você provavelmente deseja sincronizar os arquivos de configuração do pacote (rsync ou similar) de um "host de configuração" designado para garantir consistência em cada máquina (você pode até sincronizar a árvore inteira de portas, se desejar, em vez de usar o csup em cada nó).
Use um host de compilação, crie pacotes e instale-os.
Uma solução muito melhor do que construir em cada máquina individual: use um host de criação para criar pacotes e aponte suas ferramentas para esses pacotes.
Isso significa manter um host de construção disponível para todas as arquiteturas executadas (ou compilação cruzada), mas, no final das contas, é mais agradável para as máquinas de destino (sem grandes tarefas de compilação, garantia de consistência)
Use uma ferramenta de configuração / gerenciamento de sistema.
Essa é a solução com a qual eu acabei - eu crio uma imagem de servidor padrão e a implanto no meu ambiente usando
radmind
. Você pode fazer coisas semelhantes com o Puppet ou o Chef . Isso tem todas as vantagens de usar um host de construção (consistência, menos carga nos servidores individuais) e adiciona os benefícios do gerenciamento de configuração.Advertência: Isso só funciona muito bem se suas máquinas são "idênticas" - ou seja, você pode instalar o mesmo conjunto de portas em todas elas. Ele pode funcionar se você têm diferentes conjuntos de portas, mas que aumenta substancialmente a sobrecarga administrativa.
Disclaimer: Eu sou o mantenedor da porta
sysutils/radmind
. Sim, eu gosto tanto que adotei.Tudo isso é baseado na minha experiência no gerenciamento de ambientes FreeBSD de vários tamanhos (variando de 1 a 2 máquinas a mais de 100). Ferramentas de configuração / gerenciamento de sistema que enviam e mantêm uma imagem padronizada são realmente a melhor maneira de lidar com isso na minha experiência.
fonte
Estranho que ninguém tenha mencionado ports-mgmt / tinderbox :
A mudança para o pkgng simplifica bastante as implantações de pacotes.
Confira no github: https://github.com/pkgng/pkgng
fonte
PACKAGEROOT
/PACKAGESITE
e use radmind ou Puppet / Chef).pkg_delete
deve ser executado primeiro e depois instalar a nova versão. O OpenBSD lidou melhor com isso incluindo uma opção de atualização nopkg_add
. Não tenho certeza sobre o Portupgrade, mas o portmaster pode funcionar apenas usando INDEX e não uma árvore de portas completa.Eu gerenciei mais de 100 servidores FreeBSD simplesmente compartilhando / usr somente leitura em NFS bem ajustado, movendo os bancos de dados de pacotes de / var para / usr e associando-os a eles (não é estritamente necessário, mas habilita o pkg_info e outros). Pode ter havido um ou dois outros arquivos que precisavam ser movidos em uma direção ou outra e com link simbólico, mas toda a instalação levou cerca de uma hora para descobrir. Funcionou muito, muito bem. Se eu tivesse problemas de dimensionamento, adicionaria servidores NFS adicionais e dividiria a carga de trabalho, mas ela nunca apareceu. O desempenho nunca foi um problema para mim (na verdade, foi ótimo), mas suponho que você possa colocar o / usr do servidor NFS (ou uma cópia dele) em um MD.
fonte
Parece que ninguém conseguiu uma boa solução para isso, infelizmente. Provavelmente, isso se deve a limitações nas ferramentas subjacentes.
Aqui está o que eu criei: eu descartei a ideia de exportar toda a árvore de portas. Em vez disso, cedi e coloquei uma árvore de portas completa em cada nó. Em seguida, montei 'packages' no NFS (para permitir a distribuição de pacotes).
Também pretendo utilizar um proxy de cache (provavelmente o Squid) para acelerar o processo do portnap. Eu escrevi um pequeno post sobre como configurar isso no meu blog.
Referências:
fonte