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