Référence de configuration
Le fichier
Section titled “Le fichier”La configuration est volontairement un simple fichier texte lisible plutôt qu’une base de données. On peut la sauvegarder avec cp, la comparer à la copie de la semaine dernière, la versionner et la modifier à la main via SSH lorsque l’interface web est injoignable — c’est-à-dire précisément quand vous avez le plus besoin de changer quelque chose. Il n’existe aucun stockage d’état séparé à maintenir synchronisé avec elle.
Castmux réécrit le fichier à chaque modification faite dans l’interface web ; une modification manuelle et une modification via l’interface sont donc la même opération sur le même fichier. Modifier le fichier à la main pendant que le service tourne expose votre changement à être écrasé par la prochaine action dans l’interface : arrêtez le service, modifiez, puis redémarrez-le.
Lors d’une mise à jour, les clés ajoutées par une version plus récente sont automatiquement complétées avec leurs valeurs par défaut, de sorte qu’un fichier plus ancien continue de fonctionner. Une copie .pre-migration de l’original est écrite avant toute modification : c’est le fichier à restaurer si une migration ne vous convient pas.
Options de ligne de commande
Section titled “Options de ligne de commande”—config
Chemin du fichier de configuration. Vaut par défaut config.yaml dans le répertoire de travail. Les déploiements en conteneur passent un chemin explicite vers un volume monté, normalement /config/config.yaml.
—port
Port TCP de l’interface web et de l’API HTTP. Vaut 8080 par défaut. L’API n’est pas sur un port séparé : il n’y a qu’un seul point d’écoute.
-debug
Journalisation détaillée, y compris les lignes de commande complètes des moteurs et le détail de chaque redémarrage. Utile pour diagnostiquer une chaîne qui refuse de démarrer. Elle est bavarde : ne la laissez pas activée en permanence sur un appareil dont la partition de journaux est petite.
Variables d’environnement
Section titled “Variables d’environnement”CASTMUX_WEB_USERNAME
Nom d’utilisateur de l’interface web et de l’API.
CASTMUX_WEB_PASSWORD
Mot de passe de l’interface web et de l’API.
Un exemple complet commenté
Section titled “Un exemple complet commenté”Un fichier fonctionnel pour un petit site : deux chaînes, l’une en HLS et l’autre en SRT, toutes deux transportées sur un multiplex DVB-C ainsi qu’en multicast.
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 IDRéglages globaux
Section titled “Réglages globaux”Tout ce qui se trouve sous global s’applique à chaque chaîne, sauf si la chaîne le redéfinit. Une modification faite via l’interface web est appliquée aux chaînes en cours sans redémarrage : ce sont des réglages actifs à chaud, pas des réglages de démarrage.
| Clé | Défaut | Rôle |
|---|---|---|
| Moteurs et sortie | ||
| default_engine | tsduck | Le moteur utilisé par les chaînes qui n'en désignent pas elles-mêmes. Le moteur pass-through conserve les PID, pistes audio et descripteurs de langue d'origine ; le moteur de remultiplexage les réécrit, ce qu'exigent certains équipements en aval. Voir Moteurs de diffusion. |
| udp_device | vide | Adresse source de l'UDP sortant. Notez bien que ce réglage lie l'adresse source et ne choisit pas l'interface de sortie : le noyau consulte toujours la table de routage pour décider par quel port les paquets sortent. Si le multicast sort par la mauvaise interface, corrigez la route, pas ce réglage. |
| startup_stagger_seconds | 3 | Intervalle entre les démarrages de chaînes au boot. Sans lui, toutes les chaînes ouvrent leur source en même temps, et huit démarrages HLS simultanés sur une liaison montante de 100 Mbit la saturent pendant la rafale initiale de segments : les huit échouent au lieu d'une seule. Mettez 0 pour désactiver si votre liaison montante n'y est réellement pas sensible. |
| hls_live_start_index | -1 | Le segment de la playlist en direct par lequel commencer, compté depuis le direct. -1 est le dernier segment. Plus près du direct signifie moins de latence et moins de tampon pour absorber la gigue du serveur d'origine ; plus en arrière est plus tolérant mais plus en retard sur le direct. |
| overwrite_pkt_size | true | Force des datagrammes UDP complets de 1316 octets sur les chaînes HLS — sept paquets transport par datagramme, ce qu'attendent les décodeurs. Sans ce réglage, certaines sources produisent des datagrammes courts et gaspillent une part notable de la bande passante. |
| overwrite_srt_latency | true | Déduit la latence SRT du temps d'aller-retour mesuré vers l'émetteur au lieu d'utiliser une valeur fixe. Une latence réglée à la main, juste pour un trajet, est généralement fausse sur le site suivant. |
| À la demande et IGMP | ||
| on_demand_enabled | true | Interrupteur général de la diffusion pilotée par les spectateurs. Désactivé, chaque chaîne marquée active tourne en continu, que quelqu'un regarde ou non. |
| on_demand_fail_open | true | Maintient la diffusion des chaînes lorsque la détection des spectateurs est indisponible — la capture ne démarre pas, l'interface disparaît, le processus de surveillance meurt. Laissez-le activé. Désactivé, le mode de défaillance est un bâtiment entier d'écrans noirs causé par un composant de supervision, ce qui est pire à tous égards qu'un peu de bande passante gaspillée. |
| igmp_active_query | true | Envoie nos propres requêtes générales IGMP. Les clients ne se signalent spontanément qu'au moment où ils rejoignent un groupe, puis restent silencieux jusqu'à ce qu'on les interroge ; sans requêtes, un redémarrage fait donc perdre toute connaissance des spectateurs existants. Ne désactivez ce réglage que si le segment dispose déjà d'un vrai querier ; deux queriers sur un même segment, c'est peu élégant mais pas fatal. |
| igmp_grace_seconds | 90 | Durée pendant laquelle un spectateur peut rester silencieux avant d'être considéré comme parti. Doit dépasser nettement igmp_query_interval_seconds, faute de quoi un seul rapport perdu évince un spectateur qui regarde toujours. |
| igmp_linger_seconds | 30 | Durée pendant laquelle une chaîne continue de tourner après le départ du dernier spectateur. C'est ce qui rend le zapping supportable : revenir pendant cette fenêtre est instantané au lieu de subir un démarrage à froid. |
| igmp_query_interval_seconds | 30 | Intervalle entre les requêtes générales. Plus court, il permet de détecter plus vite un téléviseur éteint à la prise, au prix de davantage de trafic de contrôle. |
| igmp_interfaces | toutes celles qui ont une adresse | Les interfaces sur lesquelles capturer les abonnements. Par défaut, toutes les interfaces ayant une adresse configurée. Nommez-les explicitement sur une machine à plusieurs cartes réseau dont une seule fait face aux téléviseurs. |
| enable_dummy_listeners | true | Maintient un consommateur local attaché à chaque groupe. Sans lui, les paquets envoyés vers un groupe que personne n'a rejoint s'accumulent dans les tampons de socket et finissent par provoquer des débordements qui ressemblent à des défauts de source. |
| Supervision et identité du site | ||
| ts_monitoring | true | Mesure la qualité du transport stream de chaque chaîne — débit et sa dispersion, timing PCR, erreurs de transport et de continuité — pour les graphiques par chaîne et les métriques exportées. Sur une chaîne pass-through, la mesure s'effectue dans le pipeline même de la chaîne ; sur une chaîne en remultiplexage, un second processus en lecture seule écoute le groupe multicast de la chaîne, et mesure donc ce que reçoit réellement un récepteur. Dans les deux cas, on se contente d'observer, sans jamais modifier le flux. Mettez false pour économiser le faible coût CPU par chaîne sur un appareil très chargé. |
| ts_pcr_jitter_max_ms | 200 | L'écart maximal, en millisecondes, entre une référence d'horloge de programme et le timing réel de son paquet avant que cela compte comme un événement de gigue PCR. Il s'agit d'une tolérance aux rafales de livraison, pas du chiffre de précision MPEG-2 : les serveurs d'origine SRT entrelacent couramment par rafales d'environ 160 ms, et un relais qui réempaquette du HLS livre des segments entiers d'un coup. 200 laisse passer l'entrelacement ordinaire et signale les rafales que le tampon d'un récepteur devrait réellement encaisser. Augmentez-le si un serveur d'origine connu pour ses rafales inonde le graphique d'événements sur lesquels personne ne peut agir. |
| ping_hosts | liste vide | Hôtes supplémentaires pour le moniteur d'accessibilité, en plus de ceux déduits de la configuration. Les entrées utiles sont la passerelle du site et le serveur d'origine du contenu : quand une chaîne tombe, la première question est de savoir si le site a perdu Internet ou si le fournisseur a perdu la chaîne, et ceci y répond. |
| location_name | vide | Le site desservi par cet appareil, tel que vous le nommeriez — affiché comme Location dans Settings. Il étiquette les métriques exportées pour qu'une flotte d'appareils puisse être distinguée dans un même tableau de bord, il est transmis au serveur de licences comme nom du site, et c'est le nom de réseau DVB-C affiché par les décodeurs sauf si un autre est défini explicitement. Cette clé s'appelait auparavant hotel_name ; un fichier plus ancien est migré automatiquement au chargement. |
| re_seller | vide | Le partenaire ou l'installateur responsable du site. C'est aussi une étiquette de métrique, pour filtrer un tableau de bord sur le parc d'un seul revendeur. |
Paramètres des moteurs
Section titled “Paramètres des moteurs”Ces clés contiennent des chaînes d’arguments brutes transmises aux programmes sous-jacents : FFmpeg pour les chaînes en remultiplexage, TSDuck pour les chaînes pass-through, et mpv pour la sortie HDMI. Elles ne figurent volontairement pas dans l’interface web. On peut les modifier en éditant le fichier ou via PUT /api/settings, et l’enregistrement de l’une d’elles redémarre toutes les chaînes actives.
La raison de les tenir à l’écart de l’interface est l’étendue des dégâts possibles. Chaque chaîne d’arguments s’applique à toutes les chaînes qui utilisent ce moteur. Un moteur qui ne démarre pas à cause d’un seul argument mal formé met toute la grille hors antenne d’un coup, pas une seule chaîne. Un champ capable de faire cela à un bâtiment ne doit pas se trouver à une frappe de clavier d’un opérateur qui cherche à renommer une chaîne.
| Clé | Défaut | Rôle |
|---|---|---|
| ffmpeg_params | valeur livrée | Options placées tout au début de la ligne de commande FFmpeg de chaque chaîne en remultiplexage, avant l'entrée — réparation des horodatages, taille de sondage et mise en tampon. La valeur livrée est réglée pour les serveurs d'origine HLS ; sa taille de sondage de 15 MB est la raison d'être de startup_stagger_seconds. Si la clé est vide, un minimum -fflags +genpts -rw_timeout 10000000 est utilisé à la place. |
| ffmpeg_udp_params | valeur livrée | Chaîne de requête ajoutée à l'URL de sortie udp:// de chaque chaîne en remultiplexage : TTL, taille de datagramme, tampons de socket et FIFO. Deux éléments sont partagés ou remplacés. Le ttl indiqué ici est aussi utilisé par les chaînes pass-through, afin que les deux moteurs émettent avec le même TTL. Et avec overwrite_pkt_size activé, tout pkt_size est retiré des chaînes HLS, car l'application fixe elle-même la taille des datagrammes. |
| ffmpeg_preview_params | valeur livrée | Options supplémentaires pour le processus FFmpeg de l'aperçu dans le navigateur, insérées avant son entrée. Elles n'affectent que les aperçus, jamais ce qui part sur le réseau. |
| tsduck_params | vide | Options et plugins tsp supplémentaires, ajoutés à chaque chaîne pass-through après le traitement intégré et avant la mesure de qualité et la sortie. Deux étapes intégrées s'effacent devant eux : s'ils nomment le plugin svrename ou sdt, le nommage automatique du service DVB est omis plutôt que doublé ; et s'ils choisissent eux-mêmes un niveau HLS (par exemple --lowest-bitrate), la sélection par défaut du débit le plus élevé n'est pas ajoutée, car tsp refuse deux sélecteurs. |
| mpv_params | valeur livrée | Options supplémentaires pour le lecteur de la sortie HDMI, ajoutées après les choix d'affichage et d'audio faits sur la page HDMI. mpv retient la dernière occurrence d'une option, si bien qu'une option indiquée ici remplace la liste déroulante correspondante. La valeur livrée désigne un contexte d'affichage et une carte son précis ; sur un matériel autre que celui pour lequel elle a été écrite, supprimez ces options et utilisez plutôt les sélections de la page HDMI. |
Sortie HDMI
Section titled “Sortie HDMI”Le bloc hdmi_stream sous global configure la sortie HDMI. Tout ce qu’il contient se règle depuis la page HDMI.
| Clé | Défaut | Rôle |
|---|---|---|
| hdmi_stream.name | vide | Libellé de la sortie dans l'affichage d'état et les journaux. |
| hdmi_stream.stream_id | aucun | L'id de la chaîne à lire. Le lecteur rejoint le groupe multicast de cette chaîne, en utilisant l'adresse udp_device si elle est définie. 0, ou l'identifiant d'une chaîne supprimée, laisse la sortie sans rien à lire, et le journal indique lequel des deux. |
| hdmi_stream.active | false | Démarre et arrête la lecture. |
| hdmi_stream.vo | défaut du lecteur | La sortie vidéo du lecteur, par exemple gpu, gpu-next ou drm. Les deux sorties gpu reçoivent automatiquement un contexte DRM/KMS, puisqu'un appareil n'a pas de bureau dans lequel dessiner. |
| hdmi_stream.drm_device | défaut du lecteur | Le périphérique d'affichage, sous forme de chemin comme /dev/dri/card0. Nécessaire sur un matériel doté de plusieurs contrôleurs d'affichage, où la valeur par défaut peut désigner le mauvais connecteur. |
| hdmi_stream.audio_device | défaut du lecteur | Le périphérique de sortie audio, ou none pour une image sans son. Les noms de périphériques audio diffèrent d'une carte à l'autre ; une valeur copiée depuis un autre appareil est donc la raison habituelle pour laquelle le lecteur refuse de démarrer. |
Licence
Section titled “Licence”Le bloc licence sous global configure la manière dont l’appareil s’identifie auprès du serveur de licences. L’adresse du serveur et sa clé de signature sont intégrées à la version et ne sont pas des réglages. server_url ou token_public_key dans ce bloc sont acceptés mais ignorés, et un avertissement le signalant est journalisé au démarrage.
| Clé | Défaut | Rôle |
|---|---|---|
| licence.identity_dir | /config/identity | L'emplacement où l'appareil conserve sa clé d'appareil, son certificat et son dernier état de licence. Il doit se trouver sur un stockage persistant. Sinon, chaque recréation du conteneur génère une nouvelle identité, qui apparaît au serveur de licences comme un nouvel appareil non approuvé, et la diffusion reste bloquée jusqu'à ce qu'il soit à nouveau approuvé. |
| licence.enroll_key | vide | Clé d'enrôlement prépartagée facultative, fournie avec un lot d'appareils. Traitez-la comme un mot de passe : elle n'est jamais écrite dans les journaux, mais elle est lisible par quiconque peut lire ce fichier. |
| licence.site_ref | vide | Une référence en texte libre, comme un numéro de commande ou de site, envoyée à l'enrôlement pour aider à reconnaître l'appareil au moment de l'approuver. C'est une indication destinée à des personnes, pas un identifiant d'authentification. |
| licence.agent_version | la version en cours | La version logicielle déclarée au serveur de licences. Laissez-la non définie. |
Réglages par chaîne
Section titled “Réglages par chaîne”Chaque entrée sous streams est une chaîne : une source, une destination, un ensemble de règles de supervision.
| Clé | Défaut | Rôle |
|---|---|---|
| Identité | ||
| id | attribué | Identifiant numérique, unique dans le fichier. C'est l'identifiant utilisé dans les chemins de l'API et dans channel_ids sur un multiplex. Les identifiants sont réutilisés après une suppression : ne les considérez pas comme des références permanentes pour un système externe. |
| name | obligatoire | Nom affiché. Il n'est pas cosmétique : il devient aussi le nom de service DVB affiché dans la liste des chaînes du téléviseur, et l'étiquette attachée aux métriques exportées de cette chaîne. Renommer une chaîne change ce que voient les spectateurs et la manière dont votre tableau de bord regroupe les données. |
| description | vide | Texte libre à l'usage de l'opérateur. Transmis nulle part. |
| epg_id | vide | L'identifiant de cette chaîne dans le guide des programmes XMLTV — l'identifiant de chaîne propre au guide, typiquement quelque chose comme rtl.de. Il se règle sur la page EPG, et c'est lui qui permet à une synchronisation du guide d'enregistrer les programmes de cette chaîne. Vide signifie aucune donnée de guide pour la chaîne. Voir Guide des programmes (EPG). |
| managed_by | vide | Le propriétaire de la chaîne. Vide signifie qu'un opérateur l'a ajoutée, et rien d'autre ne la modifie jamais. licence signifie que le serveur de licences l'a fournie : il peut remplacer la source et la destination de la chaîne à chaque actualisation, et l'interface web refuse donc de la modifier ou de la supprimer. Ne définissez pas licence à la main sur une chaîne que vous avez créée : l'actualisation suivante pourrait l'écraser. |
| active | true | Indique si la chaîne est configurée pour tourner. Une chaîne inactive est conservée dans le fichier mais jamais démarrée : c'est ainsi que l'on retire une chaîne sans perdre ses réglages. |
| Source | ||
| source.type | hls | L'une des valeurs hls, srt, rtmp ou mpegts. mpegts est un transport stream brut, en UDP (udp://group:port) ou en HTTP (http(s)://…) — voir sources MPEG-TS. Le type détermine plus que la récupération : seul HLS possède une échelle, les profils de résolution ne s'appliquent donc qu'à HLS. |
| source.url | obligatoire | L'URL du serveur d'origine. En HLS, il s'agit normalement de la playlist maître, pas d'une variante : donnez l'échelle à Castmux et laissez le profil de résolution choisir, afin que la chaîne survive à une réorganisation des niveaux par le serveur d'origine. |
| Destination | ||
| destination.address | obligatoire | Destination IPv4. Utilisez la plage multicast à portée administrative 239.0.0.0/8 pour la distribution à l'intérieur d'un bâtiment. L'unicast est accepté pour les liaisons point à point. |
| destination.port | obligatoire | Port UDP de destination. Des groupes distincts peuvent partager un port ; un même groupe et un même port utilisés par deux chaînes constituent un émetteur en double et produisent des images inregardables sur les deux. |
| Comportement | ||
| force_always_on | false | Fait tourner cette chaîne en continu, sans tenir compte de la détection des spectateurs. À utiliser pour une chaîne qui doit être disponible instantanément, ou pour une chaîne transportée sur un multiplex DVB-C, où il n'y a de toute façon aucun abonnement IGMP à observer. |
| engine | hérité | Remplace default_engine pour cette chaîne. La raison habituelle est une source que le moteur pass-through ne sait pas lire, ou un équipement en aval qui exige une sortie remultiplexée. |
| resolution_profile | vide | L'une des valeurs 4k, fullhd, hd, sd, mobile, ou vide pour laisser le choix au serveur d'origine. La sélection retient la hauteur la plus proche, les égalités allant au débit le plus élevé — une chaîne qui diffuse en 480p quand personne ne publie de 576p vaut mieux qu'une chaîne qui refuse de démarrer. Le choix est appliqué à chaque démarrage et jamais réécrit dans ce fichier. Voir Profils de résolution. |
| Supervision — fichier de configuration uniquement | ||
| min_output_kbps | 500 | Le plancher en dessous duquel cette chaîne est considérée comme ne produisant rien, et redémarrée. Abaissez-le pour la radio et les autres services uniquement audio : une chaîne radio à 128 kbps évaluée contre un seuil dimensionné pour la vidéo est jugée muette en permanence et redémarrée en boucle. Non exposé dans l'interface web. |
| pdt_shift_ms | 0 | Seuil de redémarrage pour la dérive du programme-date-time, en millisecondes : si la chronologie déclarée par la source saute de plus que cette valeur, la chaîne est redémarrée plutôt que laissée tourner sur une horloge faussée. 0 désactive la vérification ; c'est la valeur par défaut, car un serveur d'origine qui réhorodate légitimement provoquerait sinon des redémarrages. Non exposé dans l'interface web. |
Réglages des multiplex DVB-C
Section titled “Réglages des multiplex DVB-C”Chaque entrée sous dvb_muxes est une porteuse RF : un ensemble de chaînes assemblées en un seul transport stream et modulées sur le réseau coaxial. Voir Multiplexage DVB-C pour le choix des paramètres RF.
| Clé | Valeur | Rôle |
|---|---|---|
| Identité | ||
| id | attribué | Identifiant numérique du multiplex, utilisé dans les chemins de l'API. |
| name | obligatoire | Libellé du multiplex à l'usage de l'opérateur. Non transmis. |
| device | index ou chemin | Le matériel de modulation sur lequel ce multiplex est émis, identifié par index ou par chemin de périphérique selon la carte installée. Un multiplex par périphérique. |
| Paramètres RF | ||
| frequency | Hz | Fréquence centrale de la porteuse, en hertz et non en mégahertz. 474000000, pas 474. Doit respecter le plan de fréquences du réseau câblé existant du bâtiment et ne doit pas entrer en collision avec une porteuse déjà présente. |
| qam | 16 / 32 / 64 / 128 / 256 | Ordre de modulation. Plus il est élevé, plus il transporte de débit dans les mêmes 8 MHz et moins il tolère le bruit. Sur un coaxial intérieur sain, le 256-QAM est la norme ; descendez si le câblage est ancien, très ramifié ou de qualité inconnue. |
| symbol_rate | ksym/s | Débit de symboles de la porteuse. Avec l'ordre de modulation, il fixe le débit total disponible pour l'ensemble des services du multiplex : c'est donc le chiffre qui décide du nombre de chaînes qui y tiennent. |
| Signalisation | ||
| network_id | entier | Identifiant de réseau signalé aux récepteurs. Gardez-le identique sur tous les multiplex d'un même site, afin que les téléviseurs les traitent comme un seul réseau plutôt que plusieurs. |
| ts_id | entier | Identifiant de transport stream. Doit être unique parmi les multiplex du site ; des doublons conduisent les téléviseurs à écraser une liste de chaînes par une autre pendant une recherche. |
| network_name | texte | Nom de réseau signalé aux récepteurs. C'est le texte qu'un client voit pendant la recherche des chaînes ; c'est donc normalement le nom du bâtiment. |
| active | true | Indique si le multiplex est émis. Le mettre à false arrête la porteuse ; les téléviseurs afficheront toute la grille comme absente, et pas une seule chaîne morte. |
| Contenu | ||
| channel_ids | liste ordonnée | Les chaînes transportées, par id. L'ordre est significatif. La position dans cette liste détermine l'emplacement, le bloc de PID attribué au service et l'identifiant de service. Réordonner la liste réidentifie donc les services, et les téléviseurs qui ont déjà effectué une recherche peuvent devoir en refaire une pour être de nouveau d'accord avec vous. Ajoutez en fin de liste lorsque c'est possible. |
Sauvegarde et restauration
Section titled “Sauvegarde et restauration”Sauvegardez l’ensemble du répertoire de configuration, pas seulement config.yaml. Outre la configuration, il contient l’identité de licence de l’appareil et ses données de guide des programmes :
| Dans le répertoire | De quoi il s'agit |
|---|---|
| config.yaml | La configuration décrite sur cette page. |
| config.yaml.pre-migration | Le fichier tel qu'il était avant que la dernière mise à jour ne le modifie. C'est celui à restaurer si une migration ne vous convient pas. |
| identity/ | La clé d'appareil et le certificat de l'appareil pour le serveur de licences. Si vous les perdez, l'appareil restauré apparaît au serveur de licences comme un nouvel appareil non approuvé, et ne diffuse pas tant qu'il n'a pas été à nouveau approuvé. |
| epg.db | Données de guide des programmes enregistrées. Elles peuvent être reconstruites en resynchronisant les sources du guide : il est donc pratique de les conserver, sans que ce soit indispensable. |
Les chemins dépendent du côté du conteneur où vous vous trouvez. Avec l’installation décrite dans ce manuel, le répertoire est /opt/castmux/config sur l’hôte, et le conteneur le voit comme /config. Le fichier de configuration est donc /opt/castmux/config/config.yaml depuis un shell sur l’appareil, et /config/config.yaml à l’intérieur du conteneur. Les sauvegardes se font depuis l’hôte :
# on the appliance (host), as root: the files are owned by rootsudo cp -a /opt/castmux/config /backup/seaview-court-$(date +%F)Copier pendant que le service tourne ne pose normalement pas de problème, car config.yaml n’est réécrit que lorsqu’un réglage est enregistré. N’enregistrez pas de modifications dans l’interface web pendant la copie. Pour une copie garantie cohérente, y compris epg.db au milieu d’une synchronisation du guide, arrêtez d’abord le conteneur.
Pour restaurer, arrêtez le conteneur, remettez le répertoire en place et redémarrez-le. Remplacer des fichiers sous un conteneur en fonctionnement ne marche pas : le service en cours écrit sa propre copie de config.yaml par-dessus la vôtre à la modification suivante.
# on the appliance (host)sudo docker stop castmuxsudo rm -rf /opt/castmux/configsudo cp -a /backup/seaview-court-2026-04-11 /opt/castmux/configsudo docker start castmuxAvec Docker Compose, utilisez plutôt sudo docker compose stop et sudo docker compose start dans /opt/castmux. Si vous avez monté un autre répertoire de l’hôte, remplacez-le partout à la place de /opt/castmux/config.
Le fichier étant du YAML brut, le config.yaml d’une sauvegarde sert aussi de point de départ pour un second site : changez les adresses, les noms et les paramètres RF, le reste se transpose. Copiez uniquement config.yaml dans ce cas, jamais identity/. Deux appareils ayant la même identité sont le même appareil aux yeux du serveur de licences. C’est un processus manuel aujourd’hui.
L’export et l’import en un clic depuis l’interface web, ainsi que le clonage d’une configuration sur une flotte de sites : prévu.