mountcritremote revision 301004
1290001Sglebius#!/bin/sh
2290001Sglebius#
3290001Sglebius# $FreeBSD: head/etc/rc.d/mountcritremote 301004 2016-05-30 19:59:51Z ngie $
4290001Sglebius#
5290001Sglebius
6290001Sglebius# PROVIDE: mountcritremote
7290001Sglebius# REQUIRE: NETWORKING FILESYSTEMS ipsec netwait
8290001Sglebius# KEYWORD: nojail
9290001Sglebius
10290001Sglebius. /etc/rc.subr
11290001Sglebius
12290001Sglebiusname="mountcritremote"
13290001Sglebiusdesc="Mount critical remote filesystems"
14290001Sglebiusstop_cmd=":"
15290001Sglebiusstart_cmd="mountcritremote_start"
16290001Sglebiusstart_precmd="mountcritremote_precmd"
17290001Sglebius
18290001Sglebius# Mount NFS filesystems if present in /etc/fstab
19290001Sglebius#
20290001Sglebius# XXX When the vfsload() issues with nfsclient support and related sysctls
21290001Sglebius# have been resolved, this block can be removed, and the condition that
22290001Sglebius# skips nfs in the following block (for "other network filesystems") can
23290001Sglebius# be removed.
24290001Sglebius#
25290001Sglebiusmountcritremote_precmd()
26290001Sglebius{
27290001Sglebius	case "`mount -d -a -t nfs 2> /dev/null`" in
28290001Sglebius	*mount_nfs*)
29290001Sglebius		# Handle absent nfs client support
30290001Sglebius		load_kld -m nfs nfscl || return 1
31290001Sglebius		;;
32290001Sglebius	esac
33290001Sglebius	return 0
34290001Sglebius}
35290001Sglebius
36290001Sglebiusmountcritremote_start()
37290001Sglebius{
38290001Sglebius	local mounted_remote_filesystem=false
39290001Sglebius
40290001Sglebius	# Mount nfs filesystems.
41290001Sglebius	#
42290001Sglebius	case "`/sbin/mount -d -a -t nfs`" in
43290001Sglebius	'')
44290001Sglebius		;;
45290001Sglebius	*)
46290001Sglebius		mounted_remote_filesystem=true
47290001Sglebius		echo -n 'Mounting NFS filesystems:'
48290001Sglebius		mount -a -t nfs
49290001Sglebius		echo '.'
50290001Sglebius		;;
51290001Sglebius	esac
52290001Sglebius
53290001Sglebius	# Mount other network filesystems if present in /etc/fstab.
54290001Sglebius	case ${extra_netfs_types} in
55290001Sglebius	[Nn][Oo])
56290001Sglebius		;;
57290001Sglebius	*)
58290001Sglebius		netfs_types="${netfs_types} ${extra_netfs_types}"
59290001Sglebius		;;
60290001Sglebius	esac
61290001Sglebius
62290001Sglebius	for i in ${netfs_types}; do
63290001Sglebius		fstype=${i%:*}
64290001Sglebius		fsdecr=${i#*:}
65290001Sglebius
66290001Sglebius		[ "${fstype}" = "nfs" ] && continue
67290001Sglebius
68290001Sglebius		case "`mount -d -a -t ${fstype}`" in
69290001Sglebius		*mount_${fstype}*)
70290001Sglebius			mounted_remote_filesystem=true
71290001Sglebius			echo -n "Mounting ${fsdecr} filesystems:"
72290001Sglebius			mount -a -t ${fstype}
73290001Sglebius			echo '.'
74290001Sglebius			;;
75290001Sglebius		esac
76290001Sglebius	done
77290001Sglebius
78290001Sglebius	if $mounted_remote_filesystem; then
79290001Sglebius		# Cleanup /var again just in case it's a network mount.
80290001Sglebius		/etc/rc.d/cleanvar quietreload
81290001Sglebius		rm -f /var/run/clean_var /var/spool/lock/clean_var
82290001Sglebius
83290001Sglebius		# Regenerate the ldconfig hints in case there are additional
84290001Sglebius		# library paths on remote file systems
85290001Sglebius		/etc/rc.d/ldconfig quietstart
86290001Sglebius	fi
87290001Sglebius}
88290001Sglebius
89290001Sglebiusload_rc_config $name
90290001Sglebiusrun_rc_command "$1"
91290001Sglebius