2.-Instalacion de Jibri

Que es Jibri What is Jibri

Jibri proporciona servicios para grabar o transmitir una conferencia Jitsi Meet.

Funciona iniciando una instancia de Chrome renderizada en un framebuffer virtual y capturando y codificando la salida con ffmpeg. Está destinado a ejecutarse en una máquina separada (o una VM), sin otras aplicaciones que usen la pantalla o dispositivos de audio. Solo se admite una grabación a la vez en un solo jibri.

¿Qué le pasó al viejo Jibri?

Jibri se escribió originalmente en una combinación de python y bash, pero nos enfrentamos a algunos problemas de estabilidad, por lo que se reescribió. El código original todavía se puede encontrar en una rama aquí.

Diferencias entre el viejo y nuevo Jibri

Desde el punto de vista de la API, el nuevo Jibri es el mismo que el anterior en lo que respecta a la compatibilidad con versiones anteriores. La API XMPP, que es la forma principal en que interactuamos con Jibri, es exactamente la misma. El nuevo Jibri también agrega una API HTTP, aunque no tiene una paridad del 100% con la API XMPP y, a partir de este punto, se usó principalmente durante las pruebas para desencadenar las cosas más fácilmente. El nuevo código Jibri presenta otra API HTTP para la administración de Jibri (por ejemplo, apagado, apagado correcto, comprobaciones de estado).

El nuevo Jibri tiene un formato de archivo de configuración reorganizado. Una muestra de la configuración se puede encontrar aquí. Su configuración anterior de Jibri no funcionará con la nueva Jibri sin adaptarla al nuevo formato.

El nuevo Jibri ahora tiene un registro configurable, que se puede personalizar a través del archivo logging.properties.

Instalar Jibri. Installing Jibri

Notas de Instalación. Installation notes

  • Jibri fue construido en ubuntu 16.04 (Xenial), y ha sido probado con el kernel preconstruido y los módulos de kernel adicionales (paquete linux-image-extra-virtual). Cualquier otra distribución o configuración del kernel PUEDE funcionar pero no ha sido probada.
  • Jibri was built on ubuntu 16.04 (Xenial), and has been tested with the pre-built kernel and extra kernel modules (linux-image-extra-virtual package). Any other distribution or kernel configuration MAY work but has not been tested.

Requerimientos Previos. Pre-requisites

ALSA y Dispositivo de Loopback. ALSA and Loopback Device

  • Primero asegúrese de que el módulo loopback de ALSA esté disponible. Los módulos adicionales (incluido ALSA loopback) se pueden instalar en Ubuntu 16.04 usando el nombre del paquete linux-image-extra-virtual.First make sure the ALSA loopback module is available. The extra modules (including ALSA loopback) can be installed on Ubuntu 16.04 using package name linux-image-extra-virtual
  • Realice las siguientes tareas como usuario root.Perform the following tasks as the root user
    • Configure el módulo para que se cargue en el arranque:Set up the module to be loaded on boot:
      echo "snd-aloop" >> /etc/modules
    • Cargue el módulo en el Kernel :Load the module into the running kernel:
      modprobe snd-aloop
    • Verifique que el módulo ya esté cargado:Check to see that the module is already loaded:
      lsmod | grep snd_aloop
  • Si la salida muestra el módulo snd-aloop cargado, entonces se completa el paso de configuración de bucle de retorno ALSA.
    If the output shows the snd-aloop module loaded, then the ALSA loopback configuration step is complete.

Ffmpeg con soporte de captura en X11.Ffmpeg with X11 capture support

  • Jibri requires a relatively modern ffmpeg install with x11 capture compiled in. This comes by default in Ubuntu 16.04, by installing the ffmpeg package.
  • Jibri requiere una instalación ffmpeg relativamente moderna con captura x11 compilada. Esto viene por defecto en Ubuntu 16.04, al instalar el paquete ffmpeg.If building Jibri for Ubuntu 14.04 (trusty), the mc3man repo provides packages. They can be used by the following in Ubuntu 14.04:
    • sudo add-apt-repository ppa:mc3man/trusty-media
    • sudo apt-get update
    • sudo apt-get install ffmpeg

