Ga naar inhoud

Configuratiereferentie

De configuratie is bewust een eenvoudig, leesbaar tekstbestand en geen database. Het kan met cp worden geback-upt, met de kopie van vorige week worden vergeleken, in versiebeheer worden vastgelegd en via SSH met de hand worden bewerkt wanneer de webinterface onbereikbaar is — precies wanneer u het hardst iets moet wijzigen. Er is geen aparte statusopslag die ermee in de pas moet blijven.

Castmux herschrijft het bestand telkens wanneer in de webinterface iets wordt gewijzigd, dus handmatige wijzigingen en wijzigingen via de interface zijn dezelfde bewerking op hetzelfde bestand. Handmatig bewerken terwijl de service draait, brengt het risico mee dat uw wijziging door de volgende actie in de interface wordt overschreven; stop de service, bewerk het bestand en start de service weer.

Bij een upgrade worden sleutels die een nieuwere release heeft toegevoegd automatisch aangevuld met hun standaardwaarden, dus een ouder bestand blijft werken. Voordat er iets wordt gewijzigd, wordt een .pre-migration-kopie van het origineel geschreven; dat is het bestand om terug te zetten als een migratie niet doet wat u wilt.

—config

Pad naar het configuratiebestand. Standaard config.yaml in de werkmap. Bij uitrol als container wordt een expliciet pad in een gekoppeld volume meegegeven, normaal /config/config.yaml.

—port

TCP-poort voor de webinterface en de HTTP-API. Standaard 8080. De API heeft geen aparte poort; er is één listener.

-debug

Uitgebreide logging, inclusief volledige engine-opdrachtregels en details per herstart. Nuttig bij het diagnosticeren van een zender die niet wil starten. Het is veel uitvoer; laat het niet permanent aan staan op een apparaat met een kleine logpartitie.

CASTMUX_WEB_USERNAME

Gebruikersnaam voor de webinterface en de API.

CASTMUX_WEB_PASSWORD

Wachtwoord voor de webinterface en de API.

Een werkend bestand voor een kleine locatie: twee zenders, één via HLS en één via SRT, beide meegestuurd op één DVB-C-multiplex en ook op 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

Alles onder global geldt voor elke zender, tenzij de zender het overschrijft. Een wijziging via de webinterface wordt zonder herstart op draaiende zenders toegepast; dit zijn dus live instellingen, geen instellingen die alleen bij het opstarten gelden.

