]> git.llucax.com Git - z.facultad/75.08/llamadas.git/blob - afinstal
se valida la fecha. HIPOTESIS: NO HAY AÑOS BISIESTOS Y TODOS LOS MESES PUEDEN TENER...
[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         if echo $0 | egrep -q 'afinstal$'; then
19                 SCRIPTOS="Linux"
20         fi
21         if echo $0 | egrep -q 'afinstam$'; then
22                 SCRIPTOS="Mac"
23         fi
24         if echo $0 | egrep -q 'afinstaw$'; then
25                 SCRIPTOS="Windows"
26         fi
27
28         if [ "$SISOPTP" != "$SCRIPTOS" ]; then
29                 cat<<MARCA
30
31 ### ERROR ###
32 Este proceso de instalacion es para $SISOPTP y su sistema operativo 
33 es $CURSIS. Solicite a su proveedor la version adecuada e inicie 
34 nuevamente el proceso de instalacion.
35
36 MARCA
37         return 1
38         else return 0
39         fi
40 }
41
42 # Devuelve 0 si se encuentra Perl instalado, 1 otherwise
43 function checkPerl() {
44         if [ "perl" = "`type perl | sed s/\"perl is .*\"/\"perl\"/`" ]; then 
45                 return 0;
46         else
47         cat <<MARCA
48
49 "ERROR!!!"
50 "Este proceso de instalación solo puede ser"
51 "ejecutado si Perl 5 o superior ya esta instalado"
52
53 "Efectúe a instalación de Perl"
54 i"e inicie nuevamente el procedimiento de instalación."
55 MARCA
56         return 1
57         fi
58 }
59
60 # Modifica una linea dada de un archivo dado
61 function changeLine() {
62         cat "$1" | sed "${2}s%.*%$3%" > "$1"
63 }
64
65 # Mensaje generico de abort
66 function abortMessage {
67         echo ">> Proceso de instalacion cancelado"
68 }
69
70 # Muestra los componentes instalados, usando vars ya definidas previamente
71 function showInstalled {
72 cat <<MARCA
73 **********************************************************************
74 *  $1
75 *  Se encuentran instalados los siguientes componentes :
76 MARCA
77         if [ "$havefraude" -eq 1 ]; then
78                 echo "*  Antifraude.pl instalado el $fechafraude por $userfraude"
79         fi
80         if [ "$haveconf" -eq 1 ]; then
81                 echo "*  Aficonf instalado el $fechaconf por $userconf"
82         fi
83         if [ "$havemonio" -eq 1 ]; then
84                 echo "*  Afimonio instalado el $fechaconf por $usermonio"
85         fi
86 cat <<MARCA
87 *
88 *                    Copyleft TPSistemasOp (c) 2004
89 **********************************************************************
90 MARCA
91 }
92
93 # Permite seleccionar que componentes se instalaran
94 function selectModules() {
95         PS3="Seleccione un componente:"
96         key="S"
97         toinstall=""
98         while [ "$key" = "S" ] && [ -n "$choices" ]
99         do
100                 clear
101                 cat <<MARCA
102
103 ***********************************************************
104 *  SELECCION de COMPONENTES                               *
105 *  Por favor seleecione los componentes a ser instalados  *
106 *  de a uno por vez, a traves del siguiente menu:         *
107 ***********************************************************
108 >> Se instalaran: $toinstall
109
110 MARCA
111                 select REPLY in $choices
112                 do
113                         case $REPLY in
114                         "AFIMONIO" ) selected="afimonio";;
115                         "AFICONF" ) selected="aficonf";;
116                         "ANTIFRAUDE" ) selected="antifraude.pl";;
117                         * ) selected="INVALID";;
118                         esac
119                 break
120                 done
121
122                 if [ $selected != "INVALID" ]; then
123                         choices=`echo $choices | sed s/$REPLY//`
124                         if [ -z "$toinstall" ]; then toinstall=$selected
125                         else toinstall="$toinstall,$selected"
126                         fi
127                         
128                 if [ -n "$choices" ]; then
129                                 echo
130                                 echo "Se instalará [$selected]"
131
132                                 preguntar "¿Desea agregar otro componente para instalar?" "SsNn" key
133                                 if [ "$key" = "s" ]; then
134                                         key="S"
135                                 fi
136                         fi
137                 fi
138         done
139         if [ -n "$key" ]; then echo
140         fi
141 cat <<MARCA
142 ***********************************************************
143 * La seleccion de componentes ha finalizado. Se procedera *
144 * con la instalacion.                                     *
145 ***********************************************************
146 Componentes a instalar: [ $toinstall ]
147
148 < Presione una tecla para continuar >
149 MARCA
150 read key
151 }
152
153 ################### MAIN SCRIPT CODE ###################
154 clear
155 SISOPTP=$(uname)
156 CURRDIR=`echo ${0%/*} | sed s%'\.'%$PWD%`
157 CONFDIR="${CURRDIR}/conf"
158 INSTDIR="${CURRDIR}/inst"
159 CONFFILE="${CONFDIR}/afinstal.conf"
160 DEFAULTDIR=$CURRDIR
161 havemonio=0
162 haveconf=0
163 havefraude=0
164
165 # [STEP1] Verifico el OS vs SCRIPT y la presencia de PERL
166 echo ">> Verificando version del software contra el OS.."
167 checkOS
168 if [ "$?" -ne 0 ]; then 
169         abortMessage
170         exit 1
171 fi
172 echo ">> Verificando la existencia de PERL.."
173 checkPerl
174 if [ "$?" -ne 0 ]; then
175         abortMessage
176         exit 1
177 fi
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
265 # Comienzo la instalacion de cada componente
266 comandos=`echo $toinstall | sed s%,%" "%g`
267 for comando in $comandos
268 do
269         choice='something'
270         while [ -n "$choice" ]; do
271         
272         # Directorios FIJOS para todos los componentes
273         clear
274         cat <<MARCA
275
276 ** Iniciando instalacion del componente <$comando>.
277 ** A continuacion se le permitira establecer la estructura de
278 ** directorios donde se instalara el mismo.
279
280 >> Nombre del directorio de instalacion: ($INSTDIR)
281 >> Nombre del directorio de configuracion: ($CONFDIR)
282
283 MARCA
284
285         # Le pido un rootpath donde se instalara este comando en particular
286         leer ">> Ingrese la ruta de instalación" "$CURRDIR" userpath
287         if [ -n "$userpath" ]; then     ROOTPATH=$userpath
288         else ROOTPATH=$CURRDIR
289         fi
290
291         # preparlos los dirs que voy a sugerir
292         BINDIR="${ROOTPATH}/bin"
293         LOGDIR="${ROOTPATH}/log"
294         DATADIR=""
295                 
296         # Le muestro el directorio sugerido para los binarios 
297         askDir "ejecutables" "bin" $BINDIR
298         if [ "$?" -ne 0 ]; then BINDIR="${ROOTPATH}/$DIRSELECTED"
299         fi
300
301         # Si estoy con antifraude.pl muestro el sugerido para los datos
302         if [ "$comando" = "antifraude.pl" ]; then
303                 DATADIR="${ROOTPATH}/llamadas"
304                 askDir "datos" "llamadas" $DATADIR
305                 if [ "$?" -ne 0 ]; then DATADIR="${ROOTPATH}/$DIRSELECTED"
306                 fi
307         fi
308
309         # Le muestro el directorio para los logs
310         askDir "de datos" "log" $LOGDIR
311         if [ "$?" -ne 0 ]; then LOGDIR="${ROOTPATH}/$DIRSELECTED"
312         fi
313
314         # Le sugiero el archivo de log
315         leer ">> Nombre del archivo de log" "${comando%.pl}.log" LOGFILE
316         if [ -z "$LOGFILE" ]; then
317                 LOGFILE="${comando%.pl}.log"
318         fi
319
320         # Le sugiero un size para el logfile
321         leer ">> Tamaño máximo para el archivo ($LOGFILE) en MB" "200" LOGSIZE
322         if [ -z "$LOGSIZE" ]; then
323                 LOGSIZE=200
324         fi
325
326         cat <<MARCA
327
328 >>  Parametros de instalacion de $comando
329 >>  ===================================================================
330 >>  Directorio de instalación: $INSTDIR
331 >>  Directorio de configuración: $CONFDIR
332 >>  Directorio de ejecutables: $BINDIR
333 >>  Directorio de datos: $DATADIR
334 >>  Archivo de log: $LOGDIR/$LOGFILE
335 >>  Tamaño máximo para el archivo de log: $LOGSIZE
336
337 Si los datos ingresados son correctos oprima solamente ENTER, si desea
338 modificar alguno de ellos oprima cualquier otra tecla y luego ENTER.
339 MARCA
340         read choice
341         done
342         
343         cat <<MARCA
344 Si desea iniciar la instalación de <$comando>, oprima ENTER, si desea
345 cancelar el proceso oprima cualquier otra tecla y luego ENTER.
346 MARCA
347         read choice
348         if [ -n "$choice" ]; then
349                 abortMessage
350                 exit 1
351         fi
352
353         # Comienzo a crear la estructura de directorios definida (Check permisos!!)
354         echo ">> Creando Estructura de Directorio...."
355         mkdir -p "$BINDIR"
356         mkdir -p "$LOGDIR"
357         mkdir -p "$CONFDIR/lock"
358
359         touch "$LOGDIR/$LOGFILE"
360         if [ $comando = "antifraude.pl" ]; then
361                 mkdir -p $DATADIR
362                 mkdir -p $DATADIR/{aprocesar,enproceso,rechazadas,procesadas}
363                 mkdir -p $DATADIR/alarmas
364         fi
365         echo ">> Moviendo Archivos....."
366         cp "$INSTDIR/$comando" "$BINDIR"
367
368         # TODO : no se debe copiar solo 1 vez?
369         cp "$INSTDIR/oridesti.txt" "$CONFDIR"
370
371         # Guardo los datos en el archivo de configuracion
372         userid=$LOGNAME
373         fecha=$(date +%d/%m/%Y)
374         case $comando in
375                 "afimonio" ) numline=30;
376                         havemonio=1;
377                         usermonio=$userid;
378                         fechamonio=$fecha;;
379                 "aficonf" ) numline=20;
380                         haveconf=1;
381                         userconf=$userid;
382                         fechaconf=$fecha;;
383                 "antifraude.pl" ) numline=10;
384                         havefraude=1;
385                         userfraude=$userid;
386                         fechafraude=$fecha;;
387         esac    
388                 
389         changeLine "$CONFFILE" "$numline" "Comando $comando"
390         numline=$(($numline+1))
391         changeLine "$CONFFILE" "$numline" "BINDIR = $BINDIR"
392         numline=$(($numline+1))
393         changeLine "$CONFFILE" "$numline" "LOGDIR = $LOGDIR"
394         numline=$(($numline+1))
395         changeLine "$CONFFILE" "$numline" "LOGFILE = $LOGFILE"
396         numline=$(($numline+1))
397         changeLine "$CONFFILE" "$numline" "LOGSIZE = $LOGSIZE"
398         numline=$(($numline+1))
399         if [ "$comando" = "antifraude.pl" ]; then
400                 changeLine "$CONFFILE" "$numline" "DATADIR = $DATADIR"
401                 numline=$(($numline+1))
402                 changeLine "$CONFFILE" "$numline" "DATASIZE = "
403                 numline=$(($numline+1))
404         fi
405         changeLine "$CONFFILE" "$numline" "USERID = $userid"
406         numline=$(($numline+1))
407         changeLine "$CONFFILE" "$numline" "FECINS = $fecha"
408 done
409
410 # Creacion de archivos auxiliares
411 echo "0" > "$CONFDIR/umbrales.id"
412
413 # [STEP6] Ofrecer arrancar el Afimonio si estan los tres paquetes instalados
414
415 # [STEP7] Mostrar en un recuadro que se encuentra instalado en el sistema
416 showInstalled