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