SleutelStandaardDoel
Engines en uitvoer
default_enginetsduckWelke engine zenders gebruiken als ze er zelf geen noemen. De pass-through-engine behoudt de oorspronkelijke PID's, audiosporen en taaldescriptors; de remux-engine herschrijft ze, wat sommige apparatuur verderop in de keten vereist. Zie Streaming-engines.
udp_deviceleegBronadres voor uitgaande UDP. Let goed op: dit bindt het bronadres en kiest niet de uitgaande interface — de kernel raadpleegt nog steeds de routeringstabel om te bepalen via welke poort de pakketten vertrekken. Gaat multicast via de verkeerde interface naar buiten, corrigeer dan de route, niet dit.
startup_stagger_seconds3Tussentijd tussen de starts van zenders bij het opstarten. Anders opent elke zender tegelijk zijn bron, en acht gelijktijdige HLS-starts op een uplink van 100 Mbit verzadigen die tijdens de eerste segmentburst, zodat alle acht mislukken in plaats van één. Stel 0 in om het uit te schakelen als het uw uplink echt niets uitmaakt.
hls_live_start_index-1Bij welk segment van de live playlist wordt begonnen, geteld vanaf de live edge. -1 is het laatste segment. Dichter bij de edge betekent minder latency en minder buffer om jitter van de originserver op te vangen; verder terug is toleranter en loopt verder achter op live.
overwrite_pkt_sizetrueForceer volledige UDP-datagrammen van 1316 bytes op HLS-zenders — zeven transportpakketten per datagram, wat settopboxen verwachten. Zonder deze instelling produceren sommige bronnen korte datagrammen en verspillen ze een merkbaar deel van de lijn.
overwrite_srt_latencytrueLeid de SRT-latency af uit de gemeten round-trip time naar de afzender in plaats van een vaste waarde te gebruiken. Een met de hand ingestelde latency die voor het ene pad goed was, is meestal fout voor de volgende locatie.
On-demand en IGMP
on_demand_enabledtrueHoofdschakelaar voor kijkergestuurd streamen. Staat die uit, dan draait elke als actief gemarkeerde zender continu, ongeacht of er iets kijkt.
on_demand_fail_opentrueLaat zenders doorstreamen wanneer kijkerdetectie niet beschikbaar is — capture kan niet starten, de interface verdwijnt, de bewaker stopt. Laat dit aan staan. Met deze instelling uit is het faalscenario een gebouw vol zwarte schermen, veroorzaakt door een monitoringonderdeel, en dat is in alle opzichten erger dan een beetje verspilde bandbreedte.
igmp_active_querytrueVerstuur zelf IGMP general queries. Clients melden zich ongevraagd alleen op het moment dat ze zich aanmelden en blijven daarna stil tot erom wordt gevraagd, dus zonder queries verliest een herstart alle kennis van bestaande kijkers. Schakel dit alleen uit als het segment al een echte querier heeft; twee queriers op één segment is slordig, maar niet fataal.
igmp_grace_seconds90Hoe lang een kijker stil mag blijven voordat hij als vertrokken wordt beschouwd. Moet ruim boven igmp_query_interval_seconds liggen, anders verwijdert één verloren report een kijker die nog kijkt.
igmp_linger_seconds30Hoe lang een zender blijft draaien nadat de laatste kijker is vertrokken. Dit maakt zappen draaglijk: terugkeren binnen het linger-venster is direct, in plaats van een koude start te betalen.
igmp_query_interval_seconds30Interval tussen general queries. Lager betekent sneller detecteren dat een toestel met de stekker is uitgezet, ten koste van meer besturingsverkeer.
igmp_interfacesalle met een adresOp welke interfaces membership wordt gecapturet. De standaard omvat elke interface waarop een adres is ingesteld. Noem ze expliciet op een box met meerdere NIC's waarvan er maar één naar de televisies wijst.
enable_dummy_listenerstrueHoud aan elke groep een lokale afnemer gekoppeld. Zonder die afnemer stapelen pakketten naar een groep waarbij niemand is aangemeld zich op in de socketbuffers en veroorzaken ze uiteindelijk overlopen die eruitzien als bronstoringen.
Monitoring en locatie-identiteit
ts_monitoringtrueMeet de transportstreamkwaliteit van elke zender — bitrate en de spreiding daarvan, PCR-timing, transport- en continuity-fouten — voor de grafieken per zender en de geëxporteerde meetwaarden. Op een pass-through-zender loopt de meting in de eigen pijplijn van de zender; op een remux-zender luistert een tweede, alleen-lezen proces naar de multicastgroep van de zender, zodat het meet wat een ontvanger werkelijk krijgt. Beide observeren alleen en veranderen de stream nooit. Stel false in om op een zwaar belast apparaat het kleine CPU-verbruik per zender te besparen.
ts_pcr_jitter_max_ms200Hoe ver, in milliseconden, een programme clock reference mag afwijken van de werkelijke timing van zijn pakket voordat het telt als een PCR-jittergebeurtenis. Dit is een tolerantie voor leveringsbursts, niet de nauwkeurigheidswaarde uit MPEG-2: SRT-originservers interleaven vaak in bursts van ongeveer 160 ms, en een relay die HLS herverpakt, levert hele segmenten in één keer. 200 laat gewone interleaving door en markeert de bursts die de buffer van een ontvanger echt zou moeten opvangen. Verhoog de waarde als een bekend burstige originserver de grafiek overspoelt met gebeurtenissen waar niemand iets mee kan.
ping_hostslege lijstExtra hosts voor de bereikbaarheidsmonitor, bovenop wat uit de configuratie wordt afgeleid. De nuttige vermeldingen zijn de gateway van de locatie en de content-originserver: als een zender uitvalt, is de eerste vraag of de locatie het internet kwijt is of de leverancier de zender, en dit geeft het antwoord.
location_nameleegDe locatie die dit apparaat bedient, zoals u die zou noemen — getoond als Location in Settings. Ze labelt geëxporteerde meetwaarden, zodat een vloot apparaten in één dashboard uit elkaar te houden is; ze wordt als locatienaam aan de licentieserver gemeld; en ze is de DVB-C-netwerknaam die settopboxen tonen, tenzij er expliciet een is ingesteld. Deze sleutel heette vroeger hotel_name; een ouder bestand wordt bij het laden automatisch gemigreerd.
re_sellerleegDe partner of installateur die verantwoordelijk is voor de locatie. Ook een metriclabel, om een dashboard te filteren tot het apparatenpark van één reseller.

