Changeset 93d134b in observatorio


Ignore:
Timestamp:
Jul 22, 2014, 11:17:31 AM (10 years ago)
Author:
Ing. Roldan Vargas <rvargas@…>
Branches:
master
Children:
43b5dcf
Parents:
b010f23
Message:

Instrucciones de instalación sobre requerimientos y base de datos del sistema

File:
1 edited

Legend:

Unmodified
Added
Removed
  • procesos/install.py

    r0f479cb r93d134b  
    1 #!/usr/bin/python
     1# !/usr/bin/python
    22# -*- coding:utf-8 -*-
    33## @mainpage Documentación del proceso de instalación del Observatorio del Sistema Productivo Venezolano
     
    4444
    4545## Muestra el autor del script de instalación
     46"""
    4647__author__ = 'Ing. Roldan D. Vargas G. (rvargas@cenditel.gob.ve)'
     48"""
    4749## Muestra una descripción breve del script
     50"""
    4851__doc__ = 'Este script permite la creación de las bases de datos que interoperan con el Observatorio del Sistema ' \
    4952          'Productivo Venezolano, así como la estructura de datos geoespaciales necesaria para la representación ' \
    5053          'geográfica de las cadenas de producción. Permite, de igual forma, la inicialización de datos básicos del ' \
    5154          'sistema'
     55"""
    5256
    5357## @namespace install
     
    6064# @date 20-05-2014
    6165# @version 1.0.1
    62 import settings
     66
    6367import os
    6468import sys
    65 import psycopg2
    6669
    6770
     
    7174
    7275    if formato == 'reset':
    73         return codigo+"0;39m"
     76        return codigo + "0;39m"
    7477
    7578    letter = {0: 'normal', 1: 'negrita', 2: 'diluir', 3: 'cursiva', 4: 'subrayado', 5: 'parpadeo lento',
     
    8184    for i in range(8):
    8285        if formato == letter[i]:
    83             f = str(i)+";"
     86            f = str(i) + ";"
    8487        if color == color_c[i]:
    8588            if not fondo:
    86                 c = "3"+str(i)+"m"
     89                c = "3" + str(i) + "m"
    8790            else:
    88                 c = "4"+str(i)+"m"
     91                c = "4" + str(i) + "m"
    8992        elif color == color_n[i]:
    9093            if not fondo:
    91                 c = "9"+str(i)+"m"
     94                c = "9" + str(i) + "m"
    9295            else:
    93                 c = "10"+str(i)+"m"
    94 
    95     return codigo+f+c
     96                c = "10" + str(i) + "m"
     97
     98    return codigo + f + c
     99
    96100
    97101def borrar_pantalla():
     
    111115
    112116
     117def check_sudo():
     118    """!
     119    Función que permite verificar si el usuario que esta ejecutando el script de instalación tiene los privilegios
     120    necesarios para hacerlo
     121
     122    @author Ing. Roldan D. Vargas G. rvargas@cenditel.gob.ve
     123    @author Centro Nacional de Desarrollo e Investigación en Tecnologías Libres (CENDITEL) Nodo Mérida
     124    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
     125    @date 09-06-2014
     126    @version 1.0.1
     127    """
     128    import grp
     129    import getpass
     130    groups = grp.getgrall()
     131    permisos = False
     132    tp_usuario = "root"
     133
     134    try:
     135        if os.environ['VIRTUAL_ENV']:
     136            permisos = True
     137    except KeyError:
     138        tp_usuario = "sudo"
     139
     140    for group in groups:
     141        for user in groups[3]:
     142            if user == getpass.getuser() and (group[0] == "sudo" or getpass.getuser() == "root"):
     143                permisos = True
     144                if getpass.getuser() == "root":
     145                    tp_usuario = "root"
     146
     147    if not permisos:
     148        print "\n%sUsted no posee privilegios para instalar la aplicación. Debe ser usuario administrador del " \
     149              "sistema o pertenecer al grupo sudo.%s\n" % (color_print('normal', 'Red'), color_print('reset'))
     150        sys.exit(1)
     151
     152    else:
     153        return tp_usuario
     154
     155
     156def install_dependencias():
     157    """!
     158    Función que permite instalar las dependencias del sistema antes de ser ejecutado
     159
     160    @author Ing. Roldan D. Vargas G. rvargas@cenditel.gob.ve
     161    @author Centro Nacional de Desarrollo e Investigación en Tecnologías Libres (CENDITEL) Nodo Mérida
     162    @copyright <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU Public License versión 2 (GPLv2)</a>
     163    @date 09-06-2014
     164    @version 1.0.1
     165    """
     166    usuario = ""
     167    if check_sudo() == "sudo":
     168        usuario = "sudo"
     169
     170    print "\n%sComenzando el proceso de instalación de los requerimientos del sistema...%s\n" \
     171          % (color_print('normal', 'Yellow'), color_print('reset'))
     172
     173    file_req = open("requerimientos/comun.txt", "r")
     174    for line in file_req.readlines():
     175        dependencias = os.system("%s easy_install %s" % (usuario, line))
     176
     177    if dependencias == 0:
     178        print "\n%sLos requerimientos previos fueron instalados correctamente%s\n" \
     179              % (color_print('normal', 'Green'), color_print('reset'))
     180
     181
    113182def install_database():
    114183    """!
     
    122191    @version 1.0.1
    123192    """
     193    try:
     194        import settings
     195        import psycopg2
     196    except ImportError:
     197        return
    124198
    125199    conn = None
    126200
     201    ## Base de Datos por defecto del Observatorio del Sistema Productivo Venezolano
    127202    database_default = settings.DATABASES['default']['NAME']
    128203    host_default = settings.DATABASES['default']['HOST']
     
    131206    port_default = settings.DATABASES['default']['PORT']
    132207
     208    ## Base de Datos del Sistema de Gestión para la Industria y Comercio (SIGESIC)
    133209    database_sigesic = settings.DATABASES['sigesic']['NAME']
    134210    host_sigesic = settings.DATABASES['sigesic']['HOST']
     
    137213    port_sigesic = settings.DATABASES['sigesic']['PORT']
    138214
     215    ## Base de Datos del Sistema de Información Geográfico (GeoCadena)
    139216    database_geo = settings.DATABASES['geocadena_db']['NAME']
    140217    host_geo = settings.DATABASES['geocadena_db']['HOST']
     
    160237
    161238        if resp.upper() == 'Y':
    162             print "\nCreando base de datos %s\n" % database_default
     239            print "\n%sCreando base de datos %s%s\n" % (color_print('normal', "Blue"), database_default,
     240                                                        color_print('reset'))
    163241
    164242            crear_bd = os.system("createdb -h %s -U %s -O %s -E UTF8 %s" % (host_default, user_default, user_default,
     
    166244
    167245            if crear_bd == 0:
    168                 print "\nBase de Datos '%s' creada satisfactoriamente.\n" % database_default
     246                print "\n%sBase de Datos '%s' creada satisfactoriamente.%s\n" % (color_print('normal', 'Green'),
     247                                                                                 database_default,
     248                                                                                 color_print('reset'))
    169249        else:
    170250            # Abortando acciones en la creación de la Base de Datos
    171             print "Para proceder a la creación de la base de datos %s, recuerde modificar el rol del usuario " \
    172                   "'%s' con privilegios de superusuario en el servidor '%s'." % (database_default, user_default,
    173                                                                                  host_default)
     251            print "%sPara proceder a la creación de la base de datos %s, recuerde modificar el rol del usuario " \
     252                  "'%s' con privilegios de superusuario en el servidor '%s'.%s" % \
     253                  (color_print('normal', 'Red'), database_default, user_default, host_default, color_print('reset'))
    174254            sys.exit(1)
    175255
     
    185265
    186266        if host_default == host_sigesic and resp is None:
    187             resp = raw_input("Antes de continuar tenga en cuenta que el usuario '%s' debe tener el rol de SUPERUSER "
    188                              "para poder crear la Base de Datos '%s' en el servidor '%s'.\n¿Desea continuar y/n? " %
    189                              (user_sigesic, database_sigesic, host_sigesic))
     267            resp = raw_input("%sAntes de continuar tenga en cuenta que el usuario '%s' debe tener el rol de SUPERUSER "
     268                             "para poder crear la Base de Datos '%s' en el servidor '%s'.\n¿Desea continuar y/n? %s" %
     269                             (color_print('normal', 'Light Yellow'), user_sigesic, database_sigesic, host_sigesic,
     270                              color_print('reset')))
    190271
    191272        if resp.upper() == 'Y':
    192             print "\nCreando base de datos %s\n" % database_sigesic
     273            print "\n%sCreando base de datos %s%s\n" % (color_print('normal', 'Blue'), database_sigesic,
     274                                                        color_print('reset'))
    193275
    194276            crear_bd = os.system("createdb -h %s -U %s -O %s -E UTF8 %s" % (host_sigesic, user_sigesic, user_sigesic,
     
    196278
    197279            if crear_bd == 0:
    198                 print "\nBase de Datos '%s' creada satisfactoriamente.\n" % database_sigesic
     280                print "\n%sBase de Datos '%s' creada satisfactoriamente.%s\n" % (color_print('normal', 'Green'),
     281                                                                                 database_sigesic,
     282                                                                                 color_print('reset'))
    199283        else:
    200284            # Abortando acciones en la creación de la Base de Datos
    201             print "Para proceder a la creación de la base de datos %s, recuerde modificar el rol del usuario " \
    202                   "'%s' con privilegios de superusuario en el servidor '%s'." % (database_sigesic, user_sigesic,
    203                                                                                  host_sigesic)
     285            print "%sPara proceder a la creación de la base de datos %s, recuerde modificar el rol del usuario " \
     286                  "'%s' con privilegios de superusuario en el servidor '%s'.%s" % \
     287                  (color_print('normal', 'Red'), database_sigesic, user_sigesic, host_sigesic, color_print('reset'))
    204288            sys.exit(1)
    205289
     
    213297    except psycopg2.DatabaseError:
    214298        if host_default == host_geo and resp is None:
    215             resp = raw_input("Antes de continuar tenga en cuenta que el usuario '%s' debe tener el rol de SUPERUSER "
    216                              "para poder crear la Base de Datos '%s' en el servidor '%s'.\n¿Desea continuar y/n? " %
    217                              (user_geo, database_geo, host_geo))
     299            resp = raw_input("%sAntes de continuar tenga en cuenta que el usuario '%s' debe tener el rol de SUPERUSER "
     300                             "para poder crear la Base de Datos '%s' en el servidor '%s'.\n¿Desea continuar y/n? %s" %
     301                             (color_print('normal', 'Light Yellow'), user_geo, database_geo, host_geo,
     302                              color_print('reset')))
    218303
    219304        if resp.upper() == 'Y':
    220             print "\nCreando base de datos %s\n" % database_geo
     305            print "\n%sCreando base de datos %s%s\n" % (color_print('normal', 'Blue'), database_geo,
     306                                                        color_print('reset'))
    221307
    222308            crear_bd = os.system("createdb -h %s -U %s -O %s -E UTF8 %s" % (host_geo, user_geo, user_geo, database_geo))
    223309
    224310            if crear_bd == 0:
    225                 print "\nBase de Datos '%s' creada satisfactoriamente.\n" % database_geo
    226 
    227             print "\nCreando extensiones de Datos Geoespaciales.\n"
    228 
    229             extensiones = []
    230 
    231             for ext in ['postgis', 'postgis_topology', 'fuzzystrmatch', 'postgis_tiger_geocoder']:
    232                 extensiones.append("psql -h %s -U %s -d %s -c 'CREATE EXTENSION %s;'" % (host_geo, user_geo,
    233                                                                                          database_geo, ext))
    234 
    235             crear_extension = os.system("%s && %s && %s && %s" % (extensiones[0], extensiones[1], extensiones[2],
    236                                                                   extensiones[3]))
    237 
    238             if crear_extension == 0:
    239                 print "\nExtensiones de Datos Geoespaciales creadas satisfactoriamente...\n"
     311                print "\n%sBase de Datos '%s' creada satisfactoriamente.%s\n" % (color_print('normal', 'Green'),
     312                                                                                 database_geo, color_print('reset'))
     313
     314            print "\n%sCreando extensiones de Datos Geoespaciales.%s\n" % (color_print('normal', 'Blue'),
     315                                                                           color_print('reset'))
     316            try:
     317                extensiones = []
     318
     319                for ext in ['postgis', 'postgis_topology', 'fuzzystrmatch', 'postgis_tiger_geocoder']:
     320                    extensiones.append("psql -h %s -U %s -d %s -c 'CREATE EXTENSION %s;'" % (host_geo, user_geo,
     321                                                                                             database_geo, ext))
     322
     323                crear_extension = os.system("%s && %s && %s && %s" % (extensiones[0], extensiones[1], extensiones[2],
     324                                                                      extensiones[3]))
     325
     326                if crear_extension == 0:
     327                    print "\n%sExtensiones de Datos Geoespaciales creadas satisfactoriamente...%s\n" % \
     328                          (color_print('normal', 'Green'), color_print('reset'))
     329            except Exception, e:
     330                print "%s %s %s" % (color_print('normal', 'Blue'), e, color_print('reset'))
     331
    240332        else:
    241333            # Abortando acciones en la creación de la Base de Datos
    242             print "Para proceder a la creación de la base de datos %s, recuerde modificar el rol del usuario " \
    243                   "'%s' con privilegios de superusuario en el servidor '%s'." % (database_geo, user_geo, host_geo)
     334            print "%sPara proceder a la creación de la base de datos %s, recuerde modificar el rol del usuario " \
     335                  "'%s' con privilegios de superusuario en el servidor '%s'.%s" % \
     336                  (color_print('normal', 'Red'), database_geo, user_geo, host_geo, color_print('reset'))
    244337            sys.exit(1)
    245338
    246339
    247340    # Sincronización de las Bases de Datos del Observatorio del Sistema Productivo Venezolano
    248     print "\nSe procede a la sincronización de las Bases de Datos del Sistema...\n"
    249 
    250     print "\nSincronizando Base de Datos por defecto, por favor espere...\n"
     341    print "\n%sSe procede a la sincronización de las Bases de Datos del Sistema...%s\n" % \
     342          (color_print('normal', 'Blue'), color_print('reset'))
     343
     344    print "\n%sSincronizando Base de Datos por defecto, por favor espere...%s\n" % \
     345          (color_print('normal', 'Blue'), color_print('reset'))
    251346
    252347    syncdb_default = os.system("python manage.py syncdb --no-initial-data")
    253348
    254349    if syncdb_default == 0:
    255         print "\nBase de datos sincronizada correctamente...\n"
    256 
    257     print "\nSincronizando Base de Datos del SIGESIC, por favor espere...\n"
     350        print "\n%sBase de datos sincronizada correctamente...%s\n" % (color_print('normal', 'Green'),
     351                                                                       color_print('reset'))
     352
     353    print "\n%sSincronizando Base de Datos del SIGESIC, por favor espere...%s\n" % (color_print('normal', 'Blue'),
     354                                                                                    color_print('reset'))
    258355
    259356    syncdb_sigesic = os.system("python manage.py syncdb --database=sigesic --no-initial-data")
    260357
    261358    if syncdb_sigesic == 0:
    262         print "\nBase de datos sincronizada correctamente...\n"
    263 
    264     print "\nSincronizando Base de Datos del Sistema de Información Geográfico, por favor espere...\n"
     359        print "\n%sBase de datos sincronizada correctamente...%s\n" % (color_print('normal', 'Green'),
     360                                                                       color_print('reset'))
     361
     362    print "\n%sSincronizando Base de Datos del Sistema de Información Geográfico, por favor espere...%s\n" % \
     363          (color_print('normal', 'Blue'), color_print('reset'))
    265364
    266365    syncdb_geocadena = os.system("python manage.py syncdb --database=geocadena_db --no-initial-data")
    267366
    268367    if syncdb_geocadena == 0:
    269         print "\nBase de Datos sincronizada correctamente...\n"
     368        print "\n%sBase de Datos sincronizada correctamente...%s\n" % (color_print('normal', 'Green'),
     369                                                                       color_print('reset'))
    270370
    271371    if conn:
     
    275375if __name__ == '__main__':
    276376    borrar_pantalla()
     377    check_sudo()
     378    install_dependencias()
    277379    install_database()
Note: See TracChangeset for help on using the changeset viewer.