commit 3b0025bca30533d6cea796b0832df74255f70f81
Author: Ismael Campos Suárez <ismicampos@gmail.com>
Date:   Thu Feb 2 15:33:49 2017 +0100

    Paquete linex-ubuntu-puppet 1.4 en trusty

diff --git a/ubuntu/trusty/all/linex-ubuntu-puppet/debian/changelog b/ubuntu/trusty/all/linex-ubuntu-puppet/debian/changelog
index 0d897c3..b915ffa 100644
--- a/ubuntu/trusty/all/linex-ubuntu-puppet/debian/changelog
+++ b/ubuntu/trusty/all/linex-ubuntu-puppet/debian/changelog
@@ -1,3 +1,10 @@
+linex-ubuntu-puppet (1.4) linex; urgency=medium
+
+  * Se modifica ejecutable sinc_puppet y sincpuppet.default con la versión de linex-ubuntu-puppet 2.5 de Esteban.
+  * Se pasa a generar certificados con uuid en lugar de nombre de hosts y se resuelven problemas con certificados.
+
+ -- Ismael Campos <ismael.campos@juntaex.es>  Wed, 01 Feb 2017 10:26:07 +0100
+
 linex-ubuntu-puppet (1.3) linex; urgency=medium
 
   * Modificado escuela2.0 por ubuntu 16.04 (Eli).
diff --git a/ubuntu/trusty/all/linex-ubuntu-puppet/debian/conffiles b/ubuntu/trusty/all/linex-ubuntu-puppet/debian/conffiles
index 9dcef0e..c88ab12 100644
--- a/ubuntu/trusty/all/linex-ubuntu-puppet/debian/conffiles
+++ b/ubuntu/trusty/all/linex-ubuntu-puppet/debian/conffiles
@@ -1,2 +1,3 @@
 /usr/share/linex-ubuntu-puppet/escuela2.0
 /usr/share/linex-ubuntu-puppet/puppet.conf
+/usr/share/linex-ubuntu-puppet/sincpuppet.default
diff --git a/ubuntu/trusty/all/linex-ubuntu-puppet/usr/share/linex-ubuntu-puppet/sinc-puppet b/ubuntu/trusty/all/linex-ubuntu-puppet/usr/share/linex-ubuntu-puppet/sinc-puppet
index 31ac050..b328158 100755
--- a/ubuntu/trusty/all/linex-ubuntu-puppet/usr/share/linex-ubuntu-puppet/sinc-puppet
+++ b/ubuntu/trusty/all/linex-ubuntu-puppet/usr/share/linex-ubuntu-puppet/sinc-puppet
@@ -1,4 +1,5 @@
 #!/bin/bash
+# Colocar /etc/network/if-up.d/ para lanzar sinc_puppet cuando se levanta la interfaz de red.
 
 [ "$IFACE" != "lo" ] || exit 0
 
diff --git a/ubuntu/trusty/all/linex-ubuntu-puppet/usr/share/linex-ubuntu-puppet/sinc_puppet b/ubuntu/trusty/all/linex-ubuntu-puppet/usr/share/linex-ubuntu-puppet/sinc_puppet
index 92ce083..bf52d82 100755
--- a/ubuntu/trusty/all/linex-ubuntu-puppet/usr/share/linex-ubuntu-puppet/sinc_puppet
+++ b/ubuntu/trusty/all/linex-ubuntu-puppet/usr/share/linex-ubuntu-puppet/sinc_puppet
@@ -1,9 +1,127 @@
 #!/bin/bash
 # Script para tratar de realizar la sincronización del cliente puppet
 # Colocar en /etc/network/if-up.d/ para que se ejecute al levantar el interfaz de red
+# Desde AdministracionSI no colocamos el fichero directamente en /etc/network/if-up.d/. En su lugar se coloca sinc-puppet para evitar retardos en la activación de interfaces de red.
 # Esteban M. Navas Martín
