Ir al contenido

Referencia de configuración

La configuración es deliberadamente un archivo de texto simple y legible, no una base de datos. Se puede copiar con cp, comparar con la copia de la semana pasada, versionar en un sistema de control de versiones y editar a mano por SSH cuando la interfaz web no está accesible, que es justo cuando más necesita cambiar algo. No hay ningún almacén de estado aparte que mantener sincronizado con él.

Castmux reescribe el archivo cada vez que se hace un cambio en la interfaz web, de modo que las ediciones a mano y las ediciones desde la interfaz son la misma operación sobre el mismo archivo. Editar a mano con el servicio en marcha supone el riesgo de que la siguiente acción en la interfaz sobrescriba su cambio; detenga el servicio, edite y vuelva a arrancarlo.

Al actualizar, las claves añadidas por una versión más reciente se rellenan automáticamente con sus valores por defecto, así que un archivo antiguo sigue funcionando. Antes de cambiar nada se escribe una copia .pre-migration del original, que es el archivo que debe restaurar si una migración resulta no ser de su agrado.

—config

Ruta al archivo de configuración. Por defecto, config.yaml en el directorio de trabajo. Los despliegues en contenedor pasan una ruta explícita dentro de un volumen montado, normalmente /config/config.yaml.

—port

Puerto TCP de la interfaz web y de la API HTTP. Por defecto, 8080. La API no está en un puerto aparte; hay un único listener.

-debug

Registro detallado, incluidas las líneas de comandos completas de los motores y el detalle de cada reinicio. Útil para diagnosticar un canal que no arranca. Genera mucho ruido; no lo deje activado permanentemente en un equipo con una partición de registros pequeña.

CASTMUX_WEB_USERNAME

Nombre de usuario para la interfaz web y la API.

CASTMUX_WEB_PASSWORD

Contraseña para la interfaz web y la API.

Un archivo funcional para una instalación pequeña: dos canales, uno de HLS y otro de SRT, ambos transportados en un múltiplex DVB-C además de en multicast.

/config/config.yaml
global:
default_engine: tsduck # pass-through unless a channel overrides it
udp_device: 192.168.10.4 # source address, NOT the egress interface
startup_stagger_seconds: 3
hls_live_start_index: -1
on_demand_enabled: true
on_demand_fail_open: true # viewer detection broken => keep streaming
igmp_active_query: true
igmp_grace_seconds: 90
igmp_linger_seconds: 30
igmp_query_interval_seconds: 30
igmp_interfaces:
- eth0
- eth1
enable_dummy_listeners: true
overwrite_srt_latency: true
overwrite_pkt_size: true
ping_hosts:
- 192.168.10.1 # the site gateway
- origin.example.net # the content provider
location_name: Seaview Court
re_seller: Northern AV
ts_monitoring: true
ts_pcr_jitter_max_ms: 200
licence:
identity_dir: /config/identity # must be on a persistent volume
site_ref: seaview-court
streams:
- id: 1
name: Example One # also the DVB service name and metric label
description: Main lounge line-up
active: true
source:
type: hls
url: https://origin.example.net/one/master.m3u8
destination:
address: 239.10.0.1
port: 5000
force_always_on: false # on-demand: runs when somebody joins
engine: tsduck
epg_id: example-one.uk # the channel's id in the XMLTV guide
resolution_profile: hd # closest rung wins; not an exact-match filter
min_output_kbps: 500
pdt_shift_ms: 0 # 0 disables the PDT drift restart
- id: 2
name: Example Two
description: Contribution feed from the studio
active: true
source:
type: srt
url: srt://feed.example.net:9001?streamid=two
destination:
address: 239.10.0.2
port: 5000
force_always_on: true # always on air, viewers or not
engine: tsduck
resolution_profile: "" # SRT has no ladder; nothing to select
min_output_kbps: 500
dvb_muxes:
- id: 1
name: Mux A
device: 0 # modulator device index
frequency: 474000000 # Hz, not MHz
qam: 256
symbol_rate: 6900
network_id: 1
ts_id: 1
network_name: Seaview Court
active: true
channel_ids: [1, 2] # order decides slot, PID block, service ID

Todo lo que está bajo global se aplica a todos los canales salvo que el canal lo anule. Un cambio hecho desde la interfaz web se aplica a los canales en marcha sin reiniciarlos, así que son ajustes en vivo, no de arranque.

