#!/bin/bash
#================
# FILE          : preinit
#----------------
# 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 called after the image root
#               : has changed by the linuxrc script
#               :
# STATUS        : BETA
#----------------
#======================================
# Functions
#--------------------------------------
. /include

#======================================
# 1) start error log
#--------------------------------------
errorLogStart
Echo "Calling pre-init stage in system image"

#======================================
# 2) check for LOCAL_BOOT
#--------------------------------------
if [ $LOCAL_BOOT = "yes" ];then
	exit 0
fi

#======================================
# 3) start udev
#--------------------------------------
if [ ! -z $DISK ] && [ $systemIntegrity = "clean" ]; then
	if [ -z "$UNIONFS_CONFIG" ] && [ -z "$COMBINED_IMAGE" ]; then
		mountSystemFilesystems
		udevSystemStart
	fi
fi

#======================================
# 4) update mount table
#--------------------------------------
updateMTAB

#======================================
# 5) create framebuffer devices
#--------------------------------------
createFramebufferDevices

#======================================
# 6) create initrd on diskful
#--------------------------------------
if [ ! -z "$DISK" ] && [ "$systemIntegrity" = "clean" ]; then
	if [ -z "$UNIONFS_CONFIG" ] && [ -z "$COMBINED_IMAGE" ]; then
		#======================================
		# use distro initrd via mkinitrd
		#--------------------------------------
		setupSUSEInitrd
	else
		#======================================
		# use kiwi initrd downloaded before
		#--------------------------------------
		:
	fi
fi

#======================================
# 7) Install boot loader on diskful
#--------------------------------------
if [ ! -z "$DISK" ] && [ "$bootLoaderOK" = 1 ];then
	if test $systemIntegrity = "clean";then
		installBootLoader
	fi
fi

#======================================
# 8) create /etc/ImagePackages
#--------------------------------------
if [ "$systemIntegrity" = "clean" ];then
	if [ -x /bin/rpm ];then
		Echo "Creating initial image package info file"
		rpm -qa --last > /etc/ImagePackages
	fi
fi

#======================================
# 9) Reset systemIntegrity
#--------------------------------------
if [ ! -z "$DISK" ];then
	if test ! -z $RELOAD_CONFIG;then
		systemIntegrity=$systemIntegrity_save
	fi
fi

#======================================
# 10) check for valid mount points 
#--------------------------------------
if [ ! -z "$DISK" ];then
	IFS=":" ; for i in $PART_MOUNT;do
	if [ ! -z "$i" ] && [ ! -e "$i" ] && [ ! "$i" = "x" ];then
		mkdir -p $i
	fi
	done
fi

#======================================
# 11) Update /etc/ImageVersion files
#--------------------------------------
if [ ! -z "$DISK" ];then
	count=0
	IFS="," ; for i in $IMAGE;do
		count=$(($count + 1))
		field=0
		IFS=";" ; for n in $i;do
		case $field in
			0) field=1 ;;
			1) imageName=$n   ; field=2 ;;
			2) imageVersion=$n; field=3 ;;
			3) imageServer=$n ; field=4 ;;
			4) imageBlkSize=$n; field=5 ;;
			5) imageZipped=$n ;
		esac
		done
		atversion="$imageName-$imageVersion"
		versionFile="/etc/ImageVersion-$atversion"
		md5sum=`getSystemMD5Status $count`
		if test `getSystemIntegrity $count` = "clean";then
			echo "$atversion $md5sum" > $versionFile
		fi
	done
fi

#======================================
# 12) setup network for nfs boot
#--------------------------------------
if [ ! -z "$NFSROOT" ];then
	mount -t proc  proc    /proc
	mount -t sysfs sysfs   /sys
	mount -t devpts devpts /dev/pts
	if [ -x /etc/init.d/portmap ];then
		/etc/init.d/portmap start
	elif [ -x /etc/init.d/rpcbind ];then
		/etc/init.d/rpcbind start
	fi
fi

#======================================
# 13) kill udev
#--------------------------------------
if [ ! -z "$DISK" ] && [ "$systemIntegrity" = "clean" ]; then
	if [ -z "$UNIONFS_CONFIG" ] && [ -z "$COMBINED_IMAGE" ]; then
		udevSystemStop
		umountSystemFilesystems
	fi
fi