-# Modificado: 15/02/2015
-# Modificado: 19/05/2016
+# Fecha última modificación: 20/12/2016
+
+export DEBIAN_FRONTEND=noninteractive
+export VERSION=2.15
+
+SCRIPT=`basename "$0"`
+
+function print_version {
+	echo "$SCRIPT $VERSION"
+}
+
+function print_help {
+        echo "$SCRIPT $VERSION"
+        echo "Automated sinc puppet client"
+        echo ""
+        echo "Usage: $0 [OPTIONS]"
+        echo "Recognized options:"
+        echo "  -h               display this help and exit"
+        echo "  -v               display $SCRIPT version and exit"
+        echo "  -f               force $SCRIPT on SPLAYLIMIT"
+        echo "  -f now           force $SCRIPT now"
+        echo "  -r               renew cert client"
+        echo ""
+}
+
+function solveapterrors {
+
+  idioma=$LC_ALL
+  export LC_ALL=C
+
+  apt-get check 1>/dev/null 2>/tmp/apterrors
+
+  if [ -s /tmp/apterrors ]; then
+     grep "Unmet dependencies. Try using -f." /tmp/apterrors && apt-get -yf install && dpkg --configure -a && apt-get -y autoremove
+     grep "dpkg was interrupted, you must manually run 'dpkg --configure -a' to correct the problem." /tmp/apterrors && dpkg --configure -a && apt-get -yf install && apt-get -y autoremove
+     grep -E 'Encountered a section with no Package: header|Problem with MergeList ' /tmp/apterrors && rm -rf /var/lib/apt/lists/
+  fi
+
+  export LC_ALL=$idioma
+}
+
+function dosync {
+  if [ "$1" == "-f" ] && [ "$2" == "now" ]; then
+     echo "Conexión con servidor de puppet. Sincronizando puppet....." | logger -s -t $0
+     puppet agent --onetime --no-daemonize >/dev/null 2>&1
+     if [ $? -eq "0" ]; then
+        echo "Sistema PUPPET correcto" | logger -s -t $0
+        exit 0
+     fi
+  else
+     echo "Conexión con servidor de puppet." | logger -s -t $0
+     echo "Esperando un tiempo máximo de $SPLAYLIMIT para sincronizar puppet....." | logger -s -t $0
+     puppet agent --onetime --no-daemonize --splay --splaylimit $SPLAYLIMIT >/dev/null 2>&1
+     if [ $? -eq "0" ]; then
+        echo "Sistema PUPPET correcto" | logger -s -t $0
+        exit 0
+     fi
+  fi
+}
+
+
+# Leer y procesar argumentos
+while getopts ":f: rvh" opt
+do
+    case $opt in
+        v ) print_version
+	    exit 0
+	    ;;
+        h ) print_help
+ 	    exit 0
+	    ;;
+        f)  force="-f"
+            now=$OPTARG
+            ;;
+        r)  renew="-r"
+            ;;
+        \? ) echo "Opcion invalida -$OPTARG"
+             exit 1
+	     ;;
+        : )  force="-f"
+	     now=""
+    esac
+done
+shift $((OPTIND-1))
+
+# Mostrar ayuda si un caracter no deseado es introducido##
+if [ -n "$1" ]; then
+    print_help
+fi
+
+# Matamos procesos detenidos
+stopped_processes=$(ps auwx | awk 'NR>1 && $8 ~ "T" {print $2}')
+if [ "$stopped_processes" ]; then kill -9 $stopped_processes; fi
+
+# Matamos todos los procesos de sinc_puppet excepto el último que se haya
+sinc_puppet_processes=$(pgrep -c sinc_puppet)
+if [ "$sinc_puppet_processes" -gt "1" ]; then kill -9 $(pgrep sinc_puppet | head -n -1); fi
+
+# Nos aseguramos de que sólo exista una instancia de sinc_puppet corriendo
+lockfile=/tmp/sincpuppet
+
+# Eliminar fichero de bloqueo al salir
+trap "lockfile-remove $lockfile; exit" INT TERM EXIT
+
+lockfile-check $lockfile
+if [ $? -eq 0 ] ; then
+    # Si existe el fichero de bloqueo
+    # echo >&2 "lock not acquired, giving up: $lockfile"
+    exit 1
+else
+    # Si no existe el fichero de bloqueo
+    lockfile-create $lockfile         # Creamos el fichero de bloqueo
+    # echo "lock acquired: $lockfile"
+fi
+
+# El parámetro WAITFORCERT ya no se usa. Lo mantenemos temporalmente por si fuera necesario 
+# más adelante
+WAITFORCERT="30"
+LOCALES="es_ES.UTF-8"
 
 # Controlamos la ejecución manual o automática de sinc_puppet
 ENABLE=yes
