# Instalación y Actualización

La instalación será aún más fácil si destina un computador como servidor de SIVeL. Si debe emplear en el mismo computador otros sistemas operativos se recomienda que destine un disco duro independiente para SIVeL y configure un gestor de arranque que permita ingresar a uno o a otro en el momento de arrancar el equipo. En último caso también es posible instalar en un mismo disco OpenBSD y otros sistemas como Linux o Windows, para esto asegúrese de dejar una partición primaria de al menos 2GB para OpenBSD (si se trata de un computador nuevo haga la solicitud al vendedor, si se trata de un computador donde ya está instalado Windows/Linux destine una de las particiones existentes o emplee una herramienta para reparticionar como `gparted` desde un CD con un instalador de Linux).

Para instalar puede descargar de Internet la imagen ISO de la distribución Aprendiendo De Jesus (adJ) &VER-ADJ; (ver ) y quemarla en un CD como imagen ISO (no como simple archivo o de lo contrario no podrá arrancar su computador con esta). AdJ es una distribución de OpenBSD con todos los paquetes requeridos por SIVeL, datos públicos del Banco de Datos de DH, DIH y VPS del CINEP y un script de instalación que instala y configura SIVeL y sus prerrequisitos.

Por precaución saque copia de la información importante de su disco. Inicie su computador con el CD. Instale OpenBSD respondiendo las preguntas del instalador estándar de OpenBSD --y teniendo cuidado de instalar justo en el disco o partición que ha destinado para OpenBSD. Reinicie y configure arranque múltiple si es el caso. Una vez entre en su sistema recién instalado ejecute:

    su -
    /inst-adJ.sh

Responda las preguntas que le hace este archivo de ordenes, recordando dejar PostgreSQL en un contenedor cifrado, a continuación ejecute:

    /inst-sivel.sh

Este último script formulará otras preguntas breves incluyendo primer usuario y clave para SIVeL y creará un primer sitio para usted. Visitelo desde el servidor con un navegador en la dirección https://127.0.0.1/ y una vez ingrese actualice desde el menú Otros Actualizar.

El resto de instrucciones de este capítulo, le servirán si tiene inconvenientes con el procedimiento anterior o si desea aprender con una instalación menos automatizada o en otras plataformas.

## Prerrequisitos

- Sistema tipo Unix, recomendamos OpenBSD &VER-OPENBSD; y en particular la distribución Aprendiendo de Jesús (ver ).

- Para hacer pruebas durante la configuración puede emplear una consola y el navegador tipo texto `lynx`, sin embargo se sugiere configurar X-Window (ver ) y un navegador gráfico como `mozilla-firefox`.

- Se sugiere crear dos contenedores cifrados en los que residirán la base de datos y copias de respaldo respectivamente. Cada una debe ser al menos de 100MB aunque se sugiere 700MB --para que quepa cada una en un CD por si desea mantener copias de respaldo (ver )-- o de 4GB si saca copias en DVD.

- Servidor web con SSL, recomendamos `nginx` (ver ). Sugerimos que lo ejecute con `chroot` en `/var/www` y que cree el directorio `/var/www/tmp` para que PostgreSQL ubique su socket allí, con permisos de ejecución, lectura y escritura para todos.

- PostgreSQL (ver ) con extensiones postgresql-contrib. Sugerimos que la configure para usar sockets en `/var/www/tmp`. Así mismo se sugiere que active autovaciado en `/var/postgresql/data/postgresql.conf` con las líneas:

      track_counts = on
      autovacuum = on

- PHP 5 con módulo para PostgreSQL y Pear (ver uso de PHP 5 con nginx en ).

  Se sugiere editar `/var/www/conf/php.ini` para asegurar que tiene:

      max_execution_time = 900
      max_input_time = 900

  así cada analista tendrá más tiempo de edición en algunos casos.

  Para instalar `pear` en OpenBSD, configure la variable `PKG_PATH` (ver ) y ejecute:

      sudo pkg_add pear

