xref: /freebsd/libexec/rc/rc.d/mountcritremote (revision f99f0ee14e3af81c23150a6a340259ca8a33d01a)
10696600cSBjoern A. Zeeb#!/bin/sh
20696600cSBjoern A. Zeeb#
30696600cSBjoern A. Zeeb#
40696600cSBjoern A. Zeeb
50696600cSBjoern A. Zeeb# PROVIDE: mountcritremote
631b29217SRick Macklem# REQUIRE: NETWORKING FILESYSTEMS ipsec netwait nfscbd
70696600cSBjoern A. Zeeb# KEYWORD: nojail
80696600cSBjoern A. Zeeb
90696600cSBjoern A. Zeeb. /etc/rc.subr
100696600cSBjoern A. Zeeb
110696600cSBjoern A. Zeebname="mountcritremote"
120696600cSBjoern A. Zeebdesc="Mount critical remote filesystems"
130696600cSBjoern A. Zeebstop_cmd=":"
140696600cSBjoern A. Zeebstart_cmd="mountcritremote_start"
150696600cSBjoern A. Zeebstart_precmd="mountcritremote_precmd"
160696600cSBjoern A. Zeeb
170696600cSBjoern A. Zeeb# Mount NFS filesystems if present in /etc/fstab
180696600cSBjoern A. Zeeb#
190696600cSBjoern A. Zeeb# XXX When the vfsload() issues with nfsclient support and related sysctls
200696600cSBjoern A. Zeeb# have been resolved, this block can be removed, and the condition that
210696600cSBjoern A. Zeeb# skips nfs in the following block (for "other network filesystems") can
220696600cSBjoern A. Zeeb# be removed.
230696600cSBjoern A. Zeeb#
240696600cSBjoern A. Zeebmountcritremote_precmd()
250696600cSBjoern A. Zeeb{
260696600cSBjoern A. Zeeb	case "`mount -d -a -t nfs 2> /dev/null`" in
270696600cSBjoern A. Zeeb	*mount_nfs*)
280696600cSBjoern A. Zeeb		# Handle absent nfs client support
29b11974c2SChris Rees		load_kld -m nfs nfscl || return 1
300696600cSBjoern A. Zeeb		;;
310696600cSBjoern A. Zeeb	esac
320696600cSBjoern A. Zeeb	return 0
330696600cSBjoern A. Zeeb}
340696600cSBjoern A. Zeeb
350696600cSBjoern A. Zeebmountcritremote_start()
360696600cSBjoern A. Zeeb{
370696600cSBjoern A. Zeeb	local mounted_remote_filesystem=false
380696600cSBjoern A. Zeeb
390696600cSBjoern A. Zeeb	# Mount nfs filesystems.
400696600cSBjoern A. Zeeb	#
410696600cSBjoern A. Zeeb	case "`/sbin/mount -d -a -t nfs`" in
420696600cSBjoern A. Zeeb	'')
430696600cSBjoern A. Zeeb		;;
440696600cSBjoern A. Zeeb	*)
450696600cSBjoern A. Zeeb		mounted_remote_filesystem=true
460696600cSBjoern A. Zeeb		echo -n 'Mounting NFS filesystems:'
470696600cSBjoern A. Zeeb		mount -a -t nfs
480696600cSBjoern A. Zeeb		echo '.'
490696600cSBjoern A. Zeeb		;;
500696600cSBjoern A. Zeeb	esac
510696600cSBjoern A. Zeeb
520696600cSBjoern A. Zeeb	# Mount other network filesystems if present in /etc/fstab.
530696600cSBjoern A. Zeeb	case ${extra_netfs_types} in
540696600cSBjoern A. Zeeb	[Nn][Oo])
550696600cSBjoern A. Zeeb		;;
560696600cSBjoern A. Zeeb	*)
570696600cSBjoern A. Zeeb		netfs_types="${netfs_types} ${extra_netfs_types}"
580696600cSBjoern A. Zeeb		;;
590696600cSBjoern A. Zeeb	esac
600696600cSBjoern A. Zeeb
610696600cSBjoern A. Zeeb	for i in ${netfs_types}; do
620696600cSBjoern A. Zeeb		fstype=${i%:*}
630696600cSBjoern A. Zeeb		fsdecr=${i#*:}
640696600cSBjoern A. Zeeb
650696600cSBjoern A. Zeeb		[ "${fstype}" = "nfs" ] && continue
660696600cSBjoern A. Zeeb
670696600cSBjoern A. Zeeb		case "`mount -d -a -t ${fstype}`" in
680696600cSBjoern A. Zeeb		*mount_${fstype}*)
690696600cSBjoern A. Zeeb			mounted_remote_filesystem=true
700696600cSBjoern A. Zeeb			echo -n "Mounting ${fsdecr} filesystems:"
710696600cSBjoern A. Zeeb			mount -a -t ${fstype}
720696600cSBjoern A. Zeeb			echo '.'
730696600cSBjoern A. Zeeb			;;
740696600cSBjoern A. Zeeb		esac
750696600cSBjoern A. Zeeb	done
760696600cSBjoern A. Zeeb
770696600cSBjoern A. Zeeb	if $mounted_remote_filesystem; then
780696600cSBjoern A. Zeeb		# Cleanup /var again just in case it's a network mount.
790696600cSBjoern A. Zeeb		/etc/rc.d/cleanvar quietreload
800696600cSBjoern A. Zeeb		rm -f /var/run/clean_var /var/spool/lock/clean_var
810696600cSBjoern A. Zeeb
820696600cSBjoern A. Zeeb		# Regenerate the ldconfig hints in case there are additional
830696600cSBjoern A. Zeeb		# library paths on remote file systems
840696600cSBjoern A. Zeeb		/etc/rc.d/ldconfig quietstart
850696600cSBjoern A. Zeeb	fi
860696600cSBjoern A. Zeeb}
870696600cSBjoern A. Zeeb
880696600cSBjoern A. Zeebload_rc_config $name
89*f99f0ee1SAlexander Leidinger
90*f99f0ee1SAlexander Leidinger# mounting shall not be performed in a svcj
91*f99f0ee1SAlexander Leidingermountcritremote_svcj="NO"
92*f99f0ee1SAlexander Leidinger
930696600cSBjoern A. Zeebrun_rc_command "$1"
94