# Instalador no gráfico

## Tabla de contenidos

- [Requerimientos](#requerimientos)
- [Proceso de instalación](#proceso-de-instalación)
  - [ogCore](#ogcore)
  - [ogGui](#oggui)
  - [ogDHCP](#ogdhcp)
  - [ogBoot (PXE)](#ogboot-pxe)
  - [ogRepository](#ogrepository)
- [Chequeo de los servicios](#chequeo-de-los-servicios)
- [Permisos de los usuarios](#permisos-de-los-usuarios)
- [Parada y arranque de los servicios](#parada-y-arranque-de-los-servicios)
  - [ogCore](#ogcore-1)
  - [ogGui](#oggui-1)
  - [ogBoot](#ogboot)
  - [ogDHCP](#ogdhcp-1)
  - [ogRepository](#ogrepository-1)
- [Primeros pasos](#primeros-pasos)

## Requerimientos

- Servidor con Ubuntu 24.04 instalado
- Conexión a Internet.
- Acceso a terminal por SSH
- Acceso como root

## Proceso de instalación

Hacemos login en la máquina que vamos a instalar como usuario root.

![Imagen1.png](./imagenes/Imagen1.png)

Ejecutamos los siguientes comandos:

```bash
 curl -q -k https://ognproject.evlt.uma.es/gitea/api/v1/repos/opengnsys/oginstaller/raw/non_graf_installer/python-installer/opengnsys_installer.sh?ref=main -o opengnsys_installer.sh 

chmod 755 opengnsys_installer.sh

./opengnsys_installer.sh
```

En caso de querer instalar los ultimos paquetes creados desde la rama principal de cada uno de los repositorios, ejecutaremos lo siguiente: 

```bash
 curl -q -k https://ognproject.evlt.uma.es/gitea/api/v1/repos/opengnsys/oginstaller/raw/non_graf_installer/python-installer/opengnsys_installer.sh?ref=main -o opengnsys_installer.sh 

chmod 755 opengnsys_installer.sh

./opengnsys_installer.sh nightly
```


![Imagen2.png](./imagenes/Imagen2.png)

Nos aparece una pantalla con los componentes que queremos instalar y versión que queremos instalar, seleccionaremos los componentes deseados y la versión que se requiera del producto. En este caso seleccionaremos todos los componentes y la versión opengnsys_devel-0.0.10

![Imagen3.png](./imagenes/Imagen3.png)

### Selección del tipo de instalacion

A continucación aparece una pantalla donde elegiremos si queremos instalar todos los componenentes en un único nodo o en varios.

#### Instalación mononodo

Si seleccionamos la opción mononodo

![select_mono](./imagenes/Installatiion_type_selection.png)

A continuación nos aprece una pantalla donde tendremos que introducir cual es la IP en la que todos los componentes se van a comunicar. 

![mononode_ip](./imagenes/mononode_ip.png)

A continuación aparece una pantalla con todos los componentes seleccionados donde simplemente le daremos a ok 

![mononode_comp_select](./imagenes/mononode_comp_selection.png)


#### Instalación multinodo 

Para hacer una instalación multinodo, esto es una instalación donde cada componente podrá ir por separado

![select_multi](./imagenes/select_multinode.png)

Nos aparece un cuadro para introducir las ips de las máquinas donde van a ir situados los diferentes componentes. 

![multinode_ip](./imagenes/multinode_ip.png)

Una vez completados estos pasos tanto en mononodo como en multinodo se muestran las diferentes pantallas para que se confirmen los diferentes parametros de entrada, si son correctos con darle a OK es suficiente. El detalle de cada componente se explica a continucación. 

### ogCore 

Para el servicio ogCore los datos que se requieren son: 

- Usuario Administrador: Valor por defecto ogadmin
- Contraseña del usuario: Valor por defecto 12345678

![ogcore_install.png](./imagenes/ogcore_install.png)

### ogGui 

Para el servicio de Interfaz gráfica, los datos que se piden son: 
- URL de Conexión al servidor de ogCore: Valor por defecto https://\<ip del interfaz asociada a la ruta por defecto>:8443
- URL de Conexion a Mercure: Valor por defecto https://\<ip del interfaz asociada a la ruta por defecto>:3000/.well-known/mercure

![oggui_install](./imagenes/oggui_install.png)

### ogDHCP  

Para el servicio de DHCP los parámetros que se piden son:

- Interfaces de red por las que se servirá el servicio de DHCP. Se muestra una lista con los interfaces de red disponibles para la instalación y se espera que se seleccionen los interfaces por los que se pueden servir IPs. 
- IP del servidor de ogBoot (Valor por defecto la IP de la interfaz asociada a la ruta por defecto)
- IP del propio servidor de DHCP  (Valor por defecto la IP de la interfaz asociada a la ruta por defecto)

![ogdhcp_install.png](./imagenes/ogdhcp_install.png)

### ogBoot (PXE)

Los parámetros que se requieren son:

- Oglive a instalar en el servidor de boot. La lista se obtiene de los ogLives disponibles en el directorio de descargas de ogLives. 
- IP del propis servidor de ogBoot (Valor por defecto la IP de la interfaz asociada a la ruta por defecto)
- Puerto donde va a escuchar el ogBoot (Por defecto 8082)
- URL ogCore (Valor por defecto la IP de la interfaz asociada a la ruta por defecto). 
- Usuario para realizar los exports de SAMBA (¡cuidado, este parámetro está embebido en los ogLive, por lo que no es conveniente cambiarlo a no ser que se haya creado un ogLive con la configuración para ello!)
- Password del usuario de Samba (¡cuidado, este parámetro está embebido en los ogLive, por lo que no es conveniente cambiarlo a no ser que se haya creado un ogLive con la configuración para ello!)


![ogboot_install](./imagenes/ogboot_install.png)

### ogRepository 

Los parámetros que se requieren son 

- IP del servicio de ogrepository (Valor por defecto la IP de la interfaz asociada a la ruta por defecto)
- IP del servicio de ogCore (Valor por defecto la IP de la interfaz asociada a la ruta por defecto)
- Usuario para realizar los exports de SAMBA (¡cuidado, este parámetro está embebido en los ogLive, por lo que no es conveniente cambiarlo a no ser que se haya creado un ogLive con la configuración para ello!)
- Password del usuario de Samba (¡cuidado, este parámetro está embebido en los ogLive, por lo que no es conveniente cambiarlo a no ser que se haya creado un ogLive con la configuración para ello!)

![ogrepository_install](./imagenes/ogrepository_install.png)

## Instalación

Una vez que se rellenen todos los formularios, el proceso de instalación comienza, aparece una pantalla donde se puede seguir el avance del proceso. 

![Imagen30.png](./imagenes/Imagen30.png)

Una vez que el proceso de instalación termina se muestra un resumen del proceso de instalación.

![Imagen31.png](./imagenes/Imagen31.png)


Se crea el archivo /opt/opengnsys/release con la versión instalada de Opengnsys

```sh
(og) root@install:~# cat /opt/opengnsys/release 
Versión instalada: opengnsys-1.6.0-beta
```

***NOTA: En caso de realizar una instalación desde el repositorio de nightlys el archivo relese no se crea***

## Chequeo de los servicios

Una vez que la instalación se ha completado, podemos comprobar que los servicios se han instalado correctamente y ha funcionado según lo esperado.


### Permisos de los usuarios

Todos los componentes se han debido instalar en /opt/opengnsys/<carpeta servicio> , donde carpeta servicio es:

- ogboot
- ogdhcp
- ogrepository
- ogcore
- oggui
- ogclient

Actualmente existe una carpeta llamada ogclient_log que se usa para montarse en los clientes y donde dejan sus logs. En proximas versiones esta carpeta va a desaparecer.

Todas los directorios pertenecen al usuario opengnsys grupo www-data excepto los directorios ogclient y ogclient_log que pertenecen al grupo opengnsys. 

![Imagen9a.png](./imagenes/Imagen9a.png)

En el directorio /run/php/ se encuentran los sockets por los que se sirven las apis de ogboot y ogdhcp. Si los servicios están corriendo estos ficheros deben pertenecer al usuario opengnsys

![Imagen9.png](./imagenes/Imagen9.png)


En el directorio /etc/sudoers.d/ se encuentra el archivo opengnsys con la siguiente configuración. 

![Imagen10.png](./imagenes/Imagen10.png)


## Parada y arranque de los servicios 

Todos los servicios funcionan bajo una API (cada servicio con la suya propia) y se getionan como servicios standard de Linux, si bien cada servicio tiene sus particularidades. 

### ogCore

#### Descripción 

El servicio ogCore está compuesto por tres componentes componentes: 

- API 
- BBDD 
- Mercure

Tanto la API como Mercure se sirven detrás de u proxy inverso de nginx.

El esquema de ogCore se representaría en este grafico. 

![ogcore-schema](imagenes/opengsys-ogcore.png)

#### Parada y arranque de los servicios 


```bash 
# Arranque
root@qindel-box:~# systemctl start nginx 

# Parada
root@qindel-box:~# systemctl stop nginx 

# Estado
root@qindel-box:~# systemctl status nginx  

# Logs del servicio 
root@qindel-box:~# journalctl -f SYSLOG_IDENTIFIER=ogcore
``` 

#### Archivos de configuración

Localizados en **/opt/opengnsys/ogcore/**
| Fichero                     | Descripción                                           |
|-----------------------------|-------------------------------------------------------|
| /opt/opengnsys/ogcore/api/env.json |  Definición de los endpoints donde ogcore se tiene que conectar |
| /opt/opengnsys/ogcore/api/.env.local.php | Archivo interno de synfony |
| /etc/nginx/sites-enabled/ogcore.conf | Archivo de configuracion de nginx de la API de ogcore | 
| /etc/nginx/sites-enabled/mercure.conf | Archivo de configuracion de nginx para el servicio de mercure | 

#### Acceso al servicio

El API de ogcore se encuentra disponible en la IP de instalación en el puerto 8443. Para poder acceder a la API del servicio basta con ir a la URL

https://**ip**:8443/

![imagen11](./imagenes/Imagen11.png)

Desde donde se pueden probar los distintos endpoints de la API de forma estándar mediante swagger. 


![imagen12](./imagenes/Imagen12.png)


### ogGui 

#### Descripción

Es una aplicacion estatica de angular servida por nginx. 

#### Parada y arranque de los servicion

```bash 
# Arranque
root@qindel-box:~# systemctl start nginx 

# Parada
root@qindel-box:~# systemctl stop nginx 

# Estado
root@qindel-box:~# systemctl status nginx  
```

Al ser una aplicacion de lado cliente los logs de la misma se ven en la consola de depuracion del navegador. 

Ademas se pueden ver los logs de nginx para ver sus accesos y codigos de error. 

#### Archivos de configuracion

| Fichero                              | Descripción                                           |
|------------------------------------- |-------------------------------------------------------|
| /etc/nginx/sites-enabled/oggui.conf  | URL del endpoint donde apuntar a ogCore.              |
| /opt/opengnsys/oggui/etc/config.json | Endpoint de mercure y ogcore                          |


#### Acceso al servicio 

Para acceder a la interfaz gráfica, basta con acceder a la URL donde se ha desplegado al puerto 4200

https://**ip**:4200/

![imagen13](./imagenes/Imagen13.png)

Introduciendo el usuario y la password configuradas en la instalación accederemos a la interfaz web.

![imagen14](./imagenes/Imagen14.png)

### ogBoot

Servicio que engloba varios componentes que se ejecutan ahora mismo directamente en la máquina donde se ha desplegado. La API se ejecuta debajo de un servidor nginx que corre en el host y que se encarga de gestionar el servicio. 

El servicio consta de un servidor de http/s, un servidor de samba y un servidor de tftpboot. 

El código del servicio ogboot se despliega en /opt/opengnsys/ogboot/. En este directorio se encuentra los siguientes directorios que son relevantes: 

- client: Exportado por samba a las imágenes oglive y que contiene el motor de clonación. 
- tftpboot: exportado por samba a las imágenes oglive , que contiene tanto los kernels de arranque por ipxe, como las imágenes de oglive que se van a desplegar. 
- El resto de las carpetas son las propias de la API. 

#### Parada y arranque de los servicios 

- nginx

```bash
# Arranque 
systemctl start nginx 
systemctl start tftpd-ha
systemctl start samba  

# Parada 
systemctl stop nginx
systemctl stop tftpd-ha 
systemctl stop samba

# Reinicio 
systemctl restart nginx
systemctl restart tftpd-ha 
systemctl restart samba

# Status 
systemctl status nginx
systemctl restart tftpd-ha 
systemctl restart samba
```

Los logs del servicio de nginx y de la api se encuentran en: 

- /var/log/nginx/ogboot_access.log
- /var/log/nginx/ogboot_error.log

#### Archivos de configuración

| Ubicación                          | Fichero          | Descripción                                            |
|------------------------------------|------------------|------------------------------------------------------- |
| /opt/opengnsys/ogboot/             | .env             | Archivo de configuración de synfony.                   |
| /etc/nginx/sites-available/        | ogboot.conf      | Archivo de configuración de nginx.                     |
| /etc/samba                         | smb-ogboot.conf  | Archivo de configuración de samba.                     |
| /etc/samba                         | smb-ogclient.conf| Archivo de configuracion de samba para el clone-engine |


#### Acceso al servicio 

El API de ogboot se ejecuta en el puerto 8082 del servidor donde se ha desplegado, actualmente el servicio se ejecuta bajo http. Para acceder a la documentación de la API, se puede realizar en la siguiente ruta: 

http://**ip**:8082/ogboot/api/doc

![imagen15](./imagenes/Imagen15.png)

Si todo está correcto, el status debería devolver algo similar a esto:

![imagen16](./imagenes/Imagen16.png)

### ogDHCP


#### Descripción

El servicio que se encarga de gestionar el DHCP, basado en kea y está gestionado por una API realizada en Synfony. El API se ejecuta también bajo un servidor de nginx . 

#### Parada y arranque de servicios 

```bash 
# Arranque 
systemctl start nginx  
systemctl start kea-dhcp4-server
systemctl start kea-ctrl-agent

# Parada 
systemctl stop nginx 
systemctl stop kea-dhcp4-server
systemctl stop kea-ctrl-agent

# Restart 
systemctl restart nginx 
systemctl restart kea-dhcp4-server
systemctl restart kea-ctrl-agent

# Status 
systemctl status nginx
systemctl status kea-dhcp4-server
systemctl status kea-ctrl-agent

```

#### Ficheros de log 

- nginx 

/var/log/nginx/ogdhcp_access.log
/var/log/nginx/ogdhcperror.log

#### Archivos de configuración
| Ubicación                          | Fichero          | Descripción                          |
|------------------------------------|------------------|--------------------------------------|
| /opt/opengnsys/ogdhcp/             | .env             | Archivo de configuración de synfony. |
| /etc/nginx/sites-available/        | ogdhcp.conf      | Archivo de configuración de nginx.   |



#### Acceso al servicio 

El API de ogboot se ejecuta en el puerto 8081 del servidor donde se ha desplegado, actualmente el servicio se ejecuta bajo http. Para acceder a la documentación de la API, se puede realizar en la siguiente ruta: 

http://**ip**:8081/ogdhcp/api/doc


![imagen17](./imagenes/Imagen17.png)

Si todo está correcto el endpoint de status debería responder algo como esto: 

![imagen18](./imagenes/Imagen18.png)

### ogRepository 

#### Descripción 

Servicio que engloba varios componentes que se ejecutan ahora mismo directamente en la máquina donde se ha desplegado. La API se ejecuta debajo de un servidor de gunicorn y está desarrollada mediante la librería Flask de Python. 

Además sirve por samba los directorios /opt/opengnsys/ogrepository/images mediante el usuario opengnsys. 


#### Parada y arranque de servicios 
```bash
# Arranque 
systemctl start ogrepo-api
systemctl start samba

# Parada
systemctl stop ogrepo-api
systemctl stop samba

# Status 
systemctl status ogrepo-api
systemctl status samba

# Revisión de logs 
journalctl -xeu ogrepo-api
journalctl -xeu samba
```

#### Configuración 

| Ubicación                  | Fichero              | Descripción                          |
|----------------------------|----------------------|--------------------------------------|
| /opt/opengnsys/ogrepository/ | .ogAdmRepo.cfg       | Archivo de configuración de ogrepository. |
| /etc/samba/                | smb.conf.ogrepository | Archivo de configuración de Samba.   |



#### Acceso al servicio 

El API de ogRepository se ejeecuta en el puerto 8006 del host donde se haya desplegado. Si se quiere acceder al servicio lo podemos hacer mediante la URL 

http://**ip**:8006/apidocs/

![imagen19](./imagenes/Imagen19.png)

Si la instalación ha sido correcta, el status debería devolver algo similar a esto

![imagen20](./imagenes/Imagen20.png)


## Primeros pasos 

Para empezar a trabajar, podemos configurar ogCore mediante la interfaz gráfica de tal manera que por lo menos podamos comprobar la conexión de ogCore con todos los componentes. 

Para ello: 

En la máquina donde se haya configurado ogCore editamos el archivo /opt/opengnsys/ogCore/etc/env.json

![imagen21](./imagenes/Imagen21.png)

Ajustamos los valores **OG_BOOT_API_URL**, **OG_DHCP_API_URL** y **OG_CORE_IP** a los valores correctos dependiendo de nuestra instalación, por ejemplo

![imagen22](./imagenes/Imagen22.png)

Una vez hecho esto, podemos reiniciar ogcore y  hacer login en la interfaz gráfica: 

![imagen23](./imagenes/Imagen23.png)


Si accedemos al esado del servicio DHCP

![imagen24](./imagenes/Imagen24.png)

Si accedemos al estado del servicio de ogBoot

![imagen25](./imagenes/Imagen25.png)

Para comprobar la conectividad con ogRepository, tenemos que dar de alta el repositorio. Para ello vamos a repositorios 

![imagen26](./imagenes/Imagen26.png)

Rellenamos los datos correspondientes

![imagen27](./imagenes/Imagen27.png)

Y si ahora hacemos click en el lapiz podremos ver el repositorio

![imagen28](./imagenes/Imagen28.png)

![imagen29](./imagenes/Imagen29.png)
