#! /bin/bash # # $Id: rc.autofs.in,v 1.3 1999/03/07 22:59:55 hpa Exp $ # # rc file for automount using a Sun-style "master map". # We first look for a local /etc/auto.master, then a YP # map with that name # # On most distributions, this file should be called: # /etc/rc.d/init.d/autofs or /etc/init.d/autofs # # 30-Sep-00 amo Posted by Henning.Rosemann@dlr.de # # # For Redhat-ish systems # # chkconfig: 345 15 85 # description: Automounts filesystems on demand # This is used in the Debian distribution to determine the proper # location for the S- and K-links to this init file. # The following value is extracted by debstd to figure out how to # generate the postinst script. Edit the field to change the way the # script is registered through update-rc.d (see the manpage for # update-rc.d!) # FLAGS="defaults 21" # # Location of the automount daemon and the init directory # DAEMON=/usr/sbin/automount initdir=/etc/rc.d/init.d # # Determine which kind of configuration we're using # system=unknown if [ -f /etc/debian_version ]; then system=debian elif [ -f /etc/redhat-release ]; then system=redhat elif [ -f /etc/slackware-version ]; then system=slackware else echo "$0: Unknown system, please port and contact autofs@linux.kernel.org" 1>&2 exit 1 fi if [ $system = redhat ]; then . $initdir/functions fi test -e $DAEMON || exit 0 thisscript="$0" if [ ! -f "$thisscript" ]; then echo "$0: Cannot find myself" 1>&2 exit 1 fi PATH=/sbin:/usr/sbin:/bin:/usr/bin export PATH # # We can add local options here # e.g. localoptions='rsize=8192,wsize=8192' # localoptions='' # # This function will build a list of automount commands to execute in # order to activate all the mount points. It is used to figure out # the difference of automount points in case of a reload # function getmounts() { # # Check for local maps to be loaded # if [ -f /etc/auto.master ] then cat /etc/auto.master | sed -e '/^#/d' -e '/^$/d'| ( while read dir map options do if [ ! -z "$dir" -a ! -z "$map" \ -a x`echo "$map" | cut -c1` != 'x-' ] then map=`echo "/etc/$map" | sed -e 's:^/etc//:/:'` options=`echo "$options" | sed -e 's/\(^\|[ \t]\)-/\1/g'` if [ -x $map ]; then echo "$DAEMON $dir program $map $options $localoptions" elif [ -f $map ]; then echo "$DAEMON $dir file $map $options $localoptions" else echo "$DAEMON $dir `basename $map` $options $localoptions" fi fi done ) fi # # Check for YellowPage maps to be loaded # if [ -e /usr/bin/ypcat ] && [ `ypcat -k auto.master 2>/dev/null | wc -l` -gt 0 ] then ypcat -k auto.master | ( while read dir map options do if [ ! -z "$dir" -a ! -z "$map" \ -a x`echo "$map" | cut -c1` != 'x-' ] then map=`echo "$map" | sed -e 's/^auto_/auto./'` if echo $options | grep -- '-t' >/dev/null 2>&1 ; then mountoptions="--timeout $(echo $options | \ sed 's/^.*-t\(imeout\)*[ \t]*\([0-9][0-9]*\).*$/\2/g')" fi options=`echo "$options" | sed -e ' s/--*t\(imeout\)*[ \t]*[0-9][0-9]*//g s/\(^\|[ \t]\)-/\1/g'` echo "$DAEMON $dir yp $map $options $localoptions" fi done ) fi } # # Status lister. # function status() { echo "Configured Mount Points:" echo "------------------------" getmounts echo "" echo "Active Mount Points:" echo "--------------------" ps ax|grep "[0-9]:[0-9][0-9] $DAEMON " | ( while read pid tt stat time command; do echo $command; done ) } # # Slackware start/stop function. # function slackware() { # # See how we were called. # case "$1" in start) # Check if the automounter is already running? if [ ! -f /var/lock/subsys/autofs ]; then echo 'Starting automounter: ' getmounts | sh touch /var/lock/subsys/autofs else echo 'Automounter already running ' fi ;; stop) rm -f /var/lock/subsys/autofs PID=$(/sbin/pidof $DAEMON) if [ "x$PID" == x ]; then echo "No automount process running" exit 1 else kill -TERM $PID fi ;; reload|restart) if [ ! -f /var/lock/subsys/autofs ]; then echo "Automounter not running" exit 1 fi echo "Checking for changes to /etc/auto.master ...." TMP1=/tmp/autofs.tmp1 TMP2=/tmp/autofs.tmp2 getmounts >$TMP1 ps ax|grep "[0-9]:[0-9][0-9] $DAEMON " | ( while read pid tt stat time command; do echo "$command" >>$TMP2 if grep -q "^$command" $TMP2; then kill -USR2 $pid echo "Stop $command" fi done ) cat $TMP1 | ( while read x; do if grep -q "^$x" $TMP2; then $x echo "Start $x" fi done ) rm -f $TMP1 $TMP2 ;; status) status ;; *) echo "Usage: $initdir/autofs {start|stop|restart|reload|status}" exit 1 esac } if [ $system = debian ]; then debian "$@" elif [ $system = redhat ]; then redhat "$@" elif [ $system = slackware ]; then slackware "$@" fi exit 0 # # end of file