Deze sleutels bevatten ruwe argumentstrings die aan de onderliggende programma’s worden doorgegeven: FFmpeg voor remux-zenders, TSDuck voor pass-through-zenders en mpv voor de HDMI-uitgang. Ze staan bewust niet in de webinterface. Ze kunnen worden gewijzigd door het bestand te bewerken of via PUT /api/settings, en het opslaan van elk ervan herstart elke actieve zender.

De reden om ze buiten de interface te houden, is de impact. Elke string geldt voor elke zender die die engine gebruikt. Een engine die door één fout argument niet start, haalt de hele zenderlijst in één keer uit de lucht, niet één zender. Een veld dat dat met een gebouw kan doen, hoort niet één toetsaanslag verwijderd te zijn van een beheerder die een zender probeert te hernoemen.

SleutelStandaardDoel
ffmpeg_paramsmeegeleverde waardeOpties helemaal aan het begin van de FFmpeg-opdrachtregel van elke remux-zender, vóór de invoer — timestampherstel, probegrootte en buffering. De meegeleverde waarde is afgestemd op HLS-originservers; de probegrootte van 15 MB is de reden dat startup_stagger_seconds bestaat. Is de sleutel leeg, dan wordt in plaats daarvan een minimale -fflags +genpts -rw_timeout 10000000 gebruikt.
ffmpeg_udp_paramsmeegeleverde waardeQuerystring die wordt toegevoegd aan de udp://-uitvoer-URL van elke remux-zender: TTL, datagramgrootte, socket- en FIFO-buffers. Twee delen worden gedeeld of overschreven. De ttl hier wordt ook door pass-through-zenders gebruikt, zodat beide engines dezelfde TTL op de lijn zetten. En met overwrite_pkt_size aan wordt elke pkt_size van HLS-zenders verwijderd, omdat de applicatie de datagramgrootte zelf instelt.
ffmpeg_preview_paramsmeegeleverde waardeExtra opties voor het FFmpeg-proces van de browserpreview, ingevoegd vóór de invoer. Ze beïnvloeden alleen previews, nooit wat op de lijn gaat.
tsduck_paramsleegExtra tsp-opties en -plugins, toegevoegd aan elke pass-through-zender na de ingebouwde verwerking en vóór de kwaliteitsmeting en de uitvoer. Twee ingebouwde stappen maken er plaats voor: noemt het de plugin svrename of sdt, dan wordt de automatische DVB-servicenaamgeving overgeslagen in plaats van verdubbeld; en kiest het zelf een HLS-trede (bijvoorbeeld --lowest-bitrate), dan wordt de standaardselectie van de hoogste bitrate niet toegevoegd, omdat tsp twee selectors weigert.
mpv_paramsmeegeleverde waardeExtra opties voor de speler van de HDMI-uitgang, toegevoegd na de keuzes voor beeldscherm en audio op de HDMI-pagina. mpv volgt het laatste voorkomen van een optie, dus een vlag hier overschrijft de bijbehorende keuzelijst. De meegeleverde waarde noemt een specifieke weergavecontext en audiokaart; verwijder die vlaggen op andere hardware dan waarvoor ze zijn geschreven en gebruik in plaats daarvan de selecties op de HDMI-pagina.

Het blok hdmi_stream onder global configureert de HDMI-uitgang. Alles daarin wordt ingesteld vanaf de HDMI-pagina.

