# Módulo de Arranque (ogboot)

El módulo ogboot es el encargado de gestionar el proceso de arranque por red de los clientes de OpenGnsys, utilizando el sistema iPXE. Este componente sirve los binarios necesarios para el arranque (como **undionly.kpxe** o **ipxe.efi**), gestiona el sistema operativo ogLive y genera instrucciones de arranque personalizadas para cada cliente en función de su configuración.

Entre sus principales características se encuentran:

- Gestionar las versiones de ogLive (instalar, borrar, marcar por defecto).

- Generar instrucciones de arranque personalizadas por cliente, mediante plantillas reutilizables.

- Exponer archivos de oglive (kernel e imagen de inicialización) por HTTP para el arranque de clientes.

La arquitectura de arranque se determina tanto por los parámetros de las configuración de los clientes, los parámetros heredados por su Unidad Organizativa a la que pertenecen y por la detección que realiza el servidor DHCP (ogDHCP) en función de la arquitectura del cliente.


## Estado del módulo ogboot
Desde el menú superior se puede acceder al panel de Estado Global, donde se muestra el estado actual de ogboot.


En esta vista se puede comprobar:

- Uso de disco reservado para ogLive y archivos de arranque.

- Estado de los servicios críticos (**tftpboot** y **nginx**).

- Lista de imágenes ogLive instaladas, con su kernel, arquitectura y versión.

## Gestión de ogLive

Desde la sección lateral ogLive, es posible gestionar las distintas versiones del sistema operativo que serán ofrecidas a los clientes al arrancar.


![oggui-boot-oglive](../../assets/images/screenshots/oggui-boot-oglive.png "Subred KEA")


Cada entrada muestra:

- Nombre de la imagen (ej. ogLive-6.8.0-31-generic-20250519)

- Si está marcada como imagen por defecto

- Estado de instalación

- Fecha de creación

Acciones: ver detalles, eliminar, o cambiar la imagen por defecto

!!! warning "Advertencia" 
    Sólo puede haber una imagen ogLive marcada como por defecto. Esta será la usada en las plantillas de arranque cuando no se especifique una versión concreta.
    No es posible eliminar una imagen marcada como por defecto.



### Añadir e instalar una nueva imagen ogLive
Para añadir una nueva versión de ogLive al sistema, sigue estos pasos desde el menú lateral ogLive:


1. Haz clic en el botón "Añadir OgLive" para seleccionar una de las imágenes detectadas en el sistema.

![oggui-boot-oglive](../../assets/images/screenshots/oggui-boot-oglive.png "Subred KEA")

2. Se abrirá una ventana con una lista desplegable de las imágenes disponibles pero aún no registradas en la interfaz. Selecciona uno de los Oglives disponibles y pulsa "Añadir".

![oggui-boot-oglive-anadir](../../assets/images/screenshots/oggui-boot-oglive-anadir.png "oggui-boot-oglive-anadir")

3.Una vez añadida, la imagen aparecerá en la lista con el estado "Sin instalar".

![oggui-boot-administrar-oglive-anadido-no-updated](../../assets/images/screenshots/oggui-boot-administrar-oglive-anadido-no-updated.png "oggui-boot-administrar-oglive-anadido-no-updated")

Desde aquí podrás visualizarla, eliminarla, o desplegar el menú de acciones para proceder a su instalación.

4. Instalar imagen ogLive
Pulsa sobre el icono de acciones (≡) y selecciona "Instalar".

![oggui-boot-administrar-install-oglive](../../assets/images/screenshots/oggui-boot-administrar-install-oglive.png "oggui-boot-administrar-install-oglive")

Esto iniciará el proceso de instalación, que registrará la imagen y la preparará para ser usada durante el arranque de los clientes.

5. Una vez completado el proceso, el estado pasará a "Instalada" y la imagen estará lista para usarse.

![oggui-boot-administrar-install-oglive-success](../../assets/images/screenshots/oggui-boot-administrar-install-oglive-success.png "oggui-boot-administrar-install-oglive-success")

!!! note "Nota" 
    Puedes marcar la nueva imagen como por defecto si deseas que sea la utilizada automáticamente en las plantillas de arranque que no especifiquen una versión concreta.


