]> git.llucax.com Git - z.facultad/75.08/llamadas.git/blobdiff - afinstal
Se deja de usar tempfile que no viene en todas las distros.
[z.facultad/75.08/llamadas.git] / afinstal
index c7a8d8871c7421f0e0aea60f7e7e7ab6a0045489..10b8dca849f27393c4bbe6024ee2a29f6ac2971f 100755 (executable)
--- a/afinstal
+++ b/afinstal
@@ -15,23 +15,27 @@ function askDir() {
 
 # 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
@@ -45,21 +49,27 @@ function checkPerl() {
                return 0;
        else
        cat <<MARCA
+ERROR!
 
-"ERROR!!!"
-"Este proceso de instalación solo puede ser"
-"ejecutado si Perl 5 o superior ya esta instalado"
+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
@@ -81,7 +91,7 @@ MARCA
                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
 *
@@ -92,7 +102,7 @@ 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" ]
@@ -129,7 +139,7 @@ MARCA
                                echo
                                echo "Se instalará [$selected]"
 
-                               preguntar "¿Desea agregar otro componente para instalar?" "SsNn" key
+                               preguntar "¿Desea agregar otro componente para instalar (S)?" SsNn key S
                                if [ "$key" = "s" ]; then
                                        key="S"
                                fi
@@ -150,6 +160,23 @@ 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)
@@ -158,23 +185,19 @@ 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 ">> 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
@@ -206,35 +229,35 @@ done
 # [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# }
@@ -245,6 +268,7 @@ fi
 # [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
@@ -261,6 +285,15 @@ if [ ! -f "$CONFFILE" ] || [ ! -s "$CONFFILE" ]; then
                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`
@@ -271,6 +304,16 @@ 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 <<MARCA
 
 ** Iniciando instalacion del componente <$comando>.
@@ -283,10 +326,19 @@ do
 MARCA
 
        # Le pido un rootpath donde se instalara este comando en particular
-       leer ">> Ingrese la ruta de instalación" "$CURRDIR" 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"
@@ -354,50 +406,77 @@ MARCA
        echo ">> Creando Estructura de Directorio...."
        mkdir -p "$BINDIR"
        mkdir -p "$LOGDIR"
-       mkdir -p "$CONFDIR/lock"
 
        touch "$LOGDIR/$LOGFILE"
-       if [ $comando = "antifraude.pl" ]; then
-               mkdir -p $DATADIR
-               mkdir -p $DATADIR/{aprocesar,enproceso,rechazadas,procesadas}
-               mkdir -p $DATADIR/alarmas
+       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
 
-       # TODO : no se debe copiar solo 1 vez?
-       cp "$INSTDIR/oridesti.txt" "$CONFDIR"
+       # 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))
@@ -405,12 +484,13 @@ MARCA
        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
 
-# Creacion de archivos auxiliares
-echo "0" > "$CONFDIR/umbrales.id"
-
 # [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