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 pclientEl 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 universeDado 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 universeActualiza 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: 500En 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: 5003. 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/run7. 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.
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.