Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Jibri work in progress #739

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions group_vars/matrix_servers
Original file line number Diff line number Diff line change
Expand Up @@ -676,6 +676,7 @@ matrix_jitsi_jvb_container_colibri_ws_host_bind_port: "{{ '' if matrix_nginx_pro
matrix_jitsi_jibri_xmpp_password: "{{ matrix_synapse_macaroon_secret_key | password_hash('sha512', 'jibri') | to_uuid }}"
matrix_jitsi_jicofo_auth_password: "{{ matrix_synapse_macaroon_secret_key | password_hash('sha512', 'jicofo') | to_uuid }}"
matrix_jitsi_jvb_auth_password: "{{ matrix_synapse_macaroon_secret_key | password_hash('sha512', 'jvb') | to_uuid }}"
matrix_jitsi_jibri_recorder_password: "{{ matrix_synapse_macaroon_secret_key | password_hash('sha512', 'recorder') | to_uuid }}"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It seems to me that matrix_jitsi_jicofo_component_secret is still missing here?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@spantaleev - don't know if here or inventory/scripts/jitsi-generate-passwords.sh is the desired place to generate all passwords?


matrix_jitsi_web_stun_servers: |
{{
Expand Down
18 changes: 18 additions & 0 deletions roles/matrix-jitsi/defaults/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,7 @@ matrix_jitsi_prosody_docker_image_force_pull: "{{ matrix_jitsi_prosody_docker_im
matrix_jitsi_prosody_base_path: "{{ matrix_base_data_path }}/jitsi/prosody"
matrix_jitsi_prosody_config_path: "{{ matrix_jitsi_prosody_base_path }}/config"
matrix_jitsi_prosody_plugins_path: "{{ matrix_jitsi_prosody_base_path }}/prosody-plugins-custom"
matrix_jitsi_prosody_confd_path: "{{ matrix_jitsi_prosody_config_path }}/conf.d"

# A list of extra arguments to pass to the container
matrix_jitsi_prosody_container_extra_arguments: []
Expand Down Expand Up @@ -252,3 +253,20 @@ matrix_jitsi_jvb_container_rtp_tcp_host_bind_port: "{{ matrix_jitsi_jvb_rtp_tcp_
#
# Takes an "<ip>:<port>" or "<port>" value (e.g. "127.0.0.1:12090"), or empty string to not expose.
matrix_jitsi_jvb_container_colibri_ws_host_bind_port: ''

#Jibri
matrix_jitsi_jibri_enabled: false
matrix_jitsi_jibri_docker_image: "docker.io/jitsi/jibri:{{ matrix_jitsi_container_image_tag }}"
matrix_jitsi_jibri_docker_image_force_pull: "{{ matrix_jitsi_jibri_docker_image.endswith(':latest') }}"

matrix_jitsi_jibri_base_path: "{{ matrix_base_data_path }}/jitsi/jibri"
matrix_jitsi_jibri_config_path: "{{ matrix_jitsi_jibri_base_path }}/config"
matrix_jitsi_jibri_logs_path: "{{ matrix_jitsi_jibri_base_path }}/logs"
matrix_jitsi_jibri_recording_path: "{{ matrix_jitsi_jibri_base_path }}/recordings"
matrix_jitsi_jibri_finalize_recording_script_path: "{{ matrix_jitsi_jibri_config_path }}/finalize.sh"
matrix_jitsi_jibri_strip_domain_jid: ''
# A list of extra arguments to pass to the container
matrix_jitsi_jibri_container_extra_arguments: []

# List of systemd services that matrix-jitsi-jibri.service depends on
matrix_jitsi_jibri_systemd_required_services_list: ['docker.service', 'matrix-jitsi-jicofo.service', 'matrix-jitsi-prosody.service']
3 changes: 3 additions & 0 deletions roles/matrix-jitsi/tasks/init_jibri.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
- set_fact:
matrix_systemd_services_list: "{{ matrix_systemd_services_list + ['matrix-jitsi-jibri'] }}"
when: matrix_jitsi_jibri_enabled|bool
10 changes: 10 additions & 0 deletions roles/matrix-jitsi/tasks/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@
tags:
- always

- import_tasks: "{{ role_path }}/tasks/init_jibri.yml"
tags:
- always

- import_tasks: "{{ role_path }}/tasks/validate_config.yml"
when: "run_setup|bool and matrix_jitsi_enabled|bool"
tags:
Expand Down Expand Up @@ -37,3 +41,9 @@
tags:
- setup-all
- setup-jitsi

- import_tasks: "{{ role_path }}/tasks/setup_jitsi_jibri.yml"
when: run_setup|bool
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wonder if all these when here should be like above:

  when: "run_setup|bool and matrix_jitsi_enabled|bool"

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could be done in a separate PR as it's probably unrelated. Every task under setup_jitsi_jibri has sufficient checks.

tags:
- setup-all
- setup-jitsi
65 changes: 65 additions & 0 deletions roles/matrix-jitsi/tasks/setup_jitsi_jibri.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
---

#
# Tasks related to setting up jitsi-jibri
#

- name: Ensure Matrix jitsi-jibri path exists
file:
path: "{{ item.path }}"
state: directory
mode: 0777
owner: "{{ matrix_user_username }}"
group: "{{ matrix_user_groupname }}"
with_items:
- { path: "{{ matrix_jitsi_jibri_base_path }}", when: true }
- { path: "{{ matrix_jitsi_jibri_config_path }}", when: true }
- { path: "{{ matrix_jitsi_jibri_logs_path }}" , when: true}
- { path: "{{ matrix_jitsi_jibri_recording_path }}" , when: true}
when: matrix_jitsi_enabled|bool and matrix_jitsi_jibri_enabled|bool and item.when

- name: Ensure jitsi-jibri Docker image is pulled
docker_image:
name: "{{ matrix_jitsi_jibri_docker_image }}"
source: "{{ 'pull' if ansible_version.major > 2 or ansible_version.minor > 7 else omit }}"
force_source: "{{ matrix_jitsi_jibri_docker_image_force_pull if ansible_version.major > 2 or ansible_version.minor >= 8 else omit }}"
force: "{{ omit if ansible_version.major > 2 or ansible_version.minor >= 8 else matrix_jitsi_jibri_docker_image_force_pull }}"
when: matrix_jitsi_enabled|bool and matrix_jitsi_jibri_enabled|bool

- name: Ensure jitsi-jibri environment variables file created
template:
src: "{{ role_path }}/templates/jibri/env.j2"
dest: "{{ matrix_jitsi_jibri_base_path }}/env"
mode: 0640
when: matrix_jitsi_enabled|bool and matrix_jitsi_jibri_enabled|bool

- name: Ensure jitsi-jibri finalize.sh file created
template:
src: "{{ role_path }}/templates/jibri/finalize.sh.j2"
dest: "{{ matrix_jitsi_jibri_config_path }}/finalize.sh"
mode: 0740
when: matrix_jitsi_enabled|bool and matrix_jitsi_jibri_enabled|bool


- name: Ensure jitsi-jibri configuration files created
template:
src: "{{ role_path }}/templates/jibri/{{ item }}.j2"
dest: "{{ matrix_jitsi_jibri_config_path }}/{{ item }}"
mode: 0644
with_items:
- config.json
- logging.properties
when: matrix_jitsi_enabled|bool and matrix_jitsi_jibri_enabled|bool

- name: Ensure matrix-jitsi-jibri.service installed
template:
src: "{{ role_path }}/templates/jibri/matrix-jitsi-jibri.service.j2"
dest: "{{ matrix_systemd_path }}/matrix-jitsi-jibri.service"
mode: 0644
register: matrix_jitsi_jibri_systemd_service_result
when: matrix_jitsi_enabled|bool and matrix_jitsi_jibri_enabled|bool

- name: Ensure systemd reloaded after matrix-jitsi-jibri.service installation
service:
daemon_reload: yes
when: "matrix_jitsi_enabled and matrix_jitsi_jibri_systemd_service_result.changed"
8 changes: 8 additions & 0 deletions roles/matrix-jitsi/tasks/setup_jitsi_prosody.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
- { path: "{{ matrix_jitsi_prosody_base_path }}", when: true }
- { path: "{{ matrix_jitsi_prosody_config_path }}", when: true }
- { path: "{{ matrix_jitsi_prosody_plugins_path }}", when: true }
- { path: "{{ matrix_jitsi_prosody_confd_path }}", when: true }
when: matrix_jitsi_enabled|bool and item.when

- name: Ensure jitsi-prosody Docker image is pulled
Expand All @@ -32,6 +33,13 @@
mode: 0640
when: matrix_jitsi_enabled|bool

- name: Ensure jitsi- jibri.cfg.lua file created
template:
src: "{{ role_path }}/templates/jibri/jibri.cfg.lua.j2"
dest: "{{ matrix_jitsi_prosody_confd_path }}/jibri.cfg.lua"
mode: 0644
when: matrix_jitsi_enabled|bool and matrix_jitsi_jibri_enabled|bool

- name: Ensure matrix-jitsi-prosody.service installed
template:
src: "{{ role_path }}/templates/prosody/matrix-jitsi-prosody.service.j2"
Expand Down
61 changes: 61 additions & 0 deletions roles/matrix-jitsi/templates/jibri/config.json.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
{
"recording_directory":{{ matrix_jitsi_jibri_recording_path|string|to_json }},
// The path to the script which will be run on completed recordings
"finalize_recording_script_path": {{ matrix_jitsi_jibri_finalize_recording_script_path|string|to_json }},
"xmpp_environments": [
{
// A friendly name for this environment which can be used
// for logging, stats, etc.
"name": "prod environment",
// The hosts of the XMPP servers to connect to as part of
// this environment
"xmpp_server_hosts": [
{{ matrix_jitsi_xmpp_server|string|to_json }}
],
"xmpp_domain": {{ matrix_jitsi_xmpp_domain|string|to_json }},
// Jibri will login to the xmpp server as a privileged user
"control_login": {
"domain": {{ matrix_jitsi_xmpp_auth_domain|string|to_json }},
// The credentials for logging in
"username": {{ matrix_jitsi_jibri_xmpp_user|string|to_json }},
"password": {{ matrix_jitsi_jibri_xmpp_password|string|to_json }}
},
// Using the control_login information above, Jibri will join
// a control muc as a means of announcing its availability
// to provide services for a given environment
"control_muc": {
"domain": {{ matrix_jitsi_xmpp_internal_muc_domain|string|to_json }},
"room_name": {{ matrix_jitsi_jibri_brewery_muc|string|to_json }},
// MUST be unic for every instanse
"nickname": "jibri-instanse-1"
Comment on lines +29 to +30
Copy link
Contributor

@teutat3s teutat3s Nov 29, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Typos: unique & instance

},
// All participants in a call join a muc so they can exchange
// information. Jibri can be instructed to join a special muc
// with credentials to give it special abilities (e.g. not being
// displayed to other users like a normal participant)
"call_login": {
"domain": {{ matrix_jitsi_recorder_domain|string|to_json }},
"username": {{ matrix_jitsi_jibri_recorder_user|string|to_json }},
"password": {{ matrix_jitsi_jibri_recorder_password|string|to_json }}
},
// When jibri gets a request to start a service for a room, the room
// jid will look like:
// [email protected]_domain
// We'll build the url for the call by transforming that into:
// https://xmpp_domain/subdomain/roomName
// So if there are any prefixes in the jid (like jitsi meet, which
// has its participants join a muc at conference.xmpp_domain) then
// list that prefix here so it can be stripped out to generate
// the call url correctly
"room_jid_domain_string_to_strip_from_start": {{ matrix_jitsi_jibri_strip_domain_jid|string|to_json }},
// The amount of time, in minutes, a service is allowed to continue.
// Once a service has been running for this long, it will be
// stopped (cleanly). A value of 0 means an indefinite amount
// of time is allowed
"usage_timeout": "0",
// Whether or not we'll automatically trust any cert on
// this XMPP domain
trust-all-xmpp-certs = true
}
]
}
16 changes: 16 additions & 0 deletions roles/matrix-jitsi/templates/jibri/env.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
XMPP_AUTH_DOMAIN={{ matrix_jitsi_xmpp_auth_domain }}
XMPP_INTERNAL_MUC_DOMAIN={{ matrix_jitsi_xmpp_internal_muc_domain }}
XMPP_RECORDER_DOMAIN={{ matrix_jitsi_recorder_domain }}
XMPP_SERVER={{ matrix_jitsi_xmpp_server }}
XMPP_DOMAIN={{ matrix_jitsi_xmpp_domain }}
JIBRI_XMPP_USER={{ matrix_jitsi_jibri_xmpp_user }}
JIBRI_XMPP_PASSWORD={{ matrix_jitsi_jibri_xmpp_password }}
JIBRI_BREWERY_MUC={{ matrix_jitsi_jvb_brewery_muc }}
JIBRI_RECORDER_USER={{ matrix_jitsi_jibri_recorder_user }}
JIBRI_RECORDER_PASSWORD={{ matrix_jitsi_jibri_recorder_password }}
JIBRI_RECORDING_DIR={{ matrix_jitsi_jibri_recording_path }}
JIBRI_FINALIZE_RECORDING_SCRIPT_PATH={{ matrix_jitsi_jibri_finalize_recording_script_path }}
JIBRI_STRIP_DOMAIN_JID={{ matrix_jitsi_jibri_strip_domain_jid }}
JIBRI_LOGS_DIR={{ matrix_jitsi_jibri_logs_path }}
DISPLAY=:0
TZ={{ matrix_jitsi_timezone }}
Empty file.
12 changes: 12 additions & 0 deletions roles/matrix-jitsi/templates/jibri/jibri.cfg.lua.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
Component {{ matrix_jitsi_xmpp_internal_muc_domain|string|to_json }} "muc"
modules_enabled = {
"ping";
}
storage = "memory"
muc_room_cache_size = 1000

VirtualHost {{ matrix_jitsi_recorder_domain|string|to_json }}
modules_enabled = {
"ping";
}
authentication = "internal_plain"
34 changes: 34 additions & 0 deletions roles/matrix-jitsi/templates/jibri/logging.properties.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
handlers = java.util.logging.FileHandler, java.util.logging.ConsoleHandler

java.util.logging.FileHandler.level = FINE
java.util.logging.FileHandler.pattern = {{ matrix_jitsi_jibri_logs_path }}/log.%g.txt
java.util.logging.FileHandler.formatter = net.java.sip.communicator.util.ScLogFormatter
java.util.logging.FileHandler.count = 10
java.util.logging.FileHandler.limit = 10000000

org.jitsi.jibri.capture.ffmpeg.util.FfmpegFileHandler.level = FINE
org.jitsi.jibri.capture.ffmpeg.util.FfmpegFileHandler.pattern = {{ matrix_jitsi_jibri_logs_path }}/ffmpeg.%g.txt
org.jitsi.jibri.capture.ffmpeg.util.FfmpegFileHandler.formatter = net.java.sip.communicator.util.ScLogFormatter
org.jitsi.jibri.capture.ffmpeg.util.FfmpegFileHandler.count = 10
org.jitsi.jibri.capture.ffmpeg.util.FfmpegFileHandler.limit = 10000000

org.jitsi.jibri.sipgateway.pjsua.util.PjsuaFileHandler.level = FINE
org.jitsi.jibri.sipgateway.pjsua.util.PjsuaFileHandler.pattern = {{ matrix_jitsi_jibri_logs_path }}/pjsua.%g.txt
org.jitsi.jibri.sipgateway.pjsua.util.PjsuaFileHandler.formatter = net.java.sip.communicator.util.ScLogFormatter
org.jitsi.jibri.sipgateway.pjsua.util.PjsuaFileHandler.count = 10
org.jitsi.jibri.sipgateway.pjsua.util.PjsuaFileHandler.limit = 10000000

org.jitsi.jibri.selenium.util.BrowserFileHandler.level = FINE
org.jitsi.jibri.selenium.util.BrowserFileHandler.pattern = {{ matrix_jitsi_jibri_logs_path }}/browser.%g.txt
org.jitsi.jibri.selenium.util.BrowserFileHandler.formatter = net.java.sip.communicator.util.ScLogFormatter
org.jitsi.jibri.selenium.util.BrowserFileHandler.count = 10
org.jitsi.jibri.selenium.util.BrowserFileHandler.limit = 10000000

java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = net.java.sip.communicator.util.ScLogFormatter

org.jitsi.level = FINE

org.glassfish.level = INFO
org.osgi.level = INFO

32 changes: 32 additions & 0 deletions roles/matrix-jitsi/templates/jibri/matrix-jitsi-jibri.service.j2
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#jinja2: lstrip_blocks: "True"
[Unit]
Description=Matrix jitsi-jibri server
{% for service in matrix_jitsi_jibri_systemd_required_services_list %}
Requires={{ service }}
After={{ service }}
{% endfor %}

[Service]
Type=simple
ExecStartPre=-{{ matrix_host_command_docker }} kill matrix-jitsi-jibri
ExecStartPre=-{{ matrix_host_command_docker }} rm matrix-jitsi-jibri

ExecStart={{ matrix_host_command_docker }} run --rm --name matrix-jitsi-jibri \
--log-driver=none \
--network={{ matrix_docker_network }} \
--env-file={{ matrix_jitsi_jibri_base_path }}/env \
--device=/dev/snd:/dev/snd \
--mount type=bind,src={{ matrix_jitsi_jibri_config_path }},dst=/config \
{% for arg in matrix_jitsi_jibri_container_extra_arguments %}
{{ arg }} \
{% endfor %}
{{ matrix_jitsi_jibri_docker_image }}
Comment on lines +14 to +23
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.


ExecStop=-{{ matrix_host_command_docker }} kill matrix-jitsi-jibri
ExecStop=-{{ matrix_host_command_docker }} rm matrix-jitsi-jibri
Restart=always
RestartSec=30
SyslogIdentifier=matrix-jitsi-jibri

[Install]
WantedBy=multi-user.target