forked from switnet/quick-jibri-installer
				
			
							parent
							
								
									8a78fe3850
								
							
						
					
					
						commit
						f88e487ef4
					
				| 
						 | 
				
			
			@ -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
 | 
			
		||||
		Loading…
	
		Reference in New Issue