commit 0e375d592ab859bf8190b3795ad101087aa41e97
Author: Ismael Campos Suárez <ismael.campos@juntaex.es>
Date:   Tue Nov 17 10:07:11 2020 +0100

      * Se actualiza sinc_puppet con nuevas funcionalidades:
            Se añaden nuevas funcionalidades implementadas por Esteban Navas.
            Se modifica solveapterrors para que contemple más problemas con la paquetería.
            Se añade al fichero de configuración la línea certificate_revocation=false para compatibilidad con servidores en versión 6 de puppet.
            Se añade la funcionalidad de traer ca.pem del servidor si el servidor está en version 6 de puppet.
            Se afina la función dosync
      * Se elimina basura encontrada en los ficheros.
      * Versión 1.4.7

diff --git a/ubuntu/bionic/all/linex-ubuntu-puppet/debian/changelog b/ubuntu/bionic/all/linex-ubuntu-puppet/debian/changelog
index d49eaea..41567d9 100644
--- a/ubuntu/bionic/all/linex-ubuntu-puppet/debian/changelog
+++ b/ubuntu/bionic/all/linex-ubuntu-puppet/debian/changelog
@@ -1,8 +1,14 @@
-linex-ubuntu-puppet (2.0) linex; urgency=medium
+linex-ubuntu-puppet (1.4.7) linex; urgency=medium
 
-  * Changed puppet and facter dep to debian version.
+  * Se actualiza sinc_puppet con nuevas funcionalidades:
+	Se añaden nuevas funcionalidades implementadas por Esteban Navas.
+	Se modifica solveapterrors para que contemple más problemas con la paquetería.
+	Se añade al fichero de configuración la línea certificate_revocation=false para compatibilidad con servidores en versión 6 de puppet.
+	Se añade la funcionalidad de traer ca.pem del servidor si el servidor está en version 6 de puppet.
+	Se afina la función dosync
+  * Se elimina basura encontrada en los ficheros. 
 
- -- Rafael J. García Perdigón <rafael.garciap@juntaex.es>  Mon, 13 May 2019 10:33:22 +0200
+ -- ismael <ismael.campos@educarex.es>  Tue, 17 Nov 2020 09:47:40 +0100
 
 linex-ubuntu-puppet (1.4.6) linex; urgency=medium
 
diff --git a/ubuntu/bionic/all/linex-ubuntu-puppet/debian/control b/ubuntu/bionic/all/linex-ubuntu-puppet/debian/control
index add5933..44db2ab 100644
--- a/ubuntu/bionic/all/linex-ubuntu-puppet/debian/control
+++ b/ubuntu/bionic/all/linex-ubuntu-puppet/debian/control
@@ -7,9 +7,7 @@ Standards-Version: 3.9.4
 
 Package: linex-ubuntu-puppet
 Architecture: all
-Depends: puppet, puppet-common, pkgsync, lockfile-progs, uuid-runtime, facter
-Breaks:puppet-linex, puppet-linex-common, facter-linex
-Conflicts:puppet-linex, puppet-linex-common, facter-linex
+Depends: puppet-linex, puppet-linex-common, pkgsync, lockfile-progs, uuid-runtime, facter-linex, curl
 Description: Configuración del cliente puppet 
  Instalación de las dependencias del cliente de puppet, 
  junto con la configuración necesaria para dicho cliente 
diff --git a/ubuntu/bionic/all/linex-ubuntu-puppet/debian/postinst b/ubuntu/bionic/all/linex-ubuntu-puppet/debian/postinst
index 48791cf..74ecca6 100644
--- a/ubuntu/bionic/all/linex-ubuntu-puppet/debian/postinst
+++ b/ubuntu/bionic/all/linex-ubuntu-puppet/debian/postinst
@@ -12,8 +12,6 @@ set -e
 
   gem install xmlrpc
 
-  #[ -x /bin/systemctl ] &&  systemctl disable puppet.service
-
   pidof systemd 2>&1>/dev/null
 
   if [ $? -eq "0" ]; then
@@ -25,8 +23,5 @@ set -e
      /usr/sbin/sinc_puppet -r -f now
   fi
 
-
-  
-  #/usr/sbin/sinc_puppet &
 exit 0
 
diff --git a/ubuntu/bionic/all/linex-ubuntu-puppet/usr/share/linex-ubuntu-puppet/sinc_puppet b/ubuntu/bionic/all/linex-ubuntu-puppet/usr/share/linex-ubuntu-puppet/sinc_puppet
index 9f95271..bfdfc8a 100755
--- a/ubuntu/bionic/all/linex-ubuntu-puppet/usr/share/linex-ubuntu-puppet/sinc_puppet
+++ b/ubuntu/bionic/all/linex-ubuntu-puppet/usr/share/linex-ubuntu-puppet/sinc_puppet
@@ -1,11 +1,10 @@
 #!/bin/bash
 # Script para tratar de realizar la sincronización del cliente puppet
