#!/bin/sh
# ***** BEGIN LICENSE BLOCK *****
# * Copyright (C) 2007  Alexey Gladkov <legion@altlinux.org>
# * Copyright (C) 2007  Dmitry V. Levin <ldv@altlinux.org>
# * Copyright (C) 2007  Anton V. Boyarshinov <boyarsh@altlinux.org>
# *
# * This program is free software; you can redistribute it and/or modify
# * it under the terms of the GNU General Public License as published by
# * the Free Software Foundation; either version 2 of the License, or
# * (at your option) any later version.
# *
# * This program is distributed in the hope that it will be useful,
# * but WITHOUT ANY WARRANTY; without even the implied warranty of
# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# * GNU General Public License for more details.
# *
# * You should have received a copy of the GNU General Public License
# * along with this program; if not, write to the Free Software
# * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
# ***** END LICENSE BLOCK *****

alterator_api_version=1
preinstall_dir="/usr/share/install2/preinstall.d"
alteratord_socket_dir="/run/alteratord"

. alterator-sh-functions
. install2-sh-functions

PROG=preinstall
ALTERATOR_DESTDIR="${ALTERATOR_DESTDIR:-/mnt/destination}"
AUTOINSTALL="${AUTOINSTALL:-}"

notify()
{
	[ -z "$AUTOINSTALL" ] || return 0
	alterator-mailbox-send "$1" ||:
}

run_preinstall()
{
	# copy unique scripts from $destdir/$preinstall_dir to $preinstall_dir
	[ -d "$destdir/$preinstall_dir" ] &&
		find "$destdir/$preinstall_dir" -mindepth 1 -maxdepth 1 -type f -perm -u=x \
			-exec cp -n {} "$preinstall_dir" \;

	local f max counter=0
	max="$(find "$preinstall_dir" -mindepth 1 -maxdepth 1 -type f -perm -u=x |wc -l)"

	notify "init #t max $max"

	# run scripts
	for f in "$preinstall_dir"/*; do
		[ -f "$f" -a -x "$f" ] || continue

		echo "Running $f" >>/tmp/preinstall.log
		if "$f" >>/tmp/preinstall.log 2>&1; then
		    notify "package \"${f##*/}\" step $counter"
		    counter=$(($counter + 1))
		    printf '%s %s - OK\n' "$(date +%T)" "$f" >&2
		else
		    notify "error \"${f##*/}\""
		    printf '%s %s - FAILED\n' "$(date +%T)" "$f" >&2
		    break
		fi
	done

	notify "package \" \" step $max"

	# replace itself with alteratord from chroot
	[ -d "$ALTERATOR_DESTDIR" ] || return 0
	rm -f /tmp/alterator/.socket
	chroot "$ALTERATOR_DESTDIR" /etc/init.d/alteratord start
	mount -o bind $destdir$alteratord_socket_dir $alteratord_socket_dir

	# wait until new alteratord is ready to use
	alterator-wait

	# notify interface about finish
	notify "done #t"
	sync

	# stop old alteratord and kill itself
	#sleep 1
	#service alteratord stop
}

on_message()
{
        case "$in_action" in
        	write)
			echo "$PROG: write init" >&2
			if [ -z "$AUTOINSTALL" ]; then
				run_preinstall &
			else
				run_preinstall
			fi
                        ;;
	esac
}

message_loop
