objetivo

Descrever a instalação do serviço puppetmaster em centos 6.2

Este servidor deve atender o agentes em centos 5.x e 6.x

sobre o puppet

O Puppet é uma ferramenta que nos permite fazer o gerenciamento das configurações dos sistemas e serviços de um parque UNIX/LINUX.

premissas

Partiremos do premissa de que você tem uma instalação limpa do CENTOS 6.2 64 bits.

requisitos

repositorios

puppetlabs

instalando repo

yum install http://yum.puppetlabs.com/el/6/products/i386/puppetlabs-release-6-1.noarch.rpm

atualize os índices de pacotes

yum update

veja a versão do pacote puppet-server

[root@localhost httpd]# yum info puppet-server.noarch

saída

Loaded plugins: fastestmirror, refresh-packagekit, security
Loading mirror speeds from cached hostfile
 * base: mirror.ueg.br
 * epel: mirror.umd.edu
 * extras: mirror.ueg.br
 * passenger: mirror.hmdc.harvard.edu
 * updates: mirror.ueg.br
Available Packages
Name        : puppet-server
Arch        : noarch
Version     : 2.7.14
Release     : 2.el6
Size        : 23 k
Repo        : puppetlabs-products
Summary     : Server for the puppet system management tool
URL         : http://puppetlabs.com
License     : ASL 2.0
Description : Provides the central puppet server daemon which provides manifests to clients.
            : The server can also function as a certificate authority and file server.

instalação puppetmaster

vamos istalar o pacote puppet-master, esse pacote tem um servidor web chamado webrick embutido.

instalando pacotes

yum install puppet-server puppet

iniciando puppet

Use o comando abaixo para iniciar o puppet

service puppetmaster start

Com isto já temos o puppet rodando, use o netstat para verificar

netstat -ntpl|grep ruby

Você vai encontrar uma saída similar

tcp        0      0 0.0.0.0:8140                0.0.0.0:*                   OUÇA       19100/ruby

instalando puppetmaster passenger

Para que o puppet suporte um grande número de conexões vamos integra-lo ao apache2 com modrails (passenger). Isso se faz necessário pois o servidor de app interno do puppet não escala muito bem quando temos mais de 50 clientes e muitas conexões simultâneas.

configurando puppet.conf

Adicione as linhas ao final da seção master

[master]
...
ssl_client_header = SSL_CLIENT_S_D
ssl_client_verify_header = SSL_CLIENT_VERIFY

pacotes devel centos

instalando ferramentas de desenvolvimento

yum groupinstall "Ferramentas de Desenvolvimento"

pacotes devel para httpd e ruby

instalando dependencias apache e ruby

yum install httpd-devel ruby-devel ruby-rdoc rubygems

pacotes devel para passenger

instalando dependencias para criar modulo passenger

yum install curl openssl zlib curl-devel openssl-devel zlib-devel

pacotes rack e passenger (via gem)

instalando o rack

gem install rack

saída

Successfully installed rack-1.4.1
1 gem installed
Installing ri documentation for rack-1.4.1...
Installing RDoc documentation for rack-1.4.1...

instalando o passenger

gem install passenger

saída

Building native extensions.  This could take a while...
Successfully installed fastthread-1.0.7
Successfully installed daemon_controller-1.0.0
Successfully installed passenger-3.0.12
3 gems installed
Installing ri documentation for fastthread-1.0.7...

No definition for dummy_dump
No definition for dummy_dump
No definition for rb_queue_marshal_load
No definition for rb_queue_marshal_dump
No definition for dummy_dump
No definition for dummy_dump
No definition for rb_queue_marshal_load
No definition for rb_queue_marshal_dump

Installing ri documentation for daemon_controller-1.0.0...
Installing ri documentation for passenger-3.0.12...
Installing RDoc documentation for fastthread-1.0.7...

No definition for dummy_dump
No definition for dummy_dump
No definition for rb_queue_marshal_load
No definition for rb_queue_marshal_dump
No definition for dummy_dump
No definition for dummy_dump
No definition for rb_queue_marshal_load
No definition for rb_queue_marshal_dump
Installing RDoc documentation for daemon_controller-1.0.0...
Installing RDoc documentation for passenger-3.0.12...

agora vamos instalar o módulo passenger para o apache2 http

passenger-install-apache2-module

saída

Welcome to the Phusion Passenger Apache 2 module installer, v3.0.12.

This installer will guide you through the entire installation process. It
shouldn't take more than 3 minutes in total.

Here's what you can expect from the installation process:

 1. The Apache 2 module will be installed for you.
 2. You'll learn how to configure Apache.
 3. You'll learn how to deploy a Ruby on Rails application.

Don't worry if anything goes wrong. This installer will advise you on how to
solve any problems.

