#!/bin/bash # Etherpad Installer for Jitsi Meet # SwITNet Ltd © - 2020, https://switnet.net/ # # GPLv3 or later. while getopts m: option do case "${option}" in m) MODE=${OPTARG};; \?) echo "Usage: sudo ./etherpad.sh [-m debug]" && exit;; esac done #DEBUG if [ "$MODE" = "debug" ]; then set -x fi if ! [ $(id -u) = 0 ]; then echo "You need to be root or have sudo privileges!" exit 0 fi clear echo ' ######################################################################## Etherpad Docker addon ######################################################################## by Software, IT & Networks Ltd ' check_apt_policy() { apt-cache policy 2>/dev/null| \ grep http | \ grep $1 | \ awk '{print $3}' | \ head -n 1 | \ cut -d "/" -f2 } install_ifnot() { if [ "$(dpkg-query -W -f='${Status}' $1 2>/dev/null | grep -c "ok installed")" == "1" ]; then echo " $1 is installed, skipping..." else echo -e "\n---- Installing $1 ----" apt-get -yq2 install $1 fi } DOMAIN=$(ls /etc/prosody/conf.d/ | grep -v localhost | awk -F'.cfg' '{print $1}' | awk '!NF || !seen[$0]++') MEET_CONF="/etc/jitsi/meet/$DOMAIN-config.js" WS_CONF="/etc/nginx/sites-enabled/$DOMAIN.conf" PSGVER="$(apt-cache madison postgresql | head -n1 | awk '{print $3}' | cut -d "+" -f1)" NODE_JS_REPO="$(check_apt_policy node_10)" ETHERPAD_USER="etherpad-lite" ETHERPAD_HOME="/opt/$ETHERPAD_USER" ETHERPAD_DB_USER="meetpad" ETHERPAD_DB_NAME="etherpad" ETHERPAD_DB_PASS="$(tr -dc "a-zA-Z0-9#*=" < /dev/urandom | fold -w 10 | head -n1)" ETHERPAD_SYSTEMD="/etc/systemd/system/etherpad-lite.service" # NodeJS echo "Addin NodeJS repo..." if [ "$NODE_JS_REPO" = "main" ]; then echo "NodeJS repository already installed" else curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash - apt-get update fi read -p "Set your etherpad docker admin password: " -r ETHERPAD_ADMIN_PASS # Install required packages install_ifnot jq install_ifnot nodejs install_ifnot postgresql-$PSGVER # Create DB echo -e "> Creating postgresql database for etherpad...\n" sudo -u postgres psql < $ETHERPAD_HOME/src/package.json bash $ETHERPAD_HOME/bin/installDeps.sh cp $ETHERPAD_HOME/settings.json $ETHERPAD_HOME/settings.json.backup cat << SETTINGS_JSON > $ETHERPAD_HOME/settings.json { "title": "Conference Etherpad", "favicon": "favicon.ico", "skinName": "colibris" "ip": "0.0.0.0", "port": 9001, "showSettingsInAdminPage": true, "ssl" : { "key" : "/etc/letsencrypt/live/$DOMAIN/privkey.pem", "cert" : "/etc/letsencrypt/live/$DOMAIN/fullchain.pem", }, "dbType" : "postgres", "dbSettings" : { "user" : "$ETHERPAD_DB_USER", "host" : "localhost", "password": "$ETHERPAD_DB_PASS", "database": "$ETHERPAD_DB_NAME", "charset" : "utf8mb4" } "defaultPadText" : "Welcome to Etherpad!\n\nThis pad text is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents!\n\nGet involved with Etherpad at https:\/\/etherpad.org\n", "users": { "admin": { // 1) "password" can be replaced with "hash" if you install ep_hash_auth // 2) please note that if password is null, the user will not be created "password": "$ETHERPAD_ADMIN_PASS", "is_admin": true } } } SETTINGS_JSON cat << SYSTEMD > $ETHERPAD_SYSTEMD [Unit] Description=Etherpad-lite, the collaborative editor. After=syslog.target network.target [Service] Type=simple User=$ETHERPAD_USER Group=$ETHERPAD_USER WorkingDirectory=$ETHERPAD_HOME Environment=NODE_ENV=production ExecStart=$ETHERPAD_HOME/bin/run.sh Restart=always [Install] WantedBy=multi-user.target SYSTEMD #Systemd services systemctl enable etherpad-lite systemctl restart etherpad-lite # Tune webserver for Jitsi App control if [ $(grep -c "etherpad" $WS_CONF) != 0 ]; then echo "> Webserver seems configured, skipping..." elif [ -f $WS_CONF ]; then echo "> Setting up webserver configuration file..." sed -i "/Anything that didn't match above/i \ \ \ \ location \^\~\ \/etherpad\/ {" $WS_CONF sed -i "/Anything that didn't match above/i \ \ \ \ \ \ \ \ proxy_pass http:\/\/localhost:9001\/;" $WS_CONF sed -i "/Anything that didn't match above/i \ \ \ \ \ \ \ \ proxy_set_header X-Forwarded-For \$remote_addr;" $WS_CONF sed -i "/Anything that didn't match above/i \ \ \ \ \ \ \ \ proxy_buffering off;" $WS_CONF sed -i "/Anything that didn't match above/i \ \ \ \ \ \ \ \ proxy_set_header Host \$host;" $WS_CONF sed -i "/Anything that didn't match above/i \ \ \ \ }" $WS_CONF sed -i "/Anything that didn't match above/i \\\n" $WS_CONF else echo "> No etherpad config done to server file, please report to: -> https://github.com/switnet-ltd/quick-jibri-installer/issues" fi # Configure config.js if [ $(grep -c "etherpad_base" $WS_CONF) != 0 ]; then echo -e "> $MEET_CONF seems configured, skipping...\n" else echo -e "> Setting etherpad domain at $MEET_CONF...\n" sed -i "/ domain: '$DOMAIN'/a\ \ \ \ \ \ \ \ etherpad_base: \'https://$DOMAIN/etherpad/p/\'," $MEET_CONF fi echo "> Checking nginx configuration..." nginx -t 2>/dev/null if [ $? = 0 ]; then echo -e " -- Docker configuration seems fine, enabling it." systemctl reload nginx else echo "Please check your configuration, something may be wrong." echo "Will not try to enable etherpad nginx configuration, please report to: -> https://github.com/switnet-ltd/quick-jibri-installer/issues" fi