forked from switnet/quick-jibri-installer
				
			
		
			
				
	
	
		
			208 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Bash
		
	
	
	
			
		
		
	
	
			208 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Bash
		
	
	
	
#!/bin/bash
 | 
						|
# Simple Jibri conf updater
 | 
						|
# SwITNet Ltd © - 2025, https://switnet.net/
 | 
						|
# GNU GPLv3 or later.
 | 
						|
 | 
						|
while getopts m: option
 | 
						|
do
 | 
						|
	case "${option}"
 | 
						|
	in
 | 
						|
		m) MODE=${OPTARG};;
 | 
						|
		\?) echo "Usage: sudo bash ./$0 [-m debug]" && exit;;
 | 
						|
	esac
 | 
						|
done
 | 
						|
 | 
						|
#DEBUG
 | 
						|
if [ "$MODE" = "debug" ]; then
 | 
						|
set -x
 | 
						|
fi
 | 
						|
 | 
						|
echo -e '
 | 
						|
########################################################################
 | 
						|
                  Welcome to Jibri Config Upgrader
 | 
						|
########################################################################
 | 
						|
                    by Software, IT & Networks Ltd
 | 
						|
\n'
 | 
						|
 | 
						|
#Check if user is root
 | 
						|
if ! [ "$(id -u)" = 0 ]; then
 | 
						|
   echo "You need to be root or have sudo privileges!"
 | 
						|
   exit 0
 | 
						|
fi
 | 
						|
 | 
						|
echo "Checking for updates...."
 | 
						|
apt-get -q2 update
 | 
						|
apt install -y \
 | 
						|
                apt-show-versions \
 | 
						|
                jq
 | 
						|
 | 
						|
echo -e "\n# Check for jibri\n"
 | 
						|
if [ "$(dpkg-query -W -f='${Status}' jibri 2>/dev/null | grep -c "ok installed")" == "1" ]; then
 | 
						|
    echo "Jibri is installed, checking version:"
 | 
						|
    apt-show-versions jibri
 | 
						|
else
 | 
						|
    echo "Wait!, jibri is not installed on this system using apt, exiting..."
 | 
						|
    exit
 | 
						|
fi
 | 
						|
 | 
						|
if [ -d /etc/prosody/ ];then
 | 
						|
DOMAIN="$(find /etc/prosody/conf.d/ -name \*.lua|awk -F'.cfg' '!/localhost/{print $1}'|xargs basename)"
 | 
						|
fi
 | 
						|
CONF_JSON="/etc/jitsi/jibri/config.json"
 | 
						|
JIBRI_CONF="/etc/jitsi/jibri/jibri.conf"
 | 
						|
DIR_RECORD="/var/jbrecord"
 | 
						|
REC_DIR="/home/jibri/finalize_recording.sh"
 | 
						|
JibriBrewery="JibriBrewery"
 | 
						|
 | 
						|
check_read_vars() {
 | 
						|
    echo "Checking $1"
 | 
						|
    if [ -z "$2" ];then
 | 
						|
        echo "This variable seems wrong, please check before continue"
 | 
						|
        exit 1
 | 
						|
    fi
 | 
						|
}
 | 
						|
restart_services_jibri() {
 | 
						|
if [ "$(dpkg-query -W -f='${Status}' "jibri" 2>/dev/null | grep -c "ok installed")" == "1" ]
 | 
						|
then
 | 
						|
	systemctl restart jibri
 | 
						|
	systemctl restart jibri-icewm
 | 
						|
	systemctl restart jibri-xorg
 | 
						|
else
 | 
						|
	echo "Jibri service not installed"
 | 
						|
fi
 | 
						|
}
 | 
						|
 | 
						|
#Prevent re-run on completed jibri upgraded instance
 | 
						|
if [ -f "$CONF_JSON"_disabled ] && \
 | 
						|
   [ -f "$JIBRI_CONF" ] && \
 | 
						|
   [ -f "$JIBRI_CONF"-dpkg-file ]; then
 | 
						|
    echo -e "\n> This jibri config has been upgraded already, we'll exit...\n\nIf you think there maybe an error on checking you current jibri configuration.\nPlease report this to \
 | 
						|
https://forge.switnet.net/switnet/quick-jibri-installer/issues\n"
 | 
						|
    exit
 | 
						|
elif [ ! -f "$CONF_JSON" ] && \
 | 
						|
   [ -f "$JIBRI_CONF" ] && \
 | 
						|
   [ -f "$JIBRI_CONF"-dpkg-file ]; then
 | 
						|
    echo -e "\n> This jibri seems to be running the latest configuration already, we'll exit...\n\nIf you think there maybe an error on checking you current jibri configuration.\nPlease report this to \
 | 
						|
https://forge.switnet.net/switnet/quick-jibri-installer/issues\n"
 | 
						|
    exit
 | 
						|
elif [ -f "$CONF_JSON" ] && \
 | 
						|
   [ -f "$JIBRI_CONF" ]; then
 | 
						|
    echo -e "\n> This jibri config seems to be candidate for upgrading, we'll continue...\nIf you think there maybe an error on checking you current jibri configuration.\nPlease report this to \
 | 
						|
https://forge.switnet.net/switnet/quick-jibri-installer/issues\n"
 | 
						|
fi
 | 
						|
 | 
						|
#Read missing variables
 | 
						|