SleutelStandaardDoel
hdmi_stream.nameleegLabel voor de uitgang in de statusweergave en de logs.
hdmi_stream.stream_idgeenDe id van de zender die moet worden afgespeeld. De speler meldt zich aan bij de multicastgroep van die zender, via het udp_device-adres als dat is ingesteld. 0, of de id van een verwijderde zender, laat de uitgang zonder iets om af te spelen, en het log zegt welke van de twee.
hdmi_stream.activefalseStart en stopt het afspelen.
hdmi_stream.vostandaard van de spelerDe video-uitvoer van de speler, zoals gpu, gpu-next of drm. De twee gpu-uitvoeren krijgen automatisch een DRM/KMS-context, omdat een apparaat geen desktop heeft om op te tekenen.
hdmi_stream.drm_devicestandaard van de spelerHet beeldschermapparaat, als pad zoals /dev/dri/card0. Nodig op hardware met meer dan één displaycontroller, waar de standaard de verkeerde aansluiting kan zijn.
hdmi_stream.audio_devicestandaard van de spelerHet audio-uitvoerapparaat, of none voor beeld zonder geluid. Namen van audioapparaten verschillen per bord, dus een waarde die van een ander apparaat is gekopieerd, is de gebruikelijke reden dat de speler niet start.

Het blok licence onder global bepaalt hoe het apparaat zich identificeert bij de licentieserver. Het adres en de ondertekeningssleutel van de server zijn in de release ingebouwd en zijn geen instellingen. server_url of token_public_key in dit blok worden geaccepteerd maar genegeerd, en bij het opstarten wordt daarover een waarschuwing gelogd.

SleutelStandaardDoel
licence.identity_dir/config/identityWaar het apparaat zijn apparaatsleutel, certificaat en laatste licentiestatus bewaart. Dit moet op persistente opslag staan. Zonder die opslag genereert elke nieuwe aanmaak van de container een nieuwe identiteit, die voor de licentieserver een nieuw, niet-goedgekeurd apparaat is, en blijft streamen geblokkeerd tot het opnieuw is goedgekeurd.
licence.enroll_keyleegOptionele vooraf gedeelde inschrijvingssleutel, geleverd bij een partij apparaten. Behandel die als een wachtwoord: ze wordt nooit naar de logs geschreven, maar is leesbaar voor iedereen die dit bestand kan lezen.
licence.site_refleegEen vrije-tekstreferentie, zoals een order- of locatienummer, die bij de inschrijving wordt meegestuurd om het apparaat bij de goedkeuring te helpen herkennen. Het is een hint voor mensen, geen inloggegeven.
licence.agent_versionde draaiende versieDe softwareversie die aan de licentieserver wordt gemeld. Laat dit leeg.

Elke vermelding onder streams is één zender: één bron, één bestemming, één set bewakingsregels.