- Puede instalar algunos paquetes estables de pear que también están disponibles como paquetes de OpenBSD por ejemplo con:

      sudo pkg_add pear-DB

  Otros paquetes estables para pear los puede instalar con una conexión a Internet por ejemplo con:

      sudo pear install Auth
      sudo pear install HTML_Common
      sudo pear install HTML_Menu
      sudo pear install HTML_QuickForm
      sudo pear install HTML_QuickForm_Controller
      sudo pear install HTML_Javascript
      sudo pear install HTML_CSS
      sudo pear install Date
      sudo pear install DB_DataObject
      sudo pear install Mail
      sudo pear install Mail_Mime
      sudo pear install Net_Socket
      sudo pear install Net_SMTP
      sudo pear install Benchmark
      sudo pear install DB_DataObject_FormBuilder

  Y los paquetes en desarrollo en el momento de este escrito los puede descargar e instalar con:

      sudo pear download Validate
      sudo pear install ./Validate-*

## Procedimiento de instalación

1. Aunque no es indispensable se recomienda que cree una cuenta para sivel (digamos con login `sivel`).

2. Instale el paquete `sivel-&PRY-VERSION;.tar.gz` que se distribuye con adJ-&VER-ADJ;. Si prefiere descargar fuentes o clonar el repositorio git, asegurese de dejar en un directorio utilizabel por nginx con SSL y consulte .

3. Cree un usuario para PostgreSQL para manejar la base de datos (las siguientes instrucciones son para PostgreSQL 9.4):

       sudo mkdir /var/www/tmp
       sudo chmod -R a+rxw /var/www/tmp
       sudo su - _postgresql
       createuser -h /var/www/tmp/ -s -d sivel
       exit

4. Ejecute el archivo de ordenes de configuración:

       cd /var/www/htdocs/sivel/
       ./conf.sh

5. Cree un nuevo sitio desde el directorio `sitios` con el archivo de ordenes `nuevo.sh`. Por ejemplo para crear el sitio `sivel`:

       cd /var/www/htdocs/sivel/sitios
       ./nuevo.sh sivel

   Este archivo de ordenes copiará los archivo `pordefecto/conf.php.plantilla` y `pordefecto/vardb.sh.plantilla` como `sivel/conf.php` y `sivel/vardb.sh` cuadrando rutas y usuario de PostgreSQL (si requiere cambiar usuario o clave de PostgreSQL edite `sivel/conf.php`). También inicializará la base de datos y los archivos relacionados, lo cual usted puede hacer manualmente con:

       cd /var/www/htdocs/sivel/sitios/sivel
       ../../bin/creapg.sh

   y el mismo archivo de ordenes le permitirá agregar el primer usuario al cual debe darle el rol de administrador. Si posteriormente requiere agregar otros usuarios para este sitio desde el interprete de comandos ejecute:

       cd /var/www/htdocs/sivel/sitios/sivel
       ../../bin/agus.sh

   Este archivo de ordenes también pondrá un fondo por defecto que puede modificar cambiando en el directorio de su sitio el archivo `fondo.jpg`.

6. Desde un navegador abra el directorio en el que instaló. Si lo requiere puede revisar errores en la bitácora de nginx (por defecto `/var/www/log/error.log`).

### Otros pasos de instalación opcionales

1. Si desea generar la documentación:

       cd /var/www/htdocs/sivel/doc
       ./conf.sh
       cp personaliza.ent.plantilla personaliza.ent

   de requerirlo modifique `personaliza.ent` y finalmente:

       make

2. Si desea configurar un esquema de respaldos puede emplear los archivos de comandos `../../bin/pgdump.sh` y `../../bin/respaldo.sh`, que facilitan hacer respaldo diario y mantener la copia del último mes en el computador local y opcionalmente de la última semana en un computador remoto. Requieren `scp` y algunas variables de configuración de `conf.php` (ver y ).

