]> git.llucax.com Git - z.facultad/75.08/llamadas.git/blob - afinstal
Se agrega opción para poner un valor por defecto cuando se apreta ENTER a pretuntar().
[z.facultad/75.08/llamadas.git] / afinstal
1 #!/bin/bash 
2 # vim: set softtabstop=4 tabstop=4 
3
4 . inst/util.sh
5
6 ################# Funciones ###########################
7
8 # Devuelve 0 si la ruta fue cambiada y 1 si quedo por defecto
9 function askDir() {
10         leer ">> Ingrese la ruta para los archivos $1" "$2" DIRSELECTED
11         if [ -n "$DIRSELECTED" ]; then return 1
12         else return 0
13         fi
14 }
15
16 # Devuelve 0 si el script y el OS matchean, 1 otherwise
17 function checkOS() {
18         CURSIS="$1"
19         SCRIPTOS="un sistema desconocido"
20         case "$0" in
21                 *afinstal)
22                         SCRIPTOS="Linux"
23                         ;;
24                 *afinsmac)
25                         SCRIPTOS="Mac"
26                         ;;
27                 *afinstaw)
28                         SCRIPTOS="Windows"
29                         ;;
30         esac
31         if [ "$CURSIS" != "$SCRIPTOS" ]; then
32                 cat<<MARCA
33 ERROR!
34
35 Este proceso de instalacion es para $SCRIPTOS
36 y su sistema operativo es $CURSIS
37 Solicite a su proveedor la version adecuada
38 e inicie nuevamente el proceso de instalacion.
39
40 MARCA
41         return 1
42         else return 0
43         fi
44 }
45
46 # Devuelve 0 si se encuentra Perl instalado, 1 otherwise
47 function checkPerl() {
48         if [ "perl" = "`type perl | sed s/\"perl is .*\"/\"perl\"/`" ]; then 
49                 return 0;
50         else
51         cat <<MARCA
52 ERROR!
53
54 Este proceso de instalación solo puede ser
55 ejecutado si Perl 5 o superior ya esta instalado
56
57 Efectúe a instalación de Perl
58 Inicie nuevamente el procedimiento de instalación.
59
60 MARCA
61         return 1
62         fi
63 }
64
65 # Modifica una linea dada de un archivo dado
66 function changeLine() {
67         cat "$1" | sed "${2}s%.*%$3%" > "$1"
68 }
69
70 # Mensaje generico de abort
71 function abortMessage {
72         echo ">> Proceso de instalacion cancelado"
73 }
74
75 # Muestra los componentes instalados, usando vars ya definidas previamente
76 function showInstalled {
77 cat <<MARCA
78 **********************************************************************
79 *  $1
80 *  Se encuentran instalados los siguientes componentes :
81 MARCA
82         if [ "$havefraude" -eq 1 ]; then
83                 echo "*  Antifraude.pl instalado el $fechafraude por $userfraude"
84         fi
85         if [ "$haveconf" -eq 1 ]; then
86                 echo "*  Aficonf instalado el $fechaconf por $userconf"
87         fi
88         if [ "$havemonio" -eq 1 ]; then
89                 echo "*  Afimonio instalado el $fechamonio por $usermonio"
90         fi
91 cat <<MARCA
92 *
93 *                    Copyleft TPSistemasOp (c) 2004
94 **********************************************************************
95 MARCA
96 }
97
98 # Permite seleccionar que componentes se instalaran
99 function selectModules() {
100         PS3="Seleccione un componente: "
101         key="S"
102         toinstall=""
103         while [ "$key" = "S" ] && [ -n "$choices" ]
104         do
105                 clear
106                 cat <<MARCA
107
108 ***********************************************************
109 *  SELECCION de COMPONENTES                               *
110 *  Por favor seleecione los componentes a ser instalados  *
111 *  de a uno por vez, a traves del siguiente menu:         *
112 ***********************************************************
113 >> Se instalaran: $toinstall
114
115 MARCA
116                 select REPLY in $choices
117                 do
118                         case $REPLY in
119                         "AFIMONIO" ) selected="afimonio";;
120                         "AFICONF" ) selected="aficonf";;
121                         "ANTIFRAUDE" ) selected="antifraude.pl";;
122                         * ) selected="INVALID";;
123                         esac
124                 break
125                 done
126
127                 if [ $selected != "INVALID" ]; then
128                         choices=`echo $choices | sed s/$REPLY//`
129                         if [ -z "$toinstall" ]; then toinstall=$selected
130                         else toinstall="$toinstall,$selected"
131                         fi
132                         
133                 if [ -n "$choices" ]; then
134                                 echo
135                                 echo "Se instalará [$selected]"
136
137                                 preguntar "¿Desea agregar otro componente para instalar?" "SsNn" key
138                                 if [ "$key" = "s" ]; then
139                                         key="S"
140                                 fi
141                         fi
142                 fi
143         done
144         if [ -n "$key" ]; then echo
145         fi
146 cat <<MARCA
147 ***********************************************************
148 * La seleccion de componentes ha finalizado. Se procedera *
149 * con la instalacion.                                     *
150 ***********************************************************
151 Componentes a instalar: [ $toinstall ]
152
153 < Presione una tecla para continuar >
154 MARCA
155 read key
156 }
157
158 # Ofrece arrancar el afimonio si es posible
159 function askDaemon {
160         if [ "$havemonio" -eq 1 ] && [ "$havefraude" -eq 1 ]; then
161                 echo "Desea efectuar la activacion del demonio antifraude?"
162                 echo "Si desea arrancar el proceso oprima solamente ENTER, de lo contrario oprima cualquier otra tecla y luego ENTER."
163                 read choice
164                 monbin=`grep -n "Comando" "$CONFFILE" | grep '^30' | sed s%.*Comando.%%`
165                 mondir=`grep -n "BINDIR" "$CONFFILE" | grep '^31' | sed 's%.*= %%'`
166                 if [ -z "$choice" ]; then
167                         $mondir/afimonio_daemon.sh start
168                 else
169                         echo "Para realizar la activacion del demonio, tipee en linea de comando: $mondir/afimonio_daemon.sh start"
170                 fi
171                 echo
172         fi
173 }
174
175 ################### MAIN SCRIPT CODE ###################
176 clear
177 SISOPTP=$(uname)
178 CURRDIR=`echo ${0%/*} | sed s%'\.'%$PWD%`
179 CONFDIR="${CURRDIR}/conf"
180 INSTDIR="${CURRDIR}/inst"
181 CONFFILE="${CONFDIR}/afinstal.conf"
182 DEFAULTDIR=$CURRDIR
183 OWNCONFDIR="$HOME/.antifraude"
184 havemonio=0
185 haveconf=0
186 havefraude=0
187
188 # [STEP1] Verifico el OS vs SCRIPT y la presencia de PERL
189 echo -n ">> Verificando version del software contra el OS... "
190 checkOS "$SISOPTP"
191 if [ "$?" -ne 0 ]; then 
192         abortMessage
193         exit 1
194 fi
195 echo 'OK!'
196 echo ">> Proceso de instalacion para $SISOPTP iniciado."
197 echo ">> Presione ENTER para continuar"
198 read key
199
200 # [STEP2] License Agreements
201 cat <<MARCA
202 ***************************************************************
203 *                                                             *
204 *            Proceso de instalacion de "Antifraude"           *
205 *               Copyleft TPSistemasOp (c) 2004                *
206 *                                                             *
207 ***************************************************************
208  A T E N C I O N: Al instalar Antifraude UD. expresa estar
209  en un todo de acuerdo con los terminos y condiciones del 
210  ACUERDO DE LICENCIA DE SOFTWARE incluido en este paquete.
211  
212  Si desea cancelar este proceso oprima 'F' y luego ENTER.
213  Para continuar oprima ENTER.
214 MARCA
215 key="something"
216 while [ "$key" != "" ]; do
217         read key
218         if [ "$key" = "F" ]; then
219                 abortMessage
220                 exit 0
221         fi
222 done
223
224 # [STEP3] Chequeamos si hay componentes ya instalados
225 if [ -f "$CONFFILE" ] && [ -s "$CONFFILE" ]; then
226         #Busco los nombres de los binarios
227         binfraude=`grep -n "Comando" "$CONFFILE" | grep '^10' | sed s%.*Comando.%%`
228         binconf=`grep -n "Comando" "$CONFFILE" | grep '^20' | sed s%.*Comando.%%`
229         binmonio=`grep -n "Comando" "$CONFFILE" | grep '^30' | sed s%.*Comando.%%`
230         #Busco donde deberian estar instalados
231         dirfraude=`grep -n "BINDIR" "$CONFFILE" | grep '^11' | sed 's%.*= %%'`
232         dirconf=`grep -n "BINDIR" "$CONFFILE" | grep '^21' | sed 's%.*= %%'`
233         dirmonio=`grep -n "BINDIR" "$CONFFILE" | grep '^31' | sed 's%.*= %%'`
234         # Verifico finalmente si esta alli el archivo, en caso negativo, habilito
235         # la posibilidad de instalar ese componente
236         if [ ! -f "${dirmonio}/$binmonio" ]; then
237                 choices="AFIMONIO"
238         else
239                 havemonio=1
240                 usermonio=`grep -n "USERID" "$CONFFILE" | grep '^35' | sed 's%.*= %%'`
241                 fechamonio=`grep -n "FECINS" "$CONFFILE" | grep '^36' | sed 's%.*= %%'`
242         fi
243         if [ ! -f "${dirconf}/$binconf" ]; then
244                 choices="${choices} AFICONF"
245         else
246                 haveconf=1
247                 userconf=`grep -n "USERID" "$CONFFILE" | grep '^25' | sed 's%.*= %%'`
248                 fechaconf=`grep -n "FECINS" "$CONFFILE" | grep '^26' | sed 's%.*= %%'`
249         fi
250         if [ ! -f "${dirfraude}/$binfraude" ]; then
251                 choices="${choices} ANTIFRAUDE"
252         else
253                 havefraude=1
254                 userfraude=`grep -n "USERID" "$CONFFILE" | grep '^17' | sed 's%.*= %%'`
255                 fechafraude=`grep -n "FECINS" "$CONFFILE" | grep '^18' | sed 's%.*= %%'`
256         fi
257         choices=${choices% }
258         choices=${choices# }
259 else
260         choices="AFIMONIO AFICONF ANTIFRAUDE"
261 fi
262
263 # [STEP4] Seleecion de los componentes a instalar
264 # TODO: tener en cuenta los que ya estan y no permitir elegirlos
265 if [ -z "$choices" ]; then
266         askDaemon
267         showInstalled
268         abortMessage
269         exit 0
270 fi
271 selectModules
272
273 # [STEP5] Definir paths de cada componente e instalarlo guardando
274 #         la informacion pertinente en el afinstal.conf
275 if [ ! -f "$CONFFILE" ] || [ ! -s "$CONFFILE" ]; then
276         touch "$CONFFILE"
277         echo "INSTDIR = $INSTDIR" >> $CONFFILE
278         echo "CONFDIR = $CONFDIR" >> $CONFFILE
279         for n in `seq 3 51`; do
280                 echo "" >> $CONFFILE
281         done            
282 fi
283 if [ ! -f "$OWNCONFDIR" ]; then
284         mkdir -p "$OWNCONFDIR"
285 fi
286 if [ ! -f "$OWNCONFDIR/lock" ]; then
287         mkdir -p "$OWNCONFDIR/lock"
288 fi
289 if [ ! -f "$OWNCONFDIR/conf" ]; then
290         mkdir -p "$OWNCONFDIR/conf"
291 fi
292
293 # Comienzo la instalacion de cada componente
294 comandos=`echo $toinstall | sed s%,%" "%g`
295 for comando in $comandos
296 do
297         choice='something'
298         while [ -n "$choice" ]; do
299         
300         # Directorios FIJOS para todos los componentes
301         clear
302         if [ "$comando" = "antifraude.pl" ]; then
303                 echo -n ">> Verificando la existencia de PERL... "
304                 checkPerl
305                 if [ "$?" -ne 0 ]; then
306                         abortMessage
307                         exit 1
308                 fi
309                 echo 'OK!'
310         fi
311
312         cat <<MARCA
313
314 ** Iniciando instalacion del componente <$comando>.
315 ** A continuacion se le permitira establecer la estructura de
316 ** directorios donde se instalara el mismo.
317
318 >> Nombre del directorio de instalacion: ($INSTDIR)
319 >> Nombre del directorio de configuracion: ($CONFDIR)
320
321 MARCA
322
323         # Le pido un rootpath donde se instalara este comando en particular
324         is_writeable=0
325         while [ $is_writeable -eq 0 ]; do
326                 leer ">> Ingrese la ruta de instalación" "$CURRDIR" userpath
327                 if [ -n "$userpath" ]; then
328                         ROOTPATH=$userpath
329                         if [ -w "${userpath%/*}" ]; then is_writeable=1
330                         else echo ">> ERROR: No es posible crear dicho directorio"
331                         fi
332                 else 
333                         ROOTPATH="$CURRDIR"
334                         is_writible=1
335                 fi
336         done
337
338         # preparlos los dirs que voy a sugerir
339         BINDIR="${ROOTPATH}/bin"
340         LOGDIR="${ROOTPATH}/log"
341         DATADIR=""
342                 
343         # Le muestro el directorio sugerido para los binarios 
344         askDir "ejecutables" "bin" $BINDIR
345         if [ "$?" -ne 0 ]; then BINDIR="${ROOTPATH}/$DIRSELECTED"
346         fi
347
348         # Si estoy con antifraude.pl muestro el sugerido para los datos
349         if [ "$comando" = "antifraude.pl" ]; then
350                 DATADIR="${ROOTPATH}/llamadas"
351                 askDir "datos" "llamadas" $DATADIR
352                 if [ "$?" -ne 0 ]; then DATADIR="${ROOTPATH}/$DIRSELECTED"
353                 fi
354         fi
355
356         # Le muestro el directorio para los logs
357         askDir "de datos" "log" $LOGDIR
358         if [ "$?" -ne 0 ]; then LOGDIR="${ROOTPATH}/$DIRSELECTED"
359         fi
360
361         # Le sugiero el archivo de log
362         leer ">> Nombre del archivo de log" "${comando%.pl}.log" LOGFILE
363         if [ -z "$LOGFILE" ]; then
364                 LOGFILE="${comando%.pl}.log"
365         fi
366
367         # Le sugiero un size para el logfile
368         leer ">> Tamaño máximo para el archivo ($LOGFILE) en MB" "200" LOGSIZE
369         if [ -z "$LOGSIZE" ]; then
370                 LOGSIZE=200
371         fi
372
373         cat <<MARCA
374
375 >>  Parametros de instalacion de $comando
376 >>  ===================================================================
377 >>  Directorio de instalación: $INSTDIR
378 >>  Directorio de configuración: $CONFDIR
379 >>  Directorio de ejecutables: $BINDIR
380 >>  Directorio de datos: $DATADIR
381 >>  Archivo de log: $LOGDIR/$LOGFILE
382 >>  Tamaño máximo para el archivo de log: $LOGSIZE
383
384 Si los datos ingresados son correctos oprima solamente ENTER, si desea
385 modificar alguno de ellos oprima cualquier otra tecla y luego ENTER.
386 MARCA
387         read choice
388         done
389         
390         cat <<MARCA
391 Si desea iniciar la instalación de <$comando>, oprima ENTER, si desea
392 cancelar el proceso oprima cualquier otra tecla y luego ENTER.
393 MARCA
394         read choice
395         if [ -n "$choice" ]; then
396                 abortMessage
397                 exit 1
398         fi
399
400         # Comienzo a crear la estructura de directorios definida (Check permisos!!)
401         echo ">> Creando Estructura de Directorio...."
402         mkdir -p "$BINDIR"
403         mkdir -p "$LOGDIR"
404
405         touch "$LOGDIR/$LOGFILE"
406         if [ "$comando" = "antifraude.pl" ]; then
407                 mkdir -p "$DATADIR"
408                 mkdir -p "$DATADIR"/{aprocesar,enproceso,rechazadas,procesadas}
409                 mkdir -p "$DATADIR/alarmas"
410         fi
411         echo ">> Moviendo Archivos....."
412         cp "$INSTDIR/$comando" "$BINDIR"
413         chmod u+x "$BINDIR/$comando"
414         if [ "$comando" = "afimonio" ]; then
415                 cp "$INSTDIR/afimonio_daemon.sh" "$BINDIR"
416                 chmod u+x "$BINDIR/afimonio_daemon.sh"
417         fi
418
419         # Copio umbrales, oridesti y utilities una sola vez
420         if [ ! -f "$OWNCONFDIR/oridesti.txt" ]; then
421                 cp "$INSTDIR/oridesti.txt" "$OWNCONFDIR"
422         fi
423         if [ ! -f "$OWNCONFDIR/umbrales.param" ]; then
424                 cp "$INSTDIR/umbrales.param" "$OWNCONFDIR"
425         fi
426         if [ ! -f "$OWNCONFDIR/umbrales.id" ]; then
427                 echo 0 >> "$OWNCONFDIR/umbrales.id"
428         fi
429         if [ ! -f "$OWNCONFDIR/util.sh" ]; then
430                 cp "$INSTDIR/util.sh" "$OWNCONFDIR"
431         fi
432
433         # Guardo los datos en el archivo de configuracion
434         ownconffile="$OWNCONFDIR/conf/${comando%.pl}.conf"
435         if [ -f "$ownconffile" ]; then
436                 rm -rf "$ownconffile"
437         fi
438         userid=$LOGNAME
439         fecha=$(date +%d/%m/%Y)
440         case $comando in
441                 "afimonio" ) numline=30;
442                         havemonio=1;
443                         usermonio=$userid;
444                         fechamonio=$fecha;
445                         prefix="AFIM";;
446                 "aficonf" ) numline=20;
447                         haveconf=1;
448                         userconf=$userid;
449                         fechaconf=$fecha;
450                         prefix="AFIC";;
451                 "antifraude.pl" ) numline=10;
452                         havefraude=1;
453                         userfraude=$userid;
454                         fechafraude=$fecha;
455                         prefix="ANTI";;
456         esac
457                 
458         changeLine "$CONFFILE" "$numline" "Comando $comando"
459         numline=$(($numline+1))
460         changeLine "$CONFFILE" "$numline" "BINDIR = $BINDIR"
461         echo "${prefix}_BINDIR=\"$BINDIR\"" >> $ownconffile
462         numline=$(($numline+1))
463         changeLine "$CONFFILE" "$numline" "LOGDIR = $LOGDIR"
464         echo "${prefix}_LOGDIR=\"$LOGDIR\"" >> $ownconffile
465         numline=$(($numline+1))
466         changeLine "$CONFFILE" "$numline" "LOGFILE = $LOGFILE"
467         echo "${prefix}_LOGFILE=\"$LOGFILE\"" >> $ownconffile
468         numline=$(($numline+1))
469         changeLine "$CONFFILE" "$numline" "LOGSIZE = $LOGSIZE"
470         echo "${prefix}_LOGSIZE=$LOGSIZE" >> $ownconffile
471         numline=$(($numline+1))
472         if [ "$comando" = "antifraude.pl" ]; then
473                 changeLine "$CONFFILE" "$numline" "DATADIR = $DATADIR"
474                 echo "${prefix}_DATADIR=\"$DATADIR\"" >> $ownconffile
475                 numline=$(($numline+1))
476                 changeLine "$CONFFILE" "$numline" "DATASIZE = "
477                 numline=$(($numline+1))
478         fi
479         changeLine "$CONFFILE" "$numline" "USERID = $userid"
480         numline=$(($numline+1))
481         changeLine "$CONFFILE" "$numline" "FECINS = $fecha"
482         echo ">> Instalación del componente $comando completada"
483         echo ">> Presione ENTER para continuar"
484         read
485 done
486
487 # [STEP6] Ofrecer arrancar el Afimonio si estan los tres paquetes instalados
488 askDaemon
489
490 # [STEP7] Mostrar en un recuadro que se encuentra instalado en el sistema
491 showInstalled