Press Enter to continue, or Ctrl-C to abort.

--------------------------------------------

Checking for required software...

 * GNU C++ compiler... found at /usr/bin/g++
 * Curl development headers with SSL support... found
 * OpenSSL development headers... found
 * Zlib development headers... found
 * Ruby development headers... found
 * OpenSSL support for Ruby... found
 * RubyGems... found
 * Rake... found at /usr/bin/rake
 * rack... found
 * Apache 2... found at /usr/sbin/httpd
 * Apache 2 development headers... found at /usr/sbin/apxs
 * Apache Portable Runtime (APR) development headers... found at /usr/bin/apr-1-config
 * Apache Portable Runtime Utility (APU) development headers... found at /usr/bin/apu-1-config

--------------------------------------------
Compiling and installing Apache 2 module...
--------------------------------------------
The Apache 2 module was successfully installed.

Please edit your Apache configuration file, and add these lines:

   LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-3.0.12/ext/apache2/mod_passenger.so
   PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-3.0.12
   PassengerRuby /usr/bin/ruby

After you restart Apache, you are ready to deploy any number of Ruby on Rails
applications on Apache, without any further Ruby on Rails-specific
configuration!

Press ENTER to continue.

veja vamos atender ao pedido, cria uma arquivo passenger.conf dentro de /etc/httpd/conf.d

/etc/httpd/conf.d/passenger
LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-3.0.12/ext/apache2/mod_passenger.so
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-3.0.12
PassengerRuby /usr/bin/ruby

agora vamos prosseguir

<code>

Deploying a Ruby on Rails application: an example

Suppose you have a Rails application in /somewhere. Add a virtual host to your Apache configuration file and set its DocumentRoot to /somewhere/public:

 <VirtualHost *:80>
    ServerName www.yourhost.com
    # !!! Be sure to point DocumentRoot to 'public'!
    DocumentRoot /somewhere/public    
    <Directory /somewhere/public>
       # This relaxes Apache security settings.
       AllowOverride all
       # MultiViews must be turned off.
       Options -MultiViews
    </Directory>
 </VirtualHost>

And that's it! You may also want to check the Users Guide for security and optimization tips, troubleshooting and other useful information:

/usr/lib/ruby/gems/1.8/gems/passenger-3.0.12/doc/Users guide Apache.html

Enjoy Phusion Passenger, a product of Phusion (www.phusion.nl) :-)

</code>

aqui ele pede para criarmos um arquivo em /etc/httpd/conf, podemos ao invés disto, copiar o arquivo do diretorio examples

cp /usr/share/puppet/ext/rack/files/apache2.conf /etc/httpd/conf.d/puppetmaster.conf

agora precisamos ajustar o conteúdo do arquivo, principalmente o nome dos certificados, mas antes vamos habilitar os módulos SSL e HEADERS, no caso do centos precisamos instalar um pacote

yum install mod_ssl

vamos aproveitar para criar diretórios do rack necessário para funcionamento do puppet

mkdir -p /usr/share/puppet/rack/puppetmasterd
mkdir /usr/share/puppet/rack/puppetmasterd/public 
mkdir /usr/share/puppet/rack/puppetmasterd/tmp
cp /usr/share/puppet/ext/rack/files/config.ru /usr/share/puppet/rack/puppetmasterd
chown puppet /usr/share/puppet/rack/puppetmasterd/config.ru

agora vamos ajustar o arquivo puppetmaster.conf de acordo com o arquivo abaixo, lembre-se de corrigir o nome do seu certificado (nome da sua máquina).

/etc/httpd/conf.d/puppetmaster.conf
# you probably want to tune these settings
PassengerHighPerformance on
PassengerMaxPoolSize 12
PassengerPoolIdleTime 1500
# PassengerMaxRequests 1000
PassengerStatThrottleRate 120
RackAutoDetect Off
RailsAutoDetect Off
 
Listen 8140
<VirtualHost *:8140>
 
    SSLEngine on
    SSLCipherSuite SSLv2:-LOW:-EXPORT:RC4+RSA
    SSLCertificateFile      /var/lib/puppet/ssl/certs/galaxy.dominio.local.pem
    SSLCertificateKeyFile   /var/lib/puppet/ssl/private_keys/galaxy.dominio.local.pem
    SSLCertificateChainFile /var/lib/puppet/ssl/ca/ca_crt.pem
    SSLCACertificateFile    /var/lib/puppet/ssl/ca/ca_crt.pem
    # CRL checking should be enabled; if you have problems with Apache complaining about the CRL, disable the next line
    SSLCARevocationFile     /var/lib/puppet/ssl/ca/ca_crl.pem
    SSLVerifyClient optional
    SSLVerifyDepth  1
    SSLOptions +StdEnvVars
 
    # The following client headers allow the same configuration to work with Pound.
    RequestHeader set X-SSL-Subject %{SSL_CLIENT_S_DN}e
    RequestHeader set X-Client-DN %{SSL_CLIENT_S_DN}e
    RequestHeader set X-Client-Verify %{SSL_CLIENT_VERIFY}e
 
    RackAutoDetect On
    DocumentRoot /usr/share/puppet/rack/puppetmasterd/public/
    <Directory /usr/share/puppet/rack/puppetmasterd/>
        Options None
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>
</VirtualHost>

