1*0696600cSBjoern A. Zeeb#!/bin/sh
2*0696600cSBjoern A. Zeeb#
3*0696600cSBjoern A. Zeeb# $FreeBSD$
4*0696600cSBjoern A. Zeeb#
5*0696600cSBjoern A. Zeeb
6*0696600cSBjoern A. Zeeb# PROVIDE: mountcritremote
7*0696600cSBjoern A. Zeeb# REQUIRE: NETWORKING FILESYSTEMS ipsec netwait
8*0696600cSBjoern A. Zeeb# KEYWORD: nojail
9*0696600cSBjoern A. Zeeb
10*0696600cSBjoern A. Zeeb. /etc/rc.subr
11*0696600cSBjoern A. Zeeb
12*0696600cSBjoern A. Zeebname="mountcritremote"
13*0696600cSBjoern A. Zeebdesc="Mount critical remote filesystems"
14*0696600cSBjoern A. Zeebstop_cmd=":"
15*0696600cSBjoern A. Zeebstart_cmd="mountcritremote_start"
16*0696600cSBjoern A. Zeebstart_precmd="mountcritremote_precmd"
17*0696600cSBjoern A. Zeeb
18*0696600cSBjoern A. Zeeb# Mount NFS filesystems if present in /etc/fstab
19*0696600cSBjoern A. Zeeb#
20*0696600cSBjoern A. Zeeb# XXX When the vfsload() issues with nfsclient support and related sysctls
21*0696600cSBjoern A. Zeeb# have been resolved, this block can be removed, and the condition that
22*0696600cSBjoern A. Zeeb# skips nfs in the following block (for "other network filesystems") can
23*0696600cSBjoern A. Zeeb# be removed.
24*0696600cSBjoern A. Zeeb#
25*0696600cSBjoern A. Zeebmountcritremote_precmd()
26*0696600cSBjoern A. Zeeb{
27*0696600cSBjoern A. Zeeb	case "`mount -d -a -t nfs 2> /dev/null`" in
28*0696600cSBjoern A. Zeeb	*mount_nfs*)
29*0696600cSBjoern A. Zeeb		# Handle absent nfs client support
30*0696600cSBjoern A. Zeeb		load_kld -m nfs nfscl || return 1
31*0696600cSBjoern A. Zeeb		;;
32*0696600cSBjoern A. Zeeb	esac
33*0696600cSBjoern A. Zeeb	return 0
34*0696600cSBjoern A. Zeeb}
35*0696600cSBjoern A. Zeeb
36*0696600cSBjoern A. Zeebmountcritremote_start()
37*0696600cSBjoern A. Zeeb{
38*0696600cSBjoern A. Zeeb	local mounted_remote_filesystem=false
39*0696600cSBjoern A. Zeeb
40*0696600cSBjoern A. Zeeb	# Mount nfs filesystems.
41*0696600cSBjoern A. Zeeb	#
42*0696600cSBjoern A. Zeeb	case "`/sbin/mount -d -a -t nfs`" in
43*0696600cSBjoern A. Zeeb	'')
44*0696600cSBjoern A. Zeeb		;;
45*0696600cSBjoern A. Zeeb	*)
46*0696600cSBjoern A. Zeeb		mounted_remote_filesystem=true
47*0696600cSBjoern A. Zeeb		echo -n 'Mounting NFS filesystems:'
48*0696600cSBjoern A. Zeeb		mount -a -t nfs
49*0696600cSBjoern A. Zeeb		echo '.'
50*0696600cSBjoern A. Zeeb		;;
51*0696600cSBjoern A. Zeeb	esac
52*0696600cSBjoern A. Zeeb
53*0696600cSBjoern A. Zeeb	# Mount other network filesystems if present in /etc/fstab.
54*0696600cSBjoern A. Zeeb	case ${extra_netfs_types} in
55*0696600cSBjoern A. Zeeb	[Nn][Oo])
56*0696600cSBjoern A. Zeeb		;;
57*0696600cSBjoern A. Zeeb	*)
58*0696600cSBjoern A. Zeeb		netfs_types="${netfs_types} ${extra_netfs_types}"
59*0696600cSBjoern A. Zeeb		;;
60*0696600cSBjoern A. Zeeb	esac
61*0696600cSBjoern A. Zeeb
62*0696600cSBjoern A. Zeeb	for i in ${netfs_types}; do
63*0696600cSBjoern A. Zeeb		fstype=${i%:*}
64*0696600cSBjoern A. Zeeb		fsdecr=${i#*:}
65*0696600cSBjoern A. Zeeb
66*0696600cSBjoern A. Zeeb		[ "${fstype}" = "nfs" ] && continue
67*0696600cSBjoern A. Zeeb
68*0696600cSBjoern A. Zeeb		case "`mount -d -a -t ${fstype}`" in
69*0696600cSBjoern A. Zeeb		*mount_${fstype}*)
70*0696600cSBjoern A. Zeeb			mounted_remote_filesystem=true
71*0696600cSBjoern A. Zeeb			echo -n "Mounting ${fsdecr} filesystems:"
72*0696600cSBjoern A. Zeeb			mount -a -t ${fstype}
73*0696600cSBjoern A. Zeeb			echo '.'
74*0696600cSBjoern A. Zeeb			;;
75*0696600cSBjoern A. Zeeb		esac
76*0696600cSBjoern A. Zeeb	done
77*0696600cSBjoern A. Zeeb
78*0696600cSBjoern A. Zeeb	if $mounted_remote_filesystem; then
79*0696600cSBjoern A. Zeeb		# Cleanup /var again just in case it's a network mount.
80*0696600cSBjoern A. Zeeb		/etc/rc.d/cleanvar quietreload
81*0696600cSBjoern A. Zeeb		rm -f /var/run/clean_var /var/spool/lock/clean_var
82*0696600cSBjoern A. Zeeb
83*0696600cSBjoern A. Zeeb		# Regenerate the ldconfig hints in case there are additional
84*0696600cSBjoern A. Zeeb		# library paths on remote file systems
85*0696600cSBjoern A. Zeeb		/etc/rc.d/ldconfig quietstart
86*0696600cSBjoern A. Zeeb	fi
87*0696600cSBjoern A. Zeeb}
88*0696600cSBjoern A. Zeeb
89*0696600cSBjoern A. Zeebload_rc_config $name
90*0696600cSBjoern A. Zeebrun_rc_command "$1"
91