#!/bin/sh
#
# Copyright 2007 Openedhand Ltd.
#
# Author: Richard Purdie <rpurdie@openedhand.com>
#

# The following script will run all the scriptlets found in #SYSCONFDIR#/deb-postinsts,
# #SYSCONFDIR#/ipk-postinsts or #SYSCONFDIR#/rpm-postinsts.

# the order of this list is important, do not change!
backend_list="rpm deb ipk"

pm_installed=false

for pm in $backend_list; do
	pi_dir="#SYSCONFDIR#/$pm-postinsts"

	if [ ! -d $pi_dir ]; then
		continue
	fi

	# found the package manager, it has postinsts
	case $pm in
		"deb")
			if [ -s "#LOCALSTATEDIR#/lib/dpkg/status" ]; then
				pm_installed=true
			fi
			;;

		"ipk")
			if [ -s "#LOCALSTATEDIR#/lib/opkg/status" ]; then
				pm_installed=true
			fi
			;;
	esac
	break
done

remove_rcsd_link () {
	if [ -n "`which update-rc.d`" ]; then
		update-rc.d -f run-postinsts remove
	fi
}

if ! [ -d $pi_dir ]; then
	remove_rcsd_link
	exit 0
fi

echo "Configuring packages on first boot...."
echo " (This may take several minutes. Please do not power off the machine.)"

[ -e #SYSCONFDIR#/default/postinst ] && . #SYSCONFDIR#/default/postinst

if [ "$POSTINST_LOGGING" = "1" ]; then
	rm -f $LOGFILE
	append_log=">>$LOGFILE 2>&1"
fi

exec_postinst_scriptlets() {
	for i in `ls $pi_dir`; do
		i=$pi_dir/$i
		echo "Running postinst $i..."
		[ "$POSTINST_LOGGING" = "1" ] && eval echo "Running postinst $i..." $append_log
		if [ -x $i ]; then
			eval sh -c $i $append_log
			rm $i
		else
			echo "ERROR: postinst $i failed."
			[ "$POSTINST_LOGGING" = "1" ] && eval echo "ERROR: postinst $i failed." $append_log
			remove_pi_dir=0
		fi
	done
}

remove_pi_dir=1
if $pm_installed; then
	case $pm in
		"ipk")
			eval opkg configure $append_log
			;;

		"deb")
			eval dpkg --configure -a $append_log
			;;
	esac
else
	exec_postinst_scriptlets
fi

# since all postinstalls executed successfully, remove the postinstalls directory
# and the rcS.d link
if [ $remove_pi_dir = 1 ]; then
	rm -rf $pi_dir
	remove_rcsd_link
fi
