Puppet I: Instalación de Puppet Master sobre CentOS

Tenia pendiente realizar algunas pruebas con puppet y para ello me he montado un entorno de pruebas en Vagrant con 2 máquinas virtuales, una será el Master y otra el agente.

Instalación

La instalación es muy sencilla, se instala el paquete de los repositorios de PuppetLabs correspondiente a nuestra distribución y a continuación se instala el paquete puppet-server:

p { margin-bottom: 0.25cm; line-height: 120%; }a:link { }

[root@centos1 ~]# yum install puppet-server 

Configuración

Con estos dos comandos ya tendremos instalado nuestro Puppet Master. A continuación hace falta configurarlo. Para ello nos aseguraremos que nuestro host resuelve correctamente la dirección puppet. Verificaremos que IP tenemos asignada a la red interna y lo configuraremos en el fichero hosts (lo ideal en un entorno productivo es que vaya todo por DNS):
[root@centos1 ~]#  ip addr list
h3.western { font-family: “Liberation Sans”,sans-serif; }h3.cjk { font-family: “Droid Sans Fallback”; }h3.ctl { font-family: “FreeSans”; }p { margin-bottom: 0.25cm; line-height: 120%; }a:link { }
3: eth1: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:a7:b7:8c brd ff:ff:ff:ff:ff:ff
inet 10.10.10.10/24 brd 10.10.10.255 scope global eth1
inet6 fe80::a00:27ff:fea7:b78c/64 scope link
valid_lft forever preferred_lft forever

[root@centos1 ~]# grep puppet /etc/hosts
10.10.10.10 puppet puppet.localdomain
El servicio puppet master lo configuraremos de forma que arranque con el sistema operativo y lo arrancaremos. Utilizaremos el mismo puppet para configurarlo:
p { margin-bottom: 0.25cm; line-height: 120%; }a:link { }
[root@centos1 ~]# puppet resource service puppetmaster ensure=running enable=true
Notice: /Service[puppetmaster]/ensure: ensure changed ‘stopped’ to ‘running’
service { ‘puppetmaster’:
ensure => ‘running’,
enable => ‘true’,
}
y podemos verificar que se han arrancado los servicios y configurado para el arranque:
 p { margin-bottom: 0.25cm; line-height: 120%; }a:link { }
[root@centos1 ~]# ps -ef | grep -i puppet
puppet 9336 1 0 09:55 ? 00:00:00 /usr/bin/ruby /usr/bin/puppet master
[root@centos1 ~]# service puppetmaster status
puppet (pid 9336) is running…
[root@centos1 manifests]# chkconfig puppetmaster –list
puppetmaster 0:off 1:off 2:on 3:on 4:on 5:on 6:off 
 
[root@centos1 puppet]# netstat -ant | grep 8140
tcp     0     0 0.0.0.0:8140     0.0.0.0:*     LISTEN
El instalador nos habrá creado los usuarios y grupos correspondientes:
  p { margin-bottom: 0.25cm; line-height: 120%; }a:link { }
[root@centos1 puppet]# grep puppet /etc/{passwd,group}
/etc/passwd:puppet:x:52:52:Puppet:/var/lib/puppet:/sbin/nologin
/etc/group:puppet:x:52:
El directorio /var/lib/puppet debe pertenecer al usuario puppet y al grupo puppet:
   p { margin-bottom: 0.25cm; line-height: 120%; }a:link { }
[root@centos1 puppet]# ls -ld /var/lib/puppet/
drwxr-x— 11 puppet puppet 4096 Apr 19 09:55 /var/lib/puppet/
Ya tendremos nuestro servidor de puppet listo, ahora bastará con firmar los certificados de los agentes para empezar a trabajar con ellos.
p { margin-bottom: 0.25cm; line-height: 120%; }a:link { }
[root@centos1 ~]# puppet cert list
“centos2.homestation” (SHA256) 67:6F:54:C7:AE:C7:11:F7:58:75:C2:98:E9:A1:7A:E0:07:EE:A3:D4:38:CD:78:FB:F4:92:0A:07:C9:0C:DC:AA
[root@centos1 ~]# puppet cert sign centos2.homestation
Notice: Signed certificate request for centos2.homestation
Notice: Removing file Puppet::SSL::CertificateRequest centos2.homestation at ‘/var/lib/puppet/ssl/ca/requests/centos2.homestation.pem’
También podriamos haber firmado todos los certificados pendientes con el comando puppet cert sign all.

Testeo