## Gestión de Plantillas PXE
Desde el menú lateral Plantillas PXE, se accede a la gestión de los ficheros base que definen cómo arrancará cada cliente. Estas plantillas son utilizadas para generar archivos personalizados por dirección MAC y permiten seleccionar el método de arranque que debe usar el equipo.


![oggui-boot-plantillas_pxe.png](../../assets/images/screenshots/oggui-boot-plantillas_pxe.png "oggui-boot-plantillas_pxe.png")

En esta vista se muestra:

- Nombre de la plantilla

- Estado de sincronización con el sistema de archivos

- Si es la plantilla por defecto

- Fecha de creación

- Acciones disponibles: ver, editar o eliminar

### Plantillas disponibles por defecto
En el sistema vienen predefinidas varias plantillas localizadas en:

```
/opt/opengnsys/ogboot/tftpboot/ipxe_scripts/templates/
```
Las plantillas por defecto son:

| Plantilla                  | Descripción                                                                 |
|----------------------------|-----------------------------------------------------------------------------|
| firstDisk                 | Arranca desde el primer disco del sistema                                   |
| firstDisk_firstPartition  | Arranca desde la primera partición del primer disco                        |
| firstDisk_secondPartition | Arranca desde la segunda partición del primer disco                        |
| firstDisk_thirdPartition  | Arranca desde la tercera partición del primer disco                        |
| oglive                    | Arranca el sistema ogLive desde red (HTTP)                                 |
| ogliveCache               | Arranca ogLive desde la caché local del cliente (/opt/opengnsys/cache/oglive/) |

Estas plantillas son utilizadas como base para generar archivos personalizados por cliente, sustituyendo las variables contenidas en ellas por valores concretos en función de la configuración del equipo.


### Variables de las plantillas PXE
Las plantillas de arranque disponibles en ogboot contienen variables que serán sustituidas automáticamente al generar el fichero de arranque personalizado para cada cliente. Esto permite reutilizar plantillas genéricas para múltiples equipos, adaptando dinámicamente los valores.

Ejemplo de plantilla: oglive
```
#!ipxe
set timeout
set timeout-style hidden

set ISODIR __OGLIVE__
set default 0
set kernelargs __INFOHOST__

:try_iso
kernel http://__SERVERIP__/tftpboot/${ISODIR}/ogvmlinuz ${kernelargs} || goto fallback
initrd http://__SERVERIP__/tftpboot/${ISODIR}/oginitrd.img
boot

:fallback
echo "OgLive default"
set ISODIR ogLive
kernel http://__SERVERIP__/tftpboot/${ISODIR}/ogvmlinuz ${kernelargs}
initrd http://__SERVERIP__/tftpboot/${ISODIR}/oginitrd.img
boot
```
### Variables disponibles

| Variable      | Descripción                                                                                                 |
|---------------|------------------------------------------------------------------------------------------------------------|
| __SERVERIP__  | Dirección IP del servidor ogboot (servidor HTTP/TFTP que aloja el ogLive)                                  |
| __OGLIVE__    | Nombre del directorio donde está montada la imagen ogLive seleccionada                                     |
| __INFOHOST__  | Conjunto de parámetros del kernel personalizados para el cliente (IP, hostname, ogcore, ogrepo, etc.)      |

Estas variables se sustituyen automáticamente cuando se genera el fichero de arranque para un cliente (por ejemplo, 01-00:11:22:33:44:11) a partir de la plantilla seleccionada.

En las plantillas PXE utilizadas por ogboot, la variable __INFOHOST__ se sustituye automáticamente por una cadena de parámetros del kernel. Estos parámetros son generados por el componente ogcore a partir de la configuración del cliente y su Unidad Organizativa a la que pertenece.

- Ejemplo de sustitución
```
set kernelargs ro boot=oginit quiet splash irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogactiveadmin=true ogdebug=true ogtmpfs=15 oglivedir=${ISODIR} LANG=es_ES.UTF-8 ip=192.168.3.11:172.17.8.35:192.168.3.1:255.255.255.0:PC11:eth0:none group=Aula_Ciencias ogrepo=172.17.8.35 ogcore=192.168.2.2 oglive=172.17.8.35 oglog=192.168.68.51 ogshare=172.17.8.35 ogprof=false hardprofile=default ogdns=192.168.3.1 vga=791
```

