#!/bin/bash # # Autofs Boot Script # # Filename: /etc/rc.d/init.d/autofs # # Author: Bryan Mason # # Edit History: # # Date Author Action # ---------------------------------------------------------------------- # 20 Jan 2004 B. Mason Created by modifying original autofs # script created by Peter Anvin # 20 Mar 2004 B. Mason Modified to create mountpoints if they # don't already exist. source /etc/sysconfig/rc source $rc_functions source /etc/sysconfig/autofs.conf # # 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() { 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 " $dir program $map $options" else echo " $dir file $map $options" fi fi done ) fi } # # Show the status of configured and active mounts. # function status() { echo "Configured Mount Points:" getmounts | ( while read dir type map options do echo $dir $type $map $options if [ $type = 'file' ] then cat $map | sed -e '/^#/d' -e '/^$/d' | ( while read key options location do echo " $key $options $location" done ) echo "" fi done ) echo "Active Automount Daemons:" if [ $(COLUMNS=1024 ps ax | grep "[0-9]:[0-9][0-9] $automount " | wc -w) -gt 0 ] then COLUMNS=1024 ps ax | grep "[0-9]:[0-9][0-9] $automount " | ( while read pid tt stat time command; do echo " $command" ; done ) else echo " None"; fi echo "" echo "Actively Automounted Directories:" getmounts | ( while read dir type map options do line=$(mount | grep -v "^automount" | grep "$dir") if [ $(echo $line | wc -w) -ne 0 ] then echo "$line" | sed -e "s/^./ &/" fi done ) echo "" } case "$1" in start) getmounts | ( while read dir type map options do boot_mesg -n "Automounting $dir..." pidfile=$(echo $dir | sed -e "y/\//-/" | sed -e "s/^-//") pidpath=${piddir}/${pidroot}.${pidfile}.pid if [ ! -d "$dir" ] then boot_mesg -n " Creating mountpoint $dir..." mkdir -p "$dir" fi if [ ! -e "$map" ] then boot_mesg "Map file $map does not exist!" ${FAILURE} echo_failed continue fi if [ ! -x "$map" -a "$type" = "program" ] then boot_mesg "Map file $map is not executable!" ${FAILURE} echo_failed continue fi if [ -e "$pidpath" ] then boot_mesg " already running!" ${WARNING} echo_warning else echo " " $automount -p $pidpath $daemonoptions $dir $type $map $options $localoptions evaluate_retval fi done ) ;; stop) # Kill all automounters listed in /run ls ${piddir}/${pidroot}.*.pid 2>/dev/null | ( while read pidpath do pid=$(cat $pidpath) pidfile=$(basename $pidpath) mountpoint=$(echo $pidfile | sed -e "s/^autofs\.\(.*\)\.pid$/\1/" | sed -e "y/-/\//") boot_mesg "Stopping automount on /$mountpoint..." kill $pid evaluate_retval done ) # Now kill any rogue automounters (automount process w/o pid files) sleep 1 COLUMNS=1024 ps ax | grep "[0-9]:[0-9][0-9] $automount " | ( while read pid everything_else do boot_mesg "Stopping automount with pid $pid..." kill $pid evaluate_retval done ) ;; restart) $0 stop sleep 1 $0 start ;; status) status ;; *) echo "usage: $0 {start|stop|restart|status}" exit 1 ;; esac # END