#!/bin/bash

#Gestor para bit4id		libbit4xpki 1.4.10.447
#Dependencias			pcscd, libpcsclite1, libccid, libc6
#sarah minth nuestro	pcscd									1.8.14			Instalado
#						libpcsclite1							1.8.14			Instalado
#						libccid									1.4.22			Instalado
#						libc6									2.23			Instalado
#						libbit4xpki								1.4.10.447		Instalado
#sarah minth hyper-v recién instalado
#						pcscd									1.8.14			No Instalado			Instalar pcscd 1.8.14
#						libpcsclite1							1.8.14			Instalado					
#						libccid									1.4.22			No Instalado			Instalar libcid 1.4.29		
#						libc6									2.23			Instalado		
#						libbit4xpki								1.4.10.447		No Instalado			Instalar libbit4xpki 1.4.10.447	

libpcsclite1necesario=1.8.14-1ubuntu1.16.04.1
libccidnecesario=1.4.22
pcscdnecesario=1.8.14
libbit4xpkinecesario=1.4.10-447

IPEQUIPO=$(hostname -I)
LOGFILE="/opt/cofpo/LOG_BIT4_$IPEQUIPO"
LOGDATE=$(date)

#Función de log
logprint() {
    echo "$(date +%T): $*" >> $LOGFILE
}

#Comprueba si existe la carpeta /opt/cofpo, si no existe la crea y añade permisos 
if [ -d /opt/cofpo/ ]; then echo "La carpeta /opt/cofpo/ ya existe"; echo "---------- Log of $0 for $LOGDATE equip $IPEQUIPO ----------" >> $LOGFILE; logprint "La carpeta /opt/cofpo/ ya existe"; else mkdir /opt/cofpo/; chmod 777 /opt/cofpo; echo "---------- Log of $0 for $LOGDATE equip $IPEQUIPO ----------" >> $LOGFILE; logprint "Se crea la carpeta /opt/cofpo";
fi 

cd /opt/cofpo/

#Compara la version instalada de libpcsclite1 para comprobar si es necesario instalarla por dependencia de pcscd, ha de ser igual a la 1.8.14-1ubuntu1.16.04.1
logprint "Se compara la versión instalada de libpcsclite1"

existelibpcsclite1=$(dpkg --get-selections | grep libpcsclite1)
existelibpcsclite1install=$(echo ${existelibpcsclite1:21:7})

if [ $existelibpcscliteinstall="install" ]; then verlibpcsclite1=$(dpkg -s libpcsclite1 | grep "Version"); ver9=$(echo ${verlibpcsclite1:9:33}); else ver9=0
fi 

logprint "Versión de libpcsclite1 necesaria $libpcsclite1necesario"
logprint "Versión de libpcsclite1 instalada $ver9"

dpkg --compare-versions $ver9 ge $libpcsclite1necesario
res9=$(echo $?)

if [ $res9 -eq 0 ]; then instalalibpcsclite1=0; logprint "Versión de libpcsclite1 instalada igual o superior a la necesaria";
else instalalibpcsclite1=1; wget http://actualizaciones.cofpo.org/tl_files/01.NT/Pablo/Bit4idGestor/libpcsclite1_1.8.14-1ubuntu1.16.04.1_i386.deb; logprint "Versión de libpcsclite1 instalada inferior a la necesaria se descarga";
fi


#Compara la version instalada de libccid para comprobar si es necesario instalarla por dependencia de libbit4xpki y pcscd, ha de ser mayor o igual a la 1.2.22
logprint "Se compara la versión instalada de libccid" 

existelibccid=$(dpkg --get-selections | grep libccid)
existelibccidinstall=$(echo ${existelibccid:7:14})

if [ $existelibccidinstall = "install" ]; then verlibccid=$(dpkg -s libccid | grep "Version"); ver10=$(echo ${verlibccid:9:6}); else ver10=0;
fi

logprint "Versión de libccid necesaria $libccidnecesario"
logprint "Versión de libccid instalada $ver10"

dpkg --compare-versions $ver10 ge $libccidnecesario
res10=$(echo $?)

if	[ $res10 -eq 0 ]; then instalalibccid=0; logprint "Versión de libccid instalada igual o superior a la necesaria";
	else instalalibccid=1; wget http://actualizaciones.cofpo.org/tl_files/01.NT/Pablo/Bit4idGestor/libccid_1.4.29-1_i386.deb; logprint "Versión de libccid instalada inferior a la necesaria se descarga";
fi


#Compara la version instalada de pcscd para comprobar si es necesario instalarla por dependencia de libbit4xpki, ha de ser mayor o igual a la 1.8.14 
logprint "Se compara la versión instalada de pcscd"

existepcscd=$(dpkg --get-selections | grep pcscd)
existepcscdinstall=$(echo ${existepcscd:7:14})