SleutelStandaardDoel
Identiteit
idtoegewezenNumerieke identificatie, uniek binnen het bestand. Het is de identificatie in API-paden en in channel_ids op een multiplex. Identificaties worden na verwijdering hergebruikt, dus behandel er geen als een permanente verwijzing voor een extern systeem.
nameverplichtWeergavenaam. Die is niet cosmetisch: ze wordt ook de DVB-servicenaam in de zenderlijst van de televisie, en het label aan de geëxporteerde meetwaarden van deze zender. Een zender hernoemen verandert wat kijkers zien en waarop uw dashboard groepeert.
descriptionleegVrije tekst voor de beheerder. Wordt nergens verzonden.
epg_idleegDe identificatie van deze zender in de XMLTV-programmagids — de eigen zender-id van de gids, meestal iets als rtl.de. Wordt ingesteld op de EPG-pagina, en zorgt ervoor dat een gidssynchronisatie programma's voor deze zender opslaat. Leeg betekent geen gidsgegevens voor de zender. Zie Programmagids (EPG).
managed_byleegWie eigenaar is van de zender. Leeg betekent dat een beheerder hem heeft toegevoegd, en dan wordt hij door niets anders gewijzigd. licence betekent dat de licentieserver hem heeft geleverd: die kan bij elke vernieuwing de bron en bestemming van de zender vervangen, dus de webinterface laat hem niet bewerken of verwijderen. Stel licence niet met de hand in op een zender die u zelf hebt gemaakt — de volgende vernieuwing kan hem overschrijven.
activetrueOf de zender überhaupt is ingesteld om te draaien. Een inactieve zender blijft in het bestand staan maar wordt nooit gestart; zo zet u een zender buiten gebruik zonder zijn instellingen te verliezen.
Bron
source.typehlsEen van hls, srt, rtmp of mpegts. mpegts is een gewone transportstream, via UDP (udp://group:port) of HTTP (http(s)://…) — zie MPEG-TS-bronnen. Het type bepaalt meer dan het ophalen: alleen HLS heeft een ladder, dus resolutieprofielen gelden alleen voor HLS.
source.urlverplichtDe origin-URL. Voor HLS moet dit normaal de masterplaylist zijn, geen variant — geef Castmux de ladder en laat het resolutieprofiel kiezen, zodat de zender blijft werken als de originserver zijn treden herindeelt.
Bestemming
destination.addressverplichtIPv4-bestemming. Gebruik voor distributie binnen een gebouw het administratief begrensde multicastbereik 239.0.0.0/8. Unicast wordt geaccepteerd voor punt-tot-puntverbindingen.
destination.portverplichtUDP-bestemmingspoort. Verschillende groepen mogen een poort delen; dezelfde groep en poort bij twee zenders is een dubbele zender en levert op beide onkijkbaar beeld op.
Gedrag
force_always_onfalseLaat deze zender continu draaien en negeer kijkerdetectie. Gebruik dit voor een zender die direct beschikbaar moet zijn, of voor een zender op een DVB-C-multiplex, waar er om te beginnen geen IGMP-membership is om waar te nemen.
engineovergenomenOverschrijf default_engine voor deze zender. De gebruikelijke reden is een bron die de pass-through-engine niet kan lezen, of één apparaat verderop in de keten dat per se geremuxte uitvoer wil.
resolution_profileleegEen van 4k, fullhd, hd, sd, mobile, of leeg voor de eigen keuze van de originserver. Bij de selectie wint de dichtstbijzijnde hoogte, en bij gelijkspel de hogere bitrate — een zender die 480p streamt als niemand 576p publiceert, is beter dan een zender die weigert te starten. De keuze wordt per start toegepast en nooit naar dit bestand teruggeschreven. Zie Resolutieprofielen.
Bewaking — alleen in het configuratiebestand
min_output_kbps500De ondergrens waaronder deze zender wordt beschouwd als niet producerend, en wordt herstart. Verlaag die voor radio en andere services met alleen audio: een radiozender van 128 kbps die wordt gemeten tegen een drempel op videoniveau, wordt permanent als stil beoordeeld en in een lus herstart. Niet beschikbaar in de webinterface.
pdt_shift_ms0Herstartdrempel voor drift van de programme-date-time, in milliseconden: springt de opgegeven tijdlijn van de bron meer dan dit, dan wordt de zender herstart in plaats van door te draaien op een kapotte klok. 0 schakelt de controle uit; dat is de standaard, omdat een originserver die legitiem opnieuw stempelt anders herstarts zou veroorzaken. Niet beschikbaar in de webinterface.

Elke vermelding onder dvb_muxes is één RF-draaggolf: een set zenders samengevoegd tot één transportstream en gemoduleerd op het coaxnetwerk. Zie DVB-C-multiplexing voor het kiezen van de RF-parameters.

SleutelWaardeDoel
Identiteit
idtoegewezenNumerieke identificatie van de multiplex, gebruikt in API-paden.
nameverplichtLabel van de multiplex voor de beheerder. Wordt niet verzonden.
deviceindex of padOp welke modulatorhardware deze multiplex wordt uitgezonden, aangeduid met een index of een apparaatpad, afhankelijk van de geplaatste kaart. Eén multiplex per apparaat.
RF-parameters
frequencyHzMiddenfrequentie van de draaggolf, in hertz, niet in megahertz. 474000000, niet 474. Moet passen in het frequentieplan van het bestaande kabelnet in het gebouw en mag niet botsen met een draaggolf die daar al aanwezig is.
qam16 / 32 / 64 / 128 / 256Modulatieorde. Hoger draagt meer bitrate in dezelfde 8 MHz en verdraagt minder ruis. Op gezonde coax binnen een gebouw is 256-QAM normaal; ga lager als de bekabeling oud, sterk gesplitst of van onbekende kwaliteit is.
symbol_rateksym/sSymboolsnelheid van de draaggolf. Samen met de modulatieorde bepaalt dit de totale bitrate die beschikbaar is voor alle services in de multiplex, en dus is dit het getal dat bepaalt hoeveel zenders erin passen.
Signalering
network_idgeheel getalNetwerkidentificatie die aan ontvangers wordt gesignaleerd. Houd die gelijk over alle multiplexen op één locatie, zodat toestellen ze als één netwerk behandelen en niet als meerdere.
ts_idgeheel getalTransportstreamidentificatie. Moet uniek zijn onder de multiplexen op de locatie; duplicaten zorgen ervoor dat toestellen tijdens een scan de ene zenderlijst met de andere overschrijven.
network_nametekstNetwerknaam die aan ontvangers wordt gesignaleerd. Dit is de tekst die een gast tijdens het afstemmen ziet, dus normaal de naam van het gebouw.
activetrueOf de multiplex wordt uitgezonden. Op false zetten stopt de draaggolf; televisies tonen dan de hele zenderlijst als ontbrekend, niet als één dode zender.
Inhoud
channel_idsgeordende lijstDe meegestuurde zenders, op id. De volgorde is van belang. De positie in deze lijst bepaalt het slot, het PID-blok dat aan de service wordt toegewezen en de service-identificatie. Het herschikken van de lijst geeft services dus een nieuwe identiteit, en televisies die al hebben gescand, moeten mogelijk opnieuw worden afgestemd om weer met u overeen te komen. Voeg waar mogelijk achteraan toe.

Maak een back-up van de hele configuratiemap, niet alleen van config.yaml. Naast de configuratie bevat die de licentie-identiteit van het apparaat en de gegevens van de programmagids:

In de mapWat het is
config.yamlDe configuratie die op deze pagina wordt beschreven.
config.yaml.pre-migrationHet bestand zoals het was voordat de laatste upgrade het wijzigde. Het bestand om terug te zetten als een migratie niet doet wat u wilt.
identity/De apparaatsleutel en het certificaat van het apparaat voor de licentieserver. Raakt u die kwijt, dan is het teruggezette apparaat voor de licentieserver een nieuw, niet-goedgekeurd apparaat, en streamt het niet tot het opnieuw is goedgekeurd.
epg.dbOpgeslagen gegevens van de programmagids. Die kunnen opnieuw worden opgebouwd door de gidsbronnen opnieuw te synchroniseren, dus bewaren is handig maar niet essentieel.

De paden hangen af van aan welke kant van de container u zit. Met de installatie uit deze handleiding is de map /opt/castmux/config op de host, en ziet de container die als /config. Het configuratiebestand is dus /opt/castmux/config/config.yaml vanuit een shell op het apparaat, en /config/config.yaml binnen de container. Back-ups worden vanaf de host gemaakt:

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)

