#!/bin/bash
#================
# FILE          : linuxrc
#----------------
# PROJECT       : OpenSuSE KIWI Image System
# COPYRIGHT     : (c) 2006 SUSE LINUX Products GmbH. All rights reserved
#               :
# AUTHOR        : Marcus Schaefer <ms@suse.de>
#               :
# BELONGS TO    : Operating System images
#               :
# DESCRIPTION   : This file is changed to become the real
#               : linuxrc script which is used to prepare the
#               : operating system for the main image
#               :
#               :
# STATUS        : BETA
#----------------
#======================================
# Exports (General)...
#--------------------------------------
export PATH="/sbin:/bin:/usr/sbin:/usr/bin"
export IFS_ORIG=$IFS
export DEBUG=0

#======================================
# Functions...
#--------------------------------------
. /include

#======================================
# Functions...
#--------------------------------------
VMMountSystem () {
	for rdevice in /dev/hda1 /dev/sda1 /dev/hda /dev/sda;do
		imageRootDevice=$rdevice
		mount $imageRootDevice /mnt &>/dev/null
		if [ $? = 0 ];then
			break
		fi
	done
}
VMUmountSystem () {
	umount /mnt
}
#======================================
# Beautify Startup
#--------------------------------------
clear
echo "Loading KIWI Xen Boot-System..."
echo "-------------------------------"

#======================================
# 1) Mounting local file systems
#--------------------------------------
mountSystemFilesystems >/dev/null 2>&1
closeKernelConsole

#======================================
# 2) Prepare module load support 
#--------------------------------------
touch /etc/modules.conf
touch /lib/modules/*/modules.dep

#======================================
# 3) run udevd
#--------------------------------------
udevStart

#======================================
# 4) Including required kernel modules
#--------------------------------------
Echo "Including required kernel modules..."
for module in xennet xenblk reiserfs ext2 ext3 loop ipv6;do
	modprobe $module >/dev/null 2>&1
done

#======================================
# 5) Mount VM (boot)
#--------------------------------------
VMMountSystem

#======================================
# 6) Get filesystem type
#--------------------------------------
probeFileSystem $imageRootDevice

#======================================
# 7) Create system dependant files
#--------------------------------------
setupDefaultFstab /config
updateRootDeviceFstab /config $imageRootDevice

#======================================
# 8) copy system dependant files
#--------------------------------------
cd /config
find . -type d | while read d ; do  mkdir -p /mnt/$d ; done
find . -type f | while read f ; do  cp $f /mnt/$f ; done
cd /
rm -rf /config

#======================================
# 9) setup real root device
#--------------------------------------
echo 256 > /proc/sys/kernel/real-root-dev

#======================================
# 10) umount system filesystems
#--------------------------------------
umountSystemFilesystems

#======================================
# 11) copy initrd files to image
#--------------------------------------
cp /preinit /mnt
cp /include /mnt

#======================================
# 12) Activate new root
#--------------------------------------
Echo "Activating Image: [$imageRootDevice]"
/sbin/udevsettle --timeout=30
mount --move /dev /mnt/dev
udevKill
Echo "Calling preinit phase..."
cd /mnt && exec < dev/console >dev/console 2>&1
reopenKernelConsole
/mnt/sbin/pivot_root . mnt >/dev/null 2>&1
if test $? != 0;then
	PIVOT=false
	cleanInitrd && mount --move . / && chroot . ./preinit
	chroot . rm -f  ./preinit
	chroot . rm -f  ./include
	chroot . rm -rf ./image
else
	PIVOT=true
	./preinit
	rm -f  ./preinit
	rm -f  ./include
	rm -rf ./image
fi
#======================================
# 13) Unmount initrd / system init
#--------------------------------------
echo " "
echo "Booting into Xen System..."
echo "--------------------------"
export IFS=$IFS_ORIG
mount -n -o remount,rw / &>/dev/null
if [ $PIVOT = "true" ];then
	exec umount -n -l /mnt
else
	exec chroot . /sbin/init $@
fi
