Puppet Ubuntu · 6 min read · Feb 07, 2026

Automação de Configuração e Gerenciamento Centralizado com Puppet no Ubuntu

Automação de Configuração e Gerenciamento Centralizado com Puppet no Ubuntu

Autor: Kent Brede

Baseado em http://reductivelabs.com/trac/puppet/wiki/InstallationGuide

Introdução

Este é um tutorial passo a passo sobre como instalar o componente servidor do Puppet (puppetmaster) em uma máquina e o cliente Puppet (puppetd) em outra. Em seguida, realizamos um teste simples para garantir que o Puppet está funcionando corretamente.

Se você não está familiarizado com o Puppet, é uma ferramenta de automação de configuração que permite centralizar o gerenciamento das várias versões do *nix que estão rodando em sua rede. O Puppet suporta o gerenciamento central dos aspectos importantes de seus sistemas, como: arquivos, pacotes, usuários, serviços, cron, montagens, etc. Para uma descrição mais completa, visite a Reductive Labs.

Contexto

Esta instalação é realizada no Ubuntu 6.06 LTS Server, mas deve funcionar para a maioria das versões Debian/Ubuntu com pequenas modificações.

No momento da redação deste texto, os pacotes atuais do Puppet para Ubuntu podem ser encontrados no Feisty. Procure pacotes Debian atuais no Unstable.

Durante este tutorial, usaremos example.com como nosso nome de domínio. O servidor receberá o nome de host “puppet” e o IP 192.168.10.1. O nome do host do cliente é “pclient” com o IP 192.168.10.2.

1. Requisitos de Rede

Se o DNS não estiver configurado em sua rede, verifique se os arquivos hosts no servidor e no cliente incluem entradas para ambas as máquinas. Para este cenário, as seguintes entradas seriam adicionadas ao /etc/hosts. Use seu editor de texto favorito para adicionar linhas refletindo suas próprias configurações de rede, semelhantes às linhas abaixo.

192.168.10.1 puppet.example.com puppet
192.168.10.2 pclient.example.com pclient

O servidor roda na porta 8140. Certifique-se de que não há firewall bloqueando a porta 8140 entre as duas máquinas.

2. Configuração do Apt

Muitos dos pacotes que precisamos estão no repositório universe. Se as seguintes linhas não estiverem descomentadas em “sources.list”, usando seu editor de texto favorito, encontre e descomente-as no servidor.

puppet:# vim /etc/apt/sources.list

# deb http://us.archive.ubuntu.com/ubuntu/ dapper universe
# deb http://security.ubuntu.com/ubuntu dapper-security universe

Como estamos usando uma versão anterior do Ubuntu, vamos configurar o apt para pegar facilmente os pacotes do Puppet do Feisty. Ajuste as fontes conforme necessário para refletir sua versão do SO. Se você não está familiarizado com os passos nesta seção, veja a seção 3.10 no Apt-Howto.

Abra “sources.list” e adicione as duas linhas que seguem.

puppet:# vim /etc/apt/sources.list

deb http://us.archive.ubuntu.com/ubuntu/ feisty universe
deb http://security.ubuntu.com/ubuntu feisty-security universe

Atualize sua lista de fontes.

puppet:# apt-get update

Realize os mesmos passos acima em “pclient.”

Em seguida, vamos configurar o apt para puxar os pacotes que precisamos para nossa configuração do Puppet do Feisty, mas permitir que todos os outros pacotes venham do repositório Dapper. Adicione as seguintes linhas ao arquivo “preferences”.

No servidor:

puppet:# vim /etc/apt/preferences

Package: *
Pin: release a=dapper
Pin-Priority: 700

Package: facter
Pin: release a=feisty
Pin-Priority: 500

Package: puppet
Pin: release a=feisty
Pin-Priority: 500

Package: puppetmaster
Pin: release a=feisty
Pin-Priority: 500

No cliente:

pclient:# vim /etc/apt/preferences

Package: *
Pin: release a=dapper
Pin-Priority: 700

Package: facter
Pin: release a=feisty
Pin-Priority: 500

Package: puppet
Pin: release a=feisty
Pin-Priority: 500

3. Requisitos de Software

Em preparação para nossa instalação do Puppet, precisamos de algumas bibliotecas e pacotes instalados tanto no servidor quanto no cliente. No momento da redação deste texto, se este conjunto não for instalado primeiro, um loop de dependência ocorrerá.

puppet:# apt-get install libopenssl-ruby rdoc irb1.8 libopenssl-ruby1.8 libreadline-ruby1.8 libruby1.8 rdoc1.8 ruby1.8

pclient:# apt-get install libopenssl-ruby rdoc irb1.8 libopenssl-ruby1.8 libreadline-ruby1.8 libruby1.8 rdoc1.8 ruby1.8

4. Instalação do Cliente

Instale o Puppet e o Facter do Feisty.

pclient:# apt-get -t feisty install facter puppet

5. Instalação do Servidor

Instale o Puppet, Facter e Puppetmaster. O script pós-instalação tentará iniciar o servidor e apresentará um erro. Não se preocupe com isso. Vamos criar o manifesto durante o passo 6.

puppet:# apt-get -t feisty install facter puppet puppetmaster