ClavePor defectoFinalidad
Motores y salida
default_enginetsduckQué motor usan los canales que no indican uno propio. El motor pass-through conserva los PID originales, las pistas de audio y los descriptores de idioma; el motor de remultiplexado los reescribe, algo que exigen algunos equipos aguas abajo. Consulte Motores de emisión.
udp_devicevacíoDirección de origen para el UDP saliente. Tenga muy en cuenta que esto vincula la dirección de origen y no elige la interfaz de salida: el kernel sigue consultando la tabla de rutas para decidir por qué puerto salen los paquetes. Si el multicast sale por la interfaz equivocada, corrija la ruta, no esto.
startup_stagger_seconds3Intervalo entre arranques de canales al iniciar. De lo contrario, todos los canales abren su fuente a la vez, y ocho arranques HLS simultáneos en un enlace de subida de 100 Mbit lo saturan durante la ráfaga inicial de segmentos, de modo que fallan los ocho en lugar de uno. Establezca 0 para desactivarlo si a su enlace de subida realmente no le afecta.
hls_live_start_index-1En qué segmento de la lista de reproducción en directo empezar, contado desde el directo. -1 es el último segmento. Más cerca del directo significa menos latencia y menos búfer para absorber el jitter del origen; más atrás es más tolerante y va más retrasado respecto al directo.
overwrite_pkt_sizetrueFuerza datagramas UDP completos de 1316 bytes en los canales HLS: siete paquetes de transporte por datagrama, que es lo que esperan los descodificadores. Si no se toca, algunas fuentes producen datagramas cortos y desperdician una parte apreciable del cable.
overwrite_srt_latencytrueCalcula el ajuste de latencia SRT a partir del tiempo de ida y vuelta medido hasta el emisor en lugar de usar una cifra fija. Una latencia fijada a mano que era correcta para un trayecto suele ser errónea en la siguiente instalación.
Bajo demanda e IGMP
on_demand_enabledtrueInterruptor general de la emisión guiada por espectadores. Desactivado, todos los canales marcados como activos funcionan de forma continua, independientemente de que alguien esté viendo.
on_demand_fail_opentrueMantiene los canales emitiendo cuando la detección de espectadores no está disponible: la captura no puede iniciarse, la interfaz desaparece, el vigilante se detiene. Déjelo activado. Con él desactivado, el modo de fallo es un edificio lleno de pantallas en negro causado por un componente de monitorización, lo cual es peor en todos los sentidos que desperdiciar un poco de ancho de banda.
igmp_active_querytrueEnvía nuestras propias consultas generales IGMP. Los clientes solo informan sin que se les pregunte en el momento de unirse y después permanecen en silencio hasta que se les pregunta, así que sin consultas un reinicio pierde todo conocimiento de los espectadores existentes. Desactívelo solo si el segmento ya tiene un querier real; dos queriers en un segmento es poco limpio, pero no fatal.
igmp_grace_seconds90Cuánto tiempo puede permanecer en silencio un espectador antes de darlo por ido. Debe superar con holgura igmp_query_interval_seconds; de lo contrario, un solo informe perdido expulsa a un espectador que sigue viendo.
igmp_linger_seconds30Cuánto tiempo sigue en marcha un canal después de que se vaya el último espectador. Es lo que hace soportable el zapeo: volver dentro de la ventana de permanencia es instantáneo en lugar de pagar un arranque en frío.
igmp_query_interval_seconds30Intervalo entre consultas generales. Más bajo significa detectar antes un televisor que se ha desenchufado, a costa de más tráfico de control.
igmp_interfacestodas las que tienen direcciónEn qué interfaces capturar la pertenencia. El valor por defecto cubre todas las interfaces que tienen una dirección configurada. Indíquelas explícitamente en una caja con varias NIC en la que solo una esté orientada a los televisores.
enable_dummy_listenerstrueMantiene un consumidor local unido a cada grupo. Sin él, los paquetes enviados a un grupo al que nadie se ha unido se acumulan en los búferes del socket y acaban provocando desbordamientos que parecen averías de la fuente.
Monitorización e identidad de la instalación
ts_monitoringtrueMide la calidad del transport stream de cada canal —tasa de bits y su dispersión, temporización de PCR, errores de transporte y de continuidad— para las gráficas por canal y las métricas exportadas. En un canal pass-through la medición se ejecuta dentro de la propia cadena de procesamiento del canal; en un canal de remultiplexado, un segundo proceso de solo lectura escucha el grupo multicast del canal, de modo que mide lo que realmente recibe un receptor. Ambos se limitan a observar y nunca alteran el flujo. Establezca false para ahorrar el pequeño consumo de CPU por canal en un equipo muy cargado.
ts_pcr_jitter_max_ms200Cuánto, en milisegundos, puede alejarse una referencia de reloj de programa de la temporización real de su paquete antes de contar como un evento de jitter de PCR. Es una tolerancia a ráfagas de entrega, no la cifra de precisión de MPEG-2: los orígenes SRT suelen entrelazar en ráfagas de unos 160 ms, y un relé que reempaqueta HLS entrega segmentos completos de una vez. 200 deja pasar el entrelazado normal y señala las ráfagas que el búfer de un receptor tendría realmente que absorber. Súbalo si un origen conocido por sus ráfagas llena la gráfica de eventos sobre los que nadie puede actuar.
ping_hostslista vacíaHosts adicionales para el monitor de accesibilidad, además de los que se derivan de la configuración. Las entradas útiles son la puerta de enlace de la instalación y el origen de los contenidos: cuando falla un canal, la primera pregunta es si la instalación perdió internet o si el proveedor perdió el canal, y esto la responde.
location_namevacíoLa instalación a la que da servicio este equipo, tal como usted la llamaría; se muestra como Location en Settings. Etiqueta las métricas exportadas para poder distinguir una flota de equipos en un mismo panel, se comunica al servidor de licencias como nombre de la instalación y es el nombre de red DVB-C que muestran los descodificadores salvo que se configure otro explícitamente. Esta clave se llamaba antes hotel_name; un archivo antiguo se migra automáticamente al cargarse.
re_sellervacíoEl socio o instalador responsable de la instalación. También es una etiqueta de métricas, para filtrar un panel hasta el parque de un distribuidor concreto.

