#!/bin/bash
# vim: set softtabstop=4 tabstop=4
+. inst/util.sh
+
################# Funciones ###########################
# Devuelve 0 si la ruta fue cambiada y 1 si quedo por defecto
function askDir() {
- cat <<MARCA
->> Nombre del directorio de $1 es: ($3)
-Si desea modificarlo reemplaze "$2" por el deseado y presione ENTER,
-de lo contrario solo presione ENTER."
-MARCA
- read DIRSELECTED
+ leer ">> Ingrese la ruta para los archivos $1" "$2" DIRSELECTED
if [ -n "$DIRSELECTED" ]; then return 1
else return 0
fi
# Devuelve 0 si el script y el OS matchean, 1 otherwise
function checkOS() {
- if echo $0 | egrep -q 'afinstal$'; then
- SCRIPTOS="Linux"
- fi
- if echo $0 | egrep -q 'afinstam$'; then
- SCRIPTOS="Mac"
- fi
- if echo $0 | egrep -q 'afinstaw$'; then
- SCRIPTOS="Windows"
- fi
-
- if [ "$SISOPTP" != "$SCRIPTOS" ]; then
+ CURSIS="$1"
+ SCRIPTOS="un sistema desconocido"
+ case "$0" in
+ *afinstal)
+ SCRIPTOS="Linux"
+ ;;
+ *afinsmac)
+ SCRIPTOS="Mac"
+ ;;
+ *afinstaw)
+ SCRIPTOS="Windows"
+ ;;
+ esac
+ if [ "$CURSIS" != "$SCRIPTOS" ]; then
cat<<MARCA
+ERROR!
-### ERROR ###
-Este proceso de instalacion es para $SISOPTP y su sistema operativo
-es $CURSIS. Solicite a su proveedor la version adecuada e inicie
-nuevamente el proceso de instalacion.
+Este proceso de instalacion es para $SCRIPTOS
+y su sistema operativo es $CURSIS
+Solicite a su proveedor la version adecuada
+e inicie nuevamente el proceso de instalacion.
MARCA
return 1
return 0;
else
cat <<MARCA
+ERROR!
+
+Este proceso de instalación solo puede ser
+ejecutado si Perl 5 o superior ya esta instalado
-"ERROR!!!"
-"Este proceso de instalación solo puede ser"
-"ejecutado si Perl 5 o superior ya esta instalado"
+Efectúe a instalación de Perl
+Inicie nuevamente el procedimiento de instalación.
-"Efectúe a instalación de Perl"
-i"e inicie nuevamente el procedimiento de instalación."
MARCA
return 1
fi
}
# Modifica una linea dada de un archivo dado
+# Uso: nombre_archivo nro_linea nueva_linea
function changeLine() {
- cat "$1" | sed "${2}s%.*%$3%" > "$1"
+ # Si no se puede crear archivos, muero
+ [ -w . ] || die "No se puede escribir en el directorio actual" 100
+ tmp="$0.$$.tmp"
+ sed "${2}s%.*%$3%" > "$tmp" < "$1"
+ mv "$tmp" "$1"
}
# Mensaje generico de abort
echo "* Aficonf instalado el $fechaconf por $userconf"
fi
if [ "$havemonio" -eq 1 ]; then
- echo "* Afimonio instalado el $fechaconf por $usermonio"
+ echo "* Afimonio instalado el $fechamonio por $usermonio"
fi
cat <<MARCA
*
# Permite seleccionar que componentes se instalaran
function selectModules() {
- PS3="Seleccione un componente:"
+ PS3="Seleccione un componente: "
key="S"
toinstall=""
while [ "$key" = "S" ] && [ -n "$choices" ]
if [ -n "$choices" ]; then
echo
- echo "Se instalara [$selected], si desea seleccionar"
- echo "otro componente presione \"S\" y luego ENTER, de lo contrario"
- echo "presione solo ENTER para comenzar a instalar los componentes"
- read key
- if [ "$key" = "s" ]; then key="S"
+ echo "Se instalará [$selected]"
+
+ preguntar "¿Desea agregar otro componente para instalar (S)?" SsNn key S
+ if [ "$key" = "s" ]; then
+ key="S"
fi
fi
fi
read key
}
+# Ofrece arrancar el afimonio si es posible
+function askDaemon {
+ if [ "$havemonio" -eq 1 ] && [ "$havefraude" -eq 1 ]; then
+ echo "Desea efectuar la activacion del demonio antifraude?"
+ echo "Si desea arrancar el proceso oprima solamente ENTER, de lo contrario oprima cualquier otra tecla y luego ENTER."
+ read choice
+ monbin=`grep -n "Comando" "$CONFFILE" | grep '^30' | sed s%.*Comando.%%`
+ mondir=`grep -n "BINDIR" "$CONFFILE" | grep '^31' | sed 's%.*= %%'`
+ if [ -z "$choice" ]; then
+ $mondir/afimonio_daemon.sh start
+ else
+ echo "Para realizar la activacion del demonio, tipee en linea de comando: $mondir/afimonio_daemon.sh start"
+ fi
+ echo
+ fi
+}
+
################### MAIN SCRIPT CODE ###################
clear
SISOPTP=$(uname)
INSTDIR="${CURRDIR}/inst"
CONFFILE="${CONFDIR}/afinstal.conf"
DEFAULTDIR=$CURRDIR
+OWNCONFDIR="$HOME/.antifraude"
havemonio=0
haveconf=0
havefraude=0
# [STEP1] Verifico el OS vs SCRIPT y la presencia de PERL
-echo ">> Verificando version del software contra el OS.."
-checkOS
+echo -n ">> Verificando version del software contra el OS... "
+checkOS "$SISOPTP"
if [ "$?" -ne 0 ]; then
abortMessage
exit 1
fi
-echo ">> Verificando la existencia de PERL.."
-checkPerl
-if [ "$?" -ne 0 ]; then
- abortMessage
- exit 1
-fi
+echo 'OK!'
echo ">> Proceso de instalacion para $SISOPTP iniciado."
echo ">> Presione ENTER para continuar"
read key
# [STEP3] Chequeamos si hay componentes ya instalados
if [ -f "$CONFFILE" ] && [ -s "$CONFFILE" ]; then
#Busco los nombres de los binarios
- binfraude=`grep -n "Comando" "$CONFFILE" | grep 10 | sed s%.*Comando.%%`
- binconf=`grep -n "Comando" "$CONFFILE" | grep 20 | sed s%.*Comando.%%`
- binmonio=`grep -n "Comando" "$CONFFILE" | grep 30 | sed s%.*Comando.%%`
+ binfraude=`grep -n "Comando" "$CONFFILE" | grep '^10' | sed s%.*Comando.%%`
+ binconf=`grep -n "Comando" "$CONFFILE" | grep '^20' | sed s%.*Comando.%%`
+ binmonio=`grep -n "Comando" "$CONFFILE" | grep '^30' | sed s%.*Comando.%%`
#Busco donde deberian estar instalados
- dirfraude=`grep -n "BINDIR" "$CONFFILE" | grep 11 | sed 's%.*= %%'`
- dirconf=`grep -n "BINDIR" "$CONFFILE" | grep 21 | sed 's%.*= %%'`
- dirmonio=`grep -n "BINDIR" "$CONFFILE" | grep 31 | sed 's%.*= %%'`
+ dirfraude=`grep -n "BINDIR" "$CONFFILE" | grep '^11' | sed 's%.*= %%'`
+ dirconf=`grep -n "BINDIR" "$CONFFILE" | grep '^21' | sed 's%.*= %%'`
+ dirmonio=`grep -n "BINDIR" "$CONFFILE" | grep '^31' | sed 's%.*= %%'`
# Verifico finalmente si esta alli el archivo, en caso negativo, habilito
# la posibilidad de instalar ese componente
if [ ! -f "${dirmonio}/$binmonio" ]; then
choices="AFIMONIO"
else
havemonio=1
- usermonio=`grep -n "USERID" "$CONFFILE" | grep 35 | sed 's%.*= %%'`
- fechamonio=`grep -n "FECINS" "$CONFFILE" | grep 36 | sed 's%.*= %%'`
+ usermonio=`grep -n "USERID" "$CONFFILE" | grep '^35' | sed 's%.*= %%'`
+ fechamonio=`grep -n "FECINS" "$CONFFILE" | grep '^36' | sed 's%.*= %%'`
fi
if [ ! -f "${dirconf}/$binconf" ]; then
choices="${choices} AFICONF"
else
haveconf=1
- userconf=`grep -n "USERID" "$CONFFILE" | grep 25 | sed 's%.*= %%'`
- fechaconf=`grep -n "FECINS" "$CONFFILE" | grep 26 | sed 's%.*= %%'`
+ userconf=`grep -n "USERID" "$CONFFILE" | grep '^25' | sed 's%.*= %%'`
+ fechaconf=`grep -n "FECINS" "$CONFFILE" | grep '^26' | sed 's%.*= %%'`
fi
if [ ! -f "${dirfraude}/$binfraude" ]; then
choices="${choices} ANTIFRAUDE"
else
havefraude=1
- userfraude=`grep -n "USERID" "$CONFFILE" | grep 17 | sed 's%.*= %%'`
- fechafraude=`grep -n "FECINS" "$CONFFILE" | grep 18 | sed 's%.*= %%'`
+ userfraude=`grep -n "USERID" "$CONFFILE" | grep '^17' | sed 's%.*= %%'`
+ fechafraude=`grep -n "FECINS" "$CONFFILE" | grep '^18' | sed 's%.*= %%'`
fi
choices=${choices% }
choices=${choices# }
# [STEP4] Seleecion de los componentes a instalar
# TODO: tener en cuenta los que ya estan y no permitir elegirlos
if [ -z "$choices" ]; then
+ askDaemon
showInstalled
abortMessage
exit 0
echo "" >> $CONFFILE
done
fi
+if [ ! -f "$OWNCONFDIR" ]; then
+ mkdir -p "$OWNCONFDIR"
+fi
+if [ ! -f "$OWNCONFDIR/lock" ]; then
+ mkdir -p "$OWNCONFDIR/lock"
+fi
+if [ ! -f "$OWNCONFDIR/conf" ]; then
+ mkdir -p "$OWNCONFDIR/conf"
+fi
# Comienzo la instalacion de cada componente
comandos=`echo $toinstall | sed s%,%" "%g`
# Directorios FIJOS para todos los componentes
clear
+ if [ "$comando" = "antifraude.pl" ]; then
+ echo -n ">> Verificando la existencia de PERL... "
+ checkPerl
+ if [ "$?" -ne 0 ]; then
+ abortMessage
+ exit 1
+ fi
+ echo 'OK!'
+ fi
+
cat <<MARCA
** Iniciando instalacion del componente <$comando>.
>> Nombre del directorio de instalacion: ($INSTDIR)
>> Nombre del directorio de configuracion: ($CONFDIR)
-Por favor ingrese un path raiz en donde se crearan los directorios de
-ejecutables, datos y logs segun corresponda o bien presione ENTER para
-aceptar el siguiente sugerido: $CURRDIR
MARCA
# Le pido un rootpath donde se instalara este comando en particular
- read userpath
- if [ -n "$userpath" ]; then ROOTPATH=$userpath
- else ROOTPATH=$CURRDIR
- fi
+ is_writeable=0
+ while [ $is_writeable -eq 0 ]; do
+ leer ">> Ingrese la ruta de instalación" "$CURRDIR" userpath
+ if [ -n "$userpath" ]; then
+ ROOTPATH=$userpath
+ if [ -w "${userpath%/*}" ]; then is_writeable=1
+ else echo ">> ERROR: No es posible crear dicho directorio"
+ fi
+ else
+ ROOTPATH="$CURRDIR"
+ is_writible=1
+ fi
+ done
# preparlos los dirs que voy a sugerir
BINDIR="${ROOTPATH}/bin"
fi
# Le sugiero el archivo de log
- echo ">> Nombre del archivo de log: (${comando%.pl}.log)"
- echo "Si desea conservar este nombre presione ENTER, de lo contrario"
- echo "ingrese un nuevo nombre y luego presione ENTER"
- read LOGFILE
+ leer ">> Nombre del archivo de log" "${comando%.pl}.log" LOGFILE
if [ -z "$LOGFILE" ]; then
LOGFILE="${comando%.pl}.log"
fi
# Le sugiero un size para el logfile
- echo ">> Tamaño máximo para el archivo ($LOGFILE) en MB: 200"
- echo "Si desea conservar este valor presione ENTER, de lo contrario ingrese"
- echo "un nuevo valor y luego presione ENTER"
- read LOGSIZE
+ leer ">> Tamaño máximo para el archivo ($LOGFILE) en MB" "200" LOGSIZE
if [ -z "$LOGSIZE" ]; then
LOGSIZE=200
fi
cat <<MARCA
+
>> Parametros de instalacion de $comando
>> ===================================================================
>> Directorio de instalación: $INSTDIR
# Comienzo a crear la estructura de directorios definida (Check permisos!!)
echo ">> Creando Estructura de Directorio...."
- mkdir -p $BINDIR
- mkdir -p $LOGDIR
- touch $LOGDIR/$LOGFILE
- if [ $comando = "antifraude.pl" ]; then
- mkdir -p $DATADIR
- mkdir -p $DATADIR/{aprocesar,enproceso,rechazadas,procesadas}
- mkdir -p $DATADIR/alarmas
+ mkdir -p "$BINDIR"
+ mkdir -p "$LOGDIR"
+
+ touch "$LOGDIR/$LOGFILE"
+ if [ "$comando" = "antifraude.pl" ]; then
+ mkdir -p "$DATADIR"
+ mkdir -p "$DATADIR"/{aprocesar,enproceso,rechazadas,procesadas}
+ mkdir -p "$DATADIR/alarmas"
fi
echo ">> Moviendo Archivos....."
cp "$INSTDIR/$comando" "$BINDIR"
- cp "$INSTDIR/oridesti.txt" "$CONFDIR"
+ chmod u+x "$BINDIR/$comando"
+ if [ "$comando" = "afimonio" ]; then
+ cp "$INSTDIR/afimonio_daemon.sh" "$BINDIR"
+ chmod u+x "$BINDIR/afimonio_daemon.sh"
+ fi
+
+ # Copio umbrales, oridesti y utilities una sola vez
+ if [ ! -f "$OWNCONFDIR/oridesti.txt" ]; then
+ cp "$INSTDIR/oridesti.txt" "$OWNCONFDIR"
+ fi
+ if [ ! -f "$OWNCONFDIR/umbrales.param" ]; then
+ cp "$INSTDIR/umbrales.param" "$OWNCONFDIR"
+ fi
+ if [ ! -f "$OWNCONFDIR/umbrales.id" ]; then
+ echo 0 >> "$OWNCONFDIR/umbrales.id"
+ fi
+ if [ ! -f "$OWNCONFDIR/util.sh" ]; then
+ cp "$INSTDIR/util.sh" "$OWNCONFDIR"
+ fi
# Guardo los datos en el archivo de configuracion
+ ownconffile="$OWNCONFDIR/conf/${comando%.pl}.conf"
+ if [ -f "$ownconffile" ]; then
+ rm -rf "$ownconffile"
+ fi
userid=$LOGNAME
fecha=$(date +%d/%m/%Y)
case $comando in
"afimonio" ) numline=30;
havemonio=1;
usermonio=$userid;
- fechamonio=$fecha;;
+ fechamonio=$fecha;
+ prefix="AFIM";;
"aficonf" ) numline=20;
haveconf=1;
userconf=$userid;
- fechaconf=$fecha;;
+ fechaconf=$fecha;
+ prefix="AFIC";;
"antifraude.pl" ) numline=10;
havefraude=1;
userfraude=$userid;
- fechafraude=$fecha;;
- esac
+ fechafraude=$fecha;
+ prefix="ANTI";;
+ esac
changeLine "$CONFFILE" "$numline" "Comando $comando"
numline=$(($numline+1))
changeLine "$CONFFILE" "$numline" "BINDIR = $BINDIR"
+ echo "${prefix}_BINDIR=\"$BINDIR\"" >> $ownconffile
numline=$(($numline+1))
changeLine "$CONFFILE" "$numline" "LOGDIR = $LOGDIR"
+ echo "${prefix}_LOGDIR=\"$LOGDIR\"" >> $ownconffile
numline=$(($numline+1))
changeLine "$CONFFILE" "$numline" "LOGFILE = $LOGFILE"
+ echo "${prefix}_LOGFILE=\"$LOGFILE\"" >> $ownconffile
numline=$(($numline+1))
changeLine "$CONFFILE" "$numline" "LOGSIZE = $LOGSIZE"
+ echo "${prefix}_LOGSIZE=$LOGSIZE" >> $ownconffile
numline=$(($numline+1))
if [ "$comando" = "antifraude.pl" ]; then
changeLine "$CONFFILE" "$numline" "DATADIR = $DATADIR"
+ echo "${prefix}_DATADIR=\"$DATADIR\"" >> $ownconffile
numline=$(($numline+1))
changeLine "$CONFFILE" "$numline" "DATASIZE = "
numline=$(($numline+1))
changeLine "$CONFFILE" "$numline" "USERID = $userid"
numline=$(($numline+1))
changeLine "$CONFFILE" "$numline" "FECINS = $fecha"
+ echo ">> Instalación del componente $comando completada"
+ echo ">> Presione ENTER para continuar"
+ read
done
# [STEP6] Ofrecer arrancar el Afimonio si estan los tres paquetes instalados
+askDaemon
# [STEP7] Mostrar en un recuadro que se encuentra instalado en el sistema
showInstalled