Es la segunda vez que nos enfretamos al reto de construir un servidor puppet, esta vez sobre un servidor Debian.
Recomendamos leer how puppet works
Consideraciones iniciales
No vamos a usar una configuración asociada a un git. Vamos a usar un puppet master.
Nuestro objetivo será mantener igual en todos los equipos de nuestra infraestructura los siguientes elementos:
- Configuración de usuarios de apache
- Configuración GLPI
- Certificados SSH de cliente
- Configuración snmp
Instalación base de servidor
Debian Versión 7.7
/etc /apt/sources.list
deb http://ftp.es.debian.org/debian/ wheezy main contrib non-free
deb-src http://ftp.es.debian.org/debian/ wheezy main contrib non-free
deb http://security.debian.org/ wheezy/updates main contrib non-free
deb-src http://security.debian.org/ wheezy/updates main contrib non-free
deb http://ftp.es.debian.org/debian/ wheezy-updates main contrib non-free
deb-src http://ftp.es.debian.org/debian/ wheezy-updates main contrib non-free
deb http://backports.debian.org/debian-backports squeeze-backports main
Instalación puppet en servidor
apt-get install puppetmaster puppetmaster-passenger
Al instalar passenger, hemos tenido un problema con apache y sus logs.
no listening sockets available, shutting down
Unable to open logs
Hemos cambiado los permisos del directorio de apache, para que ya pueda iniciar.
chown www-data:www-data /var/log/apache2
Y hemos reiniciado, por que no había nada en el puerto 80.
Instalación de puppet-dashboard en servidor
Hemos seguido al pie de la letra el tutorial de wiki.debian.org, pero hemos tenido algún problemilla más:
:~# tail /var/log/apache2/dashboard.example.com_error.log
(...) Directory index forbidden by Options directive: /usr/share/puppet-dashboard/public/
Para resolverlo hemos tenido que cambiar la configuración de apache para el servidor de puppet-dashboard.
Una consideración inicial, es que hemos optado por que la configuración de este servidor, sea, por defecto el puppet dashboard. Es decir, al entrar en el raíz del servidor, por el puerto 80, saldrá directamente puppet dashboard.
# /etc/apache2/sites-enabled/puppet-dashboard
<VirtualHost *:80>
ServerName miservidor.com
DocumentRoot /usr/share/puppet-dashboard/public/
<Directory /usr/share/puppet-dashboard/public/>
Options -Indexes +FollowSymLinks MultiViews
Order allow,deny
allow from all
</Directory>
PassengerHighPerformance on
PassengerMaxPoolSize 12
PassengerPoolIdleTime 1500
PassengerStatThrottleRate 120
RailsAutoDetect On
ErrorLog /var/log/apache2/dashboard.example.com_error.log
LogLevel warn
CustomLog /var/log/apache2/dashboard.example.com_access.log combined
ServerSignature On
</VirtualHost>
Configuramos también settings.yml:
[root@server~]# grep ca_server /etc/puppet-dashboard/settings.yml
ca_server: 'server.org'
En el fichero de configuración de puppet, especificamos la url donde queremos que queden los reports
[master]
report=true
reports = store, http
reporturl = http://servers/reports/reports/upload
Al poner puppet dashboard en el puerto 80, y no en el 3000 que es lo normal, hemos tenigo qeu cambiar /opt/puppet-dashboard/bin/external_node
DASHBOARD_URL = http://localhost
Esta es la vista del servidor web
Ejecutar puppetmaster:
/etc/init.d/puppetmaster start
Si nos da este error:
service puppet-dashboard start
[warn] Starting Puppet Dashboard:[....] Not starting Puppet Dashboard, disabled via /etc/default/puppet-dashboard ... (warning).
. ok
Editar /etc/default/puppet-dashboard-workers:
###START=no
START=yes
Colorear en emacs puppet
[root@server puppet]# apt-get install puppet-el
Instalación de agentes puppet en cliente: Facter y puppet
Facter es el componente de cliente encargado de mostrar la información de cada máquina. Se debe instalar en cada máquina que vayamos a gestionar con puppet.
apt-get install -y puppet facter
Prueba de comunicación con el servidor:
root@client:~# puppet agent --server puppet.server.com --no-daemonize --verbose
En la primera ejecución, se crea un certificado que tenemos que firmar en el servidor. Podéis revisar slashdot.in para más información.
[root@server~]# puppet cert --list
"client.org" (...)
[root@server~]# puppet cert--sign client.org