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.

Ubuntu 14.04 y el maldito UEFI

Cada vez que me toca realizar un upgrade de versión de Ubuntu en mi portátil me tengo que pelear con el Boot Manager de UEFI. Mi portátil vino preinstalado con Windows 8 y lo mantuve porque nunca se sabe para que lo puedo necesitar.

La cuestión es que con cada cambio sobre el gestor de arranque hace que o el sistema se quede colgado en el modo rescate de grub o que directamente se salte el grub y entre en Windows.

En la documentación de Ubuntu salen una serie de recomendaciones que no me han servido en ningún caso. Por último recomiendan utilizar el programa Boot repair que en mi caso no me sirvió. Se trata de un arduo proceso de prueba y error hasta que das con la tecla.


En mi caso, al pulsar la tecla F11 arranca el Boot Manager donde me permite arrancar Ubuntu o Windows (en el menú aparece como OS Boot Manager :-O):

Descubrí la herramienta efibootmgr que permite solucionar el problema con unos pocos comandos. Voy con el ejemplo:

  • Listado de los sistemas instalados en mi portátil, donde se muestra el orden de arranque y como se ve arranca directamente en el Windows Boot Manager:

root@jupiter:# efibootmgr -v
BootCurrent: 0002
Timeout: 0 seconds
BootOrder: 3002,3000,3001,3003,3004,3005,2001,2002,2003
Boot0000* ubuntu    HD(2,c8800,82000,882c04c8-a541-4a44-aeaa-522da6211d8d)File(\EFI\ubuntu\shimx64.efi)
Boot0001* Ubuntu    HD(2,c8800,82000,882c04c8-a541-4a44-aeaa-522da6211d8d)File(\EFI\ubuntu\grubx64.efi)RC
Boot0002* Windows Boot Manager    HD(2,c8800,82000,882c04c8-a541-4a44-aeaa-522da6211d8d)File(\EFI\Microsoft\Boot\bootmgfw.efi)RC
Boot0003* Ubuntu    HD(2,c8800,82000,882c04c8-a541-4a44-aeaa-522da6211d8d)File(\EFI\ubuntu\grubx64.efi)RC
Boot0004* Ubuntu    HD(2,c8800,82000,882c04c8-a541-4a44-aeaa-522da6211d8d)File(\EFI\ubuntu\grubx64.efi)RC
Boot0005* Ubuntu    HD(2,c8800,82000,882c04c8-a541-4a44-aeaa-522da6211d8d)File(\EFI\ubuntu\grubx64.efi)RC
Boot2001* USB Drive (UEFI)    RC
Boot3000* Internal Hard Disk or Solid State Disk    RC
Boot3001* Internal Hard Disk or Solid State Disk    RC
Boot3002* Internal Hard Disk or Solid State Disk    RC
Boot3003* Internal Hard Disk or Solid State Disk    RC
Boot3004* Internal Hard Disk or Solid State Disk    RC
Boot3005* Internal Hard Disk or Solid State Disk    RC

  • Para limpiar el orde de arranque se ejecuta efibootmgr con la opción -O.
  • Establezco de nuevo el orden que yo quiero con el siguiente comando:

 root@jupiter:# efibootmgr -o 0000,0001,0002

  • También cambié el fichero de arranque de EFI de Windows, lo vi comentado en stackoverflow, pero creo que realmente no hacia falta:

 root@jupiter:# cd /boot/efi/EFI/Microsoft/Boot/
 root@jupiter:# mv bootmgfw.efi bootmgfwB.efi
 root@jupiter:#  cp ../../ubuntu/grubx64.efi bootmgfw.efi

Espero que este post me sirva para acordarme de lo que hice la última vez!