mountcritremote revision 124616
1#!/bin/sh
2#
3# $NetBSD: mountcritremote,v 1.7 2002/04/29 12:29:53 lukem Exp $
4# $FreeBSD: head/etc/rc.d/mountcritremote 124616 2004-01-17 10:16:38Z mtm $
5#
6
7# PROVIDE: mountcritremote
8# REQUIRE: NETWORKING root mountcritlocal
9# KEYWORD: FreeBSD
10
11. /etc/rc.subr
12
13name="mountcritremote"
14stop_cmd=":"
15
16case ${OSTYPE} in
17	FreeBSD)
18	start_cmd="mountcritremote_start"
19	start_precmd="mountcritremote_precmd"
20	;;
21NetBSD)
22	start_cmd="mountcritremote_start"
23	;;
24esac
25
26# Mount NFS filesystems if present in /etc/fstab
27#
28# XXX When the vfsload() issues with nfsclient support and related sysctls
29# have been resolved, this block can be removed, and the condition that
30# skips nfs in the following block (for "other network filesystems") can
31# be removed.
32#
33mountcritremote_precmd()
34{
35	case "`mount -d -a -t nfs 2> /dev/null`" in
36	*mount_nfs*)
37		# Handle absent nfs client support
38		if ! sysctl vfs.nfs >/dev/null 2>&1; then
39			kldload nfsclient || warn 'nfs mount ' \
40			    'requested, but no nfs client in kernel' \
41			return 1
42		fi
43		;;
44	esac
45	return 0
46}
47
48mountcritremote_start()
49{
50	case ${OSTYPE} in
51	FreeBSD)
52		# Mount nfs filesystems.
53		#
54		echo -n 'Mounting NFS file systems:'
55		mount -a -t nfs
56		echo '.'
57
58		# Mount other network filesystems if present in /etc/fstab.
59		case ${extra_netfs_types} in
60		[Nn][Oo])
61			;;
62		*)
63			netfs_types="${netfs_types} ${extra_netfs_types}"
64			;;
65		esac
66
67		for i in ${netfs_types}; do
68			fstype=${i%:*}
69			fsdecr=${i#*:}
70
71			[ "${fstype}" = "nfs" ] && continue
72
73			case "`mount -d -a -t ${fstype}`" in
74			*mount_${fstype}*)
75				echo -n "Mounting ${fsdecr} file systems:"
76				mount -a -t ${fstype}
77				echo '.'
78				;;
79			esac
80		done
81
82		# Cleanup /var again just in case it's a network mount.
83		/etc/rc.d/cleanvar reload
84		rm -f /var/run/clean_var /var/spool/lock/clean_var
85		;;
86	NetBSD)
87		#	Mount critical filesystems that may be `remote'.
88		#	(as specified in $critical_filesystems_remote)
89		#	This usually includes /usr.
90		#
91		mount_critical_filesystems remote
92		;;
93	esac
94}
95
96load_rc_config $name
97run_rc_command "$1"
98