Hello,
For your information, here is the modified autofs script that I have tested
on a RedHat 5.1 workstation in a an environment with Sun NIS servers. The
default script does not work in that case.
Except for some cosmetic modifications, the intent was:
- If a local master map does exist, do not read the NIS master map.
Indeed, the NIS master map cannot be understood because it uses
options Solaris can understand but automount cannot (such as direct
mounts). Default script merges both master maps if they exist. Is
this useful?
- In the case of a local master.map, try to read NIS secondary maps.
For example, I was interested in reading the NIS auto.home map,
although I had to install a local /etc/auto.master map for the
above reasons.
I hope this script can be of some help... If someone wants to include
such modifications to the autofs package, I'd all too happy to help.
#! /bin/bash
#
# $Id: rc.autofs,v 1.3 1998/03/28 03:22:38 hpa Exp $
#
# /etc/rc.d/init.d/autofs
#
# 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
#
# chkconfig: - 72 08
# description: automatically mounts filesystems when you use \
# them, and unmounts them later when you are not using them.
# processname: automount
# Note that there may be multiple processes names automount
# config: /etc/auto.master
# Note that all other config files are automatically reloaded
# and may be different on different systems; we can ignore them
# here
#
# note:
# Modifie par Dimitri pour marcher avec un /etc/auto.master
# local qui contient une reference vers un auto.home NIS.
#
#
# Source function library.
#
. /etc/rc.d/init.d/functions
#
# This is the automount daemon.
#
test -x /usr/sbin/automount || exit 0
#
# 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
# special: treat -t or --timeout (or any reasonable derivative)
# specially, since it can't be made a normal mount option.
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'`
nismap=$map
[ x`echo "$map" | cut -c1` = 'x/' ] || map="/etc/$map"
if [ -x $map ]; then
echo "/usr/sbin/automount $mountoptions $dir program $map $options
$localoptions"
elif [ -f $map ]; then
echo "/usr/sbin/automount $mountoptions $dir file $map $options
$localoptions"
elif [ -x /usr/bin/ypcat ] \
&& ypcat -k "$nismap" >/dev/null 2>&1 ; then
echo "/usr/sbin/automount $mountoptions $dir yp $nismap $options
$localoptions"
else
echo "/usr/sbin/automount $mountoptions $dir `basename $map`
$options $localoptions"
fi
fi
done
)
#
# Check for YellowPage maps to be loaded
#
elif [ -x /usr/bin/ypcat ] && ypcat -k auto.master 2>/dev/null 1>&2
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 "/usr/sbin/automount $mountoptions $dir yp $map $options
$localoptions"
fi
done
)
fi
}
#
# See how we were called.
#
case "$1" in
start)
# Check if the automounter is already running?
if [ ! -f /var/lock/subsys/automount ]; then
echo 'Starting automounter: '
getmounts | sh
touch /var/lock/subsys/automount
fi
;;
stop)
kill -TERM $(/sbin/pidof /usr/sbin/automount)
rm -f /var/lock/subsys/automount
;;
reload|restart)
if [ ! -f /var/lock/subsys/automount ]; then
echo "Automounter not running"
exit 1
fi
echo "Checking for changes to /etc/auto.master ...."
TMP1=`mktemp /tmp/autofs.XXXXXX` || { echo "could not make temp file" >&2;
exit 1; }
TMP2=`mktemp /tmp/autofs.XXXXXX` || { echo "could not make temp file" >&2;
exit 1; }
getmounts >$TMP1
ps ax|grep "[0-9]:[0-9][0-9] /usr/sbin/automount " | (
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)
echo "Configured Mount Points:"
getmounts
echo ""
echo "Active Mount Points:"
ps ax|grep "[0-9]:[0-9][0-9] /usr/sbin/automount " | (
while read pid tt stat time command; do echo $command; done
)
;;
*)
echo "Usage: /etc/rc.d/init.d/autofs {start|stop|restart|reload|status}"
exit 1
esac
exit 0