chiark / gitweb /
Most of intro section
[disorder] / scripts / setup.in
index 449da2d8f2ce4062c9937a73d09c452bfa541eca..b7fdecd22282ee5a138a02963dfa1b6cce5465f7 100755 (executable)
@@ -3,24 +3,95 @@
 # This file is part of DisOrder
 # Copyright (C) 2008 Richard Kettlewell
 #
-# This program is free software; you can redistribute it and/or modify
+# This program is free software: you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
+# the Free Software Foundation, either version 3 of the License, or
 # (at your option) any later version.
-#
-# This program 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
-# General Public License for more details.
-#
+# 
+# This program 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 General Public License for more details.
+# 
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-# USA
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 
 set -e
 
+while [ $# -gt 0 ]; do
+  opt="$1"
+  shift
+  case "$opt" in
+  -h | --help )
+    cat  <<EOF
+
+Usage:
+  scripts/setup [OPTIONS]
+
+Options:
+  --root ROOT             Add a root (can be used multiple times)
+  --encoding ENCODING     Filename encoding
+  --port PORT             TCP port to listen on or 'none'
+  --smtp-server HOSTNAME  SMTP server
+  --email ADDRESS         Origin email address
+  --register y|n          Enable/disable online registration
+  --play local|network    Choose local or network play
+  --mcast ADDRESS PORT    Set multicast address and port for --play network
+  -h, --help              Display this message
+
+Sets up a basic DisOrder installation.  You must have run 'make install'
+first.  Use scripts/teardown to stop the server and deconfigure.
+
+EOF
+    exit 0
+    ;;
+  --version | -V )
+    echo "DisOrder scripts/setup _version_"
+    exit 0
+    ;;
+  --root )
+    roots="$roots $1"
+    shift
+    ;;
+  --encoding )
+    encoding="$1"
+    shift
+    ;;
+  --port )
+    port="$1"
+    shift
+    ;;
+  --smtp-server )
+    smtp_server="$1"
+    shift
+    ;;
+  --email )
+    mail_sender="$1"
+    shift
+    ;;
+  --register )
+    register="$1"
+    shift
+    ;;
+  --play )
+    play="$1"
+    shift
+    ;;
+  --mcast )
+    play=network
+    mcast_address="$1"
+    shift
+    mcast_port="$1"
+    shift
+    ;;
+  * )
+    echo >&2 "ERROR: unknown option '$opt'"
+    exit 1
+    ;;
+  esac
+done
+
 echo
 echo ------------------------------------------------------------------------
 echo "DisOrder setup script"
@@ -71,77 +142,152 @@ echo
 echo "If this is not what you want, press ^C."
 echo ------------------------------------------------------------------------
 
-while :; do
-  echo
-  echo "What directory or directories contain your music files:"
-  echo "(enter one or more directories separated by spaces)"
-  read -r roots
-  ok=true
-  for root in $roots; do
-    if [ ! -d $root ]; then
-      echo "'$root' does not exist"
-      ok=false
+if [ -z "$roots" ]; then
+  while :; do
+    echo
+    echo "What directory or directories contain your music files:"
+    echo "(enter one or more directories separated by spaces)"
+    read -r roots
+    ok=true
+    anyroots=false
+    for root in $roots; do
+      if [ ! -d $root ]; then
+       echo "'$root' does not exist"
+       ok=false
+      else
+        anyroots=true
+      fi
+    done
+    if $anyroots && $ok; then
+      break
     fi
   done
-  if $ok; then
-    break
-  fi
-done
+fi
 
 if [ -z "$encoding" ]; then
-  echo 
-  echo "What filesystem encoding should I assume for track names?"
-  echo "(e.g. UTF-8, ISO-8859-1, ...)"
-  read -r encoding
+  while :; do
+    echo 
+    echo "What filesystem encoding should I assume for track names?"
+    echo "(e.g. UTF-8, ISO-8859-1, ...)"
+    read -r encoding
+    if [ ! -z "$encoding" ]; then
+      break
+    fi
+  done
 fi
 
-while :; do
-  echo
-  echo "What TCP port should DisOrder listen on?"
-  echo "(enter 'none' for none)"
-  read -r port
-  case $port in
-  none )
-    break
-    ;;
-  [^0-9] )
-    echo "'$port' is not a valid port number"
-    continue
-    ;;
-  * )
-    break
-    ;;
-  esac
-done
+if [ -z "$port" ]; then
+  while :; do
+    echo
+    echo "What TCP port should DisOrder listen on?"
+    echo "(enter 'none' for none)"
+    read -r port
+    case $port in
+    none )
+      break
+      ;;
+    [^0-9] | "" )
+      echo "'$port' is not a valid port number"
+      continue
+      ;;
+    * )
+      break
+      ;;
+    esac
+  done
+fi
 
-echo
-echo "What host should DisOrder use as an SMTP server?"
-read -r smtp_server
+if [ -z "$play" ]; then
+  while :; do
+    echo
+    echo "How do you want to play sound?  Enter 'local' to use a local sound"
+    echo "device or 'network' to multicast sound across your network."
+    read -r play
+    case $play in
+    'local' | network )
+      break
+      ;;
+    * )
+      echo "Enter 'local' or 'network'"
+      continue
+      ;;
+    esac
+  done
+fi
 