…..
Iniciando o servidor mestre da ferramenta de gerenciamento de configuração do puppet
Manifest /etc/puppet/manifests/site.pp deve existir [falha]

6. Preparação do Servidor

O servidor (puppetmasterd) requer que um manifesto esteja em vigor antes de poder ser executado. Vamos escrever um manifesto que diz ao puppet para criar um arquivo “/tmp/testfile” no cliente.

puppet:# vim /etc/puppet/manifests/site.pp

# Crie "/tmp/testfile" se não existir.
class test_class {
    file { "/tmp/testfile":
       ensure => present,
       mode   => 644,
       owner  => root,
       group  => root
    }
}

# diga ao puppet em qual cliente executar a classe
node pclient {
    include test_class
}

Agora inicie o servidor puppet.

puppet:# /etc/init.d/puppetmaster start

6. Preparação do Cliente

Os clientes, por padrão, se conectarão a um servidor em sua rede com um nome de host “puppet.” Se o nome do host do seu servidor não for “puppet,” uma diretiva precisa ser inserida no arquivo de configuração do puppetd “puppetd.conf.” Embora não precisemos fazer isso neste caso, faremos por motivos de demonstração.

Abra “/etc/puppet/puppetd.conf” com seu editor de texto favorito e adicione “server = puppet.example.com” ao arquivo existente, como o exemplo abaixo indica.

pclient:# vim /etc/puppet/puppetd.conf

[puppetd]
server = puppet.example.com

# Certifique-se de que todas as mensagens de log sejam enviadas para o diretório correto
# Este diretório deve ser gravável pelo usuário puppet
logdir=/var/log/puppet
vardir=/var/lib/puppet
rundir=/var/run

7. Assinar Chaves

Para que os dois sistemas se comuniquem de forma segura, precisamos criar certificados SSL assinados. Você deve estar logado em ambas as máquinas, servidor e cliente, para este próximo passo.

No lado do cliente, execute.

pclient:# puppetd –server puppet.example.com –waitforcert 60 –test

Você deve ver a seguinte mensagem.

err: Sem certificado; executando com funcionalidade reduzida.
info: Criando um novo pedido de certificado para pclient.example.con
info: Solicitando certificado
warnings: o certificado do par não será verificado nesta sessão SSL
notice: Não recebeu certificado

Em seguida, no lado do servidor, execute o seguinte comando para verificar se o cliente está aguardando que o certificado seja assinado.

puppet:# puppetca –list

pclient.example.con

Então assine o certificado.

puppet:# puppetca –sign pclient.example.com

Assinado pclient.example.com

Se tudo correu bem, você deve ver esta mensagem no pclient.

info: Solicitando certificado
warnings: o certificado do par não será verificado nesta sessão SSL
notice: Ignorando –listen em execução única
info: Armazenando configuração em /etc/puppet/localconfig.yaml
notice: Iniciando execução de configuração
notice: //pclient/test_class/File[/tmp/testfile]/ensure: criado
info: Criando arquivo de estado /var/lib/puppet/state/state.yaml
notice: Execução de configuração concluída em 0.11 segundos

8. Teste

Verifique e certifique-se de que o arquivo foi criado.

pclient:# ls -l /tmp/testfile

-rw-r–r– 1 root root 0 2007-02-18 18:28 /tmp/testfile

Para um teste, vamos editar o manifesto e direcionar o Puppet a modificar o modo do arquivo. Altere a linha, “mode => 644,” para “mode => 600,”

puppet:# vim /etc/puppet/manifests/site.pp

# Crie "/tmp/testfile" se não existir.
class test_class {
    file { "/tmp/testfile":
       ensure => present,
       mode   => 600,
       owner  => root,
       group  => root
    }
}

# diga ao puppet em qual cliente executar a classe
node pclient {
    include test_class
}

No cliente, execute puppetd em modo verbose (-v) e apenas uma vez (-o).

pclient:# puppetd -v -o

Você deve ver a seguinte mensagem, que afirma que /tmp/testfile mudou de modo 644 para 600.

notice: Ignorando –listen em execução única
info: A configuração está atualizada
notice: Iniciando execução de configuração
notice: //pclient/test_class/File[/tmp/testfile]/mode: modo alterado ‘644’ para ‘600’
notice: Execução de configuração concluída em 0.26 segundos

Para verificar se o trabalho foi concluído corretamente.

pclient:# ls -l /tmp/testfile

-rw——- 1 root root 0 2007-02-18 18:28 /tmp/testfile

9. Conclusão

Parabéns, o teste está completo e você tem uma configuração do Puppet funcionando. Seu próximo passo é criar um manifesto funcional, testar mais e então iniciar o daemon puppetd no lado do cliente. O puppetd, por padrão, irá automaticamente consultar o servidor a cada 30 minutos.

pclient:# /etc/init.d/puppet start

Para mais informações, visite a Reductive Labs. Para ajuda amigável e conhecedora, junte-se aos Usuários do Puppet ou passe pelo #puppet no irc.freenode.net.

Share: X/Twitter LinkedIn

Receba novas postagens na sua caixa de entrada

Sem spam. Cancele a assinatura a qualquer momento.