Your message dated Sat, 2 Jun 2012 00:45:20 +1000
with message-id
<CANBdODVVimGCFPLW5wK8Ht73oE32u4Q1ob9jCV3GjG=lton...@mail.gmail.com>
and subject line Bug#620703: fixed in autofs 5.0.6-1
has caused the Debian Bug report #620703,
regarding autofs5: autofs doesn't mount nfs directory on nfsrooted linux system
to be marked as done.
This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.
(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact [email protected]
immediately.)
--
620703: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=620703
Debian Bug Tracking System
Contact [email protected] with problems
--- Begin Message ---
Package: autofs5
Version: 5.0.4-3.2
Severity: grave
Tags: patch
Justification: renders package unusable
autofs doesn't work on nfsrooted system because /etc/init.d/autofs script
doesn't create mount point. Please note that the same script removes
this directory when autofs is stopped.
Please apply this patch:
--- /etc/init.d/autofs 2008-09-11 19:32:09.124098772 +0200
+++ /etc/init.d/autofs 2008-09-11 19:34:46.304096839 +0200
@@ -666,7 +666,7 @@
do
mnt=`echo $rest | sed 's/^.* \(\/[^ ]*\) [A-Za-z].*$/\1/'`
pidfile=/var/run/autofs/`echo $mnt | sed 's,/,_,g'`.pid
-
+ mkdir -p "$mnt"
start-stop-daemon --start --pidfile $pidfile --quiet \
--exec $DAEMON -- --pid-file=$pidfile $rest
Best regards,
JKB
-- System Information:
Debian Release: wheezy/sid
APT prefers testing
APT policy: (990, 'testing'), (500, 'unstable'), (500, 'stable')
Architecture: sparc (sparc64)
Kernel: Linux 2.6.38.1 (SMP w/1 CPU core)
Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968)
Shell: /bin/sh linked to /bin/dash
#!/bin/bash
#
# $Id: rc.autofs.in,v 1.58 2005/04/11 11:30:54 raven 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
#
### BEGIN INIT INFO
# Provides: autofs
# Required-Start: $network $remote_fs $syslog
# Required-Stop: $network $remote_fs $syslog
# Should-Start: ypbind nslcd
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: automount daemon
# Description: daemon to mount (possibly remote) filesystems
# automatically upon entering the mountpoint
### END INIT INFO
# For Redhat-ish systems
#
# chkconfig: 345 28 72
# processname: /usr/sbin/automount
# config: /etc/auto.master
# 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
prog=`basename $DAEMON`
initdir=/etc/init.d
test -e $DAEMON || exit 0
#
# 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
else
echo "$0: Unknown system, please port and contact [email protected]" 1>&2
exit 1
fi
if [ $system = redhat ]; then
. $initdir/functions
fi
if [ $system = debian ]; then
thisscript="$0"
if [ ! -f "$thisscript" ]; then
echo "$0: Cannot find myself" 1>&2
exit 1
fi
fi
PATH=/sbin:/usr/sbin:/bin:/usr/bin
export PATH
#
# We can add local options here
# e.g. localoptions='rsize=8192,wsize=8192'
#
localoptions=''
#
# Daemon options
# e.g. --timeout=60
#
daemonoptions=''
#
# load custom settings
#
if [ "$system" = "redhat" ]; then
LOCALOPTIONS=""
DAEMONOPTIONS=""
UNDERSCORETODOT=1
DISABLE_DIRECT=1
DAEMON_EXIT_WAIT=20
[ -f /etc/sysconfig/autofs ] && . /etc/sysconfig/autofs
# Over-ride localoptions if set
if [ -n "$LOCALOPTIONS" ]; then
localoptions=$LOCALOPTIONS
fi
# Over-ride daemonoptions if set
if [ -n "$DAEMONOPTIONS" ]; then
daemonoptions=$DAEMONOPTIONS
fi
elif [ "$system" = "debian" ]; then
TIMEOUT=300
DISABLE_DIRECT=1
DAEMON_EXIT_WAIT=20
[ -f /etc/default/autofs ] && . /etc/default/autofs
daemonoptions="$daemonoptions --timeout=$TIMEOUT"
fi
#
# Check for all maps that are to be loaded
#
function getschemes()
{
SOURCES=`grep ^automount: /etc/nsswitch.conf | \
sed -e 's/^.*://' -e 's/\[.*\]/ /g'`
if [ `echo $SOURCES | awk '{print NF}'` -gt 0 ]
then
echo ${SOURCES}
else
echo files
fi
}
function catnismap()
{
if [ -z "$1" ] ; then
map="auto_master"
else
map="$1"
fi
# Append the map's options at the _start_ if there are any options already
# (ie. myopt -> $2,myopt), otherwise just append them at the end.
if [ -z "$2" ]; then
/usr/bin/ypcat -k "$map" 2> /dev/null | sed -e '/^#/d' -e '/^$/d'
else
/usr/bin/ypcat -k "$map" 2> /dev/null |
sed -e '/^#/d' -e '/^$/d' \
-e "s/^[ \t]*\([^ \t]\+\)[ \t]\+\([^ \t]\+\)[ \t]\+-\([^ \t]\+\)/\1 \2 $2,\3/" \
-e "s/^[ \t]*\([^ \t]\+\)[ \t]\+\([^ \t]\+\)[ \t]*$/\1 \2 $2/"
fi
}
function getfilemounts()
{
if [ -f /etc/auto.master ] ; then
cat /etc/auto.master | awk '{print $0}' | sed -e '/^#/d' -e '/^$/d' | (
while read auto_master_in
do
if [ "`echo $auto_master_in | grep '^\+'`" = "" ]; then
echo $auto_master_in
else
cat /etc/auto.master | grep '^\+' | sed -e '/^#/d' -e '/^$/d' | (
while read map options; do
catnismap `echo "$map" | sed -e 's/^\+//'` $options
done
)
fi
done
)
fi
}
function getnismounts()
{
YPMAP=`catnismap auto.master`
if [ -z "$YPMAP" ]; then
catnismap
else
catnismap auto.master
fi
}
function getldapmounts()
{
if [ -x /usr/lib/autofs/autofs-ldap-auto-master ]; then
[ ! -z $LDAPURI ] && export LDAPURI="$LDAPURI"
[ ! -z $LDAPBASE ] && export LDAPBASE="$LDAPBASE"
/usr/lib/autofs/autofs-ldap-auto-master 2> /dev/null
/usr/lib/autofs/autofs-ldap-auto-master -m automountMap \
-e automount -n ou -k cn -v automountInformation 2> /dev/null
fi
}
function getrawmounts()
{
for scheme in `getschemes` ; do
case "$scheme" in
files)
if [ -z "$filescheme" ] ; then
getfilemounts
filescheme=1
export filescheme
fi
;;
nis)
if [ -z "$nisscheme" ] ; then
getnismounts
nisscheme=1
export nisscheme
fi
;;
ldap*)
if [ -z "$ldapscheme" ] ; then
getldapmounts
ldapscheme=1
export ldapscheme
fi
;;
esac
done
}
#
# 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()
{
local LC_ALL=C
export LC_ALL
knownmaps=" "
getrawmounts | (
while read dir map options
do
# These checks screen out duplicates and skip over directories
# where the map is '-'.
# We can't do empty or direct host maps, so don't bother trying.
# Strip trailing slashes from the dir line if it exists to aid
# in checking for duplicate maps
dir=`echo "$dir" | sed -e "s/\/*$//"`
if [ ! -z "$map" -a "$map" = "-hosts" ] ; then
continue
fi
if [ $DISABLE_DIRECT -eq 1 \
-a x`echo $dir | grep -E "^/-"` != 'x' ]
then
continue
fi
# If possible, canonicalise the path so it will always unmount
# cleanly.
link=`readlink -f "$dir"`
if [ ! -z "$link" ]; then
dir="$link"
fi
# Do not include a map if it is a duplicate, maps on top of
# another map or another map, maps on top of it.
for knownmap in $knownmaps
do
if [ "`echo $dir/ | grep ^$knownmap`" != "" \
-o "`echo $knownmap | grep ^$dir/`" != "" \]
then
continue 2
fi
done
if [ ! -z "$dir" -a ! -z "$map" \
-a x`echo "$map" | cut -c1` != 'x-' ]
then
# If the options include a -t or --timeout, a -g or --ghost,
# a -v or --verbose or a -d or --debug paramter, then pull
# those particular options out.
: echo DAEMONOPTIONS OPTIONS $daemonoptions $options
startupoptions=
if echo "$options" | grep -qE -- '\B-(t\b|-timeout\b=)' ;
then
startupoptions="--timeout=$(echo $options |\
sed 's/.*-\(t[^0-9]*\|-timeout\)[ \t=]*\([0-9][0-9]*\).*$/\2/g')"
elif echo "$daemonoptions" | grep -q -- '-t' ;
then
# It's okay to be sloppy with DAEMONOPTIONS as there is no
# possibility of conflicting with mount or map options.
startupoptions="--timeout=$(echo $daemonoptions | \
sed 's/.*--*t\(imeout\)*[ \t=]*\([0-9][0-9]*\).*$/\2/g')"
fi
# Check for the ghost option
if echo "$daemonoptions $options" | grep -qE -- '\B-(g\b|-ghost\b)' ;
then
startupoptions="$startupoptions --ghost"
fi
# Dont even deal with conflicts between --ghost and [no]browse
# Its just insane to configure things like that.
if echo "$options" | grep -qE -- '\B-browse\b' ;
then
startupoptions="$startupoptions --ghost"
fi
# Check for verbose
if echo "$daemonoptions $options" | \
grep -qE -- '\B-(v\b|-verbose\b)' ;
then
startupoptions="$startupoptions --verbose"
fi
# Check for debug
if echo "$daemonoptions $options" | \
grep -qE -- '\B-(d\b|-debug\b)' ;
then
startupoptions="$startupoptions --debug"
fi
# Other option flags are intended for maps.
mapoptions="$(echo "$daemonoptions $options" |\
sed 's/-\(t[^0-9]*\|-timeout\)[ \t=]*\([0-9][0-9]*\)//g' |
sed 's/-\(g\b\|-ghost\b\)//g' |
sed 's/-\(v\b\|-verbose\b\)//g' |
sed 's/-\(d\b\|-debug\b\)//g' |
sed 's/-\b\(no\)\?browse\b//g')"
# Break up the maptype and map, if the map type is specified
maptype=`echo $map | cut -f1 -d:`
# Handle degenerate map specifiers
if [ "$maptype" = "$map" ] ; then
if [ "$map" = "hesiod" -o "$map" = "userhome" -o "$map" = "ldap" ] ; then
maptype=$map
map=
elif [ "$map" = "multi" ] ; then
maptype=$map
map=
# elif echo "$map" | grep -q '^!'; then
# map=`echo "$map"| sed -e 's/^!//g'`
elif `echo $map | grep -q "^/"` && [ -x "$map" ]; then
maptype=program
elif [ -x "/etc/$map" ]; then
maptype=program
map=`echo /etc/$map | sed 's^//^/^g'`
elif `echo $map | grep -q "^/"` && [ -f "$map" ]; then
maptype=file
elif [ -f "/etc/$map" ]; then
maptype=file
map=`echo /etc/$map | sed 's^//^/^g'`
else
maptype=yp
if [ "$UNDERSCORETODOT" = "1" ] ; then
map=`basename $map | sed -e s/^auto_home/auto.home/ -e s/^auto_mnt/auto.mnt/`
else
map=`basename $map | sed 's^//^/^g'`
fi
fi
fi
map=`echo $map | cut -f2- -d:`
: echo STARTUPOPTIONS $startupoptions
: echo DIR $dir
: echo MAPTYPE $maptype
: echo MAP $map
: echo MAPOPTIONS $mapoptions
: echo LOCALOPTIONS $localoptions
NEWOPTIONS=""
for m in $mapoptions
do
if [ x"$m" = x"--" ]; then
NEWOPTIONS="$NEWOPTIONS $localoptions --"
else
NEWOPTIONS="$NEWOPTIONS $m"
fi
done
mapoptions=$NEWOPTIONS
echo "$DAEMON $startupoptions $dir $maptype $map $mapoptions $localoptions" | sed -e 's/ / /g' -e 's/ */ /g'
: echo ------------------------
knownmaps=" $dir/ $knownmaps"
fi
done
)
}
#
# Status lister.
#
function status()
{
echo -e $"Configured Mount Points:\n------------------------"
getmounts
echo ""
echo -e $"Active Mount Points:\n--------------------"
ps axwww|grep "[0-9]:[0-9][0-9] $DAEMON " | (
while read pid tt stat time command; do echo $command; done
)
}
function get_command_from_pid()
{
ps ax | grep "[0-9]:[0-9][0-9] $DAEMON " | (
while read pid tt stat time command; do
if [ "$pid" = "$1" ] ; then
echo `echo "$command" | \
sed 's/--pid-file.*\.pid/ /'`
return 0
fi
done
)
return 0
}
# return true if at least one pid is alive
function alive()
{
if [ -z "$*" ]; then
return 1
fi
for i in $*; do
if kill -0 $i 2> /dev/null; then
return 0
fi
done
return 1
}
#
# Find pids of process group leaders
#
function get_pgrp_pids()
{
ps -eo pid,pgrp,cmd|grep $DAEMON|\
awk '{print $1,$2}'|\
while read pid pgrp
do
if [ $pid -eq $pgrp ]
then
echo $pid
fi
done
}
#
# Signal each automount process group leader
#
function signal_automounts()
{
RETVAL=0
pgrp_pids=`get_pgrp_pids`
for pid in $pgrp_pids
do
kill -USR2 $pid 2 > /dev/null
count=0
while ps ax|grep -v grep|grep $pid >/dev/null
do
sleep 1
count=$(expr $count + 1)
if [ $count -gt $DAEMON_EXIT_WAIT ]; then
break;
fi
done
done
if [ -n "`/sbin/pidof $DAEMON`" ] ; then
RETVAL=1
fi
return $RETVAL
}
function umount_loopback()
{
loops=`LC_ALL=C awk '!/^#/ && $1 ~ /^\/dev\/loop/ && $2 != "/" {print $2}' /proc/mounts`
automounts=`LC_ALL=C awk '!/^#/ && $1 ~ /^automount/ {print $2}' /proc/mounts`
for l in $loops
do
# If a loop device is mounted into a subdir of the automount point,
# umount it here.
for a in $automounts
do
match=`echo $l | grep -E "^$a[\$|/]" || true`
if [ -n "$match" ]; then
echo ""
echo -n $"Unmounting loopback filesystem $match: "
loopdev=`LC_ALL=C grep $l /proc/mounts | awk '{print $1}'`
umount -d $match
if [ $? -eq 0 ]; then
echo "done"
else
echo "failed ($?)"
fi
fi
done
done
# If the loop device file exists under the automount point, umount
# it here.
loopmnts=`LC_ALL=C awk '!/^#/ && $1 ~ /^\/dev\/loop/ && $2 != "/" {print $1}' /proc/mounts`
for l in $loopmnts
do
loopmnt=`losetup $l | awk -F\( '{print $2}' | awk -F\) '{print $1}'`
for a in $automounts
do
match=`echo $loopmnt | grep -E "^$a[\$|/]" || true`
if [ -n "$match" ]; then
echo ""
echo -n $"Unmounting loopback filesystem $match: "
umount -d $match
if [ $? -eq 0 ]; then
echo "done"
else
echo "failed ($?)"
fi
fi
done
done
}
#
# Redhat start/stop function.
#
function redhat()
{
#
# See how we were called.
#
case "$1" in
start)
# Make sure the autofs filesystem type is available.
(grep -q autofs /proc/filesystems || /sbin/modprobe -k autofs4 || /sbin/modprobe -k autofs) 2> /dev/null
echo -n $"Starting $prog: "
TMP=`mktemp /tmp/autofs.XXXXXX` || { echo $"could not make temp file" >& 2; exit 1; }
getmounts | tee $TMP | sh
RETVAL=$?
if [ -s $TMP ] ; then
if [ $RETVAL -eq 0 ] ; then
success "$prog startup"
else
failure "$prog startup"
fi
[ $RETVAL = 0 ] && touch /var/lock/subsys/autofs
else
echo -n $"No Mountpoints Defined"
success "$prog startup"
fi
rm -f $TMP
echo
;;
stop)
echo -n $"Stopping $prog:"
if [ -z "`pidofproc $prog`" -a -z "`getmounts`" ]; then
RETVAL=0
else
umount_loopback
signal_automounts
RETVAL=$?
fi
count=0
while [ -n "`/sbin/pidof $DAEMON`" -a $count -lt 10 ] ; do
killproc $DAEMON -USR2 >& /dev/null
RETVAL=$?
[ $RETVAL = 0 -a -z "`/sbin/pidof $DAEMON`" ] || sleep 3
count=`expr $count + 1`
done
umount -a -f -t autofs
rm -f /var/lock/subsys/autofs
if [ -n "`/sbin/pidof $DAEMON`" ] ; then
failure "$prog shutdown"
else
success "$prog shutdown"
fi
echo
;;
restart)
redhat stop
redhat start
;;
reload)
if [ ! -f /var/lock/subsys/autofs ]; then
echo $"$prog not running"
RETVAL=1
return
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 axwww|grep "[0-9]:[0-9][0-9] $DAEMON " | (
while read pid tt stat time command; do
echo "$command" >>$TMP2
if ! grep -q "^$command" $TMP1; then
if ! echo "$command" | grep -q -e --submount; then
kill -USR2 $pid 2> /dev/null
echo $"Stop $command"
fi
else
kill -HUP $pid 2> /dev/null
echo $"Reload map $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
;;
condrestart)
[ -f /var/lock/subsys/autofs ] && redhat restart
RETVAL=0
;;
*)
echo $"Usage: $0 {start|stop|restart|reload|condrestart|status}"
RETVAL=0
esac
}
#
# Debian start/stop functions.
#
function debian()
{
case "$1" in
start)
echo -n 'Starting automounter:'
# make sure autofs4 is loaded
if ! grep -q autofs /proc/filesystems
then
# autofs filesystem support not loaded
echo -n ' loading autofs4 kernel module,'
modprobe autofs4 || true
elif ([ -f /proc/modules ] && lsmod) | grep -q autofs[^4]; then
# wrong autofs filesystem module loaded
echo
echo "WARNING: autofs kernel module is loaded, autofs4 needed"
echo " for correct behaviour. You might experience mount failures."
fi
# Check that maps exist
if [ -z "$(getrawmounts)" ]
then
echo " no automount maps defined."
exit 0
fi
# ensure pid file directory exists
if [ ! -e /var/run/autofs ]
then
mkdir /var/run/autofs
fi
getmounts | while read cmd rest
do
mnt=`echo $rest | sed 's/^.* \(\/[^ ]*\) [A-Za-z].*$/\1/'`
pidfile=/var/run/autofs/`echo $mnt | sed 's,/,_,g'`.pid
mkdir -p "$mnt"
start-stop-daemon --start --pidfile $pidfile --quiet \
--exec $DAEMON -- --pid-file=$pidfile $rest
ret=$?
if [ $ret -ne 0 ]
then
echo
echo " failed to start automount point $mnt"
fi
done
echo " done."
;;
stop)
echo -n 'Stopping automounter:'
umount_loopback
any=0
for file in `ls /var/run/autofs/*.pid 2>/dev/null`
do
if [ -e "$file" ]
then
any=1
pid=`head -n 1 $file`
mnt=`ps -wwo 'cmd=' $pid | sed -e \
's,.* --pid-file=/var/run/autofs/\([^ ]*\)\.pid.*,\1,; s,_,/,g'`
dname=`basename $DAEMON`
start-stop-daemon --stop --quiet \
--retry USR2/$DAEMON_EXIT_WAIT \
--pidfile $file --name $dname
ret=$?
case $ret in
0)
# echo -n " $mnt"
rm -f $file
;;
1)
echo -n -e "\n No process for automount $mnt"
rm -f $file
;;
2)
echo -n -e "\n Couldn't stop automount for $mnt"
;;
*)
echo -n -e \
"\n Strange start-stop-daemon exit status: $ret"
;;
esac
fi
done
echo " done."
;;
reload)
echo "Reloading automounter: checking for changes ... "
TMP1=`mktemp -t autofs.XXXXXX`
TMP2=`mktemp -t autofs.XXXXXX`
getmounts >$TMP1
for i in `ls /var/run/autofs/*.pid 2>/dev/null`
do
pid=`head -n 1 $i 2>/dev/null`
[ "$pid" = "" ] && continue
cmd=`get_command_from_pid $pid`
echo $cmd >>$TMP2
mnt=`ps -wwo 'cmd=' $pid | sed -e \
's,.* --pid-file=/var/run/autofs/\([^ ]*\)\.pid.*,\1,; s,_,/,g'`
if ! grep -q "$cmd" $TMP1; then
echo "Stopping automounter for: $mnt"
kill -USR2 $pid 2> /dev/null
else
echo "Reloading automounter map for: $mnt"
kill -HUP $pid 2> /dev/null
fi
done
cat $TMP1 | (while read x; do
if ! grep -q "^$x" $TMP2; then
echo $x | while read cmd rest; do
mnt=`echo $rest | sed 's/^.* \(\/[^ ]*\) [A-Za-z].*$/\1/'`
pidfile=/var/run/autofs/`echo $mnt | sed 's,/,_,g'`.pid
start-stop-daemon --start --pidfile $pidfile --quiet \
--exec $DAEMON -- --pid-file=$pidfile $rest
ret=$?
if [ $ret -ne 0 ]
then
echo
echo " failed to start automount point $mnt"
else
echo "Started automounter: $mnt"
fi
done
fi
done)
rm -f $TMP1 $TMP2
;;
force-reload|restart)
debian stop
debian start
;;
status)
status
;;
getmounts)
getmounts
;;
active)
alive
;;
*)
echo "Usage: $initdir/autofs {start|stop|restart|reload|status|getmounts|active}" >&2
exit 1
;;
esac
}
RETVAL=0
if [ $system = debian ]; then
debian "$@"
elif [ $system = redhat ]; then
redhat "$@"
fi
exit $RETVAL
--- End Message ---
--- Begin Message ---
Source: autofs
Source-Version: 5.0.6-1
We believe that the bug you reported is fixed in the latest version of
autofs, which is installed in the Debian FTP archive.
Thank you for reporting the bug, which will now be closed. If you
have further comments please address them to [email protected],
and the maintainer will reopen the bug report if appropriate.
--- End Message ---