Estas claves contienen cadenas de argumentos en bruto que se entregan a los programas subyacentes: FFmpeg para los canales de remultiplexado, TSDuck para los canales pass-through y mpv para la salida HDMI. Deliberadamente no están en la interfaz web. Pueden cambiarse editando el archivo o mediante PUT /api/settings, y guardar cualquiera de ellas reinicia todos los canales activos.

El motivo de mantenerlas fuera de la interfaz es el alcance de los daños. Cada cadena se aplica a todos los canales que usan ese motor. Un motor que no arranca por un solo argumento mal formado deja fuera de antena toda la parrilla a la vez, no un canal. Un campo capaz de hacerle eso a un edificio no debe estar a una pulsación de un operador que intenta renombrar un canal.

ClavePor defectoFinalidad
ffmpeg_paramsvalor suministradoOpciones situadas al principio de la línea de comandos de FFmpeg de cada canal de remultiplexado, antes de la entrada: reparación de marcas de tiempo, tamaño de sondeo y búferes. El valor suministrado está ajustado para orígenes HLS; su tamaño de sondeo de 15 MB es la razón de que exista startup_stagger_seconds. Si la clave está vacía, se usa en su lugar un mínimo -fflags +genpts -rw_timeout 10000000.
ffmpeg_udp_paramsvalor suministradoCadena de consulta que se añade a la URL de salida udp:// de cada canal de remultiplexado: TTL, tamaño de datagrama, búferes de socket y de FIFO. Dos partes se comparten o se anulan. El ttl de aquí también lo usan los canales pass-through, de modo que ambos motores ponen el mismo TTL en el cable. Y con overwrite_pkt_size activado, se elimina cualquier pkt_size de los canales HLS, porque la aplicación fija por sí misma el tamaño del datagrama.
ffmpeg_preview_paramsvalor suministradoOpciones adicionales para el proceso FFmpeg de la vista previa del navegador, insertadas antes de su entrada. Solo afectan a las vistas previas, nunca a lo que sale por el cable.
tsduck_paramsvacíoOpciones y plugins adicionales de tsp, que se añaden a cada canal pass-through después del procesamiento integrado y antes de la medición de calidad y de la salida. Dos pasos integrados le ceden el sitio: si nombra el plugin svrename o sdt, se omite el nombrado automático del servicio DVB en lugar de duplicarlo; y si elige por sí mismo un nivel HLS (por ejemplo --lowest-bitrate), no se añade la selección por defecto de la tasa de bits más alta, porque tsp rechaza dos selectores.
mpv_paramsvalor suministradoOpciones adicionales para el reproductor de la salida HDMI, añadidas tras las opciones de pantalla y audio elegidas en la página HDMI. mpv respeta la última aparición de una opción, así que una opción aquí anula el desplegable correspondiente. El valor suministrado nombra un contexto de pantalla y una tarjeta de audio concretos; en hardware distinto de aquel para el que se escribió, elimine esas opciones y use en su lugar las selecciones de la página HDMI.