@@ -14,6 +132,11 @@ if [ "$ENABLE" == "no" ] || [ ! "$ENABLE" ]; then
   exit 0
 fi
 
+# Establecemos los locales por defecto
+export LANG=$LOCALES
+export LANGUAGE="es_ES:es:en"
+export LC_ALL=$LOCALES
+
 # Número máximo de segundos sin sincronizar con el servidor puppet
 MAXTIME=`expr $INTERVAL \* 3600`
 
@@ -21,16 +144,25 @@ MAXTIME=`expr $INTERVAL \* 3600`
 uno=$(stat -c %Y  /var/log/syslog)
 dos=$(stat -c %Y /var/lib/puppet/state/state.yaml)
 dife=$((uno-dos))
+dife2=0
+
+if [ -f /var/lib/puppet/state/agent_catalog_run.lock ]; then
+   tres=$(stat -c %Y /var/lib/puppet/state/agent_catalog_run.lock)
+   dife2=$((uno-tres))
+fi
+
+if [ $dife2 -gt $MAXTIME ]; then
+   rm -f /var/lib/puppet/state/agent_catalog_run.lock
+fi
 
-# Aseguramos paquetes
-dpkg --configure -a && apt-get -yf install && apt-get -y autoremove
+solveapterrors
 
 echo "La última sincronización con PUPPET fue hace: "$(($dife / 3600)) "horas" | logger -s -t $0
 echo "Intervalo de sincronización con PUPPET: $INTERVAL horas" | logger -s -t $0
 echo
 
