#!/usr/sbin/openrc-run

description="Turn off swap and unmount all local file systems"

depend()
{
	# OpenRC: "before X" => stop after X; "after X" => stop before X.
	# Stop after daemons/NFS helpers, then before remounting root RO.
	before networking umountnfs.sh sendsigs hwclock.sh haveged urandom schroot dhcpcd elogind brightness lightdm resolvconf snetaid seatd
	after umountroot
}

stop()
{
	local PROTECTED_MOUNTS WEAK_MTPTS REG_MTPTS TMPFS_MTPTS
	local DEV MTPT FSTYPE REST

	. /lib/init/vars.sh

	umask 022

	PROTECTED_MOUNTS="$(sed -n ':a;/^[^ ]* \/ /!{H;n;ba};{H;s/.*//;x;s/\n//;p}' /proc/mounts)"
	WEAK_MTPTS=""
	REG_MTPTS=""
	TMPFS_MTPTS=""
	while read -r DEV MTPT FSTYPE REST
	do
		echo "$PROTECTED_MOUNTS" | grep -qsF "$DEV $MTPT " && continue
		case "$MTPT" in
		  /|/usr|/proc|/dev|/.dev|/dev/pts|/dev/shm|/dev/.static/dev|/proc/*|/sys|/sys/*|/run|/run/lock|/run/shm|/run/rpc_pipefs|/dev/vcs)
			continue
			;;
		esac
		case "$FSTYPE" in
		  proc|procfs|linprocfs|sysfs|securityfs|usbfs|usbdevfs|devpts)
			continue
			;;
		  tmpfs)
			TMPFS_MTPTS="$MTPT $TMPFS_MTPTS"
			;;
		  *)
			if echo "$PROTECTED_MOUNTS" | grep -qs "^$DEV "; then
				WEAK_MTPTS="$MTPT $WEAK_MTPTS"
			else
				REG_MTPTS="$MTPT $REG_MTPTS"
			fi
			;;
		esac
	done < /proc/mounts

	if [ "$TMPFS_MTPTS" ]
	then
		if [ "$VERBOSE" = no ]
		then
			ebegin "Unmounting temporary filesystems"
			fstab-decode umount $TMPFS_MTPTS
			eend $?
		else
			ebegin "Unmounting temporary filesystems"
			fstab-decode umount -v $TMPFS_MTPTS
			eend $?
		fi
	fi

	if [ "$VERBOSE" = no ]
	then
		ebegin "Deactivating swap"
		swapoff -a >/dev/null
		eend $?
	else
		ebegin "Deactivating swap"
		swapoff -a -v
		eend $?
	fi

	if [ "$WEAK_MTPTS" ]; then
		if [ "$VERBOSE" = no ]
		then
			ebegin "Unmounting weak filesystems"
			fstab-decode umount -r -d $WEAK_MTPTS
			eend $?
		else
			ebegin "Unmounting weak filesystems"
			fstab-decode umount -v -r -d $WEAK_MTPTS
			eend $?
		fi
	fi
	if [ "$REG_MTPTS" ]
	then
		if [ "$VERBOSE" = no ]
		then
			ebegin "Unmounting local filesystems"
			fstab-decode umount -f -r -d $REG_MTPTS
			eend $?
		else
			ebegin "Unmounting local filesystems"
			fstab-decode umount -f -v -r -d $REG_MTPTS
			eend $?
		fi
	fi
}

start()
{
	:
}
