summaryrefslogtreecommitdiff
path: root/debian/oss4-base.init
diff options
context:
space:
mode:
Diffstat (limited to 'debian/oss4-base.init')
-rw-r--r--debian/oss4-base.init220
1 files changed, 220 insertions, 0 deletions
diff --git a/debian/oss4-base.init b/debian/oss4-base.init
new file mode 100644
index 0000000..639083e
--- /dev/null
+++ b/debian/oss4-base.init
@@ -0,0 +1,220 @@
+#!/bin/bash
+#
+# Starts the OSS sound driver
+#
+### BEGIN INIT INFO
+# Provides: oss4-base
+# Required-Start: $remote_fs $local_fs
+# Required-Stop: $remote_fs $local_fs
+# Default-Start: S
+# Default-Stop: 0 1 6
+# Short-Description: Start and Stop the OSS4 subsystem
+### END INIT INFO
+
+OSSETCDIR=/etc/oss4
+OSSVARDIR=/var/lib/oss4
+
+. /etc/oss.conf
+. /lib/lsb/init-functions
+
+# Exit if oss4 is not installed
+test -x /usr/sbin/ossdetect || exit 0
+
+echo_procs_using_sound()
+{
+ echo $( fuser /dev/mixer* /dev/dsp* /dev/midi* /dev/oss/*/* 2>/dev/null )
+}
+
+kill_procs_using_sound()
+{
+ procs_using_sound="$(echo_procs_using_sound)"
+
+ if [ "$procs_using_sound" ] ; then
+ echo -n "Terminating processes:"
+ for attempt in 1 2 3 4 ; do
+ echo -n " ${procs_using_sound}"
+ kill $procs_using_sound || :
+ sleep 1
+ procs_using_sound="$(echo_procs_using_sound)"
+ [ "$procs_using_sound" ] || break
+ done
+ # Either no more procs using sound or attempts ran out
+ if [ "$procs_using_sound" ] ; then
+ echo -n " (with SIGKILL:) ${procs_using_sound}"
+ kill -9 $procs_using_sound || :
+ sleep 1
+ fi
+ procs_using_sound="$(echo_procs_using_sound)"
+ if [ "$procs_using_sound" ] ; then
+ echo " (failed: processes still using sound devices: $(echo_with_command_names $procs_using_sound))."
+ return 1
+ fi
+ echo "."
+ fi
+ return 0
+}
+
+unload_modules()
+{
+ procs_using_sound="$(echo_procs_using_sound)"
+
+ if test "$procs_using_sound " != " "
+ then
+ log_action_end_msg 2 'Some applications are still using OSS'
+ exit 2
+ fi
+
+ # Unload oss drivers
+ for n in `cat $OSSETCDIR/installed_drivers | sed 's/#.*//'`
+ do
+ if ! /sbin/rmmod $n
+ then
+ log_warning_msg "Unloading module $n failed - ignored"
+ fi
+ done
+
+ if ! /sbin/rmmod osscore
+ then
+ log_action_end_msg 3 'Cannot unload the OSS driver modules'
+ exit 3
+ fi
+}
+
+case "$1" in
+ start)
+ log_begin_msg 'Starting Open Sound System: '
+
+ # Check if OSS is already running
+ if test -f /proc/opensound/devfiles
+ then
+ log_action_end_msg 0 'OSS is already loaded'
+ exit 0
+ fi
+
+ # Check if oss kernel modules are installed
+ if ! test -f /lib/modules/`uname -r`/kernel/oss4/osscore.ko && ! test -f /lib/modules/`uname -r`/updates/dkms/osscore.ko
+ then
+ log_action_end_msg 1 'No kernel modules detected'
+ exit 0
+ fi
+
+ # Detect hardware
+ if ! test -f $OSSETCDIR/installed_drivers
+ then
+ /usr/sbin/ossdetect -v
+ fi
+ if ! test -f $OSSETCDIR/installed_drivers
+ then
+ log_action_end_msg 10 "No $OSSETCDIR/installed_drivers - cannot continue (problem with ossdetect?)"
+ exit 10
+ fi
+
+ # Load osscore
+ OPTIONS=
+ if test -f $OSSETCDIR/conf/osscore.conf
+ then
+ OPTIONS="`grep -v -h '^#' $OSSETCDIR/conf/osscore.conf|sed 's/ //g'`"
+ fi
+ if ! /sbin/modprobe osscore $OPTIONS
+ then
+ log_action_end_msg 60 "Cannot load the osscore module"
+ exit 60
+ fi
+
+ # Load oss drivers
+ for n in `cat $OSSETCDIR/installed_drivers | sed 's/#.*//'`
+ do
+ OPTIONS=
+
+ if test -f $OSSETCDIR/conf/$n.conf
+ then
+ OPTIONS="`grep -v -h '^#' $OSSETCDIR/conf/$n.conf|sed 's/ //g'`"
+ fi
+
+ if ! /sbin/modprobe $n $OPTIONS
+ then
+ log_warning_msg "Loading module $n failed - ignored"
+ fi
+ done
+
+ # Check if everything is OK
+ if ! test -f /proc/opensound/devfiles
+ then
+ log_action_end_msg 70 'OSS Core module refused to start'
+ exit 70
+ fi
+
+ # Create device file
+ /usr/sbin/ossdetect -d -m 660 -g audio
+
+ # Create basic links
+ /usr/sbin/ossdevlinks
+ if test -f $OSSVARDIR/legacy_devices
+ then
+ sh $OSSVARDIR/legacy_devices
+ fi
+
+ /usr/sbin/savemixer -L
+
+ log_action_end_msg 0
+ ;;
+
+ stop)
+ log_begin_msg 'Stopping Open Sound System: '
+ if ! test -f /proc/opensound/devfiles
+ then
+ log_action_end_msg 0 'OSS not loaded'
+ exit 0
+ fi
+
+ /usr/sbin/savemixer
+
+ log_action_end_msg 0
+ ;;
+
+ unload)
+ log_begin_msg 'Unloading Open Sound System kernel modules: '
+
+ if ! test -f /proc/opensound/devfiles
+ then
+ log_action_end_msg 0 'OSS not loaded'
+ exit 0
+ fi
+
+ /usr/sbin/savemixer
+ unload_modules
+ log_action_end_msg 0
+ ;;
+
+ force-unload)
+ log_begin_msg 'Unloading Open Sound System kernel modules: '
+
+ if ! test -f /proc/opensound/devfiles
+ then
+ log_action_end_msg 0 'OSS not loaded'
+ exit 0
+ fi
+
+ /usr/sbin/savemixer
+ kill_procs_using_sound
+ unload_modules
+ log_action_end_msg 0
+ ;;
+
+ restart)
+ $0 stop
+ sleep 1
+ $0 start
+ ;;
+
+ force-reload)
+ $0 force-unload
+ sleep 1
+ $0 start
+ ;;
+
+ *)
+ echo "Usage: $0 {start|stop|unload|force-unload|restart|force-reload}"
+ exit 3
+esac
+