From f88e487ef4ff2f27c840ec30442acfc5b4b00c56 Mon Sep 17 00:00:00 2001 From: Luis Guzman Date: Tue, 25 Sep 2018 03:25:32 -0500 Subject: [PATCH] Publish Installer Working version as date of release. --- quick_jibri_installer.sh | 343 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 343 insertions(+) create mode 100644 quick_jibri_installer.sh diff --git a/quick_jibri_installer.sh b/quick_jibri_installer.sh new file mode 100644 index 0000000..6bcaddc --- /dev/null +++ b/quick_jibri_installer.sh @@ -0,0 +1,343 @@ +#!/bin/bash +# Quick Jibri Installer - *buntu 16.04 (LTS) based systems. +# SwITNet Ltd © - 2018, https://switnet.net/ +# GPLv3 or later. + +# SYSTEM SETUP +JITSI_UNS_REPO=$(apt-cache policy | grep http | grep jitsi | grep unstable | awk '{print $3}' | head -n 1 | cut -d "/" -f 1) +CERTBOT_REPO=$(apt-cache policy | grep http | grep certbot | head -n 1 | awk '{print $2}' | cut -d "/" -f 4) +APACHE_2=$(dpkg-query -W -f='${Status}' apache2 2>/dev/null | grep -c "ok installed") +NGINX=$(dpkg-query -W -f='${Status}' nginx 2>/dev/null | grep -c "ok installed") +DIST=$(lsb_release -sc) +GOOGL_REPO="/etc/apt/sources.list.d/dl_google_com_linux_chrome_deb.list" +CHD_VER=$(curl -sL https://chromedriver.storage.googleapis.com/LATEST_RELEASE) + +if [ $DIST = flidas ]; then +DIST="xenial" +fi +check_serv() { +if [ "$APACHE_2" -eq 1 ] || [ "$NGINX" -eq 1 ]; then + echo " +Webserver already installed! +" +else + echo " +Installing nginx as webserver! +" + apt -yqq install nginx +fi +} +check_snd_driver() { +modprobe snd-aloop +echo "snd-aloop" >> /etc/modules +if [ "$(lsmod | grep snd_aloop | head -n 1 | cut -d " " -f1)" = "snd_aloop" ]; then + echo "Audio driver seems ok." +else + echo "Seems to be an issue with your audio driver, please fix this before continue." + exit +fi +} +update_certbot() { + if [ "$CERTBOT_REPO" = "certbot" ]; then + echo " +Cerbot repository already on the system! +Checking for updates... +" + apt -qq update + apt -yqq dist-upgrade +else + echo " +Adding cerbot (formerly letsencrypt) PPA repository for latest updates +" + echo "deb http://ppa.launchpad.net/certbot/certbot/ubuntu $DIST main" > /etc/apt/sources.list.d/certbot.list + apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 75BCA694 + apt -qq update + apt -yqq dist-upgrade +fi +} + +clear +echo ' +######################################################################## + Welcome to Jitsi/Jibri Installer +######################################################################## + by Software, IT & Networks Ltd +' + +# Check correct user (sudo or root) +if [ "$EUID" == 0 ] + then echo "Ok, you have superuser powers" +else + echo "You should run it with root or sudo permissions." + exit +fi + +# Jitsi-Meet Repo +echo "Add Jitsi key" +if [ "$JITSI_UNS_REPO" = "unstable" ]; then + echo "Jitsi unstable repository already installed" +else + echo 'deb https://download.jitsi.org unstable/' > /etc/apt/sources.list.d/jitsi-unstable.list + wget -qO - https://download.jitsi.org/jitsi-key.gpg.key | apt-key add - +fi + +# Requirements +echo "We'll start by installing system requirements this may take a while please be patient..." +apt update -yq2 +apt dist-upgrade -yq2 +apt -yqq install \ + bmon \ + curl \ + ffmpeg \ + git \ + htop \ + linux-image-extra-virtual \ + unzip \ + wget +check_serv + +echo " +# Installing Jitsi Framework +" +apt -yqq install \ + jitsi-meet \ + jibri + +# ALSA - Loopback +echo "snd-aloop" | tee -a /etc/modules + +check_snd_driver + +echo "# Installing Google Chrome / ChromeDriver" +if [ -f $GOOGL_REPO ]; then +echo "Google repository already set." +else +echo "Installing Google Chrome Stable" + wget -q -O - https://dl.google.com/linux/linux_signing_key.pub | apt-key add - + echo "deb http://dl.google.com/linux/chrome/deb/ stable main" | tee $GOOGL_REPO +fi +apt -qq update +apt install -yqq google-chrome-stable +rm -rf /etc/apt/sources.list.d/dl_google_com_linux_chrome_deb.list + +if [ -f /usr/local/bin/chromedriver ]; then + echo "Chromedriver already installed." +else + echo "Installing Chromedriver" + wget https://chromedriver.storage.googleapis.com/$CHD_VER/chromedriver_linux64.zip -O /tmp/chromedriver_linux64.zip + unzip /tmp/chromedriver_linux64.zip -d /usr/local/bin/ + chown root:root /usr/local/bin/chromedriver + chmod 0755 /usr/local/bin/chromedriver + rm -rf /tpm/chromedriver_linux64.zip +fi + +# Check Google Software Working +/usr/bin/google-chrome --version +/usr/local/bin/chromedriver --version + + +echo ' +######################################################################## + Starting Jibri configuration +######################################################################## +' +# MEET / JIBRI SETUP +DOMAIN=$(ls /etc/prosody/conf.d/ | grep -v localhost | cut -d "." -f "1,2,3") +JB_AUTH_PASS_FILE=/var/JB_AUTH_PASS.txt +JB_REC_PASS_FILE=/var/JB_REC_PASS.txt +PROSODY_FILE=/etc/prosody/conf.d/$DOMAIN.cfg.lua +JICOFO_SIP=/etc/jitsi/jicofo/sip-communicator.properties +MEET_CONF=/etc/jitsi/meet/$DOMAIN-config.js +CONF_JSON=/etc/jitsi/jibri/config.json +DIR_RECORD=/tmp/recordings +REC_DIR=/home/jibri/finalize_recording.sh +JB_NAME="Jibri Sessions" +read -p "Jibri internal.auth.$DOMAIN password: "$'\n' -sr JB_AUTH_PASS +read -p "Jibri recorder.$DOMAIN password: "$'\n' -sr JB_REC_PASS +read -p "Jibri requires Drobbox Client ID to enable video recording: "$'\n' -r DB_CID +while [[ $ENABLE_SSL != yes && $ENABLE_SSL != no ]] +do +read -p "Do you want to setup LetsEncrypt with your domain: "$'\n' -r ENABLE_SSL +if [ $ENABLE_SSL = no ]; then + echo "Please run letsencrypt.sh manually post-installation." +elif [ $ENABLE_SSL = yes ]; then + echo "SSL will be enabled." +fi +done +echo "$JB_AUTH_PASS" > $JB_AUTH_PASS_FILE +chmod 600 $JB_AUTH_PASS_FILE +echo "$JB_REC_PASS" > $JB_REC_PASS_FILE +chmod 600 $JB_REC_PASS_FILE +JibriBrewery=JibriBrewery +INT_CONF=/usr/share/jitsi-meet/interface_config.js +WAN_IP=$(dig +short myip.opendns.com @resolver1.opendns.com) + +enable_letsencrypt() { +if [ "$SSL_ENABLE" = "yes" ]; then +echo ' +######################################################################## + Starting LetsEncrypt configuration +######################################################################## +' +bash /usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh +update_certbot +else +echo "SSL setup will be skipped." +fi +} + +check_jibri() { +if [ "$(dpkg-query -W -f='${Status}' "jibri" 2>/dev/null | grep -c "ok installed")" == "1" ] +then + service jibri restart + service jibri-icewm restart + service jibri-xorg restart +else + echo "Jibri service not installed" +fi +} + +# Restarting services +restart_services() { + service jitsi-videobridge restart + service jicofo restart + check_jibri + service prosody restart +} + +# Configure Jibri +## PROSODY +cat << MUC-JIBRI >> $PROSODY_FILE + +-- internal muc component, meant to enable pools of jibri and jigasi clients +Component "internal.auth.$DOMAIN" "muc" + modules_enabled = { + "ping"; + } + storage = "null" + muc_room_cache_size = 1000 + +MUC-JIBRI + +cat << REC-JIBRI >> $PROSODY_FILE + +VirtualHost "recorder.$DOMAIN" + modules_enabled = { + "ping"; + } + authentication = "internal_plain" + +REC-JIBRI + +### Prosody users +prosodyctl register jibri auth.$DOMAIN $JB_AUTH_PASS +prosodyctl register recorder recorder.$DOMAIN $JB_REC_PASS + +## JICOFO +# /etc/jitsi/jicofo/sip-communicator.properties +cat << BREWERY >> $JICOFO_SIP +#org.jitsi.jicofo.auth.URL=XMPP:$DOMAIN +org.jitsi.jicofo.jibri.BREWERY=$JibriBrewery@internal.auth.$DOMAIN +org.jitsi.jicofo.jibri.PENDING_TIMEOUT=90 +BREWERY + +# Jibri tweaks for /etc/jitsi/meet/$DOMAIN-config.js +sed -i "s|guest.example.com|guest.$DOMAIN|" $MEET_CONF +sed -i "s|conference.$DOMAIN|internal.auth.$DOMAIN|" $MEET_CONF +sed -i "s|// fileRecordingsEnabled: false,|fileRecordingsEnabled: true,| " $MEET_CONF +sed -i "s|// liveStreamingEnabled: false,|liveStreamingEnabled: true,\\ +\\ + hiddenDomain: \'recorder.$DOMAIN\',\\ +\\ + dropbox: \{\\ + clientId: \'$DB_CID\'\\ + },|" $MEET_CONF + +#LocalRecording +echo "# Enabling local recording (audio only)." + +sed -i "348,358 s|\}|\},|" $MEET_CONF +sed -i "s|// Local Recording|// Local Recording \\ +\\ + localRecording: \{\\ + enabled: true,\\ + format: 'flac'\\ + \}|" $MEET_CONF + +sed -i "s|'tileview'|'tileview', 'localrecording'|" $INT_CONF +#EOLR + +# Recording directory +cat << REC_DIR > $REC_DIR +#!/bin/bash + +RECORDINGS_DIR=$1 + +echo "This is a dummy finalize script" > /tmp/finalize.out +echo "The script was invoked with recordings directory $RECORDINGS_DIR." >> /tmp/finalize.out +echo "You should put any finalize logic (renaming, uploading to a service" >> /tmp/finalize.out +echo "or storage provider, etc.) in this script" >> /tmp/finalize.out + +exit 0 +REC_DIR + +## JSON Config +cp $CONF_JSON CONF_JSON.orig +cat << CONF_JSON > $CONF_JSON +{ + "recording_directory":"$DIR_RECORD", + "finalize_recording_script_path": "$REC_DIR", + "xmpp_environments": [ + { + "name": "$JB_NAME", + "xmpp_server_hosts": [ + "$WAN_IP" + ], + "xmpp_domain": "$DOMAIN", + "control_login": { + "domain": "auth.$DOMAIN", + "username": "jibri", + "password": "$JB_AUTH_PASS" + }, + "control_muc": { + "domain": "internal.auth.$DOMAIN", + "room_name": "$JibriBrewery", + "nickname": "Live" + }, + "call_login": { + "domain": "recorder.$DOMAIN", + "username": "recorder", + "password": "$JB_REC_PASS" + }, + + "room_jid_domain_string_to_strip_from_start": "internal.auth", + "usage_timeout": "0" + } + ] +} +CONF_JSON + +#Enable jibri services +systemctl enable jibri +systemctl enable jibri-xorg +systemctl enable jibri-icewm +restart_services + +enable_letsencrypt + +echo " +######################################################################## + Installation complete!! +######################################################################## +" +apt -y autoremove +apt autoclean + +echo "Rebooting in..." +secs=$((15)) +while [ $secs -gt 0 ]; do + echo -ne "$secs\033[0K\r" + sleep 1 + : $((secs--)) +done +reboot