Puppet Ubuntu · 6 min read · Feb 07, 2026

Automatización de Configuración y Gestión Centralizada con Puppet en Ubuntu

Automatización de Configuración y Gestión Centralizada con Puppet en Ubuntu

Autor: Kent Brede

Basado en http://reductivelabs.com/trac/puppet/wiki/InstallationGuide

Introducción

Este es un tutorial paso a paso sobre cómo instalar el componente del servidor de Puppet (puppetmaster) en una máquina, y el cliente de Puppet (puppetd) en otra. Luego realizamos una prueba simple para asegurarnos de que Puppet está funcionando correctamente.

Si no estás familiarizado con Puppet, es una herramienta de automatización de configuración que te permite centralizar la gestión de los diversos sabores de *nix que se ejecutan en tu red. Puppet admite la gestión central de los aspectos importantes de tus sistemas, como: archivos, paquetes, usuarios, servicios, cron, montajes, etc. Para una descripción más completa visita Reductive Labs.

Antecedentes

Esta instalación se realiza en Ubuntu 6.06 LTS Server, pero debería funcionar para la mayoría de los sabores de Debian/Ubuntu con ligeras modificaciones.

En el momento de escribir esto, los paquetes actuales de Puppet para Ubuntu se pueden encontrar en Feisty. Busca paquetes actuales de Debian en Unstable.

Durante este tutorial utilizaremos example.com como nuestro nombre de dominio. Al servidor se le dará el nombre de host “puppet” y la IP 192.168.10.1. El nombre de host del cliente es “pclient” con IP 192.168.10.2.

1. Requisitos de Red

Si DNS no está configurado en tu red, verifica que los archivos de hosts en el servidor y el cliente incluyan entradas para ambas máquinas. Para este escenario, las siguientes entradas se agregarían a /etc/hosts. Usa tu editor de texto favorito para agregar líneas que reflejen tu propia configuración de red similar a las líneas a continuación.

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

El servidor se ejecuta en el puerto 8140. Asegúrate de que no haya un firewall bloqueando el puerto 8140 entre las dos máquinas.

2. Configuración de Apt

Muchos de los paquetes que necesitamos están en el repositorio universe. Si las siguientes líneas no están descomentadas en “sources.list,” usando tu editor de texto favorito, búscalas y descoméntalas en el 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

Dado que estamos usando una versión anterior de Ubuntu, configuremos apt para obtener fácilmente los paquetes de Puppet de Feisty. Ajusta las fuentes según sea necesario para reflejar la versión de tu SO. Si no estás familiarizado con los pasos en esta sección, consulta la sección 3.10 en el Apt-Howto.

Abre “sources.list” y agrega las dos líneas que siguen.

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

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

Actualiza tu lista de fuentes.

puppet:# apt-get update

Realiza los mismos pasos anteriores en “pclient.”

A continuación, configuremos apt para obtener los paquetes que necesitamos para nuestra configuración de Puppet de Feisty, pero permitir que todos los demás paquetes provengan del repositorio Dapper. Agrega las siguientes líneas al archivo “preferences.”

En el 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

En el 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

En preparación para nuestra instalación de Puppet, necesitamos algunas bibliotecas y paquetes instalados en el servidor y el cliente. En el momento de escribir esto, si este conjunto no se instala primero, se producirá un bucle de dependencia.

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. Instalación del Cliente

Instala Puppet y Facter desde Feisty.

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

5. Instalación del Servidor

Instala Puppet, Facter y Puppetmaster. El script de post instalación intentará iniciar el servidor y fallará como se presenta. No te preocupes por eso. Crearemos el manifiesto durante el paso 6.

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

…..
Iniciando el servidor maestro de la herramienta de gestión de configuración de puppet
El manifiesto /etc/puppet/manifests/site.pp debe existir [fallo]

6. Preparación del Servidor

El servidor (puppetmasterd) requiere que un manifiesto esté en su lugar antes de que pueda ejecutarse. Escribamos un manifiesto que le diga a puppet que cree un archivo “/tmp/testfile” en el cliente.

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

