#!/bin/sh
# Modify fstab to change root and swap devices, to deal with a system that
# was installed onto one device but has been moved and booted from a
# different one. Note that the new device must have identical partitions,
# just on a different device name, unless it's NFS, in which case it can
# lack a swap partition.
olddev=
newdev=

for w in $(cat /proc/cmdline); do
	if [ "${w%%=*}" = "root" ]; then
		newdevpart="${w##*=}"
	fi
done

olddevpart="$(egrep '^.*[ 	]/[ 	]' /etc/fstab  | awk '{print $1}')"

newdev="${newdevpart%[0-9]*}"
olddev="${olddevpart%[0-9]*}"

if [ -n "$(echo $newdev | grep mtdblock)" ]; then
	exit 0
fi

if [ -n "$olddev" ] && [ -n "$newdev" ] && \
   [ "$olddev" != "$newdev" ]; then
   	echo "Replacing $olddev with $newdev in /etc/fstab .."
	mount -o remount,rw /
	if [ "$newdev" = "/dev/nfs" ]; then
		sed -i -e "s!^$olddevpart!$newdev!" /etc/fstab
		# No swap on nfs.
		sed -i -e "s/\(.*swap.*\)/#\1/g" /etc/fstab
		# type field should be nfs.
		sed -i -e "s/ext3/nfs/" /etc/fstab
	elif [ "$olddev" = "/dev/nfs" ]; then
		sed -i -e "s!^$olddev!$newdevpart!" /etc/fstab
		# type field should be ext3 .. XXX or something. Guessing ext3
		# for now.
		sed -i -e "s/nfs/ext3/" /etc/fstab
		# TODO: re-enable swap.
	else
		sed -i -e "s!^$olddev!$newdev!" /etc/fstab
	fi
	mount -o remount,ro /
fi
