Puppet: Instalación de servidor en debian

Captura

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

 

puppet-dashboard-01

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

 

vmware vcenter 5.5.0a: El inventario deja de actualizarse en el cliente web

Ya nos ha pasado 2 veces. Después de unos 30 días, el inventario de vmware deja de actualizarse a nivel del cliente web. Se nota mucho porque:

  1. El panel de tareas se queda congelado con tareas antiguas y no se refrescan
  2. Las máquinas virtuales se quedan asignadas a hosts en los que ya no están (tras drs) y no se puede acceder a ellas. Al abrir la consola da un error: “you have no privileges to view this object or it does not exist”.

Ya hay un hilo reportando este problema en las communities, también hemos escrito la resolución allí.

Tambien Gabesvirutalworld, lo ha reportado para la versión 5.1.

Solución

Con un caso de soporte con vmware, nos han dado la solución para este problema.  Hay distintos comandos para versiones anteriores de vmware a los que también les pasa este problema:

service vmware-inventoryservice stop
# Remove stored data:
rm -rf /storage/db/inventoryservice/data
/usr/lib/vmware-vpx/inventoryservice/scripts/ds-invoke.sh -Dvim.logdir=/var/log/vmware/vpx/inventoryservice com.vmware.vim.dataservices.CreateDb /storage/db/inventoryservice/data changeme default changeme
service vmware-inventoryservice start
vcenterhost=vchost.mydomain.com
/usr/lib/vmware-vpx/inventoryservice-registration/vcregtool.sh -Dvim.logdir=/var/log/vmware/vpx/inventoryservice-registration com.vmware.vim.dataservices.vcregtool.RegisterVC -action register -lookupserviceurl https://$vcenterhost:7444/lookupservice/sdk -isurl https://$vcenterhost:10443 -vcurl https://$vcenterhost/sdk/vimService -vccert /etc/vmware-vpx/ssl/rui.crt -vcprivkey /etc/vmware-vpx/ssl/rui.key -vcinstancecfg /etc/vmware-vpx/instance.cfg -vcendpointsdir /usr/lib/vmware-vpx/endpoints -vcextensionsdir /usr/lib/vmware-vpx/extensions
service vmware-vpxd restart

En nuestro caso, el servidor tiene dos nombres hacia fuera: vcenter y vspherecsl. Por ello, fue necesario también añadir en el /etc/hosts, una entrada con la IP externa y con el segundo nombre de servidor

En /var/log/vmware/vpx/inventoryservice/ds.log teníamos este mensaje:


inherited from com.vmware.vim.binding.vim.fault.InvalidLogin: Cannot complete login due to an incorrect user name or password.

Fue necesario editar el fichero hosts, y poner el segundo nombre dns de la máquina. Ignoro porqué había funcionado hasta entonces.

vcenter:~ # cat /etc/hosts
127.0.0.1  vcenter.domain.com vcenter localhost
external-ip vspherecsl.domain.com vspherecsl

 

 

 

Instalación y configuración de OCS Inventory

Vamos a hacer un piloto con ocs inventory. Hemos intentado usar la máquina virtual que dan en la página principal de ocs inventory, sin éxito. Está documentado al final de este mismo tutorial.

Instalación completa sobre Debian

Prerequisito: Instalación de mysql

apt-get install -y mysql-client-5.5 mysql-server

Recomendamos instalar también phpmyadmin para poder hacer cambios de forma fácil sobre la base de datos.

Prerequisito: Instalación de apache2

apt-get install -y apache2 libapache2-mod-perl2 libapache2-mod-perl2-dev libapache2-mod-php5 libio-compress-perl

Prerequisito: Instalación perl

Configuración previa del proxy si nos hace falta.


cpan install Config::IniFiles XML::Simple Compress::Zlib
cpan install DBI DBD::Mysql Apache::DBI Net::IP Apache2::SOAP
apt-get install expat libexpat1-dev libssh-dev libconfig-yaml-perl
cpan install Crypt::SSLeay XML::Parser SOAP::Lite
cpan -i XML::Entities

Prerequisito: Instalación php

apt-get install php5 php-pear
apt-get install php5-gd libphp-pclzip

Instalación servidor ocs

Hemos dejado todas las opciones por defecto, aunque, lo hemos tenido que ejecutar varias veces por problemas con módulos de perl que faltaban.

tar -xvzf OCSNG_UNIX_SERVER-2.1rc1.tar.gz
cd OCSNG_UNIX_SERVER-2.1rc1/
sh setup.sh
service apache2 restart

Abrimos el navegador a http://administration_console/ocsreports  para acabar de configurar:

Gestión OCS

Usuario por defecto: admin:admin

Antes de finalizar, hay que borrar el fichero install.php

rm -f /usr/share/ocsinventory-reports/ocsreports/install.php

Cambiar la clave de usuario de ocs en mysql, y cambiar el usuario de conexión en el archivo de php:

cat /usr/share/ocsinventory-reports/ocsreports/dbconfig.inc.php
<?php
define("DB_NAME", "ocsweb");
define("SERVER_READ","localhost");
define("SERVER_WRITE","localhost");
define("COMPTE_BASE","ocs");
define("PSWD_BASE","newpasswd");
?>

Y, la clave de los agentes:
grep OCS_DB_ /etc/apache2/conf.d/z-ocsinventory-server.conf
PerlSetEnv OCS_DB_USER ocs
PerlSetVar OCS_DB_PWD newpasswd

Los logs de ocs se guardan en:

/var/log/ocsinventory-server

Al configurar los agentes, se usa como ruta:

http://my-ip/ocs-inventory

Cuidado con los proxies. Requiere su configuración, porque si no, el tráfico no llega al destino.

 

 

Pruebas con la máquina virtual de ocs inventory

Tras la descarga, subimos la máquina virtual a un datastores de la plataforma de virtualización y registramos la máquina en nuestro inventario:

Para registrar la máquina virtual, se selecciona el archivo vmx, y, en el menú contextual, aparece la opción de registrar la nueva máquina:

Al añadir, da un error de host, relacionado con el disco

El problema está en la versión de hw virtual, por lo que será necesario hacer una actualización para que pueda ejecutar en vmware 5.5

Además de hacer un upgrade de versión, necesitamos convertir el formato de disco. En nuestro caso, no tener herramientas disponibles, lo instalamos sobre debian de 0.