]> git.llucax.com Git - z.facultad/75.08/llamadas.git/blob - afinstal
72b55aa5c52fcae0af626d85b80559c606cf041d
[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 $fechaconf 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 ################### MAIN SCRIPT CODE ###################
159 clear
160 SISOPTP=$(uname)
161 CURRDIR=`echo ${0%/*} | sed s%'\.'%$PWD%`
162 CONFDIR="${CURRDIR}/conf"
163 INSTDIR="${CURRDIR}/inst"
164 CONFFILE="${CONFDIR}/afinstal.conf"
165 DEFAULTDIR=$CURRDIR
166 havemonio=0
167 haveconf=0
168 havefraude=0
169
170 # [STEP1] Verifico el OS vs SCRIPT y la presencia de PERL
171 echo -n ">> Verificando version del software contra el OS... "
172 checkOS "$SISOPTP"
173 if [ "$?" -ne 0 ]; then 
174         abortMessage
175         exit 1
176 fi
177 echo 'OK!'
178 echo ">> Proceso de instalacion para $SISOPTP iniciado."
179 echo ">> Presione ENTER para continuar"
180 read key
181
182 # [STEP2] License Agreements
183 cat <<MARCA
184 ***************************************************************
185 *                                                             *
186 *            Proceso de instalacion de "Antifraude"           *
187 *               Copyleft TPSistemasOp (c) 2004                *
188 *                                                             *
189 ***************************************************************
190  A T E N C I O N: Al instalar Antifraude UD. expresa estar
191  en un todo de acuerdo con los terminos y condiciones del 
192  ACUERDO DE LICENCIA DE SOFTWARE incluido en este paquete.
193  
194  Si desea cancelar este proceso oprima 'F' y luego ENTER.
195  Para continuar oprima ENTER.
196 MARCA
197 key="something"
198 while [ "$key" != "" ]; do
199         read key
200         if [ "$key" = "F" ]; then
201                 abortMessage
202                 exit 0
203         fi
204 done
205
206 # [STEP3] Chequeamos si hay componentes ya instalados
207 if [ -f "$CONFFILE" ] && [ -s "$CONFFILE" ]; then
208         #Busco los nombres de los binarios
209         binfraude=`grep -n "Comando" "$CONFFILE" | grep 10 | sed s%.*Comando.%%`
210         binconf=`grep -n "Comando" "$CONFFILE" | grep 20 | sed s%.*Comando.%%`
211         binmonio=`grep -n "Comando" "$CONFFILE" | grep 30 | sed s%.*Comando.%%`
212         #Busco donde deberian estar instalados
213         dirfraude=`grep -n "BINDIR" "$CONFFILE" | grep 11 | sed 's%.*= %%'`
214         dirconf=`grep -n "BINDIR" "$CONFFILE" | grep 21 | sed 's%.*= %%'`
215         dirmonio=`grep -n "BINDIR" "$CONFFILE" | grep 31 | sed 's%.*= %%'`
216         # Verifico finalmente si esta alli el archivo, en caso negativo, habilito
217         # la posibilidad de instalar ese componente
218         if [ ! -f "${dirmonio}/$binmonio" ]; then
219                 choices="AFIMONIO"
220         else
221                 havemonio=1
222                 usermonio=`grep -n "USERID" "$CONFFILE" | grep 35 | sed 's%.*= %%'`
223                 fechamonio=`grep -n "FECINS" "$CONFFILE" | grep 36 | sed 's%.*= %%'`
224         fi
225         if [ ! -f "${dirconf}/$binconf" ]; then
226                 choices="${choices} AFICONF"
227         else
228                 haveconf=1
229                 userconf=`grep -n "USERID" "$CONFFILE" | grep 25 | sed 's%.*= %%'`
230                 fechaconf=`grep -n "FECINS" "$CONFFILE" | grep 26 | sed 's%.*= %%'`
231         fi
232         if [ ! -f "${dirfraude}/$binfraude" ]; then
233                 choices="${choices} ANTIFRAUDE"
234         else
235                 havefraude=1
236                 userfraude=`grep -n "USERID" "$CONFFILE" | grep 17 | sed 's%.*= %%'`
237                 fechafraude=`grep -n "FECINS" "$CONFFILE" | grep 18 | sed 's%.*= %%'`
238         fi
239         choices=${choices% }
240         choices=${choices# }
241 else
242         choices="AFIMONIO AFICONF ANTIFRAUDE"
243 fi
244
245 # [STEP4] Seleecion de los componentes a instalar
246 # TODO: tener en cuenta los que ya estan y no permitir elegirlos
247 if [ -z "$choices" ]; then
248         showInstalled
249         abortMessage
250         exit 0
251 fi
252 selectModules
253
254 # [STEP5] Definir paths de cada componente e instalarlo guardando
255 #         la informacion pertinente en el afinstal.conf
256 if [ ! -f "$CONFFILE" ] || [ ! -s "$CONFFILE" ]; then
257         touch "$CONFFILE"
258         echo "INSTDIR = $INSTDIR" >> $CONFFILE
259         echo "CONFDIR = $CONFDIR" >> $CONFFILE
260         for n in `seq 3 51`; do
261                 echo "" >> $CONFFILE
262         done            
263 fi
264 if [ ! -f "$HOME/.antifraude" ]; then
265         mkdir -p "$HOME/.antifraude"
266 fi
267 if [ ! -f "$HOME/.antifraude/lock" ]; then
268         mkdir -p "$HOME/.antifraude/lock"
269 fi
270 if [ ! -f "$HOME/.antifraude/conf" ]; then
271         mkdir -p "$HOME/.antifraude/conf"
272 fi
273
274 # Comienzo la instalacion de cada componente
275 comandos=`echo $toinstall | sed s%,%" "%g`
276 for comando in $comandos
277 do
278         choice='something'
279         while [ -n "$choice" ]; do
280         
281         # Directorios FIJOS para todos los componentes
282         clear
283         if [ "$comando" = "antifraude.pl" ]; then
284                 echo -n ">> Verificando la existencia de PERL... "
285                 checkPerl
286                 if [ "$?" -ne 0 ]; then
287                         abortMessage
288                         exit 1
289                 fi
290                 echo 'OK!'
291         fi
292
293         cat <<MARCA
294
295 ** Iniciando instalacion del componente <$comando>.
296 ** A continuacion se le permitira establecer la estructura de
297 ** directorios donde se instalara el mismo.
298
299 >> Nombre del directorio de instalacion: ($INSTDIR)
300 >> Nombre del directorio de configuracion: ($CONFDIR)
301
302 MARCA
303
304         # Le pido un rootpath donde se instalara este comando en particular
305         leer ">> Ingrese la ruta de instalación" "$CURRDIR/grupoNN" userpath
306         if [ -n "$userpath" ]; then     ROOTPATH=$userpath
307         else ROOTPATH="$CURRDIR/grupoNN"
308         fi
309
310         # preparlos los dirs que voy a sugerir
311         BINDIR="${ROOTPATH}/bin"
312         LOGDIR="${ROOTPATH}/log"
313         DATADIR=""
314                 
315         # Le muestro el directorio sugerido para los binarios 
316         askDir "ejecutables" "bin" $BINDIR
317         if [ "$?" -ne 0 ]; then BINDIR="${ROOTPATH}/$DIRSELECTED"
318         fi
319
320         # Si estoy con antifraude.pl muestro el sugerido para los datos
321         if [ "$comando" = "antifraude.pl" ]; then
322                 DATADIR="${ROOTPATH}/llamadas"
323                 askDir "datos" "llamadas" $DATADIR
324                 if [ "$?" -ne 0 ]; then DATADIR="${ROOTPATH}/$DIRSELECTED"
325                 fi
326         fi
327
328         # Le muestro el directorio para los logs
329         askDir "de datos" "log" $LOGDIR
330         if [ "$?" -ne 0 ]; then LOGDIR="${ROOTPATH}/$DIRSELECTED"
331         fi
332
333         # Le sugiero el archivo de log
334         leer ">> Nombre del archivo de log" "${comando%.pl}.log" LOGFILE
335         if [ -z "$LOGFILE" ]; then
336                 LOGFILE="${comando%.pl}.log"
337         fi
338
339         # Le sugiero un size para el logfile
340         leer ">> Tamaño máximo para el archivo ($LOGFILE) en MB" "200" LOGSIZE
341         if [ -z "$LOGSIZE" ]; then
342                 LOGSIZE=200
343         fi
344
345         cat <<MARCA
346
347 >>  Parametros de instalacion de $comando
348 >>  ===================================================================
349 >>  Directorio de instalación: $INSTDIR
350 >>  Directorio de configuración: $CONFDIR
351 >>  Directorio de ejecutables: $BINDIR
352 >>  Directorio de datos: $DATADIR
353 >>  Archivo de log: $LOGDIR/$LOGFILE
354 >>  Tamaño máximo para el archivo de log: $LOGSIZE
355
356 Si los datos ingresados son correctos oprima solamente ENTER, si desea
357 modificar alguno de ellos oprima cualquier otra tecla y luego ENTER.
358 MARCA
359         read choice
360         done
361         
362         cat <<MARCA
363 Si desea iniciar la instalación de <$comando>, oprima ENTER, si desea
364 cancelar el proceso oprima cualquier otra tecla y luego ENTER.
365 MARCA
366         read choice
367         if [ -n "$choice" ]; then
368                 abortMessage
369                 exit 1
370         fi
371
372         # Comienzo a crear la estructura de directorios definida (Check permisos!!)
373         echo ">> Creando Estructura de Directorio...."
374         mkdir -p "$BINDIR"
375         mkdir -p "$LOGDIR"
376         mkdir -p "$CONFDIR/lock"
377
378         touch "$LOGDIR/$LOGFILE"
379         if [ "$comando" = "antifraude.pl" ]; then
380                 mkdir -p "$DATADIR"
381                 mkdir -p "$DATADIR"/{aprocesar,enproceso,rechazadas,procesadas}
382                 mkdir -p "$DATADIR/alarmas"
383         fi
384         echo ">> Moviendo Archivos....."
385         cp "$INSTDIR/$comando" "$BINDIR"
386         chmod u+x "$BINDIR/$comando"
387
388         # TODO : no se debe copiar solo 1 vez?
389         cp "$INSTDIR/oridesti.txt" "$CONFDIR"
390
391         # Guardo los datos en el archivo de configuracion
392         userid=$LOGNAME
393         fecha=$(date +%d/%m/%Y)
394         case $comando in
395                 "afimonio" ) numline=30;
396                         havemonio=1;
397                         usermonio=$userid;
398                         fechamonio=$fecha;;
399                 "aficonf" ) numline=20;
400                         haveconf=1;
401                         userconf=$userid;
402                         fechaconf=$fecha;;
403                 "antifraude.pl" ) numline=10;
404                         havefraude=1;
405                         userfraude=$userid;
406                         fechafraude=$fecha;;
407         esac    
408                 
409         changeLine "$CONFFILE" "$numline" "Comando $comando"
410         numline=$(($numline+1))
411         changeLine "$CONFFILE" "$numline" "BINDIR = $BINDIR"
412         numline=$(($numline+1))
413         changeLine "$CONFFILE" "$numline" "LOGDIR = $LOGDIR"
414         numline=$(($numline+1))
415         changeLine "$CONFFILE" "$numline" "LOGFILE = $LOGFILE"
416         numline=$(($numline+1))
417         changeLine "$CONFFILE" "$numline" "LOGSIZE = $LOGSIZE"
418         numline=$(($numline+1))
419         if [ "$comando" = "antifraude.pl" ]; then
420                 changeLine "$CONFFILE" "$numline" "DATADIR = $DATADIR"
421                 numline=$(($numline+1))
422                 changeLine "$CONFFILE" "$numline" "DATASIZE = "
423                 numline=$(($numline+1))
424         fi
425         changeLine "$CONFFILE" "$numline" "USERID = $userid"
426         numline=$(($numline+1))
427         changeLine "$CONFFILE" "$numline" "FECINS = $fecha"
428         echo ">> Instalación del componente $comando completada"
429         read
430 done
431
432 # Creacion de archivos auxiliares
433 echo "0" > "$CONFDIR/umbrales.id"
434
435 # [STEP6] Ofrecer arrancar el Afimonio si estan los tres paquetes instalados
436
437 # [STEP7] Mostrar en un recuadro que se encuentra instalado en el sistema
438 showInstalled