3. Para activar corrección ortográfica, instale ispell e ispell-spanish. Si ngingx corre chroot en un directorio (digamos `/var/www`), cree en ese directorio la estructura de directorios que requieren ispell e ispell-spanish y copie lo básico de estos en la nueva estructura ---las librerías compartidas que `ispell` requiera puede verlas con `ldd`. Eventualmente podrá efectuar estas operaciones con el script `bin/prep-chroot.sh` distribuido junto con las fuentes de SIVeL.

   Una vez instale y pruebe `ispell` en el directorio chroot, desde el directorio de fuentes de SIVeL verifique que la ruta esté especificada en `confv.empty` (variable `CHROOT`) y ejecute:

       $ rm confv.sh
       $ ./conf.sh

   Finalmente puede editar `conf.php` en el directorio de su sitio para modificar el mensaje que se presenta cuando se encuentras errores ortográficos (`MENS_ORTOGRAFIA`).

   Una vez en operación podrá agregar palabras que sean correctas en el diccionario configurado (por defecto está en las fuentes de SIVeL con nombre `ispell.dic`); una palabra por línea, sin dejar espacios a izquierda ni derecha. Si va a agregar palabras con tildes, cambie la vocal tildada por la vocal sin tilde pero con un apostrofe como prefijo, por ejemplo la palabra "nación" se agrega como "naci'on" (sin comillas).

4. Para publicar la Consulta Web en Internet y activar retroalimentación cifrada por correo vea .

## Actualización

Es importante:

- Actualizar SIVeL y el sistema operativo aproximadamente cada 6 meses, para cerrar posibles fallas de seguridad o funcionalidad descubiertas en ese lapso.

- Mantenerse informado de novedades, por ejemplo mediante la lista `sivel-soporte@lists.sourceforge.net`

- Capacitarse para realizar actualizaciones periódicas al sistema operativo y a SIVeL.

La actualización de un SIVeL genérico o con personalizaciones simples (módulos, tablas básicas, interfaz y reinterpretaciones, ver ) puede hacerla un administrador de red siguiendo las instrucciones de esta sección.

Para actualizar fuentes con personalizaciones profundas (por ejemplo con módulos desarrollados para una organización) es necesario que un desarrollador con conocimientos de PHP, SQL y seguridad informática, mezcle actualizaciones del SIVeL genérico a las fuentes personalizadas y actualicé los módulos particulares.

El proceso de actualización consta de dos partes: primero actualizar las fuentes y después ejecutar la herramienta de actualización `actualiza.php` en cada sitio. Estos pasos son más simples para pasar de una versión menor a otra, pero requieren más detalles al pasar de una versión 1.1.x a 1.2.

### Actualización de versiones menores (e.g 1.2b1 a 1.2b2)

Descargue fuentes de la versión 1.2 más recientes con uno de los siguientes métodos:

