296 lines
10 KiB
Bash
296 lines
10 KiB
Bash
#!/bin/bash
|
|
# Jitsi Meet recurring upgrader and customization keeper
|
|
# for Debian/*buntu binaries.
|
|
# SwITNet Ltd © - 2023, 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
|
|
|
|
Blue='\e[0;34m'
|
|
Purple='\e[0;35m'
|
|
Red='\e[0;31m'
|
|
Green='\e[0;32m'
|
|
Yellow='\e[0;33m'
|
|
Color_Off='\e[0m'
|
|
printwc() {
|
|
printf "%b$2%b" "$1" "${Color_Off}"
|
|
}
|
|
#Check if user is root
|
|
if ! [ "$(id -u)" = 0 ]; then
|
|
echo "You need to be root or have sudo privileges!"
|
|
exit 0
|
|
fi
|
|
if [ ! -f jm-bm.sh ]; then
|
|
echo "Please check that you are running the jitsi updater while being on the project folder"
|
|
echo "other wise the updater might have errors or be incomplete. Exiting..."
|
|
exit
|
|
fi
|
|
support="https://switnet.net/support"
|
|
apt_repo="/etc/apt/sources.list.d"
|
|
ENABLE_BLESSM="TBD"
|
|
G_CHROME=$(apt-cache madison google-chrome-stable|awk '{print$3}'|cut -d. -f1-3)
|
|
CHROMELAB_URL="https://googlechromelabs.github.io/chrome-for-testing"
|
|
CHD_LTST_DWNL=$(curl -s $CHROMELAB_URL/known-good-versions-with-downloads.json | \
|
|
jq -r ".versions[].downloads.chromedriver | select(. != null) | .[].url" | \
|
|
grep linux64 | grep "$G_CHROME" | tail -1)
|
|
CHD_LTST=$(awk -F '/' '{print$7}' <<< "$CHD_LTST_DWNL")
|
|
CHD_LTST_2D="$(cut -d "." -f 1,2 <<< "$CHD_LTST")"
|
|
CHDB="$(whereis chromedriver | awk '{print$2}')"
|
|
if [ -d /etc/prosody/conf.d/ ]; then
|
|
DOMAIN="$(find /etc/prosody/conf.d/ -name \*.lua | \
|
|
awk -F'.cfg' '!/localhost/{print $1}' | xargs basename)"
|
|
else
|
|
echo -e "Seems no prosody is installed...\n > is this a jibri node?"
|
|
fi
|
|
NC_DOMAIN="TBD"
|
|
JITSI_MEET_PROXY="/etc/nginx/modules-enabled/60-jitsi-meet.conf"
|
|
if [ -f "$JITSI_MEET_PROXY" ];then
|
|
PREAD_PROXY="$(grep -nr "preread_server_name" "$JITSI_MEET_PROXY" | cut -d ":" -f1)"
|
|
fi
|
|
INT_CONF="/usr/share/jitsi-meet/interface_config.js"
|
|
INT_CONF_ETC="/etc/jitsi/meet/$DOMAIN-interface_config.js"
|
|
read -r -a jibri_packages < <(grep ^Package /var/lib/apt/lists/download.jitsi.org_*_Packages | \
|
|
sort -u | awk '{print $2}' | sed '/jigasi/d' | \
|
|
xargs)
|
|
AVATAR="$(grep -r avatar /etc/nginx/sites-*/ 2>/dev/null)"
|
|
if [ -f "$apt_repo"/google-chrome.list ]; then
|
|
read -r -a google_package < <(grep ^Package /var/lib/apt/lists/dl.google.com_*_Packages | \
|
|
sort -u | awk '{print $2}' | xargs)
|
|
else
|
|
echo "Seems no Google repo installed"
|
|
fi
|
|
if [ -f "$apt_repo"/nodesource.list ]; then
|
|
read -r -a nodejs_package < <(grep ^Package /var/lib/apt/lists/deb.nodesource.com_node*_Packages | \
|
|
sort -u | awk '{print $2}' | xargs)
|
|
else
|
|
echo "Seems no nodejs repo installed"
|
|
fi
|
|
# True if $1 is greater than $2
|
|
version_gt() { test "$(printf '%s\n' "$@" | sort -V | head -n 1)" != "$1"; }
|
|
|
|
restart_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
|
|
}
|
|
|
|
# Restarting services
|
|
restart_services() {
|
|
systemctl restart jitsi-videobridge2
|
|
systemctl restart jicofo
|
|
restart_jibri
|
|
systemctl restart prosody
|
|
}
|
|
|
|
update_jitsi_repo() {
|
|
apt-get update -o Dir::Etc::sourcelist="sources.list.d/jitsi-$1.list" \
|
|
-o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
|
|
apt-get install -q2 --only-upgrade <<< printf "${jibri_packages[@]}"
|
|
}
|
|
|
|
update_google_repo() {
|
|
if [ -f "$apt_repo"/google-chrome.list ]; then
|
|
apt-get update -o Dir::Etc::sourcelist="sources.list.d/google-chrome.list" \
|
|
-o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
|
|
apt-get install -q2 --only-upgrade <<< printf "${google_package[@]}"
|
|
else
|
|
echo "No Google repository found"
|
|
fi
|
|
if [ -z "$CHDB" ]; then
|
|
echo "Seems no chromedriver installed"
|
|
else
|
|
CHD_VER_LOCAL="$($CHDB -v | awk '{print $2}')"
|
|
CHD_VER_2D="$(awk '{printf "%.1f\n", $NF}' <<< "$CHD_VER_LOCAL")"
|
|
fi
|
|
}
|
|
update_nodejs_repo() {
|
|
apt-get update -o Dir::Etc::sourcelist="sources.list.d/nodesource.list" \
|
|
-o Dir::Etc::sourceparts="-" -o APT::Get::List-Cleanup="0"
|
|
apt-get install -q2 --only-upgrade <<< printf "${nodejs_package[@]}"
|
|
}
|
|
check_latest_gc() {
|
|
printwc "${Purple}" "Checking for Google Chrome\n"
|
|
if [ -f /usr/bin/google-chrome ]; then
|
|
GOOGL_VER_2D="$(/usr/bin/google-chrome --version|awk '{printf "%.1f\n", $NF}')"
|
|
else
|
|
printwc "${Yellow}" " -> Seems there is no Google Chrome installed\n"
|
|
IS_GLG_CHRM="no"
|
|
fi
|
|
}
|
|
check_latest_gc
|
|
upgrade_cd() {
|
|
if [ -n "$GOOGL_VER_2D" ]; then
|
|
check_latest_gc
|
|
if version_gt "$GOOGL_VER_2D" "$CHD_VER_2D" ; then
|
|
echo "Upgrading Chromedriver to Google Chromes version"
|
|
wget -q "$CHD_LTST_DWNL" \
|
|
-O /tmp/chromedriver_linux64.zip
|
|
unzip -o /tmp/chromedriver_linux64.zip -d /usr/local/bin/
|
|
mv /usr/local/bin/chromedriver-linux64/chromedriver "$CHDB"
|
|
chown root:root "$CHDB"
|
|
chmod 0755 "$CHDB"
|
|
rm -rf /tpm/chromedriver_linux64.zip
|
|
printf "Current version: "
|
|
printwc "$Green" "$($CHDB -v |awk '{print $2}'|awk '{printf "%.1f\n", $NF}')"
|
|
echo -e " (latest available)\n"
|
|
elif [ "$GOOGL_VER_2D" = "$CHD_LTST_2D" ]; then
|
|
echo "No need to upgrade Chromedriver"
|
|
printf "Current version: "
|
|
printwc "$Green" "$CHD_VER_2D\n"
|
|
fi
|
|
else
|
|
printwc "${Yellow}" " -> No Google Chrome versión to match, leaving untouched.\n"
|
|
fi
|
|
}
|
|
|
|
check_lst_cd() {
|
|
printwc "${Purple}" "Checking for the latest Chromedriver\n"
|
|
if [ -f "$CHDB" ]; then
|
|
printf "Current installed Chromedriver: "
|
|
printwc "${Yellow}" "$CHD_VER_2D\n"
|
|
printf "Current installed Google Chrome: "
|
|
printwc "${Green}" "$GOOGL_VER_2D\n"
|
|
upgrade_cd
|
|
else
|
|
printwc "${Yellow}" " -> Seems there is no Chromedriver installed\n"
|
|
IS_CHDB="no"
|
|
fi
|
|
}
|
|
|
|
printwc "${Blue}" "Update & upgrade Jitsi and components\n"
|
|
if [ -f "$apt_repo"/jitsi-unstable.list ]; then
|
|
update_jitsi_repo unstable
|
|
update_google_repo
|
|
check_lst_cd
|
|
elif [ -f "$apt_repo"/jitsi-stable.list ]; then
|
|
update_jitsi_repo stable
|
|
update_google_repo
|
|
check_lst_cd
|
|
else
|
|
echo "Please check your repositories, something is not right."
|
|
exit 1
|
|
fi
|
|
printwc "${Blue}" "Check for supported nodejs LTS version"
|
|
if version_gt "14" "$(dpkg-query -W -f='${Version}' nodejs)"; then
|
|
curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash -
|
|
apt-get install -yq2 nodejs
|
|
else
|
|
update_nodejs_repo
|
|
fi
|
|
check_if_installed(){
|
|
if [ "$(dpkg-query -W -f='${Status}' "$1" 2>/dev/null | grep -c "ok installed")" == "1" ]; then
|
|
echo "1"
|
|
else
|
|
echo "0"
|
|
fi
|
|
}
|
|
check_for_jibri_node() {
|
|
if [ "$(check_if_installed jibri)" = 1 ] && \
|
|
[ "$(check_if_installed jitsi-meet)" = 0 ] && \
|
|
[ "$(check_if_installed prosody)" = 0 ]; then
|
|
printwc "${Green}" "\n::: This seems to be a jibri node :::\n"
|
|
JIBRI_NODE="yes"
|
|
fi
|
|
}
|
|
# Any customization, image, name or link change for any purpose should
|
|
# be documented here so new updates won't remove those changes.
|
|
# We divide them on UI changes and branding changes, feel free to adapt
|
|
# to your needs.
|
|
#
|
|
# Please keep in mind that fees for support customization changes may
|
|
# apply.
|
|
########################################################################
|
|
# User interface changes #
|
|
########################################################################
|
|
#Check for jibri node
|
|
check_for_jibri_node
|
|
|
|
[ "$JIBRI_NODE" != yes ] && \
|
|
if [ -f "$INT_CONF_ETC" ]; then
|
|
echo "Static interface_config.js exists, skipping modification..."
|
|
else
|
|
echo "This setup doesn't have a static interface_config.js, checking changes..."
|
|
printwc "${Purple}" "========== Setting Static Avatar ==========\n"
|
|
if [ -z "$AVATAR" ]; then
|
|
echo "Moving on..."
|
|
else
|
|
echo "Setting Static Avatar"
|
|
sed -i "/RANDOM_AVATAR_URL_PREFIX/ s|false|\'http://$DOMAIN/avatar/\'|" "$INT_CONF"
|
|
sed -i "/RANDOM_AVATAR_URL_SUFFIX/ s|false|\'.png\'|" "$INT_CONF"
|
|
fi
|
|
printwc "${Purple}" "========== Setting Support Link ==========\n"
|
|
if [ -z "$support" ]; then
|
|
echo "Moving on..."
|
|
else
|
|
echo "Setting Support custom link"
|
|
sed -i "s|https://jitsi.org/live|$support|g" "$INT_CONF"
|
|
fi
|
|
printwc "${Purple}" "========== Disable Blur my background ==========\n"
|
|
sed -i "s|'videobackgroundblur', ||" "$INT_CONF"
|
|
fi
|
|
if [ "$(check_if_installed openjdk-8-jre-headless)" = 1 ]; then
|
|
printwc "${Red}" "\n::: Unsupported OpenJDK JRE version found :::\n"
|
|
apt-get install -y openjdk-11-jre-headless
|
|
apt-get purge -y openjdk-8-jre-headless
|
|
printwc "${Green}" "\n::: Updated to supported OpenJDK JRE version 11 :::\n"
|
|
fi
|
|
|
|
[ "$JIBRI_NODE" != yes ] && \
|
|
if [ "$NC_DOMAIN" != "TBD" ]; then
|
|
printwc "${Purple}" "========== Enable $NC_DOMAIN for sync client ==========\n"
|
|
if [ -f "$JITSI_MEET_PROXY" ] && [ -z "$PREAD_PROXY" ]; then
|
|
printf "\n Setting up Nextcloud domain on Jitsi Meet turn proxy\n\n"
|
|
sed -i "/server {/i \ \ map \$ssl_preread_server_name \$upstream {" "$JITSI_MEET_PROXY"
|
|
sed -i "/server {/i \ \ \ \ \ \ $DOMAIN web;" "$JITSI_MEET_PROXY"
|
|
sed -i "/server {/i \ \ \ \ \ \ $NC_DOMAIN web;" "$JITSI_MEET_PROXY"
|
|
sed -i "/server {/i \ \ }" "$JITSI_MEET_PROXY"
|
|
else
|
|
echo "$NC_DOMAIN seems to be on place, skipping..."
|
|
fi
|
|
fi
|
|
|
|
# Final check & upgrade call.
|
|
check_lst_cd
|
|
|
|
if [ "$JIBRI_NODE" = "yes" ]; then
|
|
restart_jibri
|
|
else
|
|
restart_services
|
|
fi
|
|
|
|
if [ "$JIBRI_NODE" = "yes" ] && \
|
|
[ "$IS_CHDB" = "no" ] && \
|
|
[ "$IS_GLG_CHRM" = "no" ];then
|
|
printwc "${Red}" "\nBeware: This jibri node seems to be missing important packages.\n"
|
|
echo " > Googe Chrome"
|
|
echo " > Chromedriver"
|
|
fi
|
|
########################################################################
|
|
# Brandless mode #
|
|
########################################################################
|
|
if [ "$ENABLE_BLESSM" = "on" ]; then
|
|
if [ "$MODE" = "debug" ]; then
|
|
bash "$PWD"/jm-bm.sh -m debug
|
|
else
|
|
bash "$PWD"/jm-bm.sh
|
|
fi
|
|
fi
|
|
printwc "${Blue}" "Script completed \o/!\n"
|