configurações

pare o puppetmaster

service puppetmaster stop

sesative da inicialização

chkconfig puppetmaster off

reinicie o apache2

service httpd restart

habilite o apache na inicialização

chkconfig httpd on

pronto, seu puppetmaster passenger está instalado.

verificando portas

verifique se a porta 8140 está aberta

puppet:/etc/apache2/sites-enabled# netstat -ntpl|grep 8140
tcp6       0      0 :::8140                 :::*                    LISTEN      20515/apache2 

só para garantir reinicie a máquina e veja se o serviço sobe sem problemas por padrão.

verificando serviço

outra forma de verificar se o puppet está rodando via passenger é acessar o endereço

https://ip_do_servidor:8140/

se receber o retorno abaixo, seu puppetmaster-passenger está funcionando.

The environment must be purely alphanumeric, not ''

puppetmaster

acessando master

o agente vai procurar sempre o puppetmaster através do nome puppet ou puppet.dominio.

via dns

se possível crie um registro de DNS tipo A com o nome puppet apontando para máquina puppetmaster , se não for possível registro do tipo A, faça um registro do tipo CNAME.

via hosts

caso a configuração de DNS não seja uma opção, uma forma de resolver é inserir uma entrada no /etc/hosts

192.168.56.102 puppet

isso será suficiente para o agente funcionar, coloque o ip do seu puppetmaster

via puppet.conf

se ainda não for uma opção, pode ainda editar o arquivo /etc/puppet.conf e inserir a diretiva

server=nomedoservidor

na seção [agente], mas prefira sempre a configuração de DNS.

testando master

ao instalar o puppetmaster, o puppet-agent também é instalado, através dele podemos verificar se está tudo funcionando adequadamente no master.

root@puppetmaster:/etc/apt# puppet agent --test
info: Caching catalog for puppetmaster.dominio.local
info: Applying configuration version '1337281239'
info: Creating state file /var/lib/puppet/state/state.yaml
notice: Finished catalog run in 0.02 seconds

se você tiver um retorno como este, está tudo funcionando bacana.

entendendo arquivos e diretórios default

Ao instalar você verá o seguinte conteúdo no diretório /etc/puppet

puppet:/etc/puppet# ls -lah
total 40K
drwxr-xr-x  5 root root 4.0K May 15 16:27 .
drwxr-xr-x 70 root root 4.0K May 15 16:25 ..
-rw-r--r--  1 root root 2.5K Apr 10 15:23 auth.conf
-rw-r--r--  1 root root  459 Apr 11 00:19 fileserver.conf
drwxr-xr-x  2 root root 4.0K Apr  5 13:01 manifests
drwxr-xr-x  2 root root 4.0K Apr  5 13:01 modules
-rw-r--r--  1 root root  462 Apr 11 00:19 puppet.conf
drwxr-xr-x  2 root root 4.0K Apr  5 13:01 templates

O arquivo auth.conf define as permissões dos agentes para acessar o servidor puppet

O arquivo fileserver.conf define quais redes podem acessar arquivos servidos pelo puppet.

No diretório manifests nós iremos declarar as configurações chamadas de manifests e os nodes que vão utilizá-las.

O diretório templates tem arquivos de configuração que serão aproveitados pelos nodes, estes arquivos são dinâmicos, contém variáveis.

O arquivo puppet.conf contém tanto configurações do agent quanto do master.

Dependendo de como for usar o Puppet, muitos outros arquivos e diretórios serão criados nessa estrutura, mas isso será assunto para outra wiki.

problemas conhecidos

nao encontrou o servidor

caso não tenha sido configurado o dns, host ou puppet.conf com o endereço do servidor puppet, provavelmente vai receber este erro.

root@puppetmaster:/etc/apt# puppet agent --test
err: Could not retrieve catalog from remote server: getaddrinfo: Name or service not known
warning: Not using cache on failed catalog
err: Could not retrieve catalog; skipping run
err: Could not send report: getaddrinfo: Name or service not known

para corrigir isto veja as instruções em 'acessando master'.

referências



puppet_instalando_puppet_master_em_centos.txt · Last modified: 2012/06/10 16:49 by gutocarvalho
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0