#!/bin/sh
# Do unmount/remount-ro. Wait.
# KILL everybody. Wait.
# Repeat.

umountcnt=2
writeout=0	# increase if your kernel does not guarantee writes to complete

# No /usr - we are expecting all binaries to be accessible
# from root fs alone
PATH=/sbin:/bin

say() {
	printf "\r%s\n\r" "$*"
}

showps() {
	# sleep 1 ensures that xargs will have time to start up
	# this makes pslist less prone to random jitter
	pslist=`{ sleep 1; ps -A -o comm=; } | sort | xargs`
	pscnt=$(( `say "$pslist" | wc -w` + 0 ))
	if test x"$VERBOSE" = x; then
		say "* `date '+%H:%M:%S'` $pscnt processes"
	else
		say "* `date '+%H:%M:%S'` Processes ($pscnt): $pslist"
	fi
}

say "<*> `date '+%Y-%m-%d %H:%M:%S'` Executing '$0 $*'"

showps

i="$umountcnt"
while test "$i" -gt 0; do
	say "* `date '+%H:%M:%S'` Unmounting filesystems"
	umount -a -n -r -f
	# In case we unmounted proc...
	test -e /proc/version || mount -t proc none /proc
	# Remounting / RO isn't necessary when /etc/mtab is linked to /proc/mounts:
	# already done. But let's be more paranoid here...
	say "* `date '+%H:%M:%S'` Remounting root filesystem read-only"
	mount -n -o remount,ro /
	say "* `date '+%H:%M:%S'` Freeing loop devices"
	for a in /dev/loop*; do
		test -b "$a" && losetup -d "$a"
	done
	say "* `date '+%H:%M:%S'` Syncing"
	sync
	say "* `date '+%H:%M:%S'` Executing: killall5 -KILL"
	killall5 -9
	showps
	i=$((i-1))
done

say "* `date '+%H:%M:%S'` Filesystem status (/proc/mounts)"
cat /proc/mounts \
| {
	bad=false
	while read dev mntpoint fstype opt n1 n2; do
		case "$fstype" in
		( proc | sysfs | usbfs | devpts | rpc_pipefs | binfmt_misc | autofs | rootfs | tmpfs | ramfs )
			say "$dev $mntpoint $fstype $opt $n1 $n2"
			continue
			;;
		esac
		if test "${opt:0:2}" = "rw"; then
			say "$dev $mntpoint $fstype $opt $n1 $n2 - RW!"
			bad=true
		else
			say "$dev $mntpoint $fstype $opt $n1 $n2"
		fi
	done
	if $bad; then
		say "ERROR: we have filesystems mounted RW! Press <Enter> (^J)..."
		read junk </dev/console
		#sh </dev/console >&0 2>&0 # debug
	fi
}

# Disk cache writeout
sleep "$writeout"
