chiark / gitweb /
debian/control: db4.8 is obsolete in wheezy.
[disorder] / debian / postinst.disorder-server
index bc4a93800eb81f70b65942d5d30a6e73e329ae33..316f1e99566b2d20d7799fc17d134810a00efdb6 100755 (executable)
@@ -1,22 +1,20 @@
 #! /bin/sh
 #
 # This file is part of DisOrder
-# Copyright (C) 2004, 2007 Richard Kettlewell
+# Copyright (C) 2004, 2007-2009 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
@@ -26,6 +24,9 @@ set -e
 add_jukebox_user() {
   adduser --quiet --system --group --shell /bin/sh --home /var/lib/disorder \
     --no-create-home jukebox
+  # If it happens that there's no audio group we don't fail; perhaps only
+  # network play was required.
+  adduser jukebox audio || true
 }
 
 configure_init_d() {
@@ -33,31 +34,52 @@ configure_init_d() {
 }
 
 restart_server() {
-  /etc/init.d/disorder restart
-  # Wait for the server to get going.  This is a horrid bodge and ought
-  # to be done away with, but is required for the time being.  Sorry.
-  sleep 5
+  local first
+  local time
+  invoke-rc.d disorder restart
+  # Wait for the server to start
+  first=true
+  time=0
+  while :; do
+    if disorder version >/dev/null 2>&1; then
+      break
+    else
+      if [ $time -gt 30 ]; then
+        echo
+        echo "Server did not stabilise in a reasonable amount of time"
+        exit 1
+      fi
+      if $first; then
+       printf "Waiting for server to stabilise"
+       first=false
+      fi
+      printf "."
+      sleep 1
+    fi
+    time=`expr $time + 1`
+  done
+  echo
 }
 
 setup_guest() {
-  echo "Checking whether guest user exists..."
+  echo "Checking whether guest user exists..." >&2
   TMPFILE="$(mktemp -t)"
   if disorder users > "$TMPFILE"; then
     if grep -q '^guest$' "$TMPFILE"; then
-      echo "Guest user has already been set up."
+      echo "Guest user has already been set up." >&2
     else
-      echo "Attempting to set up guest user..."
+      echo "Attempting to set up guest user..." >&2
       if disorder setup-guest; then
-        echo "Created guest user."
+        echo "Created guest user." >&2
       else
-        echo "Failed to create guest user."
-        echo "You can use 'disorder setup-guest' to do this step manually."
-        echo
+        echo "Failed to create guest user." >&2
+        echo "You can use 'disorder setup-guest' to do this step manually." >&2
+        echo >&2
       fi
     fi
   else
-    echo "Cannot determine whether guest user has been set up."
-    echo
+    echo "Cannot determine whether guest user has been set up." >&2
+    echo >&2
   fi
   rm -f "$TMPFILE"
 }
@@ -66,7 +88,7 @@ fix_configuration() {
   # Once the server has started up, we can remove some of the obsolete
   # directives from the config file.
   if grep -q ^trust /etc/disorder/config; then
-    echo "Removing obsolete 'trust' directive from /etc/disorder/config"
+    echo "Removing obsolete 'trust' directive from /etc/disorder/config" >&2
     sed < /etc/disorder/config > /etc/disorder/config.new \
        's/^trust/#trust/'
     chmod 644 /etc/disorder/config.new
@@ -74,7 +96,7 @@ fix_configuration() {
   fi
   if test -e /etc/disorder/config.private \
       && grep -q ^allow /etc/disorder/config.private; then
-    echo "Removing obsolete 'allow' directive(s) from /etc/disorder/config.private"
+    echo "Removing obsolete 'allow' directive(s) from /etc/disorder/config.private" >&2
     u=$(umask)
     umask 077
     sed < /etc/disorder/config.private > /etc/disorder/config.private.new \
@@ -86,6 +108,67 @@ fix_configuration() {
   fi
 }
 
+# Create configuration from debconf answers
+create_config() {
+  db_get disorder/roots || true
+  roots="$RET"
+  db_get disorder/scratches || true
+  scratches="$RET"
+  db_get disorder/encoding || true
+  encoding="$RET"
+  db_get disorder/port || true
+  port="$RET"
+  db_get disorder/mail_sender || true
+  mail_sender="$RET"
+  db_get disorder/interface || true
+  interface="$RET"
+  if test "x$interface" = xnetwork; then
+    db_get disorder/mcast_address || true
+    mcast_address="$RET"
+    db_get disorder/mcast_port || true
+    mcast_port="$RET"
+  fi
+
+  mkdir -p /etc/disorder
+  cat > /etc/disorder/conf.debconf.new <<EOF
+# created automatically from debconf information
+# do not edit manually
+# run 'dpkg-reconfigure disorder' instead
+EOF
+
+  echo >> /etc/disorder/conf.debconf.new
+  echo "# Collection roots"  >> /etc/disorder/conf.debconf.new
+  for r in $roots; do
+    echo "collection fs $encoding $r" >> /etc/disorder/conf.debconf.new
+  done
+
+  echo >> /etc/disorder/conf.debconf.new
+  echo "# Scratches" >> /etc/disorder/conf.debconf.new
+  for s in $scratches; do
+    echo "scratch $s" >> /etc/disorder/conf.debconf.new
+  done
+
+  if test "$mail_sender" != ""; then
+    echo "" >> /etc/disorder/conf.debconf.new
+    echo "# Source mail address" >> /etc/disorder/conf.debconf.new
+    echo "mail_sender $mail_sender" >> /etc/disorder/conf.debconf.new
+  fi
+
+  if test "$port" != none && test "$port" != ""; then
+    echo >> /etc/disorder/conf.debconf.new
+    echo "# Listen for remote clients" >> /etc/disorder/conf.debconf.new
+    echo "listen 0.0.0.0 $port" >> /etc/disorder/conf.debconf.new
+  fi
+
+  if test "x$interface" = xnetwork; then
+    echo "" >> /etc/disorder/conf.debconf.new
+    echo "# Target address for RTP frames" >> /etc/disorder/conf.debconf.new
+    echo "broadcast $mcast_address $mcast_port" >> /etc/disorder/conf.debconf.new
+  fi
+
+  mv /etc/disorder/conf.debconf.new /etc/disorder/conf.debconf
+}
+
 case "$1" in
 configure )
   if grep -q ^jukebox: /etc/passwd; then
@@ -95,15 +178,20 @@ configure )
   fi
   chown jukebox:jukebox /var/lib/disorder
   configure_init_d
+  create_config
   restart_server
   fix_configuration
   setup_guest
-  db_stop
+  ;;
+reconfigure )
+  create_config
   ;;
 abort-upgrade )
-  /etc/init.d/disorder restart
+  invoke-rc.d disorder restart
   ;;
 reconfigure )
-  /etc/init.d/disorder reload
+  invoke-rc.d disorder reload
   ;;
 esac
+
+db_stop