El bloque hdmi_stream bajo global configura la salida HDMI. Todo lo que contiene se configura desde la página HDMI.

ClavePor defectoFinalidad
hdmi_stream.namevacíoEtiqueta de la salida en la pantalla de estado y en los registros.
hdmi_stream.stream_idningunoEl id del canal que se reproduce. El reproductor se une al grupo multicast de ese canal, usando la dirección udp_device si se ha configurado. 0, o el id de un canal eliminado, deja la salida sin nada que reproducir, y el registro indica cuál de los dos casos es.
hdmi_stream.activefalseInicia y detiene la reproducción.
hdmi_stream.voel del reproductorLa salida de vídeo del reproductor, como gpu, gpu-next o drm. A las dos salidas gpu se les asigna automáticamente un contexto DRM/KMS, ya que un equipo no tiene escritorio en el que dibujar.
hdmi_stream.drm_deviceel del reproductorEl dispositivo de pantalla, como una ruta del tipo /dev/dri/card0. Necesario en hardware con más de un controlador de pantalla, donde el valor por defecto puede ser el conector equivocado.
hdmi_stream.audio_deviceel del reproductorEl dispositivo de salida de audio, o none para una imagen sin sonido. Los nombres de los dispositivos de audio difieren de una placa a otra, así que un valor copiado de otro equipo es el motivo habitual de que el reproductor no arranque.

El bloque licence bajo global configura cómo se identifica el equipo ante el servidor de licencias. La dirección del servidor y su clave de firma están integradas en la versión y no son ajustes. server_url o token_public_key en este bloque se aceptan pero se ignoran, y al arrancar se registra un aviso que lo indica.

ClavePor defectoFinalidad
licence.identity_dir/config/identityDónde guarda el equipo su clave de dispositivo, su certificado y el último estado de la licencia. Debe estar en almacenamiento persistente. Sin él, cada vez que se recrea el contenedor se genera una identidad nueva, que el servidor de licencias ve como un dispositivo nuevo sin aprobar, y la emisión queda bloqueada hasta que se vuelva a aprobar.
licence.enroll_keyvacíoClave de alta precompartida opcional, suministrada con un lote de equipos. Trátela como una contraseña: nunca se escribe en los registros, pero puede leerla cualquiera que pueda leer este archivo.
licence.site_refvacíoUna referencia de texto libre, como un número de pedido o de instalación, que se envía en el alta para ayudar a reconocer el equipo al aprobarlo. Es una pista para personas, no una credencial.
licence.agent_versionla versión en ejecuciónLa versión de software que se comunica al servidor de licencias. No la configure.

Cada entrada bajo streams es un canal: una fuente, un destino y un conjunto de reglas de supervisión.