Kopiëren terwijl de service draait, gaat normaal goed, omdat config.yaml alleen wordt herschreven wanneer een instelling wordt opgeslagen. Sla tijdens het kopiëren geen wijzigingen op in de webinterface. Voor een kopie die gegarandeerd consistent is, inclusief epg.db midden in een gidssynchronisatie, stopt u eerst de container.

Om terug te zetten stopt u de container, zet u de map terug en start u de container weer. Bestanden vervangen onder een draaiende container werkt niet: de draaiende service schrijft bij de volgende wijziging zijn eigen kopie van config.yaml over de uwe heen.

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

Gebruik met Docker Compose in plaats daarvan sudo docker compose stop en sudo docker compose start in /opt/castmux. Hebt u een andere hostmap gekoppeld via een bind mount, vervang dan overal /opt/castmux/config door die map.

Omdat het bestand gewone YAML is, dient de config.yaml uit een back-up ook als startpunt voor een tweede locatie: wijzig de adressen, de namen en de RF-parameters, en de rest wordt overgenomen. Kopieer hiervoor alleen config.yaml, nooit identity/. Twee apparaten met dezelfde identiteit zijn voor de licentieserver hetzelfde apparaat. Dat is vandaag een handmatig proces.

Export en import met één klik vanuit de webinterface, en het klonen van een configuratie over een vloot locaties, staan op de roadmap.