107 lines
2.4 KiB
Bash
107 lines
2.4 KiB
Bash
|
#! /bin/sh
|
||
|
### BEGIN INIT INFO
|
||
|
# Provides: mountnfs
|
||
|
# Required-Start: $local_fs
|
||
|
# Required-Stop:
|
||
|
# Should-Start: $network $portmap nfs-common udev-mtab
|
||
|
# Default-Start: S
|
||
|
# Default-Stop:
|
||
|
# Short-Description: Wait for network file systems to be mounted
|
||
|
# Description: Network file systems are mounted by
|
||
|
# /etc/network/if-up.d/mountnfs in the background
|
||
|
# when interfaces are brought up; this script waits
|
||
|
# for them to be mounted before carrying on.
|
||
|
### END INIT INFO
|
||
|
|
||
|
. /lib/lsb/init-functions
|
||
|
. /lib/init/vars.sh
|
||
|
. /lib/init/mount-functions.sh
|
||
|
|
||
|
do_wait_async_mount() {
|
||
|
# Read through fstab line by line. If it is NFS, set the flag
|
||
|
# for mounting NFS file systems. If any NFS partition is found
|
||
|
# then wait around for it.
|
||
|
|
||
|
waitnfs=
|
||
|
for file in "$(eval ls $(fstab_files))"; do
|
||
|
if [ -f "$file" ]; then
|
||
|
while read DEV MTPT FSTYPE OPTS REST; do
|
||
|
case "$DEV" in
|
||
|
""|\#*)
|
||
|
continue
|
||
|
;;
|
||
|
esac
|
||
|
case "$OPTS" in
|
||
|
noauto|*,noauto|noauto,*|*,noauto,*)
|
||
|
continue
|
||
|
;;
|
||
|
esac
|
||
|
case "$FSTYPE" in
|
||
|
nfs|nfs4|smbfs|cifs|coda|ncp|ncpfs|ocfs2|gfs|ceph)
|
||
|
;;
|
||
|
*)
|
||
|
continue
|
||
|
;;
|
||
|
esac
|
||
|
case "$MTPT" in
|
||
|
/usr/local|/usr/local/*)
|
||
|
;;
|
||
|
/usr|/usr/*)
|
||
|
waitnfs="$waitnfs $MTPT"
|
||
|
;;
|
||
|
/var|/var/*)
|
||
|
waitnfs="$waitnfs $MTPT"
|
||
|
;;
|
||
|
esac
|
||
|
done < "$file"
|
||
|
fi
|
||
|
done
|
||
|
|
||
|
# Wait for each path, the timeout is for all of them as that's
|
||
|
# really the maximum time we have to wait anyway
|
||
|
TIMEOUT=900
|
||
|
for mountpt in $waitnfs; do
|
||
|
log_action_begin_msg "Waiting for $mountpt"
|
||
|
|
||
|
while ! mountpoint -q $mountpt; do
|
||
|
sleep 0.1
|
||
|
|
||
|
TIMEOUT=$(( $TIMEOUT - 1 ))
|
||
|
if [ $TIMEOUT -le 0 ]; then
|
||
|
log_action_end_msg 1
|
||
|
break
|
||
|
fi
|
||
|
done
|
||
|
|
||
|
if [ $TIMEOUT -gt 0 ]; then
|
||
|
log_action_end_msg 0
|
||
|
fi
|
||
|
done
|
||
|
}
|
||
|
|
||
|
case "$1" in
|
||
|
start)
|
||
|
# Using 'no !=' instead of 'yes =' to make sure async nfs
|
||
|
# mounting is the default even without a value in
|
||
|
# /etc/default/rcS
|
||
|
if [ no != "$ASYNCMOUNTNFS" ] ; then
|
||
|
do_wait_async_mount
|
||
|
else
|
||
|
FROMINITD=yes /etc/network/if-up.d/mountnfs
|
||
|
fi
|
||
|
;;
|
||
|
restart|reload|force-reload)
|
||
|
echo "Error: argument '$1' not supported" >&2
|
||
|
exit 3
|
||
|
;;
|
||
|
stop|status)
|
||
|
# No-op
|
||
|
;;
|
||
|
*)
|
||
|
echo "Usage: $0 start|stop" >&2
|
||
|
exit 3
|
||
|
;;
|
||
|
esac
|
||
|
|
||
|
:
|