Explicaré tres casos sencillos para probar la instalación de puppet. Se trata de exportar un fichero de configuración, iniciar un servicio y instalar un paquete. En cualquier caso hay que crear un manifiesto indicándole a puppet las acciones a realizar. Los manifiestos se ubican por defecto en el siguiente directorio: /etc/puppet/manifests
  • Compartir fichero: Deberemos editar ademas el fichero /etc/puppet/fileserver.conf indicando el path donde iremos ubicando nuestros ficheros de configuración y quién tiene acceso a ellos:
    p { margin-bottom: 0.25cm; line-height: 120%; }a:link { }
    [root@centos1 puppet]# vi fileserver.conf
    [files]
    path /etc/puppet/files
    allow * 
    A continuación crearemos el manifiesto, que consiste en un fichero con extensión .pp:
      p { margin-bottom: 0.25cm; line-height: 120%; }a:link { }
    [root@centos1 manifests]# cat 1.file.pp
    file { “/etc/motd” : source => “puppet:///files/motd”, }
    Para aplicar el manifiesto ejecutaremos: 
    p { margin-bottom: 0.25cm; line-height: 120%; }a:link { }
    [root@centos1 manifests]# puppet apply 1.file.pp
    Notice: Compiled catalog for centos1.homestation in environment production in 0.09 seconds
    Notice: /Stage[main]/Main/File[/etc/motd]/content: content changed ‘{md5}d41d8cd98f00b204e9800998ecf8427e’ to ‘{md5}b3bdce950fdd660ebbdac96fbb02f374’
    Notice: Finished catalog run in 0.09 seconds
    y finalmente verificamos que ha hecho los cambios que le hemos pedido:
    p { margin-bottom: 0.25cm; line-height: 120%; }a:link { }
    [root@centos1 manifests]# cat /etc/motd
    This is a secured system, authorized access 
  • Arrancar un servicio: al igual que en el caso anterior se creará el manifiesto indicando que queremos que el servicio esté habilitado por defecto y que esté arrancado:

[root@centos1 manifests]# cat 2.service.pp
service { “sshd” :
ensure => running,
enable => true,

  • Instalar un paquete: en este manifiesto se indicará el paquete que queremos tener instalado en nuestro sistema. Es posible que el nombre del paquete difiera entre varias distribuciones, para eso es posible hacer filtrados. En este caso sencillo, al conocer donde lo queremos instalar el manifiesto será el siguiente:

[root@centos1 manifests]# cat 3.package.pp
package { “nmap” : ensure => installed, } 

Podemos ver que el ejecutable no está instalado antes de aplicar el manifiesto. Una vez aplicado el cambio ya tenemos disponible la nueva aplicación:

 [root@centos1 manifests]# nmap-bash: nmap: command not found 
[root@centos1 manifests]# puppet apply 3.package.pp
Notice: Compiled catalog for centos1.homestation in environment production in 0.56 seconds
Notice: /Stage[main]/Main/Package[nmap]/ensure: created
Notice: Finished catalog run in 19.49 seconds

[root@centos1 manifests]# nmap -version
Nmap version 5.51 ( http://nmap.org

En proximas entradas comentaré cómo configurar el agente y cómo se instala la interfaz web Puppet Dashboard.

Anuncios

Upgrade zpool

Cada vez que se parchea un servidor o se sube la release es muy probable que exista una nueva versión de ZFS. Por ello, si queremos tener las nuevas características y funcionalidades deberemos actualizar nuestros zpools. Para ello basta con lanzar el comando zpool upgrade . Podemos ver en la ayuda las diferentes versiones que disponemos en nuestro sistema:


root@server1 # zpool help upgrade

usage:
        upgrade
        upgrade -v
        upgrade [-V version]

root@server1 # zpool upgrade -v
This system is currently running ZFS pool version 32.

The following versions are supported:

VER  DESCRIPTION
—  ——————————————————–
 1   Initial ZFS version
 2   Ditto blocks (replicated metadata)
 3   Hot spares and double parity RAID-Z
 4   zpool history
 5   Compression using the gzip algorithm
 6   bootfs pool property
 7   Separate intent log devices
 8   Delegated administration
 9   refquota and refreservation properties
 10  Cache devices
 11  Improved scrub performance
 12  Snapshot properties
 13  snapused property
 14  passthrough-x aclinherit
 15  user/group space accounting
 16  stmf property support
 17  Triple-parity RAID-Z
 18  Snapshot user holds
 19  Log device removal
 20  Compression using zle (zero-length encoding)
 21  Reserved
 22  Received properties
 23  Slim ZIL
 24  System attributes
 25  Improved scrub stats
 26  Improved snapshot deletion performance
 27  Improved snapshot creation performance
 28  Multiple vdev replacements
 29  RAID-Z/mirror hybrid allocator
 30  Reserved
 31  Improved ‘zfs list’ performance
 32  One MB blocksize

For more information on a particular version, including supported releases,
see the ZFS Administration Guide.
Si utilizamos únicamente el comando zpool upgrade nos muestra la versión que está corriendo actualmente y la versión con la que se creó el pool, con lo que será posible actualizarlo:

root@server1 # zpool upgrade 
This system is currently running ZFS pool version 32.

The following pools are out of date, and can be upgraded.  After being
upgraded, these pools will no longer be accessible by older software versions.

VER  POOL
—  ————
29   test-zpool

Use ‘zpool upgrade -v’ for a list of available versions and their associated
features.

Para actualizar el pool lo haremos de la siguiente forma:

root@server1 # zpool upgrade -V 32 test-zpool
This system is currently running ZFS pool version 32.

Successfully upgraded ‘test-zpool’ from version 29 to version 32
Se puede verificar que todos los pools están a la última versión:

root@server1 # zpool upgrade 
This system is currently running ZFS pool version 32.

All pools are formatted using this version.