#!/bin/sh -e

WITH_ACTION=1
. install2-init-functions

charset=utf8
cmdline="$(cat /proc/cmdline)"

PLYMOUTH=/bin/plymouth

update_splash()
{
	[ -x $PLYMOUTH ] || return 0
	$PLYMOUTH --update $1 ||:
}

stop_splash()
{
	[ -x $PLYMOUTH ] || return 0
	$PLYMOUTH quit ||:
}

mount_fs()
{
	mount-unionfs /var
	mount-unionfs /etc
}

set_alterator_datadir()
{
	ALTERATOR_DESTDIR="$destdir"
	ALTERATOR_DATADIR="/usr/share/alterator:$destdir/usr/share/alterator:$datadir"
	GUILE_LOAD_PATH="$destdir/usr/share/guile/site:$destdir/usr/share/guile/1.8:$destdir/usr/share/guile"
	export ALTERATOR_DESTDIR
	export ALTERATOR_DATADIR
	export GUILE_LOAD_PATH
}

set_duringinstall()
{
	DURING_INSTALL=1
	export DURING_INSTALL
}

set_locale()
{
	LANG=
	export LANG

	local lang=
	for d in $cmdline; do
		[ -z "${d%%lang=*}" ] || continue
		lang="${d#lang=}"
		break
	done
	[ -n "$lang" ] || lang=en_US 
	locale -a |cut -d. -f1 |fgrep -xqs "$lang" || return 0

	LANG="$lang.$charset"
	echo LC_ALL="$lang.$charset" > /etc/sysconfig/i18n
}

set_autoinstall()
{
	AUTOINSTALL=
	export AUTOINSTALL

	if cmdline_has_arg ai ; then
		AUTOINSTALL='/tmp/metadata/autoinstall.scm'
	fi
}

set_cdromdev()
{
	CDROMDEV=
	export CDROMDEV

	[ "$METHOD" = cdrom ] || return 0
	CDROMDEV="$(sed -n 's,^\(/dev/[^[:space:]]\+\) '"$image_dir"' .*,\1,p' /proc/mounts)"
	[ -b "$CDROMDEV" ] ||
		fatal "cannot find cdrom device file $CDROMDEV for $image_dir"
}

if_run_debug_shell()
{
	cmdline_has_arg instdebug || return 0
    if [ -x "$PLYMOUTH" ]; then
        $PLYMOUTH quit ||:
    fi
	echo 'Executing shell for debug purposes'
	HOME=/root bash -l
}

# Mount
touch /var/rw-test || action 'Mounting filesystems' mount_fs
update_splash mount 

# Define HOME and TMPDIR into writable place
export HOME=/tmp
export TMPDIR=/tmp
export INSTALLER=1

service udevd start
update_splash udev

set_alterator_datadir
set_locale
update_splash locale

set_autoinstall
update_splash autoinstall

set_duringinstall
update_splash duringinstall

set_cdromdev
update_splash cdromdev

initinstall
update_splash finish

if_run_debug_shell
rc=0

PATH=/usr/lib/alterator-x11:$PATH
XORG_CONF='/etc/X11/xorg.conf'

if [ -s "$AUTOINSTALL" ]; then
	echo 'Starting autoinstaller...'
	stop_splash
	alterator-autoinstall "$AUTOINSTALL" && text=done || text=FAILED
	echo "autoinstall $text"
else
	if grep -q headless /proc/cmdline ; then
		alterator-vnc
	else
		echo 'Starting Xorg server...'

		auto_drivers="$(video_scan -s drivers)"

		xinit_args='vt7 -dpms -ac -nolisten tcp -logfile /tmp/x11.log'
		eval $(grep -s ^xinit_args= /etc/xserver-args) ||:
		cmd="xinit /usr/sbin/alterator-install2 -- $xinit_args"
		stop_splash

		if ! $cmd >>/tmp/install2.log 2>&1; then
			for drv in $auto_drivers; do
				echo "Error running Xorg server, trying with driver $drv..."
				video_setup "$drv" "$XORG_CONF"
				rc=0
				$cmd >>/tmp/install2.log 2>&1 && break || rc=$?
			done
		fi
	fi
fi

if_run_debug_shell
[ "$rc" -ne 0 ] || postinstall
exit $rc