Google Chrome estable y Chromedriver.Google Chrome stable & Chromedriver

The latest Google Chrome stable build should be used. It may be able to be installed direclty via apt, but the manual instructions for installing it are as follows:

curl -sS -o - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add
echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list
apt-get -y update
apt-get -y install google-chrome-stable

Add chrome managed policies file and set CommandLineFlagSecurityWarningsEnabled to false. It will hide warnings in Chrome. You can set it like so:

mkdir -p /etc/opt/chrome/policies/managed
echo '{ "CommandLineFlagSecurityWarningsEnabled": false }' >>/etc/opt/chrome/policies/managed/managed_policies.json

Chromedriver is also required and can be installed like so:

CHROME_DRIVER_VERSION=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE`
wget -N http://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip -P ~/
unzip ~/chromedriver_linux64.zip -d ~/
rm ~/chromedriver_linux64.zip
sudo mv -f ~/chromedriver /usr/local/bin/chromedriver
sudo chown root:root /usr/local/bin/chromedriver
sudo chmod 0755 /usr/local/bin/chromedriver

Miscellaneous required tools

See the debian control file for the dependencies that are required. These can be installed using the following: sudo apt-get install default-jre-headless ffmpeg curl alsa-utils icewm xdotool xserver-xorg-input-void xserver-xorg-video-dummy

Jitsi Debian Repository

The Jibri packages can be found in the stable repository on downloads.jitsi.org. First install the Jitsi repository key onto your system:

wget -qO - https://download.jitsi.org/jitsi-key.gpg.key | sudo apt-key add -

Create a sources.list.d file with the repository:

sudo sh -c "echo 'deb https://download.jitsi.org stable/' > /etc/apt/sources.list.d/jitsi-stable.list"

Update your package list:

sudo apt-get update

Install the latest jibri

sudo apt-get install jibri

User, group

  • Jibri is currently meant to be run as a regular system user. This example creatively uses username ‘jibri’ and group name ‘jibri’, but any user will do. This has not been tested with the root user.
  • Ensure that the jibri user is in the correct groups to make full access of the audio and video devices. The example jibri account in Ubuntu 16.04 are: “adm”,”audio”,”video”,”plugdev”.
sudo usermod -aG adm,audio,video,plugdev jibri

Config files

  • Edit the config.json file (installed to /etc/jitsi/jibri/config.json by default) appropriately.

Logging

By default, Jibri logs to /var/log/jitsi/jibri. If you don’t install via the debian package, you’ll need to make sure this directory exists (or change the location to which Jibri logs by editing the log config

Configuring a Jitsi Meet environment for Jibri

Jibri requires some settings to be enabled within a Jitsi Meet configuration. These changes include virtualhosts and accounts in Prosody, settings for the jitsi meet web (within config.js) as well as jicofo sip-communicator.properties.

Prosody

Create the internal MUC component entry. This is required so that the jibri clients can be discovered by Jicofo in a MUC that’s not externally accessible by jitsi meet users. Add the following in /etc/prosody/prosody.cfg.lua:

-- internal muc component, meant to enable pools of jibri and jigasi clients
Component "internal.auth.yourdomain.com" "muc"
    modules_enabled = {
      "ping";
    }
    storage = "null"
    muc_room_cache_size = 1000

Create the recorder virtual host entry, to hold the user account for the jibri chrome session. This is used to restrict only authenticated jibri chrome sessions to be hidden participants in the conference being recordered. Add the following in /etc/prosody/prosody.cfg.lua:

VirtualHost "recorder.yourdomain.com"
  modules_enabled = {
    "ping";
  }
  authentication = "internal_plain"

Setup the two accounts jibri will use.

prosodyctl register jibri auth.yourdomain.com jibriauthpass
prosodyctl register recorder recorder.yourdomain.com jibrirecorderpass

The first account is the one Jibri will use to log into the control MUC (where Jibri will send its status and await commands). The second account is the one Jibri will use as a client in selenium when it joins the call so that it can be treated in a special way by the Jitsi Meet web UI.

Jicofo

Edit /etc/jitsi/jicofo/sip-communicator.properties (or similar), set the appropriate MUC to look for the Jibri Controllers. This should be the same MUC as is referenced in jibri’s config.json file. Restart Jicofo after setting this property. It’s also suggested to set the PENDING_TIMEOUT to 90 seconds, to allow the Jibri some time to start up before being marked as failed.

org.jitsi.jicofo.jibri.BREWERY=JibriBrewery@internal.auth.yourdomain.com
org.jitsi.jicofo.jibri.PENDING_TIMEOUT=90

Jitsi Meet

Edit the /etc/jitsi/meet/yourdomain-config.js file, add/set the following properties:

fileRecordingsEnabled: true, // If you want to enable file recording
liveStreamingEnabled: true, // If you want to enable live streaming
hiddenDomain: 'recorder.yourdomain.com',

Also make sure that in your interface config (/usr/share/jitsi-meet/interface_config.js by default), the TOOLBAR_BUTTONS array contains the recording value if you want to show the file recording button and the livestreaming value if you want to show the live streaming button.

Once recording is enabled in config.js, the recording button will become available in the user interface. However, until a valid jibri is seen by Jicofo, the mesage “Recording currently unavailable” will be displayed when it is pressed. Once a jibri connects successfully, the user will instead be prompted to enter a stream key.

Make sure to update Jibri’s config.json appropriately to match any config done above.

Start Jibri

Once you have configured config.json, start the jibri service: sudo systemctl restart jibri

https://community.jitsi.org/t/how-to-to-setup-integrated-jitsi-and-jibri-for-dummies-my-comprehensive-tutorial-for-the-beginner/35718


Installation of Jibri on Debian 10 (buster) server VM.

Miscelaneous packages

We will install all miscelaneous packages EXCEPT default-jre-headless:

apt update && install unzip ffmpeg curl alsa-utils icewm xdotool xserver-xorg-input-void xserver-xorg-video-dummy -y

ALSA and Loopback Device

Set up the module to be loaded on boot:

echo “snd-aloop” >> /etc/modules

Load the module into the running kernel:

modprobe snd-aloop

Check to see that the module is already loaded:

lsmod | grep snd_aloop

This should return (something like):

snd_aloop 28672 1
snd_pcm 114688 1 snd_aloop
snd 94208 5 snd_timer,snd_aloop,snd_pcm

Google Chrome stable & Chromedriver

Install the latest Google Chrome stable build:

curl -sS -o – https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add
echo “deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main” > /etc/apt/sources.list.d/google-chrome.list
apt update && apt install google-chrome-stable -y

Add chrome managed policies file and set CommandLineFlagSecurityWarningsEnabled to false. It will hide warnings in Chrome. You can set it like so:

mkdir -p /etc/opt/chrome/policies/managed
echo ‘{ “CommandLineFlagSecurityWarningsEnabled”: false }’ >>/etc/opt/chrome/policies/managed/managed_policies.json

Chromedriver is also required and can be installed like so:

CHROME_DRIVER_VERSION=curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE
wget -N http://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip -P ~/
unzip ~/chromedriver_linux64.zip -d ~/
rm ~/chromedriver_linux64.zip
mv -f ~/chromedriver /usr/local/bin/chromedriver
chown root:root /usr/local/bin/chromedriver
chmod 0755 /usr/local/bin/chromedriver

Jitsi/Jibri Debian Repository

The Jibri packages can be found in the stable repository on downloads.jitsi.org 1:

wget -qO – https://download.jitsi.org/jitsi-key.gpg.key | sudo apt-key add –
sh -c “echo ‘deb https://download.jitsi.org stable/’ > /etc/apt/sources.list.d/jitsi-stable.list”
apt update && apt install jibri -y

We want to make sure that user ‘jibri’ is part of the necessary groups:

usermod -aG adm,audio,video,plugdev jibri

With these steps, we have now the basic setup of Jibri done, but the service is not active (yet).
Before starting the Jibri service, we have to make sure that both servers “jitsi” and “jibri” get configured, so that they ‘know’ of each other’s existence. This configuration will be explained in the next post.

Cheers, Igor
Woodworker_Life
3
Apr 15

Configuring Jitsi and Jibri on Debian 10 (buster) server VM.

In this post, I will describe my steps to get a working setup of Jibri video recording. All steps are based on the readme instruction on Github with some additions and/or modifications.

Jibri setup document on Github: https://github.com/jitsi/jibri/blob/master/README.md 31

I will try to clarify these differences as well as I can. Please bear in mind: I consider myself a total newbe to linux; I enterd my first linux commands about 3 months ago. Maybe there are better practises to achieve my adaptations and I will appreciate your feedback and will try update this document in the weeks to come.

For clarity:

JITSI. When I speak of server: “jitsi”, this will be the server to host the jitsi meet services, your video conferences will be hosted on this server and your participants will connect to this server.
JIBRI. When I speak of server: “jibri”, this will be the server to host the jibri recording and streaming service. This server will connect to the “jitsi” server and host the recordings or stream the video to youtube.

Describing the mechanisms (in a nutshell)
a) We now have a working Jitsi Meet server and we are able to setup videoconference meetings with multiple participants. In order to enable recording of such videoconference meeting, we would need some sort of a participant to join the meeting in the background just like any other participant and grab the screen- and audio information, mix it, compress it, format it to a file that we can play in a video player like vlc or do the same but stream it to youtube. For this, the Jitsi team has created the Jibri server.
b) The Jibri server is installed with screen functionality (chrome browser and -driver) and with audio/video compression software (ffmpeg) and although the sever never really opens the chrome browser for us to view, it does launch all the chrome browser components so it can use the same functionality as any other participant in our videoconference meeting to login to the Jitsi server and participate in the background. When it is told to actually record- or stream the conference, it will grab all the information that is also seen by the other participants and send this to the ffmpeg services for processing.

Configuring Jitsi Meet to allow Jibri to connect and ‘participate’ in any videoconference.

In general, we will be touching 3 area’s for this:

Prosody (this as the background xmpp server. You can imagine this to be similar like an instan-messaging backend service)
Jicofo (this is another background service which takes care of switching/relaying the processes between all participants and the videobridge)
Jitsi Meet (consider this as the master service which takes care of presenting all functionality in your webbrowser)

Everything below this section needs to be changed on server “jitsi”: “myde360.xyz 16”

Prosody configuration

Create the internal Multi User Component (MUC) and the the recorder virtual host entry, login to server “jitsi” and:

nano /etc/prosody/conf.avail/myde360.xyz.cfg.lua

At the end of this file, add a dedicated section:

— internal muc component, meant to enable pools of jibri and jigasi clients
Component “internal.auth.myde360.xyz” “muc”
modules_enabled = {
“ping”;
}
storage = “memory”
muc_room_cache_size = 1000

VirtualHost “recorder.myde360.xyz”
modules_enabled = {
“ping”;
}
authentication = “internal_plain”

Reload prosody:

/etc/init.d/prosody reload

Create two users for Jibri (user: jibri and user: recorder):

prosodyctl register jibri auth.myde360.xyz JibrisPass
prosodyctl register recorder recorder.myde360.xyz RecordersPass

(Important: take note of these passwords, we will need them later also on server “jibri”!)

Jicofo configuration

Set the Multi User Component (MUC) to look out for Jibri:

nano /etc/jitsi/jicofo/sip-communicator.properties

In this file, add two lines:

org.jitsi.jicofo.jibri.BREWERY=JibriBrewery@internal.auth.myde360.xyz
org.jitsi.jicofo.jibri.PENDING_TIMEOUT=90

Reload jicofo:

/etc/init.d/jicofo reload

Jitsi Meet configuration

Make sure we have the button for recording and/or streaming in our config:

nano /etc/jitsi/meet/myde360.xyz-config.js

Look for following lines, uncomment the line and set value to ‘true’ or add if the line does not exist:

fileRecordingsEnabled: true, // If you want to enable file recording
liveStreamingEnabled: true, // If you want to enable live streaming
hiddenDomain: ‘recorder.myde360.xyz’,

Make sure we have the menu-option for recording and streaming available:

nano /usr/share/jitsi-meet/interface_config.js

Look for the section TOOLBAR_BUTTONS and make sure that the array contains ‘recordings’ and ‘livestreaming’.

image
image773×566 203 KB

Configure firewall port 5222:

ufw allow 5222/tcp

This is all we need to do on server “jitsi”.

Everything above this section needs to be changed on server “jitsi”: “myde360.xyz 16”

Everything below this section needs to be changed on server “jibri”: “recording.myfirewall.org 12”

We need to configure the xmpp environments and the directory where we want to store our recordings:

nano /etc/jitsi/jibri/config.json

Change settings according to:

{
“recording_directory”:”/srv/recordings”,
“finalize_recording_script_path”: “/path/to/finalize_recording.sh”,
“xmpp_environments”: [
{
“name”: “prod environment”,
“xmpp_server_hosts”: [
“myde360.xyz”
],
“xmpp_domain”: “myde360.xyz”,
“control_login”: {
// The domain to use for logging in
“domain”: “auth.myde360.xyz”,
// The credentials for logging in
“username”: “jibri”,
“password”: “JibrisPass”
},
“control_muc”: {
“domain”: “internal.auth.myde360.xyz”,
“room_name”: “JibriBrewery”,
“nickname”: “jibri-nickname”
},
“call_login”: {
“domain”: “recorder.myde360.xyz”,
“username”: “recorder”,
“password”: “RecordersPass”
},
“room_jid_domain_string_to_strip_from_start”: “conference.”,
“usage_timeout”: “0”
}
]
}

image
image981×1160 69.5 KB

Now we create the directory for the recordings and make sure user ‘jibri’ can write here:

mkdir /srv/recordings
chown jibri:jitsi /srv/recordings

Restart jibri service:

service jibri restart

This is all we need to do on server “jibri”.

Everything above this section needs to be changed on server “jibri”: “recording.myfirewall.org 12”

Testing recording

Once all these changes were in place, I even rebooted both servers. On the server “jibri”, the jibri service does not automatically start, so keep in mind to do so manually if needed.

Now I open my https://myde360.xyz/ 10 and start a meeting ‘test’. Once I Am presented with my videostream, I open the menu and choose ‘Start recording’. After some time to load, the recording was started. So after some seconds, I open the menu again and choose ‘Stop recording’.

On the server, I found the mp4 file of the recording in a sub-folder with a random generated folder-name:

/srv/recordings/oinwsjahyibvtnxk/test_2020-04-16-19-19-20.mp4

image
Mission accomplished!

Cheers, Igor

ps: I will not go over the streaming option as there is a good introduction available by youtuber Roberto A. Lineros:
How to stream videos in Youtube with Jitsi
Woodworker_Life
1
Apr 15

Troubleshooting steps – Jitsi and Jibri.

So now we have a server for Jitsi Meet and possibly also anotherone with Jibri and we expect to start videoconferences, recordings and youtube-streams… OR AT LEAST WE THINK WE HAVE!

If things go awry, then the search is on! It is one thing to try the black box and if it doesn’t work (or part of it doesn’t) start searching the community forum or your favorite search engine. It is more helpful to find more specific information from the logfiles that are generated. It is important to understand the services that are involved:

Jitsi Meet

This server depends mainly on 3 services: prosody, videobridge2 (sometimes called jvb) and jicofo. After server reboot, these services should start in order like:

/etc/init.d/prosody start
/etc/init.d/jitsi-videobridge2 start
sleep 5
/etc/init.d/jicofo start

When the server is running, we can check their status and the results look something like:

service prosody status
Shows:

● prosody.service – Prosody XMPP Server
Loaded: loaded (/lib/systemd/system/prosody.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2020-04-15 15:19:58 CEST; 1 day 9h ago
Docs: https://prosody.im/doc
Main PID: 3572 (lua5.2)
Tasks: 1 (limit: 4581)
Memory: 18.4M
CGroup: /system.slice/prosody.service
└─3572 lua5.2 /usr/bin/prosody

service jitsi-videobridge2 status
Shows:

● jitsi-videobridge2.service – Jitsi Videobridge
Loaded: loaded (/lib/systemd/system/jitsi-videobridge2.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2020-04-15 13:11:15 CEST; 1 day 11h ago
Process: 1106 ExecStartPost=/bin/bash -c echo $MAINPID > /var/run/jitsi-videobridge/jitsi-videobridge.pid (code=exited
Main PID: 1105 (java)
Tasks: 41 (limit: 65000)
Memory: 276.3M
CGroup: /system.slice/jitsi-videobridge2.service
└─1105 java -Xmx3072m -XX:+UseConcMarkSweepGC -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp -Dnet.jav

service jicofo status
Shows:

● jicofo.service – LSB: Jitsi conference Focus
Loaded: loaded (/etc/init.d/jicofo; generated)
Active: active (running) since Wed 2020-04-15 15:08:05 CEST; 1 day 9h ago
Docs: man:systemd-sysv-generator(8)
Process: 3192 ExecStart=/etc/init.d/jicofo start (code=exited, status=0/SUCCESS)
Tasks: 107 (limit: 4581)
Memory: 218.2M
CGroup: /system.slice/jicofo.service
└─3200 java -Xmx3072m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp -Dnet.java.sip.communicator.SC_HO

Jibri

This server depends on 1 service: jibri

service jibri status
Shows:

● jibri.service – Jibri Process
Loaded: loaded (/etc/systemd/system/jibri.service; disabled; vendor preset: enabled)
Active: active (running) since Wed 2020-04-15 13:16:18 CEST; 1 day 11h ago
Main PID: 749 (java)
Tasks: 36 (limit: 4581)
Memory: 471.4M
CGroup: /system.slice/jibri.service
└─749 java -Djava.util.logging.config.file=/etc/jitsi/jibri/logging.properties -jar /opt/jitsi/jibri/jibri.jar –config /etc/jitsi/jibri/config.json

Apr 15 13:16:18 jibri systemd[1]: Started Jibri Process.
Apr 15 13:16:20 jibri launch.sh[749]: SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder”.
Apr 15 13:16:20 jibri launch.sh[749]: SLF4J: Defaulting to no-operation (NOP) logger implementation
Apr 15 13:16:20 jibri launch.sh[749]: SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Apr 15 13:18:37 jibri launch.sh[749]: Starting ChromeDriver 81.0.4044.69 (6813546031a4bc83f717a2ef7cd4ac6ec1199132-refs/branch-heads/4044@{#776}) on port 26333
Apr 15 13:18:37 jibri launch.sh[749]: Only local connections are allowed.
Apr 15 13:18:37 jibri launch.sh[749]: Please protect ports used by ChromeDriver and related test frameworks to prevent access by malicious code.

Log-files

locations,

Jitsi:
/var/log/prosody
/var/log/jitsi
Jibri:
/var/log/jitsi/jibri

Investigation first part: check logfiles when services are started but idle
To investigate logfiles can be daunting, I suggest following approache(s):
Step 1: Stop all 3 services prosody, jitsi-videobridge2 and jicofo (or single service on jibri),
Step 2: Remove ALL files from the log-directories,
Step 3: Restart the services in order: prosody, jitsi-videobridge2 and jicofo
Wait approx. 1 minute and then Stop all 3 services again(!).

Now, the logfiles are not filling up anymore and they are not very large, which makes a first analysis more comfortable. Now aall lines with INFO messages can be removed to narrow the search even further down.

Investigation second part: check output when initialising/utilising a video conference
If you cannot find a cause for your problem, then a second phase should be considered to investigate more…
Step 1: If an error occurs, try to find the steps to reproduce the error. Do this several times to make sure you you know how to force the error!
Step 2: Stop all 3 services and Remove ALL files from the log-directories (like above),
Step 3: Restart the services in order: prosody, jitsi-videobridge2 and jicofo and rather soon proceed with the steps to force the error,
Step 4: Stop all 3 services again(!).

Now examine the logfiles and focus on the timing around the moment where the error was enforced. Also here I tend to remove all lines with INFO messages to narrow it even further down.

While writing this final document, I recognise that my jitsi-videobridge2 and jicofo are complaining with the same error:

CGroup: /system.slice/jicofo.service
└─3200 java -Xmx3072m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp -Dnet.java.sip.communicator.SC_HO

So that’s all folks, happy hunting! (I’m off… Hunting for more clues about “+HeapDumpOnOutOfMemoryError”), seems I need to peek in Path=/tmp

Cheers, Igor
hrmtc
Apr 15

Hi Woodworker_Life. Thanks for the detailed procedure.
When I execute the script to generate SSL certificates, it jumps to prompt right after enter my email account.

I have not idea why is this happening. Could you help me please?

Thanks!

root@jitsi:/etc/letsencrypt/renewal-hooks/deploy# sh /usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh

This script will:

  • Need a working DNS record pointing to this machine(for domain -ejitsi.rata.net)
  • Download certbot-auto from https://dl.eff.org to /usr/local/sbin
  • Install additional dependencies in order to request Let’s Encrypt certificate
  • If running with jetty serving web content, will stop Jitsi Videobridge
  • Configure and reload nginx or apache2, whichever is used
  • Configure the coturn server to use Let’s Encrypt certificate and add required deploy hooks
  • Add command in weekly cron job to renew certificates regularly

You need to agree to the ACME server’s Subscriber Agreement (https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf)
by providing an email address for important account notifications
Enter your email and press [ENTER]: myemail@gmail.com
–2020-04-15 23:11:39– https://dl.eff.org/certbot-auto
Resolving dl.eff.org (dl.eff.org)… 151.101.192.201, 151.101.128.201, 151.101.64.201, …
Connecting to dl.eff.org (dl.eff.org)|151.101.192.201|:443… connected.
HTTP request sent, awaiting response… 200 OK
Length: 80073 (78K) [application/octet-stream]
Saving to: ‘certbot-auto’

certbot-auto 100%[==========================================================>] 78.20K –.-KB/s in 0.01s

2020-04-15 23:11:39 (6.87 MB/s) – ‘certbot-auto’ saved [80073/80073]

root@jitsi:

Woodworker_Life
Apr 15

As I said in the beginning of my post: please consider me newbee! :slightly_smiling_face:

What I see is different from my steps is that you call the letsencrypt-script while you are in /etc/letsencrypt/renewal-hooks/deploy… Try:

cd -

(should return you to your root user directory)
and call the script again?.. Hope this works, otherwise we may need some mighty help from the community… 😉
hrmtc
Apr 15

Thanks for your response.

I followed your suggestion, but the same occurs.
I wonder if letsencrypt blacklisted my domain because of so many requests.
elgigi
Apr 16

Thanks for your how-to on these installation methods, @Woodworker_Life.

Would you mind posting your docs also in the github wiki on https://github.com/jitsi/jitsi-meet/wiki 13 ? You can create new pages for each how-to and add your pages to the Wiki home page. That would be very helpful for others and help build a more comprehensive documentation.
Woodworker_Life
Apr 16

thank you @elgigi for your feedback… To be honest I don’t fee really qualified to post on GitHub, I have never posted anything on GitHub, don’t even have an account. 😉

First I will observe the feeback here and IF my tutorial does not generate more questions than I can handle, I will consider to upload to GitHub wiki.

Have a great day!
Cheers, Igor
sbakki
hrmtc
Apr 16

It happened to me as well, i generated SSL certificate by hand and placed in appropriated directory.
hrmtc
Apr 16

I found that the script only works once with the domain you specified. If you try to run again the script jump directly to prompt.
I hope my experience helps to someone else.
Filippo_Puzzo
Woodworker_Life
Apr 19

Hi Woodworker_Life, i followed step by step your explanation, still jibri doesn’t work :frowning:
I’m using Ubuntu 16.04, as per Jibri readme. Any idea about problem?

PS: Jitsi works fine
masteryoda
Apr 19

please post the following logs from jibri server

/var/log/jitsi/jibri/log.0.txt
/var/log/jitsi/jibri/browser.0.txt

& jitsi server

/var/log/jitsi/jicofo.log
masteryoda
hrmtc
Apr 19

you can check if you’re domain has hit rate limits here

https://crt.sh 34
hrmtc
Apr 20

Thank you!
hrmtc
Apr 20

I found that the script only works once with the domain you specified. If you try to run again the script jump directly to prompt.

I want to share the solution in case anyone is experience the same problem:

If you want to reinstall your server utilizing the same subdomain than before, you must first revoke your letsencrypt certificate running the following command:

certbot revoke –cert-path /etc/letsencrypt/live/subdomain.yourdomain.com/cert.pem

Only then you will be able to run the script located at /usr/share/jitsi-meet/scripts/ succesfully.

:laughing: :pray:
arivonto
Woodworker_Life
Apr 20

Hi @Woodworker_Life ,

Great tutorial !

Allow me to correct a little confusion here. As you have mention on : https://aws1.discourse-cdn.com/business4/uploads/jitsi/original/2X/2/2384271218f011992a18527debd6483a6100f16f.png 8
you highlighted “recording” and “livestreaming” buttons.

As far as I understand, the livestreaming means that jibri connects to participant event via Youtube data API. But on your tutorial, I think there is no steps to trigger youtube API.

From what I understand by Participant Event is, any participant can initiate livestreaming from their youtube account.

Please correct me if I’m wrong.

Thank you and sincerely,
arivonto
RubensRainelli
Woodworker_Life
Apr 21

@Woodworker_Life great job!
I’d just suggest to enable ufw only after setting it up, in case you lost connection or similar you could remain trapped out of the server.

Did you even made a monkey proof tutorial for scalable configurations? The GitHub one is confusing me a lot
Woodworker_Life
arivonto
Apr 21

Hi @arivonto, functionality for recording AND streaming become both available when the implementation is done according the steps I describe. When recording, the resulting mp4 file will be stored on the server (in /srv/recordings). Youtube streaming will also be available and does not need a separate- or additional configuration or setup. When streaming, you will need to enter your youtube stream-id which I did not describe in my post; that is all explained in the youtube-clip that I linked at the end of my post…

Cheers, Igor
Woodworker_Life
RubensRainelli
Apr 21

Hi @RubensRainelli, got your point! I think I’m no longer allowed to edit my post (it seems this forum locks the edit-function when a post is older than 1 day), but it makes sense to do as you suggest indeed.

Thanks, cheers, Igor

Otro sitio más de Los Lucero