-# Salimos si no se ha alcanzado el tiempo máximo sin sincronizar con PUPPET
-if [ $dife -lt $MAXTIME ]; then exit 0; fi
+# Salimos si no se ha alcanzado el tiempo máximo sin sincronizar con PUPPET o no se ha forzado la ejecución
+if [ $dife -lt $MAXTIME ] || [ $# -eq 1 ] && [ "$force" != "-f" ] || [ $# -eq 1 ] && [ "$renew" != "-r" ]; then exit 0; fi
 
 ping -c 1 $PING_SERVER >/dev/null 2>&1
 ERROR=$?
@@ -46,31 +178,39 @@ done
 
 if [ $MAX -eq $PING_TRIES ]; then
  echo "Imposible contactar con el servidor....." | logger -s -t $0
- exit 5
+ exit $MAX
 fi
 
 # Activamos puppet, por si estuviera desactivado
 puppet agent --enable
 
-# Si no existe el certificado del cliente, ejecutamos puppet tratando de recibir un certificado
-test -f /var/lib/puppet/ssl/certs/$(hostname -f).pem
-if [ $? -eq "1" ]; then
-   puppet agent --test --waitforcert 60 >/dev/null 2>&1
-   exit 0
+if [ "$renew" == "-r" ]; then
+   uuid=$(/usr/bin/uuidgen -t) && sed -i "s/certname=.*/certname=$uuid/" /usr/share/linex-ubuntu-puppet/puppet.conf
+   find /var/lib/puppet/ssl/ -type f -name *.pem -not -name ca.pem -not -name crl.pem -exec rm -f {} \;
+   dosync $force $now
 fi
 
-#Si ha estado más de MAXTIME segundos sin sincronizar con puppet
-if [ $dife -gt  $MAXTIME ]; then
- echo "Conexión con servidor de puppet. Esperando $SPLAYLIMIT para puppet....." | logger -s -t $0
- puppet agent --onetime --no-daemonize --splay --splaylimit $SPLAYLIMIT
-
- while [ $? -eq "1" ]; do
-   test -f /var/lib/puppet/state/puppetdlock && rm -f /var/lib/puppet/state/puppetdlock
-   rm -rf /var/lib/puppet/ssl/certs/$(hostname -f).pem
-   echo "FALLO Puppet. Nuevo intento en 30 segundos" | logger -s -t $0
-   puppet agent --test --waitforcert 60 >/dev/null 2>&1
- done
+
+# Obtenemos el uuid del fichero puppet.conf
+uuid=$(sed -n 's|certname=\(.*\)|\1|p' /usr/share/linex-ubuntu-puppet/puppet.conf)
+
+# Si no existe el certificado del cliente, ejecutamos puppet tratando de recibir un certificado
+if [ -z "$uuid" ]; then
+   uuid=$(/usr/bin/uuidgen -t) && sed -i "/server=puppetinstituto/a certname=$uuid" /usr/share/linex-ubuntu-puppet/puppet.conf
+   echo "Se ha generado un nuevo uuid para este host: $uuid" | logger -s -t $0
+   find /var/lib/puppet/ssl/ -type f -name *.pem -not -name ca.pem -not -name crl.pem -exec rm -f {} \;
+
+   dosync $force $now
 fi
-echo "Sistema PUPPET correcto" | logger -s -t $0 
 
-exit 0
+test -f /var/lib/puppet/ssl/certs/$uuid.pem
+if [ $? -eq "0" ]; then
+
+   dosync $force $now
+else
+   [ -f /var/lib/puppet/state/puppetdlock ] && rm -f /var/lib/puppet/state/puppetdlock
+   uuid=$(/usr/bin/uuidgen -t) && sed -i "s/certname=.*/certname=$uuid/" /usr/share/linex-ubuntu-puppet/puppet.conf
+   find /var/lib/puppet/ssl/ -type f -name *.pem -not -name $uuid.pem -not -name ca.pem -not -name crl.pem -exec rm -f {} \;
+
+   dosync $force $now
+fi
diff --git a/ubuntu/trusty/all/linex-ubuntu-puppet/usr/share/linex-ubuntu-puppet/sincpuppet.default b/ubuntu/trusty/all/linex-ubuntu-puppet/usr/share/linex-ubuntu-puppet/sincpuppet.default
index bd798bf..b705cfa 100644
--- a/ubuntu/trusty/all/linex-ubuntu-puppet/usr/share/linex-ubuntu-puppet/sincpuppet.default
+++ b/ubuntu/trusty/all/linex-ubuntu-puppet/usr/share/linex-ubuntu-puppet/sincpuppet.default
@@ -1,6 +1,10 @@
 # Defaults for sinc_puppet
 #
 
+# Definimos el idioma por defecto al ejecutar sinc_puppet
+# LOCALES="es_ES.UTF-8"
+LOCALES="es_ES.UTF-8"
+
 # Activar o desactivar sinc_puppet:
 #  ENABLE="yes": activa sinc_puppet (opción por defecto)
 #  ENABLE="no" : desactiva sinc_puppet
@@ -8,15 +12,19 @@
 ENABLE="yes"
 
 # Número máximo de horas sin sincronizar con el servidor puppet
+# INTERVAL="12" # horas
 INTERVAL="12" # horas
 
 # Nombre DNS del servidor al que realizar ping para comprobar que estamos en el centro
+# PING_SERVER="puppetinstituto"
 PING_SERVER="puppetinstituto"
 
 # Intervalo para volver a realizar ping en segundos
+# PING_INTERVAL="30" # segundos
 PING_INTERVAL="30" # segundos
 
 # Número máximo de ping a realizar antes de dejar de intentar sincronizar con puppet
+# PING_TRIES="3"
 PING_TRIES="3"
 
 # Definimos un tiempo máximo en minutos para retrasar la sincronización con el servidor
@@ -24,5 +32,9 @@ PING_TRIES="3"
 # Básicamente sirve para evitar que muchas peticiones simultáneas de clientes saturen al servidor
 # Este ajuste puede definirse en segundos (30 or 30s), minutos (30m), horas (6h),
 # días (2d), o años (5y).
+# SPLAYLIMIT="3m"
 SPLAYLIMIT="3m"
 
+# 'puppet agent' conectará con el servidor en intervalos de 'WAITFORCERT' segundos para pedir un certificado al servidor
+# WAITFORCERT="30"
+WAITFORCERT="30"
