Eu acho que esta é provavelmente a pergunta errada. Certamente, o uso de ferramentas de gerenciamento de configuração, como o Puppet e o Chef, para manter sua infraestrutura é um enorme passo em frente ao tentar fazer tudo manualmente. A questão de manter suas versões de pacotes atualizadas e em sincronia não é uma que qualquer dessas ferramentas resolva diretamente. Para automatizar isso corretamente, você precisa colocar os próprios repositórios de pacotes sob seu controle.
A maneira que eu faço isso é manter um repositório Yum dedicado (para Redhat / Fedora / CentOS; um repositório APT para Debian / Ubuntu) que contém os pacotes que eu gosto para um site em particular. Geralmente, essas são as dependências do próprio aplicativo (Ruby, PHP, Apache, Nginx, bibliotecas e assim por diante) e pacotes críticos para a segurança.
Uma vez que você tenha esta configuração (normalmente você pode apenas espelhar os pacotes requeridos do repositório upstream para começar), você pode usar a sintaxe "ensure = > latest" do Puppet para garantir que todas as suas máquinas estejam atualizadas com o repo.
Seria sensato usar um repositório de "teste" para permitir que você teste versões atualizadas de pacotes antes de transferi-los para a produção. Isso é feito facilmente com o Puppet sem qualquer duplicação de código usando modelos de repositório.
Automatizar a versão do seu pacote encoraja você a colocar todos os seus sistemas de produção em sincronia, já que a manutenção de múltiplos repositórios e pacotes para diferentes distribuições de SO, versões e arquiteturas de máquina é muito demorada e pode levar a todos os tipos de problemas obscuros. incompatibilidades.
Todos esses conselhos se aplicam igualmente às gemas Ruby, ovos Python e outros sistemas de pacotes que você pode usar.
Eu escrevi um pequeno tutorial Puppet , que deve ajudá-lo a se levantar e correr com o Puppet rapidamente. Você poderia implantar uma definição de repositório personalizado em suas máquinas usando o Puppet como o primeiro passo para controlar as versões dos pacotes.