if [ -f "$CONF_JSON" ]; then
 | 
						|
    echo "Reading current config.json file..."
 | 
						|
    if [ -z "$DOMAIN" ]; then
 | 
						|
        DOMAIN="$(jq .xmpp_environments[0].xmpp_domain $CONF_JSON|cut -d '"' -f2)"
 | 
						|
    fi
 | 
						|
    JB_NAME="$(jq .xmpp_environments[0].name $CONF_JSON|cut -d '"' -f2)"
 | 
						|
    JB_AUTH_PASS="$(jq .xmpp_environments[0].control_login.password $CONF_JSON|cut -d '"' -f2)"
 | 
						|
    JB_REC_PASS="$(jq .xmpp_environments[0].call_login.password $CONF_JSON|cut -d '"' -f2)"
 | 
						|
    JB_NICKN="$(jq .xmpp_environments[0].control_muc.nickname $CONF_JSON|cut -d '"' -f2)"
 | 
						|
else
 | 
						|
    echo "Can't find the instance config.json file, exiting..."
 | 
						|
    exit
 | 
						|
fi
 | 
						|
 | 
						|
check_read_vars "Jibri Name" "$JB_NAME"
 | 
						|
check_read_vars "(Main server) Domain" "$DOMAIN"
 | 
						|
check_read_vars "Control login passwd" "$JB_AUTH_PASS"
 | 
						|
check_read_vars "Call login passwd" "$JB_REC_PASS"
 | 
						|
check_read_vars "Jibri Node nickname" "$JB_NICKN"
 | 
						|
 | 
						|
if [ "$MODE" = "debug" ]; then
 | 
						|
echo "$JB_NAME"
 | 
						|
echo "$DOMAIN"
 | 
						|
echo "$JB_AUTH_PASS"
 | 
						|
echo "$JB_REC_PASS"
 | 
						|
echo "$JB_NICKN"
 | 
						|
fi
 | 
						|
 | 
						|
#Backup and setup new conf file
 | 
						|
echo -e "Backing up config.json for historical purposes at:\n ${CONF_JSON}_disabled"
 | 
						|
mv "$CONF_JSON" "${CONF_JSON}"_disabled
 | 
						|
 | 
						|
mv "$JIBRI_CONF" "${JIBRI_CONF}"-dpkg-file
 | 
						|
cat << NEW_CONF > "$JIBRI_CONF"
 | 
						|
// New XMPP environment config.
 | 
						|
jibri {
 | 
						|
    recording {
 | 
						|
         recordings-directory = $DIR_RECORD
 | 
						|
         finalize-script = $REC_DIR
 | 
						|
    }
 | 
						|
    api {
 | 
						|
        xmpp {
 | 
						|
            environments = [
 | 
						|
                {
 | 
						|
				// A user-friendly name for this environment
 | 
						|
				name = "$JB_NAME"
 | 
						|
 | 
						|
				// A list of XMPP server hosts to which we'll connect
 | 
						|
				xmpp-server-hosts = [ "$DOMAIN" ]
 | 
						|
 | 
						|
				// The base XMPP domain
 | 
						|
				xmpp-domain = "$DOMAIN"
 | 
						|
 | 
						|
				// The MUC we'll join to announce our presence for
 | 
						|
				// recording and streaming services
 | 
						|
				control-muc {
 | 
						|
					domain = "internal.auth.$DOMAIN"
 | 
						|
					room-name = "$JibriBrewery"
 | 
						|
					nickname = "$JB_NICKN"
 | 
						|
				}
 | 
						|
 | 
						|
				// The login information for the control MUC
 | 
						|
				control-login {
 | 
						|
					domain = "auth.$DOMAIN"
 | 
						|
					username = "jibri"
 | 
						|
					password = "$JB_AUTH_PASS"
 | 
						|
				}
 | 
						|
 | 
						|
				// An (optional) MUC configuration where we'll
 | 
						|
				// join to announce SIP gateway services
 | 
						|
			//	sip-control-muc {
 | 
						|
			//		domain = "domain"
 | 
						|
			//		room-name = "room-name"
 | 
						|
			//		nickname = "nickname"
 | 
						|
			//	}
 | 
						|
 | 
						|
				// The login information the selenium web client will use
 | 
						|
				call-login {
 | 
						|
					domain = "recorder.$DOMAIN"
 | 
						|
					username = "recorder"
 | 
						|
					password = "$JB_REC_PASS"
 | 
						|
				}
 | 
						|
 | 
						|
				// The value we'll strip from the room JID domain to derive
 | 
						|
				// the call URL
 | 
						|
				strip-from-room-domain = "conference."
 | 
						|
 | 
						|
				// How long Jibri sessions will be allowed to last before
 | 
						|
				// they are stopped.  A value of 0 allows them to go on
 | 
						|
				// indefinitely
 | 
						|
				usage-timeout = 0 hour
 | 
						|
 | 
						|
				// Whether or not we'll automatically trust any cert on
 | 
						|
				// this XMPP domain
 | 
						|
				trust-all-xmpp-certs = true
 | 
						|
                }
 | 
						|
            ]
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 | 
						|
NEW_CONF
 | 
						|
 | 
						|
echo "Check final jibri.conf file:"
 | 
						|
cat "$JIBRI_CONF"
 | 
						|
read -n 1 -s -r -p "Press any key to continue..."
 | 
						|
 | 
						|
restart_services_jibri
 | 
						|
systemctl status jibri
 | 
						|
 | 
						|
if [ -f /var/log/jitsi/jicofo.log ]; then
 | 
						|
    echo -e "Checking for jicofo recognizing \"Live\" jibri node..."
 | 
						|
    tail -n 10 | grep Live
 | 
						|
fi
 |