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