- Detalle de los parámetros incluidos

| Parámetro                | Origen y función                                                                                                                        |
|--------------------------|----------------------------------------------------------------------------------------------------------------------------------------|
| ip=                      | Dirección IP del cliente junto con la configuración de red, en el formato:<br>`<client-ip>:<server-ip>:<gateway>:<netmask>:<hostname>:<device>:<autoconf>` |
| ├── client-ip            | Dirección IP asignada al cliente                                                                                                       |
| ├── server-ip            | Dirección IP del servidor ogboot (servidor TFTP/HTTP)                                                                                  |
| ├── gateway              | IP del router de la subred                                                                                                             |
| ├── netmask              | Máscara de red                                                                                                                         |
| ├── hostname             | Nombre del cliente (PC11, por ejemplo)                                                                                                 |
| ├── device               | Interfaz de red (ej. eth0)                                                                                                             |
| └── autoconf             | Método de configuración IP (none, dhcp, etc.)                                                                                          |
| oglivedir                | Nombre del directorio ogLive que se va a utilizar                                                                                      |
| ogcore                   | IP del servidor ogcore                                                                                                                 |
| oglive                   | IP del servidor ogboot (donde están los oglives)                                                                                       |
| ogrepo                   | IP del servidor de repositorios de imágenes                                                                                            |
| oglog                    | IP del servidor oglog (logs centralizados)                                                                                             |
| ogshare                  | Dirección IP para almacenamiento compartido                                                                                            |
| group                    | Nombre de la Unidad Organizativa del cliente                                                                                           |
| hardprofile              | Perfil hardware del cliente (default si no tiene uno asignado)                                                                         |
| ogdns                    | IP del servidor DNS                                                                                                                    |
| ogntp                    | IP del servidor NTP (si está definido)                                                                                                 |
| ogProxy                  | Dirección del proxy (si aplica)                                                                                                        |
| netiface                 | Interfaz de red (ej. eth0)                                                                                                             |
| LANG                     | Idioma (es_ES.UTF-8)                                                                                                                  |
| vga=791                  | Resolución de pantalla                                                                                                                 |
| Otros parámetros comunes | `ro boot=oginit quiet splash irqpoll acpi=on og2nd=sqfs ogprotocol=smb ogtmpfs=15`                                                    |


### Crear una nueva plantilla PXE
El módulo ogboot permite añadir nuevas plantillas PXE desde la interfaz gráfica, ya sea partiendo de cero o usando uno de los modelos predefinidos.

1. Para añadir una nueva plantilla:

2. Accede al menú lateral Plantillas PXE

3. Pulsa "Añadir plantilla"

4. Rellena el formulario que se abrirá

![oggui-boot-plantillas_pxe-anadir.png](../../assets/images/screenshots/oggui-boot-plantillas_pxe-anadir.png "oggui-boot-plantillas_pxe-anadir.png")

#### Plantillas modelo
La interfaz permite cargar un modelo base pulsando el botón "Cargar plantilla modelo", que insertará en el editor uno de los dos modelos disponibles:

- Modelo ogLive (arranque por red HTTP o TFTP)
Este modelo está pensado para arrancar ogLive desde un servidor HTTP o TFTP. Utiliza las variables __SERVERIP__, __OGLIVE__ y __INFOHOST__, que serán sustituidas automáticamente por ogboot al generar el fichero personalizado.

```
#!ipxe
    set timeout 0
    set timeout-style hidden
    set ISODIR __OGLIVE__
    set default 0
    set kernelargs __INFOHOST__
    :try_iso
    kernel http://__SERVERIP__/tftpboot/${ISODIR}/ogvmlinuz ${kernelargs} || goto fallback
    initrd http://__SERVERIP__/tftpboot/${ISODIR}/oginitrd.img
    boot

    :fallback
    set ISODIR ogLive
    kernel http://__SERVERIP__/tftpboot/${ISODIR}/ogvmlinuz ${kernelargs}
    initrd http://__SERVERIP__/tftpboot/${ISODIR}/oginitrd.img
    boot
```


