2009-11-04 08:33:36 +08:00
#!/bin/bash
#
# Copyright (c) 2008-2009 by BigBlueButton
#
# This file is part of BigBlueButton - http://www.bigbluebutton.org
#
# BigBlueButton is free software; you can redistribute it and/or modify it under the
# terms of the GNU Lesser General Public License as published by the Free Software
# Foundation; either version 3 of the License, or (at your option) any later
# version.
#
# BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License along
2009-12-12 05:20:34 +08:00
# with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
2009-11-04 08:33:36 +08:00
#
# Author(s):
# Fred Dixon <ffdixon@bigbluebutton.org>
#
# Changelog:
2009-12-12 05:20:34 +08:00
# 2009-10-18 FFD Inital Version
# 2009-11-05 FFD Updated for 0.62
# 2009-12-09 FFD Updated for 0.63
# 2009-12-11 FFD Added ability to swtich conference servers
2009-12-13 01:56:14 +08:00
# 2009-12-12 FFD Added cleaning and watching of log files
2010-01-06 07:57:22 +08:00
# 2010-01-05 FFD Added zipping of log files
2010-01-19 10:20:22 +08:00
# 2010-01-18 FFD Added resetting of environment back to using packages
2009-11-04 08:33:36 +08:00
2009-12-13 01:56:14 +08:00
# set -x
2009-11-04 08:33:36 +08:00
2010-01-25 23:49:56 +08:00
#
# This ensures that we checkout the 0.63 release of BigBlueButton
#
RELEASE="-r 3489"
2010-02-09 05:22:16 +08:00
get_platform() {
2010-02-12 00:32:09 +08:00
if [ -f /etc/lsb-release ]; then
if grep -q Ubuntu /etc/lsb-release; then
echo "ubuntu"
else
echo "redhat"
fi
2010-02-09 05:22:16 +08:00
else
2010-02-12 00:32:09 +08:00
echo "redhat"
2010-02-09 05:22:16 +08:00
fi
}
PLATFORM=$(get_platform)
is_redhat() {
if [ "$PLATFORM" == "redhat" ]; then
echo "yes"
fi
}
is_ubuntu() {
if [ "$PLATFORM" == "ubuntu" ]; then
echo "yes"
fi
}
is_vm() {
if [ -f /home/firstuser/.profile ]; then
echo $(cat /home/firstuser/.profile | grep BigBlueButton)
fi
}
2010-02-12 00:32:09 +08:00
if [ "$(is_redhat)" ]; then
2010-02-09 05:22:16 +08:00
RED5_DIRECTORY="/opt/red5"
ACTIVEMQ_DIRECTORY="/opt/activemq"
TOMCAT6_LOGS="/var/log/tomcat6"
else
2010-02-12 00:32:09 +08:00
if [ "$(is_ubuntu)" ]; then
2010-02-09 05:22:16 +08:00
RED5_DIRECTORY="/usr/share/red5"
ACTIVEMQ_DIRECTORY="/usr/share/activemq"
TOMCAT6_LOGS="/var/lib/tomcat6/logs"
fi
fi
2009-11-06 04:57:56 +08:00
print_header() {
if [ ! $HEADER ]; then
2010-02-09 05:22:16 +08:00
echo
2009-11-06 06:48:31 +08:00
echo "** Potential Problems **"
2009-11-06 04:57:56 +08:00
HEADER=1
fi
}
2009-11-04 08:33:36 +08:00
check_root() {
if [ $EUID == 0 ]; then
echo "This opearation should not be run as root."
echo
echo "If this operation needs to execute an operation as root, you'll be asked for"
echo "your password to execute the operation using sudo."
exit 1
fi
}
2009-12-12 05:20:34 +08:00
need_root() {
if [ $EUID != 0 ]; then
2009-12-13 22:34:01 +08:00
echo "Need to be root to run this option"
2009-12-12 05:20:34 +08:00
exit 1
fi
}
2009-12-10 06:49:49 +08:00
usage() {
2010-01-16 22:28:53 +08:00
echo "$0 [options]"
2009-11-04 08:33:36 +08:00
echo
echo "Options:"
echo " --help This message"
echo " --version Display BigBlueButton version"
2009-11-05 12:08:22 +08:00
echo " --setip <host> Set IP/Hostname for BigBlueButton's configuration"
2009-12-13 01:56:14 +08:00
echo
2010-01-16 22:28:53 +08:00
echo "Development:"
2009-12-13 01:56:14 +08:00
echo " --check Check current settings"
2010-01-21 00:57:33 +08:00
echo " --conference [konference|meetme] Switch conference module in Asterisk"
2009-12-13 01:56:14 +08:00
echo " --debug Check the log files for errors"
2010-02-12 00:32:09 +08:00
if [ "$(is_vm)" ]; then
2010-02-09 05:22:16 +08:00
echo " --setup-samba Setup samba share for development (VM only)"
echo " --setup-dev [bbb-web|bbb-client|bbb-apps] "
echo " --reset-dev Reset environment back to using packages"
fi
2010-01-06 07:57:22 +08:00
echo " --watch Watch log files for error messages every 2 seconds"
echo " --zip Zip up log files for reporting an error"
2009-12-13 01:56:14 +08:00
echo
2010-01-16 22:28:53 +08:00
echo "version: 0.63-10"
2009-11-04 08:33:36 +08:00
echo
}
# utility function to make a copy of the conf file
check_and_backup () {
# can we write to the configuration file?
if [ ! -w $1 ]; then
echo "Cannot write to $1!"
exit 1
fi
# let's see if we need a copy
if [ "$TO_BACKUP" = "Y" ]; then
cp $1 $1.bak
TO_BACKUP="N"
fi
}
# 3 paramenter: the file, the variable name, the new value
change_var_value () {
check_and_backup $1
sed -i "s<^[[:blank:]#]*\(${2}\).*<\1=\"${3}\"<" $1
}
# comment lines matching $2 ($1 is the file)
comment () {
check_and_backup $1
sed -i "s<^[[:blank:]]*\(${2}.*\)<#\1<" $1
}
# comment lines matching $2 ($1 is the file)
uncomment () {
check_and_backup $1
sed -i "s<^[#[:blank:]]*\(${2}.*\)<\1<" $1
}
if [ $# -eq 0 ]; then
usage
exit 1
fi
# Parse the parameters
while [ $# -gt 0 ]; do
if [ "$1" = "-h" -o "$1" = "-help" -o "$1" = "?" -o "$1" = "--help" ]; then
usage
exit 1
fi
2009-11-06 02:33:28 +08:00
if [ "$1" = "-check" -o "$1" = "--check" -o "$1" = "-c" ]; then
2009-11-04 08:33:36 +08:00
CHECK=1
2009-11-06 02:33:28 +08:00
shift
2009-11-05 12:08:22 +08:00
continue
2009-11-04 08:33:36 +08:00
fi
2009-11-04 09:18:58 +08:00
if [ "$1" = "--setup-samba" -o "$1" = "-setup-samba" ]; then
SAMBA=1
2009-11-06 02:33:28 +08:00
shift
continue
fi
if [ "$1" = "--version" -o "$1" = "-version" -o "$1" = "-v" ]; then
VERSION=1
shift
2009-11-04 09:18:58 +08:00
continue
fi
2009-12-10 06:49:49 +08:00
if [ "$1" = "--debug" -o "$1" = "-debug" -o "$1" = "-d" ]; then
DEBUG=1
shift
continue
fi
2010-01-16 22:28:53 +08:00
if [ "$1" = "--clean" -o "$1" = "-clean" ]; then
2009-12-13 01:56:14 +08:00
CLEAN=1
shift
continue
fi
if [ "$1" = "--watch" -o "$1" = "-watch" -o "$1" = "-w" ]; then
WATCH=1
shift
continue
fi
2009-12-13 22:34:01 +08:00
if [ "$1" = "--network" -o "$1" = "-network" -o "$1" = "-n" ]; then
NETWORK=1
shift
continue
fi
2010-01-06 07:57:22 +08:00
if [ "$1" = "--zip" -o "$1" = "-zip" -o "$1" = "-z" ]; then
ZIP=1
shift
continue
fi
2010-01-19 10:20:22 +08:00
if [ "$1" = "--reset-dev" -o "$1" = "-reset-dev" -o "$1" = "-r" ]; then
RESET_DEV=1
shift
continue
fi
2009-11-04 08:33:36 +08:00
#
# all other parameters requires at least 1 argument
#
if [ $# -lt 2 ]; then
usage
exit 1
fi
if [ "$1" = "-setip" -o "$1" = "--setip" ]; then
2009-11-05 12:08:22 +08:00
HOST="${2}"
2009-11-04 08:33:36 +08:00
shift; shift
continue
fi
2009-11-04 23:35:48 +08:00
if [ "$1" = "--setup-dev" -o "$1" = "-setup-dev" ]; then
SETUPDEV="${2}"
shift; shift
continue
fi
2010-01-16 22:28:53 +08:00
if [ "$1" = "--conference" -o "$1" = "-conference" ]; then
2009-12-12 05:20:34 +08:00
CONFERENCE="${2}"
shift; shift
continue
fi
2009-11-04 08:33:36 +08:00
usage
exit 1
done
#
# Version
#
if [ $VERSION ]; then
2010-02-12 00:32:09 +08:00
if [ "$(is_redhat)" ]; then
2010-02-09 05:22:16 +08:00
echo "$(yum list installed | grep bbb-conf)"
else
2010-02-12 00:32:09 +08:00
if [ "$(is_ubuntu)" ]; then
2010-02-09 05:22:16 +08:00
echo
dpkg -l | grep bbb
fi
fi
2009-11-04 08:33:36 +08:00
exit 0
fi
2009-11-04 09:18:58 +08:00
#
# Setup samba
#
if [ $SAMBA ]; then
2010-01-24 12:00:01 +08:00
check_root
2009-11-04 09:18:58 +08:00
#
# Instal Samba
#
if ! dpkg-query -s samba > /dev/null 2>&1; then
2009-11-07 00:15:45 +08:00
sudo apt-get install -y --force-yes samba ant
2009-11-04 09:18:58 +08:00
fi
#
# Add a share to samba
#
if ! grep -q $USER /etc/samba/smb.conf; then
2010-01-24 03:31:34 +08:00
IP=$(ifconfig | grep -v '127.0.0.1' | grep -m 1 'inet addr:' | cut -d: -f2 | awk '{ print $1}')
2009-11-04 09:18:58 +08:00
echo ";
; BigBlueButton: Share the development directory
[$USER]
comment = BigBlueButton Development share
path = /home/$USER
browseable = yes
read only = no
create mask = 0755
directory mask = 0775
guest ok = yes
force user = $USER
" | sudo tee -a /etc/samba/smb.conf > /dev/null 2>&1
sudo /etc/init.d/samba restart
echo "
You can now access your development folder through:
2010-01-24 12:00:01 +08:00
\\\\${IP}\\$USER
2009-11-04 09:18:58 +08:00
If you are running a development environment on Windows (such as using Eclipse or FlexBuilder),
you can map the above path to a drive letter.
"
else
echo "Already detected a definition for $USER in /etc/samba/smb.conf"
echo "No changes were made to /etc/samba/smb.conf"
fi
fi
2009-11-04 08:33:36 +08:00
#
# Setup the development environemnt.
#
if [ $SETUPDEV ]; then
check_root
2010-01-06 07:57:22 +08:00
# This is a step towards setting up a development environment on a non-BigBlueButton VM
which svn
if [ $? != 0 ]; then
sudo apt-get install subversion ant -y --force-yes
fi
2009-11-04 09:18:58 +08:00
if [ ! -d ~/dev ]; then
mkdir ~/dev
fi
2009-11-04 23:35:48 +08:00
if [ $SETUPDEV == "bbb-web" ]; then
if [ ! -d ~/dev/bbb-web ]; then
2009-11-04 08:33:36 +08:00
2009-11-04 10:23:54 +08:00
echo "# Setting up ~/dev/bbb-web"
2010-01-25 23:49:56 +08:00
echo " svn checkout http://bigbluebutton.googlecode.com/svn/trunk/bigbluebutton-web bbb-web ${RELEASE}"
2010-01-04 01:45:31 +08:00
2009-11-04 09:18:58 +08:00
cd ~/dev
2010-01-25 23:49:56 +08:00
svn checkout http://bigbluebutton.googlecode.com/svn/trunk/bigbluebutton-web bbb-web $RELEASE
2009-11-04 08:33:36 +08:00
2010-01-16 10:55:12 +08:00
IP=$(ifconfig | grep -v '127.0.0.1' | grep -m 1 'inet addr:' | cut -d: -f2 | awk '{ print $1}')
2009-11-04 08:33:36 +08:00
2010-01-24 03:31:34 +08:00
echo "# Copying the bigbluebutton.properites in /var/lib/tomcat6/webapps/bigbluebutton/WEB-INF/classes/bigbluebutton.properties to ~/.grails/bigbluebutton-config.properties"
2009-11-04 08:33:36 +08:00
mkdir -p ~/.grails
2010-01-24 03:31:34 +08:00
cp /var/lib/tomcat6/webapps/bigbluebutton/WEB-INF/classes/bigbluebutton.properties ~/.grails/bigbluebutton-config.properties
echo "# Copying the bbb_api_conf.jsp into /var/lib/tomcat6/webapps/bigbluebutton/WEB-INF/classes/bigbluebutton.properties to ~/dev/bbb-web/web-app/demo"
cp /var/lib/tomcat6/webapps/bigbluebutton/demo/bbb_api_conf.jsp ~/dev/bbb-web/web-app/demo
2009-11-04 08:33:36 +08:00
2009-11-05 12:08:22 +08:00
echo "# Enabling $USER to write to /var/bigbluebutton to upload slides"
2009-11-07 00:15:45 +08:00
sudo chmod -R ugo+rwx /var/bigbluebutton
2009-11-04 08:33:36 +08:00
2009-12-24 11:02:55 +08:00
echo "# Enabling $USER to write to /var/log/bigbluebutton to write log files"
sudo chmod -R ugo+rwx /var/log/bigbluebutton
2010-01-04 01:45:31 +08:00
2009-11-06 02:33:28 +08:00
echo "
# Done. To run your local build of bbb-web:
sudo /etc/init.d/tomcat6 stop
cd ~/dev/bbb-web
ant
"
2009-11-04 23:35:48 +08:00
fi
fi
2009-11-04 09:18:58 +08:00
2009-11-04 23:35:48 +08:00
if [ $SETUPDEV == "bbb-client" ]; then
if [ ! -d ~/dev/bbb-client ]; then
2009-11-04 09:18:58 +08:00
2009-11-04 10:23:54 +08:00
echo "# Setting up ~/dev/bbb-client"
2010-01-25 23:49:56 +08:00
echo " svn checkout http://bigbluebutton.googlecode.com/svn/trunk/bigbluebutton-client bbb-client ${RELEASE}"
2009-11-04 10:23:54 +08:00
2009-11-04 09:18:58 +08:00
cd ~/dev
2010-01-25 23:49:56 +08:00
svn checkout http://bigbluebutton.googlecode.com/svn/trunk/bigbluebutton-client bbb-client $RELEASE
2009-11-04 09:18:58 +08:00
2009-11-04 10:23:54 +08:00
#
# Setup the directories so we can point /etc/nginx/sites-available/bigbluebutton to this
# local copy of the client
#
2009-11-04 09:18:58 +08:00
if [ ! -d ~/dev/bbb-client/bin ]; then
mkdir -p ~/dev/bbb-client/bin
fi
2009-11-04 10:23:54 +08:00
if [ ! -d ~/dev/bbb-client/bin/conf ]; then
mkdir -p ~/dev/bbb-client/bin/conf
fi
if [ ! -h ~/dev/bbb-client/client ]; then
ln -s ~/dev/bbb-client/bin ~/dev/bbb-client/client
fi
2009-11-04 09:18:58 +08:00
echo "Modifying /etc/nginx/sites-available/bigbluebutton to point to your local copy of bbb-client"
2009-11-04 10:23:54 +08:00
sudo sed -i "s/\/var\/www\/bigbluebutton;/\/home\/firstuser\/dev\/bbb-client;/g" \
2009-11-04 09:18:58 +08:00
/etc/nginx/sites-available/bigbluebutton
sudo /etc/init.d/nginx restart
2009-11-04 10:23:54 +08:00
echo "# Copying /var/www/bigbluebutton/client/conf/config.xml to ~/dev/bbb-client/bin/conf/config.xml"
cp /var/www/bigbluebutton/client/conf/config.xml ~/dev/bbb-client/bin/conf/config.xml
2010-01-06 07:57:22 +08:00
cd bbb-client
2009-11-05 12:08:22 +08:00
echo "
2009-11-06 02:33:28 +08:00
# Done. To build your local build of bbb-client:
2009-11-05 12:08:22 +08:00
2009-11-06 02:33:28 +08:00
cd ~/dev/bbb-client
2009-11-05 12:08:22 +08:00
ant
2009-11-06 02:33:28 +08:00
# The nginx server now loads the BigBlueButton Flash client from
# /home/firstuser/dev/bbb-client.
2009-11-05 12:08:22 +08:00
"
2009-11-04 23:35:48 +08:00
fi
2009-11-04 10:23:54 +08:00
fi
2009-11-05 12:08:22 +08:00
if [ $SETUPDEV == "bbb-apps" ]; then
if [ ! -d ~/dev/bbb-apps ]; then
echo "# Setting up ~/dev/bbb-apps:"
2010-01-25 23:49:56 +08:00
echo " svn checkout http://bigbluebutton.googlecode.com/svn/trunk/bigbluebutton-apps bbb-apps ${RELEASE}"
2009-11-05 12:08:22 +08:00
cd ~/dev
2010-01-25 23:49:56 +08:00
svn checkout http://bigbluebutton.googlecode.com/svn/trunk/bigbluebutton-apps bbb-apps $RELEASE
2009-11-05 12:08:22 +08:00
fi
#
# We're going to make it easier to deploy by giving write access to others to
2010-02-09 05:22:16 +08:00
# $RED5_DIRECTORY/webapps
2009-11-05 12:08:22 +08:00
#
2010-02-09 05:22:16 +08:00
sudo chmod o+w $RED5_DIRECTORY/webapps
2009-11-05 12:08:22 +08:00
#
# Let's remove the existing bbb-apps
#
if dpkg-query -s bbb-apps | grep "install ok installed" > /dev/null 2>&1; then
sudo apt-get purge --yes bbb-apps
fi
if [ ! -f ~/.bbb-apps-build.properties ]; then
echo "#
# Override the default properties for bbb-apps
#
2010-02-09 05:22:16 +08:00
red5.home = $RED5_DIRECTORY
2009-11-05 12:08:22 +08:00
" > ~/.bbb-apps-build.properties
fi
#
# Setup the directories so we can point /etc/nginx/sites-available/bigbluebutton to this
# local copy of the client
#
echo "
# Done. To run your local build of bbb-apps:
sudo /etc/init.d/red5 stop
cd ~/dev/bbb-apps
ant deploy
2010-02-09 05:22:16 +08:00
sudo -u red5 $RED5_DIRECTORY/red5.sh
2009-11-05 12:08:22 +08:00
# To restore the packaged version of bbb-apps:
2010-02-09 05:22:16 +08:00
rm -rf $RED5_DIRECTORY/webapps/bigbluebutton
2009-11-05 12:08:22 +08:00
sudo apt-get install bbb-apps
sudo /etc/init.d/red5 start
"
fi
2009-11-04 08:33:36 +08:00
fi
2010-01-19 10:20:22 +08:00
if [ $RESET_DEV ]; then
check_root
echo "Reseting /etc/nginx/sites-available/bigbluebutton to point to /var/www/bigbluebutton"
sudo sed -i "s/\/home\/firstuser\/dev\/bbb-client;/\/var\/www\/bigbluebutton;/g" \
/etc/nginx/sites-available/bigbluebutton
sudo /etc/init.d/nginx restart
fi
2010-02-09 06:24:21 +08:00
getIPOfDomain() {
ipOfDomain=$(host $1 | cut -d\ -f 4)
if [ $ipOfDomain != "out;" ]; then
echo $ipOfDomain
fi
}
2010-01-16 10:40:58 +08:00
check_state() {
2009-11-05 12:08:22 +08:00
2010-01-16 22:28:53 +08:00
echo
2009-11-06 06:48:31 +08:00
#
# Check for potential problems
#
2010-02-09 05:22:16 +08:00
if ! ps aux | grep "$ACTIVEMQ_DIRECTORY" > /dev/null; then
2009-11-06 04:57:56 +08:00
print_header
echo " activeMQ: -- not running --"
fi
if ! ps aux | grep 'org.red5.server.Bootstrap' > /dev/null; then
print_header
echo " red5: -- not running --"
fi
if ! ps aux | grep '[/]usr/sbin/asterisk' > /dev/null; then
print_header
echo " asterisk: -- not running --"
fi
2009-11-06 07:14:17 +08:00
if ! ps aux | grep '[/]usr/sbin/nginx' > /dev/null; then
print_header
echo " ngingx: -- not running --"
fi
2009-11-06 04:57:56 +08:00
if ! netstat -ant | grep '8080' > /dev/null; then
print_header
echo " tomcat6: -- not running --"
2009-12-12 05:20:34 +08:00
else
if ps aux | ps -aef | grep grails | grep run-app > /dev/null; then
print_header
echo " tomcat6: noticed you are running grails run-app instead of tomcat"
fi
fi
2009-11-06 04:57:56 +08:00
if [ ! -L /etc/nginx/sites-enabled/bigbluebutton ]; then
print_header
echo " nginx (conf): no symbolic link in /etc/nginx/sites-enabled for bigbluebutton"
fi
2009-12-13 22:34:01 +08:00
if grep -v \# /etc/nginx/sites-available/bigbluebutton | grep /home/firstuser/dev/bbb-client > /dev/null; then
2009-12-12 05:20:34 +08:00
print_header
echo " nginx (conf): noticed that location for cient is /home/firstuser/dev/bbb-client"
echo " instead of the usual /var/www/bigbluebutton"
fi
2009-11-06 06:48:31 +08:00
DIRECTORIES="bigbluebutton sip video"
for dir in $DIRECTORIES ; do
2010-02-09 05:22:16 +08:00
if [ ! -d $RED5_DIRECTORY/webapps/$dir ]; then
echo " missing red5 app: $RED5_DIRECTORY/webapps/$dir "
2009-11-06 06:48:31 +08:00
fi
done
2010-02-09 05:22:16 +08:00
RED5_LOG_FILES="bigbluebutton red5 sip video"
2009-11-06 06:48:31 +08:00
for file in $RED5_LOG_FILES ; do
2010-02-09 05:22:16 +08:00
if [ ! -f $RED5_DIRECTORY/log/$file.log ]; then
echo " missing red5 log: $RED5_DIRECTORY/log/$file.demo"
2009-11-06 06:48:31 +08:00
fi
done
2010-01-16 10:40:58 +08:00
#
# Make sure the salt for the API matches the server
#
2010-01-04 01:45:31 +08:00
SALT_PROPERTIES=$(cat /var/lib/tomcat6/webapps/bigbluebutton/WEB-INF/classes/bigbluebutton.properties | tr -d '\r' | sed -n '/securitySalt/{s/.*=//;p}')
2010-01-24 03:31:34 +08:00
SALT_DEMO=$(cat /var/lib/tomcat6/webapps/bigbluebutton/demo/bbb_api_conf.jsp | tr -d '\r' | sed -n '/salt =/{s/.* = "//;s/".*//g;p}')
2010-01-04 01:45:31 +08:00
if [ "$SALT_PROPERTIES" != "$SALT_DEMO" ]; then
2010-01-24 08:08:15 +08:00
echo " salt mismatch: salt in bigbluebutton.properties and bbb_api_conf.jsp do not match"
2010-01-04 01:45:31 +08:00
fi
2010-01-16 10:40:58 +08:00
#
# Look for properties with no values set
#
2010-02-09 05:22:16 +08:00
CONFIG_FILES="$RED5_DIRECTORY/webapps/bigbluebutton/WEB-INF/bigbluebutton.properties \
2010-01-13 11:44:50 +08:00
/var/lib/tomcat6/webapps/bigbluebutton/WEB-INF/classes/bigbluebutton.properties \
2010-02-09 05:22:16 +08:00
$RED5_DIRECTORY/webapps/sip/WEB-INF/bigbluebutton-sip.properties"
2010-01-13 11:44:50 +08:00
for file in $CONFIG_FILES ; do
2010-01-16 10:40:58 +08:00
if grep -q "^[^=]*=[ ]*$" $file; then
echo " empty parameter(s) found: $(grep '^[^=]*=[ ]*$' $file | sed 's/=//g') ($file)"
2010-01-13 11:44:50 +08:00
fi
done
2010-01-16 10:40:58 +08:00
#
# Check that tomcat6 started properly and has created log files
#
2010-02-09 05:22:16 +08:00
if [ -z "$(ls -A $TOMCAT6_LOGS)" ]; then
echo " empty directory: $TOMCAT6_LOGS contains no logs"
2010-01-15 11:00:52 +08:00
fi
2010-01-13 11:44:50 +08:00
2010-01-16 10:40:58 +08:00
#
# Check that bigbluebutton in red5 has started propertly
#
2010-02-09 05:22:16 +08:00
BIGBLUEBUTTON_RED5_LOG=$(stat -c%s $RED5_DIRECTORY/log/bigbluebutton.log)
2010-01-16 10:40:58 +08:00
if [ $BIGBLUEBUTTON_RED5_LOG -lt 100 ]; then
2010-02-09 05:22:16 +08:00
echo " bigbluebutton failed to start: $RED5_DIRECTORY/log/bigbluebutton.log (red5)"
2010-01-16 10:40:58 +08:00
fi
2010-01-16 10:55:12 +08:00
HOST_IP=$(ifconfig | grep -v '127.0.0.1' | grep -m 1 'inet addr:' | cut -d: -f2 | awk '{ print $1}')
NGINX_IP=$(cat /etc/nginx/sites-available/bigbluebutton | sed -n '/server_name/{s/.*name[ ]*//;s/;//;p}')
2010-01-24 03:31:34 +08:00
if [ "$HOST_IP" != "$NGINX_IP" ]; then
2010-02-09 06:24:21 +08:00
NGINX_DOMAIN_IP=$(getIPOfDomain $NGINX_IP)
if [ "$HOST_IP" != "$NGINX_DOMAIN_IP" ]; then
echo "Host IP does not match BigBlueButton: ${HOST_IP} != ${NGINX_IP}"
fi
2010-01-16 10:55:12 +08:00
fi
2010-02-09 06:24:21 +08:00
x=$(host demo.bigbluebutton.org | cut -d\ -f 4)
2009-11-06 06:48:31 +08:00
echo
2009-12-10 06:49:49 +08:00
exit 0
}
2009-11-06 06:48:31 +08:00
2009-12-10 06:49:49 +08:00
#
# Check current setup
#
if [ $CHECK ]; then
echo "Current Configuration:"
IP=$(cat /var/www/bigbluebutton/client/conf/config.xml | sed -n '/porttest /{s/.*host="//;s/".*//;p}')
echo
echo "/var/www/bigbluebutton/client/conf/config.xml (bbb-client)"
echo " IP for tunnel check: $IP"
IP=$(cat /var/www/bigbluebutton/client/conf/config.xml | sed -n '/uri.*video/{s/.*rtmp:\/\///;s/\/.*//;p}')
echo " IP for rtmp (red5): $IP"
HOST=$(cat /var/www/bigbluebutton/client/conf/config.xml | sed -n '/recordingHost/{s/.*recordingHost="http:\/\///;s/"//;p}')
echo " host for bbb-web interface: $HOST"
IP=$(cat /etc/nginx/sites-available/bigbluebutton | sed -n '/server_name/{s/.*name[ ]*//;s/;//;p}')
echo
echo "/etc/nginx/sites-available/bigbluebutton (configuration file nginx)"
echo " server_name: $IP"
PORT=$(cat /etc/nginx/sites-available/bigbluebutton | sed -n '/listen/{s/.*listen[ ]*//;s/;//;p}')
echo " port: $PORT"
BBB_CLINET_DOC_ROOT=$(cat /etc/nginx/sites-available/bigbluebutton | grep \/client -A 1 | grep root | sed -n '{s/[ ]*root[ ]*//;s/;//;p}')
echo " client document root: $BBB_CLINET_DOC_ROOT"
2010-01-09 13:29:31 +08:00
HOST=$(cat /var/lib/tomcat6/webapps/bigbluebutton/WEB-INF/classes/bigbluebutton.properties | sed -n '/^bigbluebutton.web.serverURL/{s/.*\///;p}')
2009-12-10 06:49:49 +08:00
echo
2010-01-16 22:28:53 +08:00
echo "/var/lib/tomcat6/webapps/bigbluebutton/WEB-INF/classes/bigbluebutton.properties (bbb-web)"
2009-12-10 06:49:49 +08:00
echo " host: $HOST"
2010-01-24 08:08:15 +08:00
if [ -f /var/lib/tomcat6/webapps/bigbluebutton/demo/bbb_api_conf.jsp ]; then
HOST=$(cat /var/lib/tomcat6/webapps/bigbluebutton/demo/bbb_api_conf.jsp | sed -n '/String BigBlueButtonURL/{s/.*http:\/\///;s/\/.*//;p}' | tr -d '\015')
2009-12-24 11:02:55 +08:00
echo
2010-01-24 08:08:15 +08:00
echo "/var/lib/tomcat6/webapps/bigbluebutton/demo/bbb_api_conf.jsp (API demos)"
2009-12-24 11:02:55 +08:00
echo " host: $HOST"
fi
2010-01-16 22:28:53 +08:00
if ps aux | grep '[/]usr/sbin/asterisk' > /dev/null; then
2010-02-09 05:22:16 +08:00
CONFERENCING_MODULE=$(cat $RED5_DIRECTORY/webapps/bigbluebutton/WEB-INF/bigbluebutton.properties | sed -n '/asterisk.application/{s/.*=[ ]*//g;p}')
2010-01-16 22:28:53 +08:00
echo
echo "/etc/asterisk/bbb_extensions.conf (asterisk)"
2010-01-21 00:57:33 +08:00
echo " conference module: $CONFERENCING_MODULE"
2010-01-16 22:28:53 +08:00
fi
check_state
2009-12-10 06:49:49 +08:00
exit 0
fi
2010-01-06 07:57:22 +08:00
#
# Check current setup
#
if [ $ZIP ]; then
need_root
LOG_FILE="$(date +'%Y%m%d')-$(date +%H)"
#
# Check log files
#
rm -f /tmp/$LOG_FILE.tar
rm -f /tmp/$LOG_FILE.tar.gz
rm -f /tmp/a
2010-01-15 11:00:52 +08:00
touch /tmp/empty
tar cf /tmp/$LOG_FILE.tar /tmp/empty > /dev/null 2>&1
2010-02-09 05:22:16 +08:00
tar rf /tmp/$LOG_FILE.tar $RED5_DIRECTORY/log > /dev/null 2>&1
tar rf /tmp/$LOG_FILE.tar $TOMCAT6_LOGS > /dev/null 2>&1
2010-01-13 11:44:50 +08:00
tar rf /tmp/$LOG_FILE.tar /var/log/bigbluebutton/* > /dev/null 2>&1
2010-01-06 07:57:22 +08:00
tar rf /tmp/$LOG_FILE.tar /var/log/nginx/error.log > /dev/null 2>&1
tar rf /tmp/$LOG_FILE.tar /var/log/syslog > /dev/null 2>&1
tar tf /tmp/$LOG_FILE.tar
gzip /tmp/$LOG_FILE.tar
2010-01-15 11:00:52 +08:00
mv /tmp/$LOG_FILE.tar.gz /root/$LOG_FILE.tar.gz
echo
echo " Created: /root/$LOG_FILE.tar.gz"
2010-01-06 07:57:22 +08:00
echo
fi
2009-12-10 06:49:49 +08:00
#
# Check current setup
#
if [ $DEBUG ]; then
2009-12-12 05:20:34 +08:00
need_root
2009-12-09 10:37:32 +08:00
#
# Check log files
#
rm -rf /tmp/t
2010-02-09 05:22:16 +08:00
grep ERROR $RED5_DIRECTORY/log/* > /tmp/t
2009-12-09 10:37:32 +08:00
if [ -s /tmp/t ]; then
2010-02-09 05:22:16 +08:00
echo " -- ERRORS found in $RED5_DIRECTORY/log/* -- "
2009-12-09 10:37:32 +08:00
cat /tmp/t
echo
fi
rm -rf /tmp/t
2010-02-09 05:22:16 +08:00
grep Exception $RED5_DIRECTORY/log/* > /tmp/t
2009-12-09 10:37:32 +08:00
if [ -s /tmp/t ]; then
2010-02-09 05:22:16 +08:00
echo " -- Exceptions found in $RED5_DIRECTORY/log/* -- "
2009-12-09 10:37:32 +08:00
cat /tmp/t
echo
fi
rm -rf /tmp/t
find /var/log/asterisk -exec grep -H -i "Unable to register" '{}' \; > /tmp/t
if [ -s /tmp/t ]; then
echo " -- Registration errors found in /var/log/asterisk/ -- "
echo "Found $(cat /tmp/t | wc -l) errors in /var/log/asterisk/* containing string \"Unable to register\""
echo
fi
rm -rf /tmp/t
2010-02-09 05:22:16 +08:00
sudo grep Exception $TOMCAT6_LOGS/* > /tmp/t
2009-12-09 10:37:32 +08:00
if [ -s /tmp/t ]; then
2010-02-09 05:22:16 +08:00
echo " -- Exceptions found in $TOMCAT6_LOGS/ -- "
2009-12-09 10:37:32 +08:00
cat /tmp/t
echo
fi
2010-01-02 10:17:11 +08:00
rm -rf /tmp/t
if [ -s /var/log/nginx/error.log ]; then
cat /var/log/nginx/error.log | grep -v "/fcs/ident2" > /tmp/t
if [ -s /tmp/t ]; then
echo " -- Errors found in /var/log/nginx/error.log -- "
cat /tmp/t
echo
fi
fi
2009-12-12 05:20:34 +08:00
2009-12-13 22:34:01 +08:00
rm -rf /tmp/t
sudo grep -v "No Voicetronix cards detected" /var/log/asterisk/* | grep ERROR > /tmp/t
if [ -s /tmp/t ]; then
echo " -- Errors found in /var/log/asterisk/* -- "
cat /tmp/t
echo
fi
2009-12-12 05:20:34 +08:00
2009-12-20 07:33:29 +08:00
rm -rf /tmp/t
sudo grep -i exception /var/log/syslog > /tmp/t
if [ -s /tmp/t ]; then
echo " -- Errors found in /var/log/syslog -- "
cat /tmp/t
echo
fi
2009-12-24 11:02:55 +08:00
rm -rf /tmp/t
if [ -d /var/log/bigbluebutton ]; then
2010-01-21 00:57:33 +08:00
sudo grep ERROR /var/log/bigbluebutton/* > /tmp/t
2009-12-24 11:02:55 +08:00
if [ -s /tmp/t ]; then
echo " -- Errors found in /var/log/bigbluebutton -- "
cat /tmp/t
echo
fi
fi
2009-12-20 07:33:29 +08:00
2010-01-08 01:52:48 +08:00
rm -rf /tmp/t
if [ -d /var/log/bigbluebutton ]; then
2010-01-21 00:57:33 +08:00
sudo grep -i exception /var/log/bigbluebutton/* > /tmp/t
2010-01-08 01:52:48 +08:00
if [ -s /tmp/t ]; then
echo " -- Exceptions found in /var/log/bigbluebutton -- "
cat /tmp/t
echo
fi
fi
2009-11-04 08:33:36 +08:00
exit 0
fi
# if asked to print the version that's all we do
2009-11-05 12:08:22 +08:00
if [ -n "$HOST" ]; then
2009-11-04 08:33:36 +08:00
#
# Just use the IP for port test in /var/www/bigbluebutton/client/conf/config.xml
#
echo "Assigning $HOST for testing for firewall in /var/www/bigbluebutton/client/conf/config.xml"
sudo sed -i "s/porttest host=\(\"[^\"]*\"\)/porttest host=\"$HOST\"/g" /var/www/bigbluebutton/client/conf/config.xml
echo "Assigning $HOST for rtmp:// in /var/www/bigbluebutton/client/conf/config.xml"
sudo sed -i "s/rtmp:\/\/\([^\"\/]*\)\([\"\/]\)/rtmp:\/\/$HOST\2/g" /var/www/bigbluebutton/client/conf/config.xml
echo "Assigning $HOST for servername in /etc/nginx/sites-available/bigbluebutton"
sudo sed -i "s/server_name .*/server_name $HOST;/g" /etc/nginx/sites-available/bigbluebutton
#
# Use port for remaining substitutions
#
if [ $PORT ]; then
HOST="$HOST:$PORT"
fi
#
# Update configuration for BigBlueButton client
#
echo "Assigning $HOST for http:// in /var/www/bigbluebutton/client/conf/config.xml"
sudo sed -i "s/http:\/\/\([^\"\/]*\)\([\"\/]\)/http:\/\/$HOST\2/g" /var/www/bigbluebutton/client/conf/config.xml
#
# Update configuration for BigBlueButton web app
#
echo "Assigning $HOST for web application URL in /var/lib/tomcat6/webapps/bigbluebutton/WEB-INF/classes/bigbluebutton.properties"
sudo sed -i "s/bigbluebutton.web.serverURL=http:\/\/.*/bigbluebutton.web.serverURL=http:\/\/$HOST/g" \
/var/lib/tomcat6/webapps/bigbluebutton/WEB-INF/classes/bigbluebutton.properties
# cat /var/lib/tomcat6/webapps/bigbluebutton/WEB-INF/classes/bigbluebutton.properties
#
# Update nginx
#
if [ $PORT ]; then
echo "Assigning $PORT for listen in /etc/nginx/sites-available/bigbluebutton"
sudo sed -i "s/listen .*/listen $PORT;/g" /etc/nginx/sites-available/bigbluebutton
fi
if ! grep -q server_names_hash_bucket_size /etc/nginx/nginx.conf; then
sudo sed -i "s/gzip on;/gzip on;\n server_names_hash_bucket_size 64;/g" /etc/nginx/nginx.conf
fi
2009-12-24 11:02:55 +08:00
#
# Update api demos
#
2010-01-25 05:54:14 +08:00
if [ -f /var/lib/tomcat6/webapps/bigbluebutton/demo/bbb_api_conf.jsp ]; then
echo "Assigning $HOST for api demos in /var/lib/tomcat6/webapps/bigbluebutton/demo/bbb_api_conf.jsp"
2009-12-31 04:53:15 +08:00
sudo sed -i "s/BigBlueButtonURL = \"http:\/\/\([^\"\/]*\)\([\"\/]\)/BigBlueButtonURL = \"http:\/\/$HOST\2/g" \
2010-01-25 05:54:14 +08:00
/var/lib/tomcat6/webapps/bigbluebutton/demo/bbb_api_conf.jsp
2009-12-24 11:02:55 +08:00
fi
2009-11-04 08:33:36 +08:00
echo "Restarting tomcat6 and nginx ..."
sudo /etc/init.d/tomcat6 restart > /tmp/result 2>&1;cat /tmp/result;rm /tmp/result
sudo /etc/init.d/nginx restart
exit 0
fi
2009-12-12 05:20:34 +08:00
if [ $CONFERENCE ]; then
2010-01-16 22:28:53 +08:00
need_root
2010-02-09 05:22:16 +08:00
if [ ! -f $RED5_DIRECTORY/webapps/bigbluebutton/WEB-INF/bbb-voice-app.xml ]; then
echo "Error: Unable to find $RED5_DIRECTORY/webapps/bigbluebutton/WEB-INF/bbb-voice-app.xml"
2009-12-12 05:20:34 +08:00
exit 1
fi
if [ ! -f /etc/asterisk/bbb_extensions.conf ]; then
echo "Error: Unable to find /etc/asterisk/bbb_extensions.conf"
exit 1
fi
2010-01-16 22:28:53 +08:00
if [ "$CONFERENCE" = "meetme" ]; then
2009-12-12 05:20:34 +08:00
CONFERENCE=meetme
else
2010-01-16 22:28:53 +08:00
if [ "$CONFERENCE" = "konference" ]; then
2009-12-13 22:34:01 +08:00
CONFERENCE=app_konference
2009-12-12 05:20:34 +08:00
else
2010-01-16 22:28:53 +08:00
echo "Error: Valid options for --conference are: meetme, konference"
2010-02-09 05:22:16 +08:00
exit 1
2009-12-12 05:20:34 +08:00
fi
fi
if [ $CONFERENCE = "meetme" ]; then
2010-01-16 22:28:53 +08:00
#
2010-02-09 05:22:16 +08:00
# update $RED5_DIRECTORY/webapps/bigbluebutton/WEB-INF/bigbluebutton.properties
2010-01-16 22:28:53 +08:00
#
sudo sed -i "s/asterisk.application[ ]*=.*/asterisk.application=meetme/g" \
2010-02-09 05:22:16 +08:00
$RED5_DIRECTORY/webapps/bigbluebutton/WEB-INF/bigbluebutton.properties
2009-12-12 05:20:34 +08:00
2010-01-21 04:53:47 +08:00
#
# update /etc/asterisk/bbb_extensions.conf
sudo sed -i "s/^exten => _XXXX.,n,Konference(\${EXTEN},H)/# exten => _XXXX.,n,Konference(\${EXTEN},H)/g" \
/etc/asterisk/bbb_extensions.conf
sudo sed -i "s/#[ ]*exten => _XXXX.,n,MeetMe(\${EXTEN},cdMsT)/exten => _XXXX.,n,MeetMe(\${EXTEN},cdMsT)/g" \
/etc/asterisk/bbb_extensions.conf
2009-12-12 05:20:34 +08:00
2010-01-16 22:28:53 +08:00
#
# update /etc/asterisk/bbb_extensions.conf
2009-12-12 05:20:34 +08:00
sudo sed -i "s/# exten => _XXXX.,n,MeetMe(\${CONFERENCE_FOUND},cdMsT)/exten => _XXXX.,n,MeetMe(\${CONFERENCE_FOUND},cdMsT)/g" \
/etc/asterisk/bbb_extensions.conf
2010-01-16 22:28:53 +08:00
sudo sed -i "s/^exten => _XXXX.,n,Konference(\${CONFERENCE_FOUND},H)/# exten => _XXXX.,n,Konference(\${CONFERENCE_FOUND},H)/g" \
2009-12-12 05:20:34 +08:00
/etc/asterisk/bbb_extensions.conf
fi
2009-12-13 22:34:01 +08:00
if [ $CONFERENCE = "app_konference" ]; then
2010-01-16 22:28:53 +08:00
#
2010-02-09 05:22:16 +08:00
# update $RED5_DIRECTORY/webapps/bigbluebutton/WEB-INF/bigbluebutton.properties
2010-01-16 22:28:53 +08:00
#
sudo sed -i "s/asterisk.application[ ]*=.*/asterisk.application=konference/g" \
2010-02-09 05:22:16 +08:00
$RED5_DIRECTORY/webapps/bigbluebutton/WEB-INF/bigbluebutton.properties
2009-12-12 05:20:34 +08:00
2010-01-21 04:53:47 +08:00
#
# update /etc/asterisk/bbb_extensions.conf
sudo sed -i "s/#[ ]*exten => _XXXX.,n,Konference(\${EXTEN},H)/exten => _XXXX.,n,Konference(\${EXTEN},H)/g" \
/etc/asterisk/bbb_extensions.conf
sudo sed -i "s/^exten => _XXXX.,n,MeetMe(\${EXTEN},cdMsT)/# exten => _XXXX.,n,MeetMe(\${EXTEN},cdMsT)/g" \
/etc/asterisk/bbb_extensions.conf
2010-01-16 22:28:53 +08:00
sudo sed -i "s/^exten => _XXXX.,n,MeetMe(\${CONFERENCE_FOUND},cdMsT)/# exten => _XXXX.,n,MeetMe(\${CONFERENCE_FOUND},cdMsT)/g" \
2009-12-12 05:20:34 +08:00
/etc/asterisk/bbb_extensions.conf
sudo sed -i "s/# exten => _XXXX.,n,Konference(\${CONFERENCE_FOUND},H)/exten => _XXXX.,n,Konference(\${CONFERENCE_FOUND},H)/g" \
/etc/asterisk/bbb_extensions.conf
fi
2010-02-09 05:22:16 +08:00
echo "Switching to $CONFERENCE ... "
2009-12-12 05:20:34 +08:00
sudo /etc/init.d/asterisk restart
sudo /etc/init.d/red5 restart
fi
2009-12-13 01:56:14 +08:00
if [ $CLEAN ]; then
need_root
2010-01-06 07:57:22 +08:00
echo "Doing a clean restart of BigBlueButton ..."
2009-12-13 22:34:01 +08:00
2009-12-13 01:56:14 +08:00
/etc/init.d/red5 stop
/etc/init.d/tomcat6 stop
/etc/init.d/nginx stop
2009-12-14 02:11:05 +08:00
/etc/init.d/asterisk stop
2010-01-16 10:40:58 +08:00
/etc/init.d/activemq stop
2009-12-13 01:56:14 +08:00
#
# Clean log files
#
echo
2010-01-06 07:57:22 +08:00
echo "Cleaning Log Files ..."
2009-12-13 22:42:44 +08:00
rm -f /var/log/asterisk/event*
rm -f /var/log/asterisk/messages*
rm -f /var/log/asterisk/queue*
2010-02-09 05:22:16 +08:00
rm -rf $RED5_DIRECTORY/log/*
rm -rf $TOMCAT6_LOGS/*
2009-12-13 01:56:14 +08:00
rm -rf /var/log/nginx/*
2009-12-20 07:33:29 +08:00
mv /var/log/syslog /tmp/syslog.$$
echo "" > /var/log/syslog
2009-12-13 01:56:14 +08:00
2009-12-14 02:11:05 +08:00
/etc/init.d/asterisk status
2010-01-02 10:17:11 +08:00
/etc/init.d/activemq status
2009-12-14 02:11:05 +08:00
/etc/init.d/nginx status
/etc/init.d/red5 status
/etc/init.d/tomcat6 status
2009-12-13 22:34:01 +08:00
echo
2009-12-13 01:56:14 +08:00
/etc/init.d/asterisk start
2010-01-02 10:17:11 +08:00
/etc/init.d/activemq start
2010-01-16 10:40:58 +08:00
sleep 5
2009-12-13 22:34:01 +08:00
/etc/init.d/nginx start
2009-12-13 01:56:14 +08:00
/etc/init.d/red5 start
/etc/init.d/tomcat6 start
fi
2009-12-13 22:34:01 +08:00
if [ $NETWORK ]; then
2009-12-14 02:11:05 +08:00
netstat -ant | egrep ":1935|:9123|:80\ " | egrep -v ":::|0.0.0.0" > /tmp/t_net
2009-12-13 22:34:01 +08:00
REMOTE=$(cat /tmp/t_net | cut -c 45-68 | cut -d ":" -f1 | sort | uniq)
if [ "$REMOTE" != "" ]; then
2009-12-14 02:11:05 +08:00
echo -e "netstat\t\t\t80\t1935\t9123"
2009-12-13 22:34:01 +08:00
for IP in $REMOTE ; do
2009-12-14 02:11:05 +08:00
PORT_1935=$(cat /tmp/t_net | grep :1935 | cut -c 45-68 | cut -d ":" -f1 | grep $IP | wc -l)
PORT_9123=$(cat /tmp/t_net | grep :9123 | cut -c 45-68 | cut -d ":" -f1 | grep $IP | wc -l )
PORT_80=$(cat /tmp/t_net | grep :80 | cut -c 45-68 | cut -d ":" -f1 | grep $IP | wc -l )
#if cat /tmp/t_net | grep 9123 | cut -c 45-68 | cut -d ":" -f1 | grep $IP > /dev/null; then
# DESKSHARE=" XXX"
#fi
echo -e "$IP\t\t$PORT_80\t$PORT_1935\t$PORT_9123"
2009-12-13 22:34:01 +08:00
done
fi
fi
2009-12-13 01:56:14 +08:00
if [ $WATCH ]; then
need_root
2010-01-02 10:17:11 +08:00
watch -n 2 "top -n 1 -b | head -n 5; echo; asterisk -r -x \"core show channels\"; echo; bbb-conf --network; bbb-conf --debug"
2009-12-13 01:56:14 +08:00
fi