#!/bin/bash
#La instalación del api requiere la instalación de pcscd en el equipo
#Dependencias versión pcscd 1.8.23																 pcscd 1.8.14				Sarah Minth recien instalado
#										libccid				1.4.1		|		pcsc-ifd-handler				1.4.1		No instalado					instalar libccid 1.4.29
#										libc6				2.15												2.15		2.23
#										libsystemd0																X			Instalado
#										libudev1			183													183			229
#										lsb-base			3.0-6												3.0-6		9.20160110
#										libpcsclite1		1.8.23-1											1.8.14		1.8.14							
#										init-system-helpers	X													1.18		1.29	
#wait.slot.events=true                  driver dbitlibbit														libbit4xpki

#verespaciolibre=$(df -h -k / --output=avail)
#espaciolibre=$(echo ${verespaciolibre:9:10})
#ver versión del api apiversionactual=$(sed -n '1p' API_VERSION.TXT)


apiversionnecesario=1.5.8.7

IPEQUIPO=$(hostname -I)
LOGFILE="/opt/cofpo/LOG_APISD_$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/

#Se comprueba si existe el servicio api
existeservicio=$(service --status-all | grep api)
existeservicioapi=$(echo ${existeservicio:6:9})


#Comprobamos si existe la carpeta del api Ver y si existe el servicio Api, 
if [ -d /opt/eReceita/api/ ]; then apiversionactual=$(sed -n '1p' /opt/eReceita/api/conf/API_VERSION.TXT); logprint "Existe la carpeta del api con la versión $apiversionactual"; else apiversionactual=0; logprint "No existe la carpeta del api";
fi

if [ $existeservicioapi = api ]; then logprint "Existe el servicio api"
fi

#Mover la carpeta actual de api si existe la carpeta y no existe el servicio
#Instalar si no existe el servicio ni la carpeta
#Actualizar si existe el servicio y la carpeta