ClavePor defectoFinalidad
Identidad
idasignadoIdentificador numérico, único dentro del archivo. Es el identificador que se usa en las rutas de la API y en channel_ids de un múltiplex. Los identificadores se reutilizan tras una eliminación, así que no trate uno como referencia permanente para un sistema externo.
nameobligatorioNombre visible. No es estético: también se convierte en el nombre del servicio DVB que se muestra en la lista de canales del televisor y en la etiqueta asociada a las métricas exportadas de este canal. Renombrar un canal cambia lo que ven los espectadores y aquello por lo que agrupa su panel.
descriptionvacíoTexto libre para el operador. No se transmite a ninguna parte.
epg_idvacíoEl identificador de este canal en la guía de programación XMLTV: el id de canal propio de la guía, normalmente algo como rtl.de. Se configura en la página EPG, y es lo que hace que una sincronización de la guía almacene programas para este canal. Vacío significa que el canal no tiene datos de guía. Consulte Guía de programación (EPG).
managed_byvacíoQuién es el propietario del canal. Vacío significa que lo añadió un operador, y nada más lo modifica nunca. licence significa que lo suministró el servidor de licencias: puede sustituir la fuente y el destino del canal en cada actualización, así que la interfaz web no permite editarlo ni eliminarlo. No establezca licence a mano en un canal que haya creado usted: la siguiente actualización puede sobrescribirlo.
activetrueSi el canal está configurado para funcionar siquiera. Un canal inactivo se conserva en el archivo pero nunca se arranca; así es como se retira un canal sin perder sus ajustes.
Fuente
source.typehlsUno de hls, srt, rtmp o mpegts. mpegts es un transport stream simple, por UDP (udp://group:port) o HTTP (http(s)://…); consulte Fuentes MPEG-TS. El tipo determina algo más que la descarga: solo HLS tiene escalera, así que los perfiles de resolución solo se aplican a HLS.
source.urlobligatorioLa URL del origen. Para HLS debería ser normalmente la lista de reproducción maestra, no una variante: entregue a Castmux la escalera y deje que elija el perfil de resolución, para que el canal sobreviva a que el origen reorganice sus niveles.
Destino
destination.addressobligatorioDestino IPv4. Utilice el rango multicast de ámbito administrativo 239.0.0.0/8 para la distribución dentro de un edificio. Se admite unicast para enlaces punto a punto.
destination.portobligatorioPuerto UDP de destino. Grupos distintos pueden compartir puerto; el mismo grupo y puerto usados por dos canales es un emisor duplicado y produce imágenes imposibles de ver en ambos.
Comportamiento
force_always_onfalseEjecuta este canal de forma continua, sin tener en cuenta la detección de espectadores. Úselo para un canal que deba estar disponible al instante, o para uno transportado en un múltiplex DVB-C, donde de entrada no hay pertenencia IGMP que observar.
engineheredadoAnula default_engine para este canal. El motivo habitual es una fuente que el motor pass-through no puede leer, o un equipo aguas abajo que exige salida remultiplexada.
resolution_profilevacíoUno de 4k, fullhd, hd, sd, mobile, o vacío para la elección propia del origen. La selección da la victoria a la altura más próxima, y los empates se resuelven a favor de la tasa de bits más alta: un canal que emite 480p cuando nadie publica 576p es mejor que un canal que se niega a arrancar. La elección se aplica en cada arranque y nunca se escribe de vuelta en este archivo. Consulte Perfiles de resolución.
Supervisión: solo en el archivo de configuración
min_output_kbps500El umbral por debajo del cual se considera que este canal no está produciendo, y se reinicia. Rebájelo para la radio y otros servicios solo de audio: un canal de radio de 128 kbps medido frente a un umbral pensado para vídeo se considera permanentemente silencioso y se reinicia en bucle. No está disponible en la interfaz web.
pdt_shift_ms0Umbral de reinicio por deriva de program-date-time, en milisegundos: si la línea temporal declarada por la fuente salta más de esto, el canal se reinicia en lugar de dejarlo funcionar con un reloj roto. 0 desactiva la comprobación, que es el valor por defecto porque, de lo contrario, un origen que vuelve a marcar el tiempo legítimamente provocaría reinicios. No está disponible en la interfaz web.

Cada entrada bajo dvb_muxes es una portadora de RF: un conjunto de canales agrupados en un único transport stream y modulados sobre la red coaxial. Consulte Multiplexación DVB-C para saber cómo elegir los parámetros de RF.

ClaveValorFinalidad
Identidad
idasignadoIdentificador numérico del múltiplex, usado en las rutas de la API.
nameobligatorioEtiqueta del múltiplex para el operador. No se transmite.
deviceíndice o rutaEn qué hardware modulador se transmite este múltiplex, identificado por índice o por ruta de dispositivo según la tarjeta instalada. Un múltiplex por dispositivo.
Parámetros de RF
frequencyHzFrecuencia central de la portadora, en hercios, no en megahercios. 474000000, no 474. Debe ajustarse al plan de la red de cable existente del edificio y no debe coincidir con una portadora ya presente en ella.
qam16 / 32 / 64 / 128 / 256Orden de modulación. Uno más alto transporta más tasa de bits en los mismos 8 MHz y tolera menos ruido. En un coaxial interior en buen estado, 256-QAM es lo normal; bájelo si el cableado es antiguo, está muy repartido o es de calidad desconocida.
symbol_rateksym/sTasa de símbolos de la portadora. Junto con el orden de modulación, fija la tasa de bits total disponible para todos los servicios del múltiplex, así que es la cifra que decide cuántos canales caben.
Señalización
network_identeroIdentificador de red señalizado a los receptores. Manténgalo igual en todos los múltiplex de una misma instalación, para que los televisores los traten como una red y no como varias.
ts_identeroIdentificador del transport stream. Debe ser único entre los múltiplex de la instalación; los duplicados hacen que los televisores sobrescriban una parrilla con otra durante una búsqueda.
network_nametextoNombre de red señalizado a los receptores. Es el texto que ve un huésped durante la sintonización, así que normalmente es el nombre del edificio.
activetrueSi el múltiplex se transmite. Ponerlo a false detiene la portadora; los televisores mostrarán toda la parrilla como ausente, no un único canal caído.
Contenido
channel_idslista ordenadaLos canales transportados, por id. El orden es significativo. La posición en esta lista determina la posición del servicio, el bloque de PID que se le asigna y el identificador de servicio. Por tanto, reordenar la lista reidentifica los servicios, y los televisores que ya hayan hecho una búsqueda pueden necesitar resintonizarse para volver a coincidir con usted. Añada al final siempre que pueda.

Haga copia de seguridad de todo el directorio de configuración, no solo de config.yaml. Además de la configuración, contiene la identidad de licencia del equipo y sus datos de guía de programación:

En el directorioQué es
config.yamlLa configuración descrita en esta página.
config.yaml.pre-migrationEl archivo tal como estaba antes de que la última actualización lo modificara. El que debe restaurar si una migración no es de su agrado.
identity/La clave de dispositivo y el certificado del equipo para el servidor de licencias. Si los pierde, el equipo restaurado aparece ante el servidor de licencias como un dispositivo nuevo sin aprobar, y no emite hasta que se vuelva a aprobar.
epg.dbDatos de guía de programación almacenados. Pueden reconstruirse volviendo a sincronizar las fuentes de guía, así que es conveniente conservarlos, pero no imprescindible.

Las rutas dependen de a qué lado del contenedor esté. Con la instalación descrita en este manual, el directorio es /opt/castmux/config en el host, y el contenedor lo ve como /config. Así, el archivo de configuración es /opt/castmux/config/config.yaml desde una shell en el equipo y /config/config.yaml dentro del contenedor. Las copias de seguridad se hacen desde el host:

Terminal window
# on the appliance (host), as root: the files are owned by root
sudo cp -a /opt/castmux/config /backup/seaview-court-$(date +%F)

Copiar con el servicio en marcha normalmente no da problemas, porque config.yaml solo se reescribe cuando se guarda un ajuste. No guarde cambios en la interfaz web mientras se realiza la copia. Para una copia con coherencia garantizada, incluido epg.db en mitad de una sincronización de la guía, detenga antes el contenedor.

Para restaurar, detenga el contenedor, vuelva a colocar el directorio y arránquelo de nuevo. Sustituir archivos bajo un contenedor en marcha no funciona: el servicio en ejecución escribe su propia copia de config.yaml encima de la suya en el siguiente cambio.

Terminal window
# on the appliance (host)
sudo docker stop castmux
sudo rm -rf /opt/castmux/config
sudo cp -a /backup/seaview-court-2026-04-11 /opt/castmux/config
sudo docker start castmux

Con Docker Compose, use en su lugar sudo docker compose stop y sudo docker compose start en /opt/castmux. Si montó otro directorio del host, sustitúyalo por /opt/castmux/config en todo momento.

Como el archivo es YAML simple, el config.yaml de una copia de seguridad también sirve como punto de partida para una segunda instalación: cambie las direcciones, los nombres y los parámetros de RF, y el resto se mantiene. Para esto copie solo config.yaml, nunca identity/. Dos equipos con la misma identidad son el mismo dispositivo para el servidor de licencias. Hoy es un proceso manual.

La exportación e importación con un clic desde la interfaz web, y el clonado de una configuración en una flota de instalaciones, están previstos.