freebsd-skq/etc/rc.d/mountcritremote
ngie 4540590873 Fix circular dependency created after r287197 between ldconfig and mountcritremote
ldconfig is already required by mountcritremote indirectly, as noted by rcorder:

> rcorder: Circular dependency on provision `mountcritremote' in file `ldconfig'.

Having mountcritremote REQUIRE ldconfig breaks dependency ordering.

Making the ldconfig hints be conditionally regenerated from mountcritremote when
remote filesystems are mounted is done after this change, similar to cleanvar
being conditionally called after the change.

Differential Revision: https://reviews.freebsd.org/D6621
PR: 202726
Reviewed by: jilles
Sponsored by: EMC / Isilon Storage Division
2016-05-30 19:59:51 +00:00

91 lines
1.8 KiB
Bash
Executable File

#!/bin/sh
#
# $FreeBSD$
#
# PROVIDE: mountcritremote
# REQUIRE: NETWORKING FILESYSTEMS ipsec netwait
# KEYWORD: nojail
. /etc/rc.subr
name="mountcritremote"
desc="Mount critical remote filesystems"
stop_cmd=":"
start_cmd="mountcritremote_start"
start_precmd="mountcritremote_precmd"
# Mount NFS filesystems if present in /etc/fstab
#
# XXX When the vfsload() issues with nfsclient support and related sysctls
# have been resolved, this block can be removed, and the condition that
# skips nfs in the following block (for "other network filesystems") can
# be removed.
#
mountcritremote_precmd()
{
case "`mount -d -a -t nfs 2> /dev/null`" in
*mount_nfs*)
# Handle absent nfs client support
load_kld -m nfs nfscl || return 1
;;
esac
return 0
}
mountcritremote_start()
{
local mounted_remote_filesystem=false
# Mount nfs filesystems.
#
case "`/sbin/mount -d -a -t nfs`" in
'')
;;
*)
mounted_remote_filesystem=true
echo -n 'Mounting NFS filesystems:'
mount -a -t nfs
echo '.'
;;
esac
# Mount other network filesystems if present in /etc/fstab.
case ${extra_netfs_types} in
[Nn][Oo])
;;
*)
netfs_types="${netfs_types} ${extra_netfs_types}"
;;
esac
for i in ${netfs_types}; do
fstype=${i%:*}
fsdecr=${i#*:}
[ "${fstype}" = "nfs" ] && continue
case "`mount -d -a -t ${fstype}`" in
*mount_${fstype}*)
mounted_remote_filesystem=true
echo -n "Mounting ${fsdecr} filesystems:"
mount -a -t ${fstype}
echo '.'
;;
esac
done
if $mounted_remote_filesystem; then
# Cleanup /var again just in case it's a network mount.
/etc/rc.d/cleanvar quietreload
rm -f /var/run/clean_var /var/spool/lock/clean_var
# Regenerate the ldconfig hints in case there are additional
# library paths on remote file systems
/etc/rc.d/ldconfig quietstart
fi
}
load_rc_config $name
run_rc_command "$1"