if [[ ($existeservicioapi != api) && ($apiversionactual != 0) ]]; then (mv /opt/eReceita/* /opt/eReceita.bk); rmdir /opt/eReceita; instalaapi=1; actualizaapi=0; logprint "Existe la carpeta del api y no está instalado el servicio, se efectua copia de seguridad de la carpeta a /opt/eReceita.bk y se elimina la carpeta /opt/eReceita"; echo "Api no instalada, carpeta existente, se mueve a eReceita.bk"; else
instalaapi=0; actualizaapi=0
fi

if [[ ($existeservicioapi != api) && ($apiversionactual = 0) ]]; then instalaapi=1; actualizaapi=0
fi

if [[ ($existeservicioapi = api) && ($apiversionactual < $apiversionnecesario) ]]; then instalaapi=0; actualizaapi=1; logprint "Existe el servicio de api y la versión instalada es $apiversionactual menor que la requerida $apiversionnecesario"
fi

if [ $instalaapi = 1 ]; then 
(
#Se crea la carpeta /opt/eReceita/api y se cambia a ese directorio
mkdir  -p /opt/eReceita/api
cd /opt/eReceita/api
echo "Se crea la carpeta del Api"
logprint "Se crea la carpeta del Api"


#Copiar el fichero Instalador_API_LINUX_vxxxx.zip a /opt/eReceita/api
#Descargar el fichero del ftp y descomprimirlo
wget http://actualizaciones.cofpo.org/tl_files/01.NT/Pablo/Api/Instalador_API_LINUX_v1.5.8.7.zip;
unzip Instalador_API_LINUX_v1.5.8.7.zip
echo "Se descomprime el archivo"
logprint "Se descomprime el archivo"

#Se corrige el directorio de descompresión ha de ser /opt/eReceita/api y lo descomprime como /opt/eReceita/api/ereceita
mv ereceita/* .
rmdir ereceita
echo "Se corrige el directorio para el api"
logprint "Se corrige el directorio para el api"

#Se añade el wrapper.conf ya configurado con la ruta del Jre /opt/eReceita/api/jre/bin/...
wget http://actualizaciones.cofpo.org/tl_files/01.NT/Pablo/Api/wrapper_API_LINUX_v1.5.8.7.zip;
unzip wrapper_API_LINUX_v1.5.8.7.zip
cp -r /opt/eReceita/api/wrapper.conf /opt/eReceita/api/linuxService/conf
echo "Se modifica wrapper.conf"
logprint "Se modifica wrapper.conf"

#Instalar el certificado de CamerFirma para el acceso a la web de Contingencia, necesita de la existencia de un java en el path del sistema
#cd /opt/eReceita/api/ext
#chmod u+x actualiza.sh
#./actualiza.sh

#Activar el bit de ejecución de los ficheros api y wrapper situados en la ruta linuxService relativa al directorio de instalación
cd /opt/eReceita/api/linuxService
chmod u+x api
chmod u+x wrapper
cd /opt/eReceita/api
logprint "Se activa el bit de ejecución de los ficheros api y wrapper en linuxService"

#Editar el fichero wrapper.conf situado en la ruta linuxService/conf relativa al directorio de instalación.
#cd /opt/eReceita/api/linuxService/conf
#vi wrapper.conf
#en caso de querer usar una máquina virtual diferente a la embebida modificariamos la variable wrapper.java.command 
#para que apunte al directorio donde se encuentra el ejecutable java, así, en caso de que la máquina virtual JAVA se 
#encontrase instalada en la ruta /usr/local/jdk esto es lo que deberíamos escribir en el fichero: 
#wrapper.java.command=/usr/local/jdk/bin/java
#al utilizar la variable de entorno ERECEITA_JRE=/opt/eReceita/api/jre no es necesario modificar ese archivo, si es necesario ya que parece que aún existiendo esa variable de entorno wrapper no inicia


#Añadir el módulo de seguridad pkcs11 al sistema
#cp /opt/eReceita/api/ext/safesign-pkcs11-2.3.1/usr/lib/libaetpkss.so.2.3.1 /usr/lib

#Para usar las nuevas tarjetas de firma profesional es necesario adicionalmente copiar el driver de estas
#cp ext/bit4id/libbit4ipki.so /usr/lib
#cp ext/bit4id/libbit4ipki.so.conf /usr/lib
#este driver lo instala actualizado el script bit4idgnt2.sh
#wget http://www.cofpo.org/tl_files/01.NT/Pablo/Bit4idGestor/bit4idgnt2.sh;
#chmod a+x bit4idgnt2.sh
#source bit4idgnt2.sh

#Instalar módulo pcscd.  Debian/Ubuntu
#apt-get install pcscd 
#En caso de que no este activo levantarlo
#/etc/init.d/pcscd start
#Este módulo lo instala el script bit4idgnt2.sh
#/etc/init.d/pcscd start


#Instalar librería libcrypto.so.0.9.7
#cp /opt/eReceita/api/ext/openssl.0.9.7/usr/lib/libcrypto.so.0.9.7 /usr/lib
#echo "Se instala la libreria libcrypto.so.0.9.7"

#Instalar Librerías C++ versión 5. Las librerías PKCS11 compatibles con la tarjeta necesitan la versión 5
#apt-get install libstdc++5
#wget http://www.cofpo.org/tl_files/01.NT/Pablo/libstdc++5/libstdc++5_3.3.6-28ubuntu1_i386.deb;
#dpkg -i libstdc++5_3.3.6-28ubuntu1_i386.deb
#echo "Se instala la libreria C++ versión 5"

#Generar el almacén de claves (ver capitulo almacén de claves), solicitud de certificados
#instalar el módulo como un servicio Linux: crear un enlace simbólico en el directorio init.d que apunte al directorio de instalación del módulo
ln -s /opt/eReceita/api/linuxService/api /etc/init.d/api
echo "Se instala el modulo del api como un servicio"
logprint "Se instala el modulo del api como un servicio"

#Modificar el fichero hosts situado en la ruta /etc añadiéndole la línea donde se especifica la IP y el nombre de la máquina donde residirán los Web Services del NCD. 
#10.200.1.10 ws.ereceita.es 
#Comprobar que la instalación ha ido bien levantando el módulo
#etc/init.d/api console 
#Se crea la variable de entorno export ERECEITA_JRE=/opt/eReceita/api/jre asigna permisos a todos los archivos en /opt/eReceita/Api y se inicia correctamente
#export ERECEITA_JRE=/opt/eReceita/api/jre
chmod 777 -R /opt/eReceita/api/jre/*
export ERECEITA_JRE=/opt/eReceita/api/jre
echo "Se crea la variable de entorno ERECEITA_JRE"
logprint "Se dan permisos en /opt/eReceita/api/jre/ y se crea la variable de entorno ERECEITA_JRE"
find ./ -name "*.sh" -exec chmod +x {} \;
logprint "Se añaden permisos a los scripts de /opt/eReceita/api/"

#Editar /etc/environment añadir la variable y el path
#ERECEITA_JRE="/opt/eReceita/api/jre"
#path /opt
cd /etc
cp environment environment.bk
sed -i '1i ERECEITA_JRE="/opt/eReceita/api/jre"' environment
echo "Se añade la variable de entorno ERECEITA_JRE"
logprint "Se añade la variable de entorno ERECEITA_JRE a /etc/enviroment"


#Debería aparecer la traza ServerSocket. SERVER UP en la consola. Pulsando CTRL+C detenemos el proceso.
#Activamos el arranque y parada de la aplicación para los diferentes niveles de ejecución para que se ejecute la parada del servicio cuando se apague el sistema y se levante cuando se arranque el sistema 
update-rc.d api start 20 2 3 4 5 . stop 20 0 1 6 .
echo "Se activa el arranque y parada del servicio"
logprint "Se activa el arranque y parada del servicio"

 


#Se modifica el fichero hosts
logprint "Se modifica el fichero hosts"

# PATH TO YOUR HOSTS FILE
ETC_HOSTS=/etc/hosts

# DEFAULT IP FOR HOSTNAME
IP="10.200.1.10"

# Hostname to add/remove.
HOSTNAME="ws.ereceita.es"

 echo "removing host";
    if [ -n "$(grep $HOSTNAME /etc/hosts)" ]
    then
        echo "$HOSTNAME Found in your $ETC_HOSTS, Removing now...";
        sudo sed -i".bak" "/$HOSTNAME/d" $ETC_HOSTS
    else
        echo "$HOSTNAME was not found in your $ETC_HOSTS";
    fi


    echo "adding host";
    HOSTS_LINE="$IP  $HOSTNAME"
    if [ -n "$(grep $HOSTNAME /etc/hosts)" ]
        then
            echo "$HOSTNAME already exists : $(grep $HOSTNAME $ETC_HOSTS)"
        else
            echo "Adding $HOSTNAME to your $ETC_HOSTS";
            sudo -- sh -c -e "echo '$HOSTS_LINE' >> /etc/hosts";

            if [ -n "$(grep $HOSTNAME /etc/hosts)" ]
                then
                    echo "$HOSTNAME was added succesfully \n $(grep $HOSTNAME /etc/hosts)";
                else
                    echo "Failed to Add $HOSTNAME, Try again!";
            fi
    fi
	

#Se añade la ip a /opt/eReceita/api/GenerarKeystore/parametros.txt
echo $IPEQUIPO > /opt/eReceita/api/GenerarKeystore/parametros.txt
logprint "Se añade la ip del equipo al fichero parametros.txt"

); else echo "Api ya instalada versión: " $apiversionactual; logprint "Api ya instalada versión: $apiversionactual"

fi

#Se añade la línea waitslotevent=true en el controlador libbitpki
#PATH a libbitpki.so.conf
#libbitpki=/usr/lib/libbit4ipki.so.conf

# línea a añadir o quitar
#parametro1="waitslotevent=true"

#echo "Eliminando parametro1"
#	if [ -n "$(grep $parametro1 /usr/lib/libbit4ipki.so.conf)" ]
#	then	
#		echo "$parametro1 encontrado en $libbitpki, eliminandolo...";
#		sudo sed -i".bak" "/$parametro1/d" $libbitpki
#	else
#		echo "$parametro1 no se ha encontrado en $libbitpki";
#	fi
	
#echo "Añadiendo parametro";
#	if [ -n "$(grep $parametro1 /usr/lib/libbit4ipki.so.conf)" ]
#		then	
#			echo "$parametro1 ya existe : $(grep $parametro1 $libbitpki)"
#		else
#			echo "Añadiendo $parametro1 a $libbitpki";
#			sudo -- sh -c -e "echo '$parametro1' >> /usr/lib/libbit4ipki.so.conf";

#           if [ -n "$(grep $parametro1 /usr/lib/libbit4ipki.so.conf)" ]
#                then
#                    echo "$parametro1 se añadió correctamente \n $(grep $parametro1 /usr/lib/libbit4ipki.so.conf)";
#                else
#                    echo "fallo al añadir $parametro1, Intentalo de nuevo!";
#            fi
#   fi

echo "Versión de API a instalar" $apiversionnecesario
echo "Comprueba el servicio" $existeservicio
echo "Comprueba si existe el servicio api" $existeservicioapi
echo "si existe la carpeta de api muestra la versión" $apiversionactual
echo "Instalar api" $instalaapi
echo "Actualizar api" $actualizaapi


if [ $actualizaapi = 1 ]; then echo "Es necesario actualizar El api"
#versión a actualizar 1.8.5.4

mkdir /opt/eReceita/api/actualizacion
mkdir /opt/eReceita/api/actualizacion/1.5.8.7
echo "Se crea la carpeta para los archivos de actualización"

cd /opt/eReceita/api/actualizacion/1.5.8.7
wget http://actualizaciones.cofpo.org/tl_files/01.NT/Pablo/Api/Actualizador_API_LINUX_v1.5.8.7.zip;
unzip Actualizador_API_LINUX_v1.5.8.7.zip
echo "Se descomprime el archivo"

chmod a+x actualiza.sh
./actualiza.sh
echo "Api actualizada a la 1.5.8.7"
fi

echo "Actualizar api" $actualizaapi