-while :; do
-  echo
-  echo "What address should mail from DisOrder come from?"
-  read -r mail_sender
-  case "$mail_sender" in
-  *@* )
-    break
-    ;;
-  * )
-    echo "Email address must contain an '@' sign"
-    ;;
-  esac
-done
+if [ "x$play" = xnetwork ]; then
+  if [ -z "$mcast_address" ]; then
+    echo
+    echo "Enter destination address for network transmission"
+    echo "(e.g. a multicast address)"
+    read -r mcast_address
+  fi
+  if [ -z "$mcast_port" ]; then
+    while :; do
+      echo
+      echo "Enter destination port for network transmission"
+      read -r mcast_port
+      case $mcast_port in
+      none )
+       break
+       ;;
+      [^0-9] | "" )
+       echo "'$mcast_port' is not a valid port number"
+       continue
+       ;;
+      * )
+       break
+       ;;
+      esac
+    done
+  fi
+fi
+
+if [ -z "$mail_sender" ]; then
+  while :; do
+    echo
+    echo "What address should mail from DisOrder come from?"
+    read -r mail_sender
+    case "$mail_sender" in
+    *@* )
+      break
+      ;;
+    * )
+      echo "Email address must contain an '@' sign"
+      ;;
+    esac
+  done
+fi
+
+if [ -z "$register" ]; then
+  while :; do
+    echo
+    echo "Do you want to enable online registration?  (Enter 'y' or 'n')"
+    read -r register
+    case $register in
+    y | n )
+      break
+      ;;
+    esac
+  done
+fi
 
 echo
 echo "Proposed DisOrder setup:"
 echo " Music directory:       $roots"
-if [ $port = none ]; then
+if [ "$port" = none ]; then
   echo " Do not listen on a TCP port"
 else
   echo " TCP port to listen on: $port"
 fi
-echo " SMTP Server:           $smtp_server"
+if [ ! -z "$smtp_server" ]; then
+  echo " SMTP Server:           $smtp_server"
+fi
 echo " Sender address:        $mail_sender"
+echo " Online registration:   $register"
+if [ $play = network ]; then
+  echo " Send sound to:         $mcast_address port $mcast_port"
+fi
 
 echo "Is this OK?  (Enter 'y' or 'n')"
 read -r ok
@@ -168,7 +314,12 @@ echo "user $user" >> pkgconfdir/config.new
 if [ $port != none ]; then
   echo "listen 0.0.0.0 $port" >> pkgconfdir/config.new
 fi
-echo "smtp_server $smtp_server" >> pkgconfdir/config.new
+if [ $play = network ]; then
+  echo "broadcast $mcast_address $mcast_port" >> pkgconfdir/config.new
+fi
+if [ ! -z "$smtp_server" ]; then
+  echo "smtp_server $smtp_server" >> pkgconfdir/config.new
+fi
 echo "mail_sender $mail_sender" >> pkgconfdir/config.new
 
 echo
@@ -292,36 +443,13 @@ Mac )
   launchctl load /Library/LaunchDaemons
   echo "Starting DisOrder server"
   launchctl start uk.org.greenend.rjk.disorder
-  CGIBIN=/Library/WebServer/CGI-Executables
-  DOCROOT=/Library/WebServer/Documents
-  sever_running=true
+  server_running=true
   ;;
 FreeBSD )
   echo "Installing startup script into /etc/rc.d"
   install -m 555 examples/disorder.rc /etc/rc.d/disorder
   echo "Starting DisOrder server"
   /etc/rc.d/disorder start
-  echo "Identifying web server"
-  set /usr/local/www/*
-  case $# in
-  0 )
-    echo
-    echo "Could not find a web server"
-    exit 1
-    ;;
-  1 )
-    ;;
-  * )
-    echo
-    echo "Yikes!  There seems to be more than one web server here."
-    echo "Guessing that you want $1."
-    echo
-    ;;
-  esac
-  web=$1
-  echo "Found $web"
-  CGIBIN=$web/cgi-bin
-  DOCROOT=$web/data
   server_running=true
   ;;
 Linux )
@@ -351,20 +479,6 @@ Linux )
     echo "Starting DisOrder server"
     $RC_D/init.d/disorder start
   fi
-  echo "Looking for web server document root"
-  for d in /var/www/html /var/www; do
-    if [ -d $d ]; then
-      DOCROOT=$d
-      break
-    fi
-  done
-  echo "Looking for cgi-bin directory"
-  for d in /var/www/cgi-bin /usr/lib/cgi-bin; do
-    if [ -d $d ]; then
-      CGIBIN=$d
-      break
-    fi
-  done
   server_running=true
   ;;
 * )
@@ -375,35 +489,7 @@ Linux )
   ;;
 esac
 
-echo
-if [ -z "$DOCROOT" ]; then
-  echo "Cannot find your web server's document root"
-else
-  echo "Setting up link to CGI's dependencies in $DOCROOT"
-  rm -f $DOCROOT/disorder
-  ln -s pkgdatadir/static $DOCROOT/disorder
-fi
-
-echo
-if [ -z "$CGIBIN" ]; then
-  echo "Cannot find your web server's cgi-bin directory"
-else
-  echo "Installing CGI in $CGIBIN"
-  install -m 555 server/disorder.cgi $CGIBIN/disorder
-fi
-
 if $server_running; then
-  while :; do
-    echo
-    echo "Do you want to enable online registration?  (Enter 'y' or 'n')"
-    read -r reg
-    case $reg in
-    y | n )
-      break
-      ;;
-    esac
-  done
-  echo
   first=true
   sleep 5
   while ! disorder version >/dev/null 2>&1; do
@@ -413,7 +499,7 @@ if $server_running; then
     fi
     sleep 1
   done
-  if [ $reg = y ]; then
+  if [ $register = y ]; then
     echo "Creating guest user with 'register' right"
     disorder setup-guest
   else