> ## Documentation Index
> Fetch the complete documentation index at: https://docs.zylon.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Instalación Full-Airgap

> Instala Zylon en entornos completamente offline

La instalación airgap permite el despliegue de Zylon en entornos con acceso cero a internet. Este proceso requiere **dos máquinas Linux separadas**: una con conectividad a internet para descargar bundles, y una máquina offline para ejecutar Zylon.

**Lista de Prerrequisitos**:

* [ ] Máquina Linux limpia (Ubuntu 22/24) que cumpla con los [requisitos de hardware](/es/operator-manual/installation/hardware-requirements)
* [ ] Acceso root y SSH a la máquina
* [ ] Un nombre de dominio para Zylon (por ejemplo, zylon.company.com)
* [ ] Capacidad para reiniciar la máquina cuando sea necesario
* [ ] La máquina tiene `curl` instalado

- [ ] Máquina online con acceso a internet para descargar bundles de instalación
- [ ] Método para transferir archivos (70-100 GB) a la máquina objetivo aislada (unidad USB, red interna, etc.)
- [ ] La máquina objetivo NO tiene conexión a internet
- [ ] Certificado SSL válido para tu dominio
- [ ] Almacenamiento suficiente en la máquina online y medio de transferencia para bundles grandes

***

## Acceso de Red Requerido

En tu máquina online, asegura acceso de firewall a estos dominios:

**Servicios Esenciales (Obligatorios):**

* `get.zylon.ai` - Instalación de CLI
* `zylon-cli.s3.us-east-1.amazonaws.com` - Binarios de CLI y dependencias
* `zylon-artifacts.s3.us-east-1.amazonaws.com` - Archivos de instalación y actualizaciones de Zylon

<Warning>
  Estos dominios deben ser accesibles desde la máquina en línea para descargar bundles y actualizaciones de Zylon.
  Si no hay acceso directo a internet, puede configurar un servidor proxy.

  <Accordion title="Configuración de Ajustes de Proxy">
    Configure las siguientes variables de entorno antes de ejecutar cualquier comando de Zylon CLI:

    ```bash theme={null}
    export HTTP_PROXY="http://proxy.company.com:8080"
    export HTTPS_PROXY="http://proxy.company.com:8080"
    ```

    **Uso de Certificados Autofirmados**

    Si su proxy usa un certificado autofirmado, también debe configurar el certificado CA:

    ```bash theme={null}
    export SSL_CERT_FILE="/path/to/your/ca-cert.pem"
    export REQUESTS_CA_BUNDLE="/path/to/your/ca-cert.pem"
    ```

    **Verificar Configuración de Proxy**

    Pruebe la conectividad a través del proxy antes de continuar:

    ```bash theme={null}
    # Probar conectividad HTTP
    curl -v -x $HTTP_PROXY http://get.zylon.ai

    # Probar conectividad HTTPS (si usa certificado autofirmado)
    curl -v -x $HTTPS_PROXY --cacert $SSL_CERT_FILE https://get.zylon.ai
    ```

    **Ejecutar Comandos con sudo**

    ⚠️ **Importante:** El comando `sudo` no preserva las variables de entorno por defecto. Debe usar la bandera `-E` para pasar la configuración del proxy a comandos que requieren privilegios elevados:

    ```bash theme={null}
    sudo -E zylon-cli download <version> --airgap
    ```
  </Accordion>
</Warning>

***

## Instalando Zylon

<Steps>
  <Step title="Máquina Online">
    Descarga bundles de Zylon y modelos de IA con acceso a internet
  </Step>

  <Step title="Transferir">
    Mueve archivos bundle a la máquina offline vía método de transferencia seguro
  </Step>

  <Step title="Máquina Offline">
    Importa e instala Zylon sin ninguna conectividad a internet
  </Step>
</Steps>

***

### Parte A: Configuración de Máquina Online