# Crear "/tmp/testfile" si no existe.
class test_class {
    file { "/tmp/testfile":
       ensure => present,
       mode   => 644,
       owner  => root,
       group  => root
    }
}

# decirle a puppet en qué cliente ejecutar la clase
node pclient {
    include test_class
}

Ahora inicia el servidor puppet.

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

6. Preparación del Cliente

Los clientes por defecto se conectarán a un servidor en tu red con un nombre de host de “puppet.” Si el nombre de host de tu servidor no es “puppet,” se necesita insertar una directiva en el archivo de configuración de puppetd “puppetd.conf.” Aunque no necesitamos hacerlo en este caso, lo haremos con fines de demostración.

Abre “/etc/puppet/puppetd.conf” con tu editor de texto favorito y agrega “server = puppet.example.com” al archivo existente como indica el ejemplo a continuación.

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

[puppetd]
server = puppet.example.com

# Asegúrate de que todos los mensajes de registro se envíen al directorio correcto
# Este directorio debe ser escribible por el usuario puppet
logdir=/var/log/puppet
vardir=/var/lib/puppet
rundir=/var/run

7. Firmar Claves

Para que los dos sistemas se comuniquen de manera segura, necesitamos crear certificados SSL firmados. Debes estar conectado a ambas máquinas, servidor y cliente, para este siguiente paso.

En el lado del cliente ejecuta.

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

Deberías ver el siguiente mensaje.

err: No hay certificado; ejecutando con funcionalidad reducida.
info: Creando una nueva solicitud de certificado para pclient.example.con
info: Solicitando certificado
warnings: el certificado del par no será verificado en esta sesión SSL
notice: No se recibió certificado

A continuación, en el lado del servidor, ejecuta el siguiente comando para verificar que el cliente está esperando que se firme el certificado.

puppet:# puppetca –list

pclient.example.con

Luego firma el certificado.

puppet:# puppetca –sign pclient.example.com

Firmado pclient.example.com

Si todo salió bien, deberías ver este mensaje en pclient.

info: Solicitando certificado
warnings: el certificado del par no será verificado en esta sesión SSL
notice: Ignorando –listen en la ejecución única
info: Caché de configuración en /etc/puppet/localconfig.yaml
notice: Iniciando ejecución de configuración
notice: //pclient/test_class/File[/tmp/testfile]/ensure: creado
info: Creando archivo de estado /var/lib/puppet/state/state.yaml
notice: Ejecución de configuración finalizada en 0.11 segundos

8. Prueba

Verifica y asegúrate de que el archivo fue creado.

pclient:# ls -l /tmp/testfile

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

Para una prueba, editemos el manifiesto y dirijamos a Puppet a modificar el modo del archivo. Cambia la línea, “mode => 644,” a “mode => 600,”

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

# Crear "/tmp/testfile" si no existe.
class test_class {
    file { "/tmp/testfile":
       ensure => present,
       mode   => 600,
       owner  => root,
       group  => root
    }
}

# decirle a puppet en qué cliente ejecutar la clase
node pclient {
    include test_class
}

En el cliente ejecuta puppetd en modo verbose (-v) y solo una vez (-o).

pclient:# puppetd -v -o

Deberías ver el siguiente mensaje, que indica que /tmp/testfile cambió de modo 644 a 600.

notice: Ignorando –listen en la ejecución única
info: La configuración está actualizada
notice: Iniciando ejecución de configuración
notice: //pclient/test_class/File[/tmp/testfile]/mode: modo cambiado ‘644’ a ‘600’
notice: Ejecución de configuración finalizada en 0.26 segundos

Para verificar que el trabajo se completó correctamente.

pclient:# ls -l /tmp/testfile

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

9. Conclusión

Felicidades, la prueba está completa y tienes una configuración de Puppet funcional. Tu siguiente paso es crear un manifiesto funcional, probar un poco más y luego iniciar el daemon puppetd en el lado del cliente. Puppetd por defecto se conectará automáticamente al servidor cada 30 minutos.

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

Para más información visita Reductive Labs.
Para ayuda amigable y conocedora, únete a Puppet Users o pasa por #puppet en irc.freenode.net.

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.