This repository has been archived by the owner on Nov 12, 2023. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 63
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Working version as date of release.
- Loading branch information
Showing
1 changed file
with
343 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 |