<Steps>
  <Step title="Instalar CLI">
    *Tiempo estimado: 2 min*

    <Warning>
      Antes de comenzar la instalación, valida que tu máquina puede alcanzar `get.zylon.ai`:

      ```bash theme={null}
      curl -sLv get.zylon.ai -m 3 | exit 1
      ```

      Si la conexión está dando errores, trabaja con tu equipo de red para resolverlos. Una vez que la conectividad esté verificada, puedes proceder.
    </Warning>

    La CLI de Zylon acelerará el tiempo necesario para tener todo listo, se encargará de instalar controladores, actualizar Zylon y configurar el sistema.
    Para instalarla, conéctate por SSH a la máquina donde quieres instalar Zylon y ejecuta:

    ```bash theme={null}
    # ssh <user>@<host-ip>
    sudo curl -sL get.zylon.ai | sh
    ```

    Verifica la instalación:

    ```bash theme={null}
    sudo zylon-cli version
    ```

    <Note>
      Se requiere acceso root para las operaciones de la CLI, ya que gestiona dependencias y configuraciones a nivel de sistema.
    </Note>
  </Step>

  <Step title="Configurar Zylon">
    *Tiempo estimado: 10min*

    Zylon se configura mediante un archivo YAML ubicado en `/etc/zylon/zylon-conf.yaml`.

    **Generar Configuración Inicial**

    Usa la CLI para generar un archivo de configuración inicial:

    ```bash theme={null}
    sudo zylon-cli config init
    ```

    Esto abre un prompt interactivo que te guía a través de las opciones de configuración.

    <Info>
      Si por alguna razón te quedas atascado durante el prompt interactivo, puedes omitirlo añadiendo la bandera `-y` para auto-generar una configuración por defecto:

      ```bash theme={null}
      sudo zylon-cli config init -y
      ```

      Después necesitarás editar manualmente `/etc/zylon/zylon-conf.yaml` para establecer tu configuración deseada basándote en la sección de [configuración manual](#manual-configuration).
    </Info>

    <Tabs>
      <Tab title="Configuración Automática">
        Si ejecutaste `sudo zylon-cli config init`, toda la configuración está establecida.
        Revisa `/etc/zylon/zylon-conf.yaml` para confirmar la configuración. Puedes obtener más información sobre qué configuraciones son requeridas en la sección [Configuración Manual](#manual-configuration).

        <Info>
          Si necesitas volver a ejecutar el asistente de configuración, ejecuta:

          ```bash theme={null}
          sudo zylon-cli config init
          ```
        </Info>
      </Tab>

      <Tab title="Configuración Manual">
        Edita `/etc/zylon/zylon-conf.yaml` para ajustar la configuración según sea necesario.

        **Define tu distribución del sistema operativo**

        Establece `node.distro` para que coincida con tu versión de Ubuntu:

        ```yaml theme={null}
        node:
          distro: "ubuntu22"  # para Ubuntu 22.04
          # distro: "ubuntu24"  # para Ubuntu 24.04
        ```

        **Define tu arquitectura de CPU**

        Establece `node.arch` para que coincida con tu hardware:

        ```yaml theme={null}
        node:
          arch: "amd64"  # para procesadores Intel/AMD
        ```

        **Establece tus controladores de hardware (si aplica)**

        Establece `node.drivers` a `generic` (esta es la única opción soportada):

        ```yaml theme={null}
        node:
          drivers: "generic"
        ```

        **Configura el tipo de clúster**

        Establece `cluster.type` a `k0s` (esta es la única opción soportada para instalaciones de instancia única):

        ```yaml theme={null}
        cluster:
          type: "k0s"
        ```

        **Selecciona tu canal de lanzamiento**

        Establece `channel` a `stable` (recomendado para producción y uso normal) o `unstable` (disponible bajo solicitud para pruebas):

        ```yaml theme={null}
        channel: "stable"
        ```

        **Añade tu información de licencia**

        Establece `license.email` a la dirección de correo electrónico asignada a tu licencia (proporcionada durante el registro).

        Establece `license.id` al ID de licencia compartido contigo por el equipo de Zylon por correo electrónico:

        ```yaml theme={null}
        license:
          email: "champion@company.com"
          id: "2oq..."
        ```

        **Elige tu preset de IA**

        Establece `ai.preset` basándote en tu memoria GPU disponible. Consulta [Presets de IA](/es/operator-manual/ai-presets/getting-started) para más detalles.

        ```yaml theme={null}
        ai:
          preset: "baseline-48g"
        ```

        **Establece tu identificador de empresa**

        Establece `companyIdentifier` a cualquier identificador para el seguimiento anónimo de métricas (por ejemplo, `acme-corp`). Si tienes múltiples instalaciones, usa identificadores diferentes (por ejemplo, `company` y `company-test`):

        ```yaml theme={null}
        companyIdentifier: "tu-empresa"
        ```

        **Desactiva telemetría e informes de errores**

        Para desactivar la telemetría y los informes de errores, añade la siguiente sección:

        ```yaml theme={null}
        observability:
            crashReporting: false
            usageMetrics: false
        ```

        **Configura el ingress de red**

        Establece `ingress.host` al dominio que has preparado para Zylon. Debe ser un nombre de dominio completamente cualificado (FQDN) que apunte a la dirección IP de tu servidor.

        Ejemplos:

        * `zylon.company.com`
        * `ai.acme-corp.com`
        * `zylon-prod.yourcompany.io`

        ```yaml theme={null}
        ingress:
          host: "zylon.tu-empresa.com"
          enabled: true
          tlsEnabled: true
        ```

        **Configura la generación de certificado SSL**

        Si tu servidor es accesible desde internet, Let's Encrypt generará y renovará automáticamente los certificados SSL. Mantén el `certManagerAnnotations` por defecto:

        ```yaml theme={null}
        ingress:
          certManagerAnnotations:
            cert-manager.io/cluster-issuer: "letsencrypt-prod"
        ```

        Si estás en una red privada o necesitas usar un certificado personalizado, consulta [Desactivar Let's Encrypt](#disable-lets-encrypt) a continuación.

        **Ajustes Airgap**

        Asegúrate de que estos ajustes estén incluidos para indicar instalación y operación airgap:

        ```yaml theme={null}
        airgap:
          offlineInstall: true
          offlineOperation: true
        ```

        **Licencia Local**

        Dado que la máquina offline no puede alcanzar `api.replicated.com`, necesitas una licencia local. Contacta con el soporte de Zylon para obtenerla, luego añade:

        ```yaml theme={null}
        license:
          email: "champion@company.com"
          id: "2xo..."
          type: "Zylon"
          data: |-
            eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
        ```

        <Warning>
          Reemplaza el campo `data` con los datos reales de licencia proporcionados por el equipo de Zylon. Por favor, ten cuidado con el formato y la indentación.
          Solo copia el token que comienza con `eyJ...` y termina con `...`.
        </Warning>
      </Tab>
    </Tabs>

    **Ver Configuración Actual**

    ```bash theme={null}
    sudo cat /etc/zylon/zylon-conf.yaml
    ```

    Puedes editar el archivo de configuración directamente usando tu editor de texto preferido (por ejemplo, `nano`, `vim`):

    ```bash theme={null}
    # Elige uno de los siguientes comandos:
    sudo nano /etc/zylon/zylon-conf.yaml
    sudo vim /etc/zylon/zylon-conf.yaml
    ```

    Para información detallada sobre todas las opciones de configuración disponibles, consulta la [Guía de Configuración](/es/operator-manual/configuration/index).
  </Step>

  <Step title="Descargar Modelos de IA">
    *Tiempo estimado: 10min a 1h, dependiendo de la velocidad de red y modelos.*

    **Antes de descargar Zylon**, debes descargar los modelos de IA en la máquina online. Los modelos están determinados por tu configuración de preset de IA.

    Verifica los modelos disponibles y compara con tu preset de IA:

    ```bash theme={null}
    sudo zylon-cli models list
    ```

    Más detalles de preset en la [documentación de Presets de IA](/es/operator-manual/ai-presets/presets).

    Descarga los modelos basados en tu configuración:

    ```bash theme={null}
    sudo zylon-cli models download --no-install
    ```

    Esto descargará los modelos de IA que has especificado en el Wizard.

    Si por alguna razón necesitas descargar modelos específicos, puedes hacerlo con:

    ```bash theme={null}
    sudo zylon-cli models list
    sudo zylon-cli models download --no-install model-a model-b model-c
    ```

    Por ejemplo, para el preset `baseline-48g`:

    ```bash theme={null}
    sudo zylon-cli models download --no-install qwen/qwen3-14b-awq mixedbread-ai/mxbai-embed-large-v1
    ```
  </Step>

  <Step title="Exportar Modelos de IA">
    *Tiempo estimado: 5 a 30 min, dependiendo del tamaño de los modelos.*

    Después de descargar los modelos, expórtalos para transferirlos a la máquina offline:

    ```bash theme={null}
    sudo zylon-cli models export
    ```

    Esto crea un archivo `zylon-models-<timestamp>.tar` en tu directorio actual conteniendo todos los modelos de IA seleccionados.

    <Note>
      El archivo de exportación de modelos puede ser de 10-100 GB dependiendo de qué modelos hayas descargado.
    </Note>
  </Step>

  <Step title="Descargar Bundle de Zylon">
    *Tiempo estimado: 15min a 2h, dependiendo de la velocidad de red.*

    Descarga la versión específica de Zylon que quieres instalar:

    ```bash theme={null}
    sudo zylon-cli list-versions
    # Elige tu versión deseada de la lista
    sudo zylon-cli download <version> --airgap
    ```

    Reemplaza `<version>` con tu versión objetivo (por ejemplo, `1.50.0`).

    <Note>
      Nota que **no usamos** la bandera `--models` aquí ya que los modelos fueron manejados en los pasos anteriores.
    </Note>
  </Step>

  <Step title="Exportar Bundle">
    *Tiempo estimado: 15 a 60 min, dependiendo de la versión.*

    Exporta la versión descargada en un bundle airgap:

    ```bash theme={null}
    sudo zylon-cli export <version>
    ```

    Esto crea `zylon-<version>-<os>-<arch>.tar` en tu directorio actual. Adicionalmente, generará
    los comandos para ejecutar en la máquina offline para la instalación para importar e instalar Zylon. Almacena estos comandos de forma segura.

    <Note>
      La exportación puede tomar tiempo significativo. El archivo tar resultante puede ser de 60-80GB.
    </Note>
  </Step>

  <Step title="Preparar Transferencia Inicial (Solo Primera Instalación)">
    <Warning>
      **¡Solo primera instalación!** Después de la configuración inicial, la CLI se auto-actualiza desde bundles airgap.
    </Warning>

    Crea un bundle con herramientas CLI y configuración:

    ```bash theme={null}
    sudo tar -czf zylon-initial.tar.gz \
      /usr/local/bin/zylon-cli \
      /usr/local/bin/zylon-forge-cli \
      /etc/zylon/zylon-conf.yaml
    ```
  </Step>

  <Step title="Preparar Certificados (Opcional)">
    *Tiempo estimado: 5 min*

    Si tu instancia de Zylon está en una red privada o VPN, necesitas proporcionar manualmente certificados SSL.
    Prepáralos para transferencia:

    Reúne tus archivos de certificado SSL:

    * `crt.pem` (Certificado + Intermedio)
    * `key.pem` (Clave Privada)

    Crea un tarball para transferencia:

    ```bash theme={null}
    sudo tar -czf zylon-ssl-certs.tar.gz crt.pem key.pem
    ```
  </Step>

  <Step title="Transferir Archivos">
    Transfiere archivos a la máquina offline usando tu método preferido (SCP, USB, unidad externa):

    **Primera instalación:**

    * `zylon-<version>-<os>-<arch>.tar` (bundle principal)
    * `zylon-models-<timestamp>.tar` (exportación de modelos de IA)
    * `zylon-initial.tar.gz` (CLI y config)
    * `zylon-ssl-certs.tar.gz` (certificados SSL, si aplica)

    **Actualizaciones subsecuentes:**

    * `zylon-<version>-<os>-<arch>.tar` (bundle principal)
    * `zylon-models-<timestamp>.tar` (exportación de modelos de IA, si se agregan nuevos modelos)

    **Ejemplo SCP**

    ```bash theme={null}
    scp zylon-<version>-<os>-<arch>.tar user@offline-machine:/tmp/
    scp zylon-models-*.tar user@offline-machine:/tmp/
    scp zylon-initial.tar.gz user@offline-machine:/tmp/
    scp zylon-ssl-certs.tar.gz user@offline-machine:/tmp/
    ```
  </Step>
</Steps>

***

### Parte B: Instalación de Máquina Offline

<Steps>
  <Step title="Instalar CLI (Solo Primera Vez)">
    *Tiempo estimado: 2 min*

    <Warning>
      **Omite si estás actualizando una instalación existente.** Esto es solo para instalaciones por primera vez.
    </Warning>

    Extrae herramientas CLI y configuración:

    ```bash theme={null}
    cd /tmp
    sudo tar -xzf zylon-initial.tar.gz -C /
    sudo chmod +x /usr/local/bin/zylon-cli /usr/local/bin/zylon-forge-cli
    ```

    Verifica la instalación:

    ```bash theme={null}
    sudo zylon-cli version
    cat /etc/zylon/zylon-conf.yaml
    ```

    <Note>
      Las actualizaciones futuras actualizan automáticamente la CLI desde bundles airgap—no se necesita transferencia manual.
    </Note>
  </Step>

  <Step title="Verificar requisitos mínimos de Zylon">
    Asegúrate de que tu máquina cumple con los [requisitos de hardware](/es/operator-manual/installation/hardware-requirements) para Zylon.

    Para validar automáticamente si tu instalación cumple con los requisitos mínimos, ejecuta:

    ```bash theme={null}
    sudo zylon-cli preflight --fresh-system -v
    ```

    Resuelve cualquier problema reportado antes de proceder con la instalación. No podrás continuar hasta que todas las comprobaciones previas pasen.
  </Step>

  <Step title="Importar Modelos de IA">
    *Tiempo estimado: 5 a 30 min, dependiendo del tamaño de los modelos.*

    **Antes de importar Zylon**, importa los modelos de IA que fueron exportados en la máquina online:

    ```bash theme={null}
    cd /tmp
    sudo zylon-cli models import zylon-models-<timestamp>.tar
    sudo zylon-cli models download --offline
    ```

    `models import` registra los artefactos del modelo localmente y `models download --offline` los instala en el runtime offline.

    Verifica que los modelos fueron instalados exitosamente:

    ```bash theme={null}
    sudo zylon-cli models list --installed
    ```
  </Step>

  <Step title="Importar Bundle Airgap">
    *Tiempo estimado: 10 a 60 min, dependiendo del tamaño del bundle y rendimiento del sistema.*

    Importa el bundle de Zylon:

    ```bash theme={null}
    cd /tmp
    sudo zylon-cli import zylon-<version>-<os>-<arch>.tar
    ```

    Este proceso:

    * Extrae todas las imágenes de contenedores
    * Instala dependencias offline
    * Prepara el sistema para la instalación

    <Warning>
      La importación puede tomar 30+ minutos dependiendo del tamaño del bundle y rendimiento del sistema. No interrumpas.
    </Warning>

    Verifica que la importación se completó exitosamente comprobando las versiones instaladas:

    ```bash theme={null}
    sudo zylon-cli list-versions --offline
    ```
  </Step>

  <Step title="Instalar Zylon">
    *Tiempo estimado: 15min a 1hora, dependiendo del rendimiento del sistema.*

    Instala Zylon usando el bundle importado:

    ```bash theme={null}
    sudo zylon-cli install <version> --airgap
    ```

    <Note>
      Los modelos de IA ya fueron importados en un paso anterior, por lo que no se necesita la bandera `--models` aquí.
    </Note>
  </Step>

  <Step title="Crear Organización">
    *Tiempo estimado: 5 min*

    Después de que Zylon esté instalado y en funcionamiento, crea tu organización y cuenta de administrador root.

    **Prepara la Información**

    Necesitarás:

    * **Nombre de organización**: El nombre de tu empresa o equipo (se puede cambiar más tarde)
    * **Regex de correo electrónico**: Patrón para permitir automáticamente que los usuarios se unan
      * Para correos `name@company.com`, usa: `.*@company\.com`
      * Para SSO (Microsoft Entra, Google), puedes usar: `.*`

    **Ejecuta el Comando Seed**

    ```bash theme={null}
    sudo zylon-cli seed \
      --org-name "Mi Organización" \
      --email-regex ".*@tuempresa\.com"
    ```

    El comando esperará si Zylon no está completamente listo.

    <Danger>
      **Ejecutar el comando seed BORRARÁ TODOS LOS DATOS.** Solo ejecútalo una vez durante la configuración inicial de Zylon.
    </Danger>

    **Credenciales de Inicio de Sesión**

    Después de hacer el seed, obtén la contraseña de un solo uso para la cuenta de administrador:

    ```bash theme={null}
    sudo zylon-cli admin-password
    ```

    Luego inicia sesión con:

    ```
    Usuario: admin@zylon.ai
    Contraseña: [la contraseña de un solo uso impresa arriba]
    ```

    El correo electrónico del administrador root siempre es `admin@zylon.ai` y no se puede cambiar.

    <Note>
      Después del primer inicio de sesión, puedes crear administradores adicionales y configurar la autenticación SSO.
    </Note>
  </Step>

  <Step title="Configurar Certificados SSL (Si aplica)">
    *Tiempo estimado: 10 min*

    Si preparaste certificados SSL en la máquina online, extráelos ahora:

    ```bash theme={null}
    cd /tmp
    sudo tar -xzf zylon-ssl-certs.tar.gz -C /tmp/
    ls /tmp/crt.pem /tmp/key.pem
    ```

    Si ves ambos archivos, procede a instalarlos como sigue:

    **Eliminar Generación Automática de Certificado**

    Edita `/etc/zylon/zylon-conf.yaml` y **elimina** estas líneas:

    ```yaml theme={null}
    certManagerAnnotations:
      cert-manager.io/cluster-issuer: "letsencrypt-prod"
    ```

    **Prepara los Archivos de Certificado**

    Kubernetes requiere que el certificado se divida en dos archivos:

    * `tls.crt` - El archivo de certificado
    * `tls.key` - El archivo de clave privada

    **Convertir desde PFX (si aplica):**

    Si tienes un archivo `.pfx`, conviértelo:

    ```bash theme={null}
    openssl pkcs12 -in <tu-certificado.pfx> -clcerts -nokeys -out tls.crt
    openssl pkcs12 -in <tu-certificado.pfx> -nocerts -out tls.key
    ```

    **Importar Certificado en Kubernetes**

    ```bash theme={null}
    # Elimina cualquier certificado existente
    sudo k0s kubectl delete secret tls zylon-tls --ignore-not-found -n zylon

    # Importa tu certificado
    sudo k0s kubectl create secret tls zylon-tls \
      --key tls.key \
      --cert tls.crt \
      -n zylon

    # Verifica la creación
    sudo k0s kubectl describe secret zylon-tls -n zylon
    ```

    **Aplicar Cambios**

    Recarga la configuración de Zylon:

    ```bash theme={null}
    sudo zylon-cli sync
    ```

    **Verificar**

    Accede a tu instancia de Zylon en `https://zylon.tu-empresa.com` y confirma:

    * La conexión usa HTTPS
    * El navegador muestra un certificado válido
    * No aparecen advertencias de certificado

    <Tip>
      La renovación del certificado debe hacerse manualmente repitiendo este proceso con archivos de certificado actualizados.
    </Tip>
  </Step>
</Steps>

***

## Actualizando Zylon

Las actualizaciones en entornos airgap siguen un flujo de trabajo similar de dos máquinas. El proceso es más rápido que la instalación inicial ya que solo estás transfiriendo cambios, no toda la plataforma.

<Note>
  **Tiempo Estimado**: 45-60 minutos total (15-20 min máquina online, 25-40 min máquina offline)
</Note>

<Steps>
  <Step title="En Máquina Online: Descargar Nuevos Modelos (Si Se Necesitan)">
    *Tiempo estimado: 10 a 60 min (solo si se agregan nuevos modelos)*

    **Omite este paso si no estás agregando nuevos modelos de IA.**

    Si estás cambiando presets de IA, actualizando requisitos de GPU, o necesitas modelos adicionales:

    Primero, verifica tus modelos actuales y disponibles:

    ```bash theme={null}
    sudo zylon-cli models list
    ```

    Descarga los nuevos modelos:

    ```bash theme={null}
    sudo zylon-cli models download --no-install new-model-a new-model-b
    ```

    <Info>
      Compara los modelos disponibles con los requisitos de tu preset de IA para determinar si se necesitan modelos adicionales. Consulta la [documentación de Presets de IA](/es/operator-manual/ai-presets/presets).
    </Info>
  </Step>

  <Step title="En Máquina Online: Exportar Nuevos Modelos (Si Aplica)">
    *Tiempo estimado: 5 a 30 min (solo si se descargaron nuevos modelos)*

    **Omite este paso si no agregaste nuevos modelos de IA.**

    Exporta los modelos recién descargados:

    ```bash theme={null}
    sudo zylon-cli models export
    ```

    Esto crea un archivo `zylon-models-<timestamp>.tar` conteniendo todos los modelos descargados actualmente.
  </Step>

  <Step title="En Máquina Online: Descargar Actualización">
    *Tiempo estimado: 10 a 60 min*

    Descarga el bundle de la nueva versión de Zylon:

    ```bash theme={null}
    sudo zylon-cli download <new-version> --airgap
    ```

    <Note>
      Nota que **ya no usamos** la bandera `--models` durante la descarga, ya que los modelos se manejan por separado.
    </Note>
  </Step>

  <Step title="En Máquina Online: Crear Bundle de Actualización">
    *Tiempo estimado: 10 a 60 min*

    Exporta un bundle de actualización incremental:

    ```bash theme={null}
    sudo zylon-cli export <new-version> --from <current-version>
    ```

    La bandera `--from` crea un bundle diferencial que contiene solo cambios entre versiones, reduciendo significativamente el tamaño del bundle y tiempo de transferencia.

    <Note>
      Los bundles diferenciales típicamente son 5-20 GB vs. 60-80 GB para bundles completos.
    </Note>
  </Step>

  <Step title="Transferir Bundle a Máquina Offline">
    Transfiere el/los archivo(s) bundle usando tu método seguro:

    **Si actualizaste modelos:**

    ```bash theme={null}
    scp zylon-<new-version>-to-<old-version>-<os>-<arch>.tar user@offline-machine:/tmp/
    scp zylon-models-*.tar user@offline-machine:/tmp/
    ```

    **Si no hay nuevos modelos:**

    ```bash theme={null}
    scp zylon-<new-version>-to-<old-version>-<os>-<arch>.tar user@offline-machine:/tmp/
    ```

    **Métodos alternativos:**

    * Unidad USB
    * Sistema de transferencia de archivos interno
    * Compartido de red (si está disponible)
  </Step>

  <Step title="En Máquina Offline: Importar Nuevos Modelos (Si Aplica)">
    *Tiempo estimado: 5 a 30 min (solo si se transfirieron nuevos modelos)*

    **Omite este paso si no transferiste nuevos modelos de IA.**

    Importa los nuevos modelos:

    ```bash theme={null}
    cd /tmp
    sudo zylon-cli models import zylon-models-*.tar
    sudo zylon-cli models download --offline
    ```

    Verifica que los modelos fueron instalados exitosamente:

    ```bash theme={null}
    sudo zylon-cli models list --installed
    ```
  </Step>

  <Step title="En Máquina Offline: Importar Actualización">
    Importa el bundle de actualización:

    ```bash theme={null}
    cd /tmp
    sudo zylon-cli import zylon-<new-version>-to-<old-version>-<os>-<arch>.tar
    ```

    El proceso de importación:

    * Extrae imágenes de contenedores para la nueva versión
    * Actualiza dependencias del sistema
    * Prepara artefactos de actualización

    <Warning>
      Esto puede tomar 10-30 minutos. No interrumpas el proceso.
    </Warning>

    Verifica que la importación se completó exitosamente comprobando las versiones instaladas:

    ```bash theme={null}
    sudo zylon-cli list-versions --offline
    ```
  </Step>

  <Step title="En Máquina Offline: Aplicar Actualización">
    *Tiempo estimado: 15 a 60 min*

    Aplica la actualización a tu instancia de Zylon en ejecución:

    ```bash theme={null}
    sudo zylon-cli install <new-version> --airgap
    ```

    <Note>
      Los nuevos modelos de IA (si los hay) ya fueron importados en un paso anterior, por lo que no se necesita la bandera `--models` aquí.
    </Note>
  </Step>
</Steps>

***

## Migrando a Airgap

Si tienes una instalación existente de Zylon (online o semi-airgap) y quieres migrarla a un entorno completamente airgap, sigue esta guía. Este proceso preserva tus datos, configuración y certificados SSL mientras realiza la transición a operación offline.

<Info>
  **La migración difiere de la instalación nueva:**

  * Tu configuración y datos existentes serán preservados
  * Los certificados SSL serán migrados
  * La organización y usuarios ya existen
</Info>

**Prerrequisitos de Migración:**

* [ ] Instalación existente de Zylon (online o semi-airgap) con acceso
* [ ] Máquina online con acceso a internet para descargar bundles de migración
* [ ] Método para transferir archivos (70-100 GB) entre máquinas
* [ ] Máquina airgap objetivo sin conexión a internet
* [ ] Acceso root y SSH a todas las máquinas involucradas

***

### Parte A: Extraer de la Máquina Zylon Existente

<Steps>
  <Step title="Extraer Configuración Actual">
    *Tiempo estimado: 5 min*

    Copia el archivo de configuración actual de Zylon:

    ```bash theme={null}
    # En la máquina Zylon existente
    sudo cp /etc/zylon/zylon-conf.yaml /tmp/zylon-conf-backup.yaml
    ```
  </Step>

  <Step title="Extraer Certificados SSL">
    *Tiempo estimado: 5 min*

    Extrae los certificados SSL actuales de Kubernetes para evitar regeneración:

    ```bash theme={null}
    # Extraer certificado del secreto de Kubernetes
    sudo k0s kubectl get secret zylon-tls -n zylon -o jsonpath='{.data.tls\.crt}' | base64 -d > /tmp/tls.crt
    sudo k0s kubectl get secret zylon-tls -n zylon -o jsonpath='{.data.tls\.key}' | base64 -d > /tmp/tls.key

    # Verificar que los archivos fueron creados
    ls -lh /tmp/tls.crt /tmp/tls.key
    ```

    <Note>
      Si la extracción del certificado falla, significa que estás usando la generación automática de Let's Encrypt. En este caso, necesitarás proporcionar tus propios certificados o continuar usando Let's Encrypt en la máquina airgap (no recomendado para entornos airgap).
    </Note>
  </Step>

  <Step title="Transferir Archivos a Máquina Online">
    Transfiere la configuración y certificados a tu máquina online:

    **Ejemplo SCP:**

    ```bash theme={null}
    # Desde la máquina Zylon existente a la máquina online
    scp /tmp/zylon-conf-backup.yaml user@online-machine:/tmp/
    scp /tmp/tls.crt user@online-machine:/tmp/
    scp /tmp/tls.key user@online-machine:/tmp/
    ```

    **Métodos alternativos:**

    * Unidad USB
    * Transferencia de archivos interna segura
    * Compartido de red
  </Step>
</Steps>

***

### Parte B: Preparar bundle en Máquina Online

<Steps>
  <Step title="Instalar Zylon CLI">
    *Tiempo estimado: 2 min*

    La CLI de Zylon acelerará el tiempo necesario para tener todo listo, se encargará de instalar controladores, actualizar Zylon y configurar el sistema.
    Para instalarla, conéctate por SSH a la máquina donde quieres instalar Zylon y ejecuta:

    ```bash theme={null}
    # ssh <user>@<host-ip>
    sudo curl -sL get.zylon.ai | sh
    ```

    Verifica la instalación:

    ```bash theme={null}
    sudo zylon-cli version
    ```

    <Note>
      Se requiere acceso root para las operaciones de la CLI, ya que gestiona dependencias y configuraciones a nivel de sistema.
    </Note>
  </Step>

  <Step title="Transferir Archivo de Configuración">
    *Tiempo estimado: 2 min*

    Coloca la configuración respaldada en la ubicación correcta:

    ```bash theme={null}
    sudo mkdir -p /etc/zylon
    sudo cp /tmp/zylon-conf-backup.yaml /etc/zylon/zylon-conf.yaml
    ```
  </Step>

  <Step title="Reconfigurar para Airgap">
    *Tiempo estimado: 10 min*

    Ejecuta el asistente de configuración para actualizar los ajustes para despliegue airgap:

    ```bash theme={null}
    sudo zylon-cli config init
    ```

    El asistente te guiará a través de la actualización de los siguientes ajustes:

    **Cambios Potencialmente Requeridos:**

    1. **Tipo de Instalación**: Cambia desde tu tipo actual (online/semi-airgap) a **Airgap**

    2. **Certificados SSL**: El asistente solicitará certificados en formato de texto:

    * Pega el contenido de `/tmp/tls.crt` cuando se solicite el certificado
    * Pega el contenido de `/tmp/tls.key` cuando se solicite la clave privada

    <Accordion title="Cómo ver el Contenido del Certificado:">
      ```bash theme={null}
      # Mostrar certificado (copia esta salida)
      cat /tmp/tls.crt

      # Mostrar clave privada (copia esta salida)
      cat /tmp/tls.key
      ```
    </Accordion>

    <Warning>
      Al pegar certificados en el asistente:

      * Incluye el contenido completo incluyendo los encabezados `-----BEGIN CERTIFICATE-----` y `-----END CERTIFICATE-----`
      * Mantén los saltos de línea y formato adecuados
      * No agregues espacios o caracteres extra
    </Warning>

    3. **Información de Licencia** (si cambias de canal):

       * Email de Licencia: Proporcionado por el equipo de Zylon
       * ID de Licencia: Proporcionado por el equipo de Zylon
       * Datos de Licencia: Token de licencia completo proporcionado por el equipo de Zylon

           <Warning>
             Asegúrate de que los datos de licencia se copien exactamente como se proporcionan, preservando el formato y los saltos de línea.
           </Warning>

    4. **Canal** (si aplica):
       * Cambia de `stable` a `X` (o según las instrucciones de Zylon)

    5. **Revisar Todos los Otros Ajustes**: El asistente mostrará los valores actuales—confirma o actualiza según sea necesario

    **Verificar Configuración Actualizada:**

    ```bash theme={null}
    sudo cat /etc/zylon/zylon-conf.yaml
    ```

    Confirma que todo esté configurado correctamente para operación AirGap.
  </Step>

  <Step title="Descargar Bundle de Migración">
    *Tiempo estimado: 15 min a 1 hora*

    Descarga el bundle de versión de Zylon (sin modelos de IA, ya que ya existen):

    ```bash theme={null}
    sudo zylon-cli list-versions
    # Elige tu versión objetivo
    sudo zylon-cli download <version> --airgap
    ```

    <Note>
      **No** estamos incluyendo la bandera `--models` porque:

      * Los modelos de IA existentes de tu instalación actual serán preservados
      * Si necesitas agregar nuevos modelos, inclúyelos con `--models=model-a,model-b`. Más información en la guía de instalación nueva arriba.
    </Note>
  </Step>

  <Step title="Exportar Bundle de Migración">
    *Tiempo estimado: 15 a 60 min*

    Exporta el bundle de migración:

    ```bash theme={null}
    sudo zylon-cli export <version>
    ```

    Esto crea `zylon-<version>-<os>-<arch>.tar` en tu directorio actual.
  </Step>

  <Step title="Preparar Paquete de Migración">
    *Tiempo estimado: 5 min*

    Crea un paquete de migración completo con herramientas CLI y configuración:

    ```bash theme={null}
    sudo tar -czf zylon-migration.tar.gz \
      /usr/local/bin/zylon-cli \
      /usr/local/bin/zylon-forge-cli \
      /etc/zylon/zylon-conf.yaml
    ```
  </Step>

  <Step title="Transferir Archivos a Máquina Airgap">
    Transfiere el paquete de migración a tu máquina airgap:

    **Archivos a transferir:**

    * `zylon-<version>-<os>-<arch>.tar` (bundle principal)
    * `zylon-migration.tar.gz` (CLI y configuración actualizada)

    **Ejemplo SCP:**

    ```bash theme={null}
    scp zylon-<version>-<os>-<arch>.tar user@airgap-machine:/tmp/
    scp zylon-migration.tar.gz user@airgap-machine:/tmp/
    ```
  </Step>
</Steps>

***

### Parte C: Migrar a Airgap en Máquina Offline

<Steps>
  <Step title="Extraer Paquete de Migración">
    *Tiempo estimado: 2 min*

    Extrae las herramientas CLI y configuración:

    ```bash theme={null}
    cd /tmp
    sudo tar -xzf zylon-migration.tar.gz -C /
    sudo chmod +x /usr/local/bin/zylon-cli /usr/local/bin/zylon-forge-cli
    ```

    Verificar extracción:

    ```bash theme={null}
    sudo zylon-cli version
    cat /etc/zylon/zylon-conf.yaml
    ```

    Debería mostrar:

    ```yaml theme={null}
    airgap:
      offlineInstall: true
      offlineOperation: true
    ```
  </Step>

  <Step title="Verificar Requisitos del Sistema">
    Asegúrate de que la máquina airgap cumple con todos los requisitos:

    ```bash theme={null}
    sudo zylon-cli preflight -v
    ```

    Resuelve cualquier problema antes de proceder.
  </Step>

  <Step title="Importar Bundle de Migración">
    *Tiempo estimado: 10 a 60 min*

    Importa el bundle de Zylon:

    ```bash theme={null}
    cd /tmp
    sudo zylon-cli import zylon-<version>-<os>-<arch>.tar
    ```

    Este proceso:

    * Extrae todas las imágenes de contenedores
    * Instala dependencias offline
    * Prepara el sistema para la instalación

    <Warning>
      La importación puede tomar 30+ minutos. No interrumpas el proceso.
    </Warning>

    Verificar finalización de importación:

    ```bash theme={null}
    sudo zylon-cli list-versions --offline
    ```
  </Step>

  <Step title="Instalar Zylon en Modo Airgap">
    *Tiempo estimado: 15 min a 1 hora*

    Instala Zylon usando el bundle importado:

    ```bash theme={null}
    sudo zylon-cli install <version> --airgap
    ```
  </Step>
</Steps>

***

## Próximos Pasos

Después de completar la instalación, considera los siguientes próximos pasos para optimizar tu despliegue de Zylon:

* [Configurar Presets de IA](/es/operator-manual/ai-presets) para optimizar según tu hardware
* [Configurar Copias de Seguridad](/es/operator-manual/operations/backup) para protección de datos
* [Revisar Manual de Usuario](/es/user-manual/quick-start-guide) para comenzar
