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