if [ $existepcscdinstall = "install" ]; then verpcscd=$(dpkg -s pcscd | grep "Version"); ver11=$(echo ${verpcscd:9:6}); else ver11=0;
fi

logprint "Versión de pcscd necesaria $pcscdnecesario"
logprint "Versión de pcscd instalada $ver11"
 
dpkg --compare-versions $ver11 ge $pcscdnecesario
res11=$(echo $?)

if	[ $res11 -eq 0 ]; then instalapcscd=0; logprint "Versión de pcscd instalada igual o superior a la necesaria";
	else instalapcscd=1; wget http://actualizaciones.cofpo.org/tl_files/01.NT/Pablo/Bit4idGestor/pcscd_1.8.14-1ubuntu1.16.04.1_i386.deb; logprint "Versión de pcscd instalada inferior a la necesaria se descarga";
fi


#Compara la version instalada de libbit4xpki
logprint "Se compara la versión instalada de libbit4xpki"

existelibbit4xpki=$(dpkg --get-selections | grep libbit4xpki)
existelibbit4xpkiinstall=$(echo ${existelibbit4xpki:16:10})

if [ $existelibbit4xpkiinstall = "install" ]; then verlibbit4xpkiinstall=$(dpkg -s libbit4xpki | grep "Version"); ver12=$(echo ${verlibbit4xpkiinstall:9:10}); else ver12=0;
fi

logprint "Versión de libbit4xpki necesaria $libbit4xpkinecesario"
logprint "Versión de libbit4xpki instalada $ver12"
 
dpkg --compare-versions $ver12 ge $libbit4xpkinecesario
res12=$(echo $?)

if	[ $res12 -eq 0 ]; then instalalibbit4xpki=0; logprint "Versión de libbit4xpki instalada igual o superior a la necesaria";
	else instalalibbit4xpki=1; wget http://actualizaciones.cofpo.org/tl_files/01.NT/Pablo/Bit4idGestor/libbit4xpki-bit4id-i386.1.4.10-477.deb; logprint "Versión de libbit4xpki instalada inferior a la necesaria se descarga";
fi


#Instala los paquetes necesarios según los resultados obtenidos
if [ $instalalibpcsclite1 -eq 1 ]; then logprint "Se instala libpcsclite1"; dpkg -i libpcsclite1_1.8.14-1ubuntu1.16.04.1_i386.deb >> $LOGFILE;  else echo "No es necesario instalar libpcsclite1"; logprint "No es necesario instalar libpcsclite1"
fi

if [ $instalalibccid -eq 1 ]; then logprint "Se instala libccid"; dpkg -i libccid_1.4.29-1_i386.deb >> $LOGFILE;  else echo "No es necesario instalar libccid"; logprint "No es necesario instalar libccid";
fi

if [ $instalapcscd -eq 1 ]; then logprint "Se instala pcscd"; dpkg -i pcscd_1.8.14-1ubuntu1.16.04.1_i386.deb >> $LOGFILE;  else echo "No es necesario instalar pcscd"; logprint "No es necesario instalar pcscd";
fi

if [ $instalalibbit4xpki -eq 1 ]; then logprint "Se instala libbit4xpki"; dpkg -i libbit4xpki-bit4id-i386.1.4.10-477.deb; else echo "No es necesario instalar libbit4xpki"; logprint "No es necesario instalar libbit4xpki";
fi


#Elimina los paquetes descargados despues de la instalación
if [ $instalalibpcsclite1 -eq 1 ]; then rm libpcsclite1_1.8.14-1ubuntu1.16.04.1_i386.deb; logprint "Se borra el archivo de instalación libpcsclite1"
fi

if [ $instalalibccid -eq 1 ]; then rm libccid_1.4.29-1_i386.deb; logprint "Se borra el archivo de instalación libccid"
fi

if [ $instalapcscd -eq 1 ]; then rm pcscd_1.8.14-1ubuntu1.16.04.1_i386.deb; logprint "Se borra el archivo de instalación pcscd"
fi

if [ $instalalibbit4xpki -eq 1 ]; then service pcscd restart; rm libbit4xpki-bit4id-i386.1.4.10-477.deb; logprint "Se borra el archivo de instalación libbit4xpki";
fi


echo $existelibpcsclite1
echo $verlibpcsclite1
echo $ver9
echo $res9
echo $instalalibpcsclite1

echo $existelibccid
echo $verlibccid
echo $ver10
echo $res10
echo $instalalibccid

echo $existepcscd
echo $verpcscd
echo $ver11
echo $res11
echo $instalapcscd

echo $existelibbit4xpki
echo $verlibbit4xpkiinstall
echo $ver12
echo $res12
echo $instalalibbit4xpki