-# Esteban M. Navas Martín
-# Fecha última modificación: 22/06/2018
-# Modificado por Administracionsi: 13/07/2018
+# Basado en la versión de Esteban M. Navas Martín 17/09/2020
+# Fecha última modificación Administracionsi (Ismael): 03/11/2020
 
 export DEBIAN_FRONTEND=noninteractive
-export VERSION=2.16
+export VERSION=2.17
 export PATH="${PATH:+$PATH:}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
 
 SCRIPT=`basename "$0"`
@@ -28,38 +27,106 @@ function print_help {
         echo ""
 }
 
+function preparapuppetv6 {
+  if ! `grep "certificate_revocation=false" /usr/share/linex-ubuntu-puppet/puppet.conf >/dev/null` ; then
+    sed '/\[main\]/a certificate_revocation=false' -i /usr/share/linex-ubuntu-puppet/puppet.conf
+  fi
+}
+
 function solveapterrors {
+  set +e
 
   idioma=$LC_ALL
   export LC_ALL=C
 
+  # Matamos procesos detenidos
+  stopped_processes=$(ps auwx | awk 'NR>1 && $8 ~ "T" {print $2}')
+  if [ "$stopped_processes" ]; then kill -9 $stopped_processes; fi
+
+  # Matamos el proceso más antiguo de sinc_puppet, si está corriendo
+  if [ $(pgrep -c sinc_puppet) -gt 1 ]; then pkill -o sinc_puppet; fi
+
   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/
+     if `grep "Unmet dependencies. Try using -f." /tmp/apterrors >/dev/null 2>&1`; then 
+	apt-get -yf install && dpkg --configure -a && apt-get -y autoremove
+     else
+     	if `grep "dpkg was interrupted, you must manually run 'dpkg --configure -a' to correct the problem." /tmp/apterrors >/dev/null 2>&1`; then
+		dpkg --configure -a && apt-get -yf install && apt-get -y autoremove
+     	else
+     		if `grep -E 'Encountered a section with no Package: header|Problem with MergeList' /tmp/apterrors >/dev/null 2>&1`; then
+			rm -rf /var/lib/apt/lists/
+     		else
+        		apt-get -yf install && dpkg --configure -a && apt-get -y autoremove && apt-get clean && apt-get autoclean
+		fi
+	fi
+     fi
   fi
 
+  # Instalamos paquetes a medio instalar
+  dpkg -l|grep ^iF | awk '{print $2}' || apt-get -y install $(dpkg -l|grep ^iF | awk '{print $2}')
+
   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
+     echo "Conexión con servidor de puppet." | logger -s -t $0
+     echo "Sincronizando puppet..." | logger -s -t $0
+
+     versionanterior=""
+
+     salida=$(puppet agent --onetime --no-daemonize --no-usecacheonfailure -v 2>/tmp/puppeterror.log);CODIGO_SALIDA=$?
+     grep 'certificate verify failed' /tmp/puppeterror.log
+
+     if [ $? -eq 0 ]; then
+        uuid=$(/usr/bin/uuidgen -t) && sed -i "s/certname=.*/certname=$uuid/" /usr/share/linex-ubuntu-puppet/puppet.conf
+        rm -r /var/lib/puppet/ssl/*
+        salida=$(puppet agent --onetime --no-daemonize --no-usecacheonfailure -v 2>/tmp/puppeterror.log);CODIGO_SALIDA=$?
+     fi
+
+     if [ $CODIGO_SALIDA -eq 0 ]; then
+       echo $salida
+       version=$(echo $salida | grep -oE "configuration version '[0-9]*'" | grep -oE '[0-9]*')
+
+       until [  "$version" == "$versionanterior" ]; do
+          versionanterior=$version
+          salida=$(puppet agent --onetime --no-daemonize --no-usecacheonfailure -v 2>/tmp/puppeterror.log);CODIGO_SALIDA=$?
+          echo $salida
+          version=$(echo $salida | grep -oE "configuration version '[0-9]*'" | grep -oE '[0-9]*')
+       done
+
+       if [ $CODIGO_SALIDA -eq "0" ]; then
+          echo "Sistema PUPPET correcto." | logger -s -t $0
+          exit 0
+       fi
      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
+
+
+     versionanterior=""
+
+     salida=$(puppet agent --onetime --no-daemonize --splay --splaylimit $SPLAYLIMIT --no-usecacheonfailure -v 2>/tmp/puppeterror.log);CODIGO_SALIDA=$?
+
+     if [ $CODIGO_SALIDA -eq 0 ]; then
+       echo $salida
+       version=$(echo $salida | grep -oE "configuration version '[0-9]*'" | grep -oE '[0-9]*')
+
+       until [  "$version" == "$versionanterior" ]; do
+          versionanterior=$version
+          salida=$(puppet agent --onetime --no-daemonize --no-usecacheonfailure -v 2>/tmp/puppeterror.log);CODIGO_SALIDA=$?
+          echo $salida
+          version=$(echo $salida | grep -oE "configuration version '[0-9]*'" | grep -oE '[0-9]*')
+       done
+
+       if [ $CODIGO_SALIDA -eq "0" ]; then
+          echo "Sistema PUPPET correcto" | logger -s -t $0
+          exit 0
+       fi
+    fi
   fi
 }
 
@@ -100,31 +167,13 @@ fi
 stopped_processes=$(ps auwx | awk 'NR>1 && $8 ~ "T" {print $2}')
 if [ "$stopped_processes" ]; then kill -9 $stopped_processes; fi
 
-#Definimos fichero de lock
-lockfile=/tmp/sincpuppet
-
-# 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 $(ps -ef|grep "sinc_puppet"|grep -v grep| awk '{print $2}' |grep -v $$) 2>/dev/null
-	#Si matamos con kill -9 todos los procesos sinc_puppet debemos borrar fichero de lock porque sino el proceso actual muere. 
-        lockfile-remove $lockfile
-fi
+# Definimos el fichero de lock
+lockfile=/var/lock/$(basename $0)
+lockfile-create $lockfile || exit 2
+lockfile-touch $lockfile &
+BADGER="$!"
 
-# Nos aseguramos de que sólo exista una instancia de sinc_puppet corriendo
-# 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
+trap "kill "${BADGER}" 2>/dev/null || true; lockfile-remove $lockfile; exit" QUIT INT TERM EXIT
 
 LOCALES="es_ES.UTF-8"
 
@@ -163,6 +212,7 @@ if [ $dife2 -gt $MAXTIME ]; then
 fi
 
 solveapterrors
+preparapuppetv6
 
 echo
 if [ $dife -lt 0 ]; then
@@ -200,7 +250,7 @@ puppet agent --enable
 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
+   dosync -f now
 fi
 
 
@@ -218,7 +268,6 @@ fi
 
 test -f /var/lib/puppet/ssl/certs/$uuid.pem
 if [ $? -eq "0" ]; then
-
    dosync $force $now
 
    #Si existe el certificado uuid y no se consigue sincronizar. Se sincroniza la hora, se genera un nuevo uuid y se borran todos los certificados dentro de /var/lib/puppet/ssl
@@ -235,3 +284,15 @@ else
 
    dosync $force $now
 fi
+
+#Si falla puede ser porque la versión puppet del servidor sea la 6.
+#Hay un problema al traer ca.pem del servidor en versiones del cliente puppet v3.x
+curl -k https://$(puppet agent --configprint server):8140/puppet-ca/v1/certificate/ca > /tmp/ca.pem 2>/dev/null
+if `grep "BEGIN CERTIFICATE" /tmp/ca.pem >/dev/null`; then
+   if ! `diff /tmp/ca.pem $(puppet agent --configprint localcacert) >/dev/null` ; then
+      cp -f /tmp/ca.pem $(puppet agent --configprint localcacert)
+      dosync $force $now
+   fi
+fi
+
+echo "NO SE HA PODIDO REALIZAR SINCRONIZACIÓN CON PUPPET" | logger -s -t $0
diff --git a/ubuntu/bionic/all/linex-ubuntu-puppet/usr/share/linex-ubuntu-puppet/sincpuppet.service b/ubuntu/bionic/all/linex-ubuntu-puppet/usr/share/linex-ubuntu-puppet/sincpuppet.service
index a0e7c1e..ff9742f 100644
--- a/ubuntu/bionic/all/linex-ubuntu-puppet/usr/share/linex-ubuntu-puppet/sincpuppet.service
+++ b/ubuntu/bionic/all/linex-ubuntu-puppet/usr/share/linex-ubuntu-puppet/sincpuppet.service
@@ -5,8 +5,10 @@ After=network-online.target
 
 [Service]
 Type=oneshot
+EnvironmentFile=-/usr/share/linex-ubuntu-puppet/sincpuppet.default
+TimeoutStartSec=120
 RemainAfterExit=yes
-ExecStart=/usr/sbin/sinc_puppet
+ExecStart=/usr/sbin/sinc_puppet -f now
 
 [Install]
 WantedBy=network-online.target
