Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| c3tracker:setup [2022/05/27 17:35] – andi | c3tracker:setup [2025/10/01 08:49] (current) – kunsi | ||
|---|---|---|---|
| Line 7: | Line 7: | ||
| * Compare project properties with previous instalment of the same event | * Compare project properties with previous instalment of the same event | ||
| - | optimal properties from current project | ||
| - | ``` | + | ==== optimal properties from current project ==== |
| - | Project | + | |
| - | Project.Slug eh19 | + | Replace |
| - | Processing | + | |
| - | Processing.Loudnorm.Enable yes | + | Meta.Acronym |
| - | Processing.BasePath /video | + | |
| - | Processing.Path.Intros / | + | Meta.License |
| - | Processing.Path.Outro / | + | Meta.Year |
| - | Publishing | + | |
| - | Publishing.Path / | + | Processing.Auphonic.Enable |
| - | Publishing.Upload.SkipSlaves speedy,tweety,blade1,blade2, | + | Processing.BasePath |
| - | Publishing.UploadOptions -i / | + | Processing.MasterMe.Enable |
| - | Publishing.UploadTarget upload@releasing.c3voc.de:/ | + | Processing.Path.Intros |
| - | Publishing.Voctoweb.Enable yes | + | Processing.Path.Outro |
| - | Publishing.Voctoweb.Path / | + | |
| - | Publishing.Voctoweb.Thumbpath / | + | Publishing.Upload.SkipSlaves |
| - | Publishing.Voctoweb.Slug eh19 | + | Publishing.UploadTarget |
| - | Publishing.Voctoweb.Tags easterhegg, | + | |
| - | Publishing.Voctoweb.Url https:// | + | |
| - | Publishing.YouTube.Category 27 | + | Publishing.Voctoweb.Path |
| - | Publishing.YouTube.Enable yes | + | Publishing.Voctoweb.Slug |
| - | Publishing.YouTube.Privacy public | + | Publishing.Voctoweb.Thumbpath |
| - | Publishing.YouTube.Tags easterhegg, Wien, bun intended, Chaos Computer Club Wien, c3w | + | Publishing.YouTube.Category |
| - | Publishing.YouTube.TitlePrefix Easterhegg 2019 - | + | Publishing.YouTube.Enable |
| - | Publishing.YouTube.Token 1/ | + | Publishing.YouTube.Playlists |
| - | Publishing.Mastodon.Enable yes | + | Publishing.YouTube.Privacy |
| - | Publishing.Twitter.Enable yes | + | Publishing.YouTube.Token |
| - | Record | + | |
| - | Record.Container TS | + | Record.Container |
| - | Record.Slides yes | + | |
| - | ``` | + | |
| + | | ||
| === Worker Filter Examples | === Worker Filter Examples | ||
| - | ``` | + | |
| - | EncodingProfile.IsMaster=no | + | # get all non-master tickets |
| - | EncodingProfile.IsMaster=yes | + | EncodingProfile.IsMaster=no |
| - | EncodingProfile.IsMaster= | + | |
| - | Fahrplan.Room=Servus.at Lab | + | # get all master tickets |
| - | ``` | + | |
| + | |||
| + | # get all recording tickets | ||
| + | | ||
| + | |||
| + | # get all tickets in this room. | ||
| + | | ||
| + | |||
| + | |||
| + | Please note that the conditions in the " | ||
| + | |||
| + | Specifying a property with an empty value, which is often done for `EncodingProfile.IsMaster`, will match if this property does not exist at all on a ticket. So for `EncodingProfile.IsMaster`, | ||
| + | {{.: | ||
| == Pipeline setup during event | == Pipeline setup during event | ||
| Line 56: | Line 69: | ||
| - | === centralised storage (rsync) | + | === Simple: single-room setup (Variant |
| - | The first variant is typically used for events with more than one room. For bigger events we use the dedicated [[hardware:event-storage|storage]] server in the event server rack, for smaller events a USB connected hard drive to one of the minions might be sufficient. Each recording cube exposes the files via rsyncd, which are pulled by an rsync process running inside a screen on the storage pc. | + | {{drawio> |
| - | For each encoderX open a screen tab on the central storage: | + | |
| - | cd / | + | |
| - | while true; do rsync -av --bwlimit=10000 --append --inplace -t encoderX.lan.c3voc.de:: | + | |
| - | start tracker workers on storage | ||
| - | cd / | ||
| - | sudo ./ | ||
| - | Don't forget | + | This variant is practical if you have only one room, or at least one release encoder (aka [[hardware: |
| + | When using this variant with multiple rooms in one Tracker project (like at JEV22), you also have to set room filters in the tracker worker queues. | ||
| + | |||
| + | For every worker: | ||
| + | * set `EncodingProfile.IsMaster = yes` to avoid encoding | ||
| + | * (set room filters in tracker e.g. `Fahrplan.Room = Foobar`, but this cannot be used at the same times as the above, see the warning below) | ||
| + | |||
| + | For every recoding cube: | ||
| + | * start tracker | ||
| + | |||
| + | For each minion: | ||
| + | * mount filesystems from encoder cube: `sudo crs-mount <storage location> | ||
| + | * start tracker scripts for encoding: `sudo systemctl start crs-encoding.service` | ||
| + | |||
| + | |||
| + | <panel type=" | ||
| + | |||
| + | === centralised | ||
| + | |||
| + | {{drawio> | ||
| + | |||
| + | |||
| + | This variant is typically used for events with more than one room. | ||
| + | |||
| + | For bigger events we use the dedicated [[hardware: | ||
| + | |||
| + | sudo ip a add dev br0 10.73.200.24/ | ||
| + | |||
| + | |||
| + | Each recording encoder exposes the files via rsyncd, which are pulled by an rsync process running on this storage machine. | ||
| + | |||
| + | |||
| + | For each encoderX start rsync on the storage machine: | ||
| + | |||
| + | sudo systemctl start rsync-from-encoder@encoderX.lan.c3voc.de | ||
| + | |||
| + | If you use a minion as storage machine, you have start the tracker manually (on storage.lan.c3voc.de they are started by default): | ||
| + | |||
| + | sudo systemctl start crs-worker.target | ||
| + | |||
| + | which starts | ||
| + | |||
| + | - crs-recording-scheduler (A) | ||
| + | - crs-mount4cut.service | ||
| + | - crs-cut-postprocessor | ||
| + | - crs-encoding0, | ||
| + | - crs-postencoding | ||
| + | - crs-postprocessing | ||
| ==== Minion setup | ==== Minion setup | ||
| - | To allow the encoding workers to do there job, they need to mount several folders on each minion: | ||
| - | sudo -s | + | To allow get additional release encoding workers on the (other) minions, you need to connect to these an mount the storage |
| - | | + | |
| - | | + | ssh minionX.lan.c3voc.de |
| - | | + | |
| + | |||
| + | After mounting, you can start the tracker encoding workers: | ||
| + | |||
| + | | ||
| + | |||
| + | The virtual minion' | ||
| | | ||
| - | The first mount point is read-only, the other two are read-write. | ||
| - | | ||
| - | start tracker encoding workers | ||
| - | cd / | ||
| - | sudo ./ | ||
| - | | ||
| - | | ||
| - | ==== Cube as worker setup | ||
| - | At small events, when the talks are finished for today, you can use the recording | + | ==== Encoder PCs as release encoding workers |
| + | |||
| + | At small events, when all talks are finished for today, you can use the recording | ||
| + | |||
| + | First – stop voctocore: | ||
| + | |||
| + | sudo systemctl stop voctomix2-voctocore | ||
| - | First: Stop voctocore. | ||
| The rest is very similar to above, but with different mounts so `/ | The rest is very similar to above, but with different mounts so `/ | ||
| - | sudo -s | + | sudo mount -t cifs -o uid=voc,password= // |
| - | | + | |
| - | mount -t cifs -o password= // | + | |
| - | mount -t cifs -o password= // | + | |
| - | mount -t cifs -o password= // | + | |
| | | ||
| - | === decentralised classic (Variant 2) | ||
| - | The second variant is only practical if you have at least one release encoder (aka [[hardware: | + | === decentralised pipeline |
| - | For every worker: | + | <panel type=" |
| - | * set room filters in tracker | + | |
| - | For every recoding cube: | + | Similar to variant B, but extended to work with multiple rooms. Instead of using rsync, recorded snippets remain on the encoding cubes and '' |
| - | * start tracker workers | + | |
| - | cd /opt/crs/tools/tracker3.0 | + | |
| - | sudo ./start-screenrc-scripts.sh | + | |
| - | + | ||
| - | For each minion: | + | Tracker filters have to be set only for the recording cubes, minions do not require any filters (but on smaller events without many minions, a '' |
| - | * mount filesystems from encoder | + | On recording |
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| - | < | + | On all minions, including the one acting as storage, do |
| - | e=echo | + | |
| - | if [ ! -d /video/tmp ]; then | + | |
| - | $e mount -t cifs -o password= // | + | |
| - | $e mount -t cifs -o password= // | + | |
| - | $e mount -t cifs -o password= // | + | |
| - | else | + | |
| - | echo " | + | |
| - | fi</ | + | |
| - | * start tracker scripts for encoding | + | mkdir -p / |
| + | mount.cifs -o uid=voc, | ||
| + | mount.cifs -o uid=voc, | ||
| + | ... | ||
| - | < | + | On all minions except the one acting as storage, also mount: |
| - | cd / | + | |
| - | sudo ./ | + | |
| - | </ | + | |
| + | mount.cifs -o uid=voc, | ||
| + | mount.cifs -o uid=voc, | ||
| + | mount.cifs -o uid=voc, | ||
| - | === decentralised pipeline (Variant 3) | + | Finally on all minions, including the one acting as storage, start the following systemd units: |
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| - | Similar to variant 2, but the release encoder (minion) only mounts the / | ||
| - | You have to set the room filters only for the recording cubes, the minions can process talks independently. | + | ==== Old example with systemd units and case 1 and 5, which was used during jev22 in Munich: |
| - | Modify ''/ | + | {{drawio> |
| - | * On recording cubes: comment out steps '' | + | |
| - | * On release encoders: comment out steps '' | + | |
| - | After modification, | + | optional: configure `10.73.0.2` (aka `storage.lan.c3voc.de`) on the master minion as secondary ip |
| - | sudo ./start screenrc-pipeline | + | sudo ip a add dev br0 10.73.200.24/16 |
| + | on recording cubes, mount or copy the intros from their source – here `storage.lan.c3voc.de` | ||
| - | ==== Example | + | sudo mount -t cifs -o password= {// |
| + | sudo systemctl start crs-recording-scheduler | ||
| + | sudo systemctl start crs-mount4cut | ||
| + | sudo systemctl start crs-cut-postprocessor | ||
| + | |||
| + | # check if everything is running as expected – you might have to disable/ | ||
| + | sudo systemctl status -n 0 crs-* | ||
| + | |||
| + | |||
| + | on master minion (in this example `storage.lan.c3voc.de`) | ||
| + | |||
| + | |||
| + | mkdir -p / | ||
| + | mount -t cifs -o password= {// | ||
| + | mount -t cifs -o password= {// | ||
| + | |||
| + | sudo systemctl start crs-encoding | ||
| + | sudo systemctl start crs-postencoding | ||
| + | sudo systemctl start crs-postprocessing | ||
| + | |||
| + | # check if everything is running as expected – you might have to disable/ | ||
| + | sudo systemctl status -n 0 crs-* | ||
| + | |||
| + | |||
| + | //(ensure that samba is installed on this master minion aka storage)// | ||
| + | |||
| + | |||
| + | on other minions | ||
| + | |||
| + | mkdir -p / | ||
| + | mount -t cifs -o uid=voc, | ||
| + | mount -t cifs -o uid=voc, | ||
| + | mount -t cifs // | ||
| + | mount -t cifs -o password= // | ||
| + | mount -t cifs -o password= // | ||
| + | mount -t cifs -o password= {// | ||
| + | |||
| + | |||
| + | |||
| + | ==== Old example | ||
| - | on recording cube, without intros either copy or mount the intros from their source | + | on recording cube, without intros either copy or mount the intros from their source |
| sudo mount -t cifs -o password= {// | sudo mount -t cifs -o password= {// | ||
| Line 160: | Line 249: | ||
| on master minion (in this example minion5) | on master minion (in this example minion5) | ||
| - | ``` | ||
| - | mount -t cifs -o password= // | ||
| - | mount -t cifs -o password= // | ||
| - | mount -t cifs -o password= // | ||
| - | cd / | ||
| - | sudo ./start screenrc-pipeline # with steps D, E, F | ||
| - | ``` | + | mount -t cifs -o password= // |
| + | mount -t cifs -o password= // | ||
| + | mount -t cifs -o password= // | ||
| + | cd / | ||
| + | sudo ./start screenrc-pipeline # with steps D, E, F | ||
| //(ensure that samba is installed on this master minion)// | //(ensure that samba is installed on this master minion)// | ||
| on other minions | on other minions | ||
| - | ``` | ||
| - | mount -t cifs -o password= {// | ||
| - | mount -t cifs -o password= {// | ||
| - | mount -t cifs // | ||
| - | mount -t cifs -o password= // | ||
| - | mount -t cifs -o password= // | ||
| - | mount -t cifs -o password= {// | ||
| - | cd / | ||
| - | sudo ./start screenrc-encoding-only # only step E | ||
| - | ``` | ||
| + | mount -t cifs -o password= {// | ||
| + | mount -t cifs -o password= {// | ||
| + | mount -t cifs // | ||
| + | mount -t cifs -o password= // | ||
| + | mount -t cifs -o password= // | ||
| + | mount -t cifs -o password= {// | ||
| + | cd / | ||
| + | sudo ./start screenrc-encoding-only # only step E | ||