#!/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() { 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() { CURSIS="$1" SCRIPTOS="un sistema desconocido" case "$0" in *afinstal) SCRIPTOS="Linux" ;; *afinsmac) SCRIPTOS="Mac" ;; *afinstaw) SCRIPTOS="Windows" ;; esac if [ "$CURSIS" != "$SCRIPTOS" ]; then cat< "$tmp" < "$1" mv "$tmp" "$1" } # Mensaje generico de abort function abortMessage { echo ">> Proceso de instalacion cancelado" } # Muestra los componentes instalados, usando vars ya definidas previamente function showInstalled { cat <> Se instalaran: $toinstall MARCA select REPLY in $choices do case $REPLY in "AFIMONIO" ) selected="afimonio";; "AFICONF" ) selected="aficonf";; "ANTIFRAUDE" ) selected="antifraude.pl";; * ) selected="INVALID";; esac break done if [ $selected != "INVALID" ]; then choices=`echo $choices | sed s/$REPLY//` if [ -z "$toinstall" ]; then toinstall=$selected else toinstall="$toinstall,$selected" fi if [ -n "$choices" ]; then echo echo "Se instalará [$selected]" preguntar "¿Desea agregar otro componente para instalar (S)?" SsNn key S if [ "$key" = "s" ]; then key="S" fi fi fi done if [ -n "$key" ]; then echo fi cat < MARCA 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) CURRDIR=`echo ${0%/*} | sed s%'\.'%$PWD%` CONFDIR="${CURRDIR}/conf" 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 -n ">> Verificando version del software contra el OS... " checkOS "$SISOPTP" if [ "$?" -ne 0 ]; then abortMessage exit 1 fi echo 'OK!' echo ">> Proceso de instalacion para $SISOPTP iniciado." echo ">> Presione ENTER para continuar" read key # [STEP2] License Agreements cat <> $CONFFILE echo "CONFDIR = $CONFDIR" >> $CONFFILE for n in `seq 3 51`; do 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` for comando in $comandos do choice='something' while [ -n "$choice" ]; do # 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 <. ** A continuacion se le permitira establecer la estructura de ** directorios donde se instalara el mismo. >> Nombre del directorio de instalacion: ($INSTDIR) >> Nombre del directorio de configuracion: ($CONFDIR) MARCA # Le pido un rootpath donde se instalara este comando en particular 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" LOGDIR="${ROOTPATH}/log" DATADIR="" # Le muestro el directorio sugerido para los binarios askDir "ejecutables" "bin" $BINDIR if [ "$?" -ne 0 ]; then BINDIR="${ROOTPATH}/$DIRSELECTED" fi # Si estoy con antifraude.pl muestro el sugerido para los datos if [ "$comando" = "antifraude.pl" ]; then DATADIR="${ROOTPATH}/llamadas" askDir "datos" "llamadas" $DATADIR if [ "$?" -ne 0 ]; then DATADIR="${ROOTPATH}/$DIRSELECTED" fi fi # Le muestro el directorio para los logs askDir "de datos" "log" $LOGDIR if [ "$?" -ne 0 ]; then LOGDIR="${ROOTPATH}/$DIRSELECTED" fi # Le sugiero el archivo de log 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 leer ">> Tamaño máximo para el archivo ($LOGFILE) en MB" "200" LOGSIZE if [ -z "$LOGSIZE" ]; then LOGSIZE=200 fi cat <> Parametros de instalacion de $comando >> =================================================================== >> Directorio de instalación: $INSTDIR >> Directorio de configuración: $CONFDIR >> Directorio de ejecutables: $BINDIR >> Directorio de datos: $DATADIR >> Archivo de log: $LOGDIR/$LOGFILE >> Tamaño máximo para el archivo de log: $LOGSIZE Si los datos ingresados son correctos oprima solamente ENTER, si desea modificar alguno de ellos oprima cualquier otra tecla y luego ENTER. MARCA read choice done cat <, oprima ENTER, si desea cancelar el proceso oprima cualquier otra tecla y luego ENTER. MARCA read choice if [ -n "$choice" ]; then abortMessage exit 1 fi # 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" fi echo ">> Moviendo Archivos....." cp "$INSTDIR/$comando" "$BINDIR" 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; prefix="AFIM";; "aficonf" ) numline=20; haveconf=1; userconf=$userid; fechaconf=$fecha; prefix="AFIC";; "antifraude.pl" ) numline=10; havefraude=1; userfraude=$userid; 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*1024*1024)) 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)) fi 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