- Modelo arranque por disco
Este segundo modelo detecta si el sistema se encuentra en modo BIOS o UEFI y arranca desde el primer disco disponible, utilizando grub.exe o grubx64.efi.


```
#!ipxe
iseq ${platform} efi && goto uefi_boot || goto bios_boot

:bios_boot
echo "Running in BIOS mode - Booting first disk"
chain http://__SERVERIP__/tftpboot/grub.exe --config-file="title FirstHardDisk;chainloader (hd0)+1;rootnoverify (hd0);boot" || echo "Failed to boot in BIOS mode"
exit

:uefi_boot
echo "Running in UEFI mode - Booting first disk"
sanboot --no-describe --drive 0 --filename \EFI\grub\Boot\grubx64.efi || echo "Failed to boot in UEFI mode"
exit
```
!!! note "Nota" 
        Estos modelos son editables y sirven como base para definir otras variantes más complejas (por ejemplo, arranque por partición concreta o modos de recuperación).

###  Consultar el contenido de una plantilla
Haz clic en el icono del ojo para ver el contenido completo de una plantilla PXE.

![oggui-boot-plantillas_pxe-detalles.png](../../assets/images/screenshots/oggui-boot-plantillas_pxe-detalles.png "oggui-boot-plantillas_pxe-detalles.png")

###  Editar una plantilla existente
Haz clic en el icono del lápiz para editar el nombre o el contenido de la plantilla. Se abrirá el editor con el contenido actual precargado.

![oggui-boot-administrar-install-oglive-editar](../../assets/images/screenshots/oggui-boot-plantillas_pxe-editar.png "oggui-boot-administrar-install-oglive-editar")

###  Eliminar una plantilla
Haz clic en el icono de la papelera  y confirma la eliminación para borrar la plantilla del sistema.

![oggui-boot-plantillas_pxe-borrar.png](../../assets/images/screenshots/oggui-boot-plantillas_pxe-borrar.png "oggui-boot-plantillas_pxe-borrar.png")



## Plantillas por cliente (Boot PXE)

Cada cliente puede tener asignado un fichero de arranque específico basado en una plantilla. Estos archivos tienen el nombre 01-<MAC> y se almacenan en /opt/opengnsys/ogboot/tftpboot/ipxe_scripts/.

![oggui-boot-bootfile_pxe.png](../../assets/images/screenshots/oggui-boot-bootfile_pxe.png "oggui-boot-bootfile_pxe.png")

### Asignar plantilla a un cliente
Desde el menú lateral, accede a Arranque PXE, donde podrás ver todos los clientes de una Unidad Organizativa (por ejemplo, "Aula Ciencias"):


1. Selecciona una plantilla para cada cliente desde la columna Plantilla.

!!! note "Nota"
    También puedes aplicar una plantilla a todos los clientes usando el desplegable superior.

2. Haz clic en Guardar para generar los ficheros de arranque correspondientes.

![oggui-boot-bootfile_pxe-anadir.png](../../assets/images/screenshots/oggui-boot-bootfile_pxe-anadir.png "oggui-boot-bootfile_pxe-anadir.png")

Estos archivos se crean con nombre 01-<MAC> (por ejemplo, 01-00:11:22:33:44:55) y se almacenan en:

```
/opt/opengnsys/ogboot/tftpboot/ipxe_scripts/
```
El contenido del fichero generado será una copia de la plantilla correspondiente con las variables sustituidas por los valores concretos del cliente: dirección IP, ogLive, ogcore, etc.

!!! success "Lo que hemos aprendido"
    - Qué es ogboot y cómo se encarga del arranque de los clientes mediante IPXE.
    - Qué son los ogLive, cómo se gestionan (instalar, eliminar, marcar como por defecto) y cómo se usan en el arranque.
    - Cómo funcionan las plantillas PXE, cómo se editan, consultan, eliminan y qué variables utilizan.
    - Cómo se asigna un fichero de arranque personalizado a cada cliente a partir de una plantilla.