1. Descargue las fuentes más recientes desde , ubiquelas en el servidor y descomprímalas. Si las descarga con chrome desde el servidor posiblemente quedarán en el directorio `Documentos` de su cuenta personal por lo que puede descomprimir y remplazar fuentes anteriores. Usando OpenBSD adJ sería con:

       cd ~/Documentos
       tar xvfz SIVeL-&PRY-VERSION;.tar.gz
       sudo chown $USER:$USER /var/www/htdocs/sivel/
       cp -rf SIVeL-&PRY-VERSION;/* /var/www/htdocs/sivel/

2. Si desea emplear las fuentes de desarrollo descárguelas y cópielas con

       cd ~
       mkdir tmp2
       cd tmp2
       git clone https://github.com/pasosdeJesus/SIVeL.git
       sudo chown $USER:$USER /var/www/htdocs/sivel
       cp -rf SIVeL/* /var/www/htdocs/sivel

3. Si ya tiene unas fuentes que tengan control de versiones (con el directorio .git), actualicelas asi:

       cd /var/www/htdocs/sivel
       git pull

Después debe asegurarse de tener configurado nginx para acceder a SIVeL en su nueva ubicación `/var/www/htdocs/sivel/`. Para esto edite el archivo de configuración con:

    sudo xfw /etc/nginx/nginx.conf

Busque una línea con:

    root "/var/www/htdocs";

y si la encuentra remplázela por:

    root "/var/www/htdocs/sivel";

Complete reiniciando nginx con

    sudo sh /etc/rc.d/nginx restart

Termine ejecutando la herramienta de actualización, abriendo SIVeL con un navegador pero agregando a la dirección `actualiza.php` (e.g. desde el mismo servidor sería ).

Este mismo procedimiento debe realizarlo si activa módulos.

### Actualización de la versión 1.1 a la versión 1.2

Esta actualización es bastante compleja, se recomienda dejar su versión 1.1 utilizable con propósitos de auditoria y respaldo.

1. Actualice a la versión más reciente de SIVeL 1.1 (1.1.7 en el momento de este escrito), siguiendo las instrucciones de

2. En cada sitio que convertirá asegurse de tener un usuario administrador que le permita completar el proceso una ve migrado a 1.2

3. En cada sitio valide sus datos desde el menú Otros->Validar. Examine el reporte y corrija las inconsistencias en su base, puede ejecutar varias veces el procedimiento de validación hasta asegurarse de tener datos consistentes. Esto es muy importante porque para la conversión a 1.1 sólo esperamos que se conviertan datos correctos en datos correctos.

   Los datos incorrectos o inconsistentes pueden perderse al convertirlos a la versión 1.2.

4. Respalde las fuentes completas:

       	sudo cp -rfp /var/www/htdocs/sivel /var/www/htdocs/sivel11

5. Por cada sitio que vaya a migrar ejecute:

       	cd /var/www/htdocs/sivel/sitios/primersitio
       	../../bin/mueve.sh /var/www/htdocs/sivel11/ primersitio11

   Que dejará las fuentes en `/var/www/htdocs/sivel11` con un sitio `primersitio11` con copia de sus datos en una base también de nombre `primersitio11`.

   Para poder ingresar en un nuevo URL, digamos en el archivo `/etc/nginx/nginx.conf` en la sección del servidor https donde opere SIVeL añada:

       	location ~ ^/primersitio11/(.+\.php)$ {
       		alias       /htdocs/sivel11/$1;
       		fastcgi_pass   unix:run/php-fpm.sock;
       		fastcgi_index  index.php;
       		fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
       		include        fastcgi_params;
       	}
       	location /primersitio11/ {
       		alias /htdocs/sivel11/$1;
       	}

   Reinicie nginx:

       	sudo sh /etc/rc.d/nginx restart

   Cree los enlaces necesarios en el directorio `sivel11/sitios`. Puede ver la manera intentando ingresar al URL, debe ser algo de la forma:

       	cd /var/www/htdocs/sivel11/sitios
       	ln -s primersitio11 127.0.0.1_PRIMESITIO11

   Verifique que opera su sitio desde un navegador por ejemplo desde el mismo servidor con https://127.0.0.1/primersitio11/

6. Cuando complete el procedimiento anterior con todos los sitios, se recomienda borrar las fuentes de de la versión 1.1 de su ubicación anterior. Por ejemplo para eliminar un sitio:

       	cd /var/www/htdocs/sivel/sitios
       	rm -rf primersitio

   O si ya migró todos los sitios puede borrar el directorio completo con fuentes de SIVeL 1.1: `/var/www/htdocs/sivel`

7. Instale SIVeL 1.2, bien con el paquete disponible en adJ-&VER-ADJ; o siguiendo los mismos pasos descritos en . Asegurse de ejecutar `conf.sh`:

       	cd /var/www/htdocs/sivel/
       	./conf.sh -i

8. SIVeL 1.2 para las búsquedas que no tienen en cuenta tildes emplea la extensión `unaccent`, la cual para su instalación requiere que el usuario dueño de la base de datos sea superusuario. Para convertir un usuario `sivel` en superusuario:

       sudo su - _postgresql
       psql -h/var/www/var/run/postgresql -Upostgres template1
       ALTER ROLE sivel WITH SUPERUSER;

9. SIVeL 1.2 emplea codificación UTF-8 por lo que deben recodificarse datos de las bases provenientes de 1.1. Para esto basta sacar copia de la base usando 1.1 y restaurarla en una base ya creada pero sin datos para 1.2.

   Si movió su sistema 1.1 como se describió en esta sección y dejo las ubicaciones por defecto, basta que ejecute:

       	cd /var/www/htdocs/sivel/
       	./conf.sh -i

   Por cada sitio que ya haya copiado cree una base en blanco pero con codificación UTF-8:

       	cd /var/www/htdocs/sivel/sitios/
       	SIN_ESQUEMA=1 SIN_DATOS=1 ./nuevo.sh primersitio

   Si al hacerlo tiene problemas de clave, debe configurar en el archivo primersitio12/conf.php. Puede examinar la clave del usuario SIVeL que emplea en 1.1, ubicandose en el directorio con fuentes de esa versión y ejecutando:

       	sudo grep "dbclave *=" sitios/primersitio11/conf.php

   Restaure los datos de la base respaldada (cambie el nombre de la base y el día de acuerdo a su caso):

       	cd primersitio
       	../../bin/restaura.sh /var/www/resbase/movido-primersitio-dump-03.sql.gz

   Configure nginx para abrir el nuevo sitio en `/etc/nginx/nginx.conf`:

       	location ~ ^/primersitio/(.+\.php)$ {
                   alias	   /htdocs/sivel/$1;
       	    fastcgi_pass   unix:run/php-fpm.sock;
                   fastcgi_index  index.php;
                   fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                   include        fastcgi_params;
               }

       	location /primersitio/ {
       		alias /htdocs/sivel/$1;
       	}

   A continuación reinicie el servidor web:

       	sudo sh /etc/rc.d/nginx restart

10. Haga utilizable su sitio con todas las formas de conexión que tenga a su base por ejemplo si típicamente desde la red local emplea: https://192.168.44.10/primersitio/ para ingresar a un sitio, ejecute:

        cd /var/www/htdocs/sivel/sitios/
        ln -s primersitio 192.168.44.10_PRIMERSITIO

    y pruebe desde URLs acordes a los enlaces por ejemplo: `https://192.168.44.10/primersitio/`.

    Haga lo mismo con otras ubicaciones, el nombre del enlace que debe crear lo verá al intentar abrir SIVeL. Asegurese también de dejar un enlace al mismo servidor:

        cd /var/www/htdocs/sivel12/sitios/
        ln -s primersitio 127.0.0.1_PRIMERSITIO

11. Convierta sus datos. Para esto basta que ejecute la herramienta de actualización que debería estar disponible desde el mismo servidor en . Es posible que al autenticarse vea mensajes de error que tipicamente puede ignorar y que tenga que iniciar la sesión 2 o 3 veces mientras se actualiza en cada intento la forma de cifrado de las claves En caso de que tenga incoveniente reiterativos con claves asegurese que en la base de datos se esté almacenando el condensado bcrypt de la clave y no los antiguos SHA-256 y MD5. .

    Una vez pueda ingressar y actulizar recomendamos que copie la bitacora de lo realizado y de posibles errores en el proceso, pues estos si son importantes y pueden requerir correcciones.

12. Audite los datos convertidos. Por ejemplo puede verificar que el número de casos coincidan, así como los conteos por víctimas individuales.

    Para hacer una auditoria más intensiva se sugiere que genere un reporte general de todos los casos del sistema 1.1 y un reporte general en el 1.2 y los compare teniendo en cuenta que ha cambiado un poco el formato del reporte general (Si en su base ha registrado acciones bélicas active el módulo respectivo antes de realizar las comparaciones).

    Abra dos pestañas en su navegador en una realice un reporte general con todos los datos de la base anterior y en la otra el mismo reporte en la base nueva. Después:

        cd /var/www/htdocs/sivel/sitios/sivel
        mkdir compara-migra
        cd compara-migra/

    Pegue los datos de la base anterior en un archivo que puede iniciar con:

        xfw anterior.txt

    Después pegue los del nuevo SIVeL en otro archivo digamos ábralo con:

        xfw nuevo.txt

    A continuación compare diferencias entre ambos archivos con:

        diff anterior.txt nuevo.txt | less

    Verá sus resultados con el paginador less.

## Pruebas de regresión

Una vez instale o actualice SIVeL es recomendable que ejecute las pruebas de regresión para verificar que en su plataforma opera como se espera.

Hay 2 grupos de pruebas de regresión, unos se ejecutan en un entorno que emula la interacción del navegador con el servidor web y el otro se ejecuta desde el navegador Firefox empleando Selenium .

### Pruebas que emulan navegador y servidor

Las pruebas de regresión que emulan navegador y servidor pueden emplearse después de iniciar un primer sitio (digamos `sitios/sivel`). Debe ejecutarlas como el usuario del sistema operativo que administra SIVeL pues eliminarán y crearán una base de datos con nombre `sivel-prueba`.

No use la base `sivel-prueba` porque será borrada cada vez que se ejecuten las pruebas de regresión.

Para ejecutarlas abra una terminal y pase al directorio con fuentes de SIVeL (eventualmente llega con `cd /var/www/htdocs/sivel/`). Después ejecute:

    sitios/pruebas/pruebas.sh

Se presentará un resumen del resultado de las pruebas, si alguna falla, por favor reporte el inconveniente en adjuntando el archivo `sitios/pruebas/pruebas.bitacora` y todos los archivos de los directorios `sitios/pruebas/salida` y `sitios/pruebas/esperado`. Estos archivos no incluyen información de sus bases de datos, pero si de su instalación de PostgreSQL, PHP y SIVeL.

### Pruebas con Selenium

Las pruebas con Selenium son más demoradas de preparar y de ejecutar. Requieren Mozilla Firefox y el complemento Selenium IDE (disponible en ). Una vez instale el complemento abralo desde Herramientas Selenium IDE. Desde el diálogo que se abre puede crear o reproducir casos de prueba. En el momento de este escrito hay un caso de prueba para las tablas básicas en `sites/pruebas/basicas.selenium`. Este caso de prueba debe ejecutarse desde un SIVeL en operación y a diferencia del otro conjunto de pruebas modifica datos, aunque procura hacerlo de forma controlada. Este caso de prueba espera:

- Que se inicie desde el menú principal de SIVeL

- Que no se hayan borrado registros de las tablas básicas ni que se hayan deshabilitado diversos registros en diversas tablas básicas.

- Que no existan registros en las tablas básicas con nombre `x`

Para iniciarlo desde Selenium IDE elija File Open Test Case, abra el archivo `sites/pruebas/basicas.selenium` y presione el boton de ejecutar. Tendrá que esperar un buen tiempo mientras este procedimiento prueba cada una de las tablas básicas (excepto Clase) modificando la fecha de deshabilitación de un registro existente, volviendolo a dejar en blanco y creando un nuevo registro con nombre `x` que después borra. Si se detienen antes de concluir por favor envíe una captura de pantalla tanto del navegador como de Selenium IDE a .

Lo invitamos a hacer otros casos de prueba y enviarlos por el mismo conducto de las fallas.