#!/bin/bash
#
# suma-create-dists 
#
# (c) 2012 SUSE Linux GmbH, Germany.
# GNU Public License. No warranty.
#
# Version: 2012-10-17
#

EXE="$0"
CFG="/etc/spock/suma-tool"

# Controlling Variables
ISO_DIR="/srv/inst/iso"
INST_DIR="/srv/inst/media"
FSTAB="/etc/fstab"

# DIST_LIST="@
# ISO_FILE
# BASE_CHANL
# DIST_LABEL
# @"
#
DIST_LIST="@
ISO_FILE=SLES-10-SP3-DVD-i386-GM-DVD1.iso
BASE_CHANL=sles10-sp3-pool-i586
DIST_LABEL=sles10sp332
@
ISO_FILE=SLES-10-SP3-DVD-x86_64-GM-DVD1.iso
BASE_CHANL=sles10-sp3-pool-x86_64
DIST_LABEL=sles10sp364
@
ISO_FILE=SLES-10-SP4-DVD-i386-GM-DVD1.iso
BASE_CHANL=sles10-sp4-pool-i586
DIST_LABEL=sles10sp432
@
ISO_FILE=SLES-10-SP4-DVD-x86_64-GM-DVD1.iso
BASE_CHANL=sles10-sp4-pool-x86_64
DIST_LABEL=sles10sp464
@
ISO_FILE=SLES-11-SP1-DVD-i586-GM-DVD1.iso
BASE_CHANL=sles11-sp1-pool-i586
DIST_LABEL=sles11sp132
@
ISO_FILE=SLES-11-SP2-DVD-i586-GM-DVD1.iso
BASE_CHANL=sles11-sp1-pool-i586
DIST_LABEL=sles11sp232
@
ISO_FILE=SLES-11-SP2-DVD-x86_64-GM-DVD1.iso
BASE_CHANL=sles11-sp2-pool-x86_64
DIST_LABEL=sles11sp264
@"

test -s $CFG && source $CFG


function single_distribution() {
 echo "INFO: start $EXE $FUNCNAME"

 echo "ISO_FILE=$ISO_FILE"
 echo "BASE_CHANL=$BASE_CHANL"
 echo "DIST_LABEL=$DIST_LABEL"

 cp $FSTAB $FSTAB.BAK || exit
 if [ -f $ISO_DIR/$ISO_FILE ]; then
	echo "Found $INST_DIR/$DIST_LABEL. Building Distribution..."
	mkdir -m 755 -p $INST_DIR/$DIST_LABEL
	echo "$ISO_DIR/$ISO_FILE  $INST_DIR/$DIST_LABEL  iso9660 loop 0 0" >>$FSTAB
	mount $INST_DIR/$DIST_LABEL
 	spacecmd -- distribution_create -n $DIST_LABEL -p $INST_DIR/$DIST_LABEL -b $BASE_CHANL -t suse
 fi
 echo "INFO: end $EXE $FUNCNAME"
}


function create_distributions() {
	echo "INFO: start $EXE $FUNCNAME"

	# TODO: more efficient variable handling
	echo $DIST_LIST | awk 'BEGIN{RS="@"; FS="\n"}; {print $1,$2,$2}' |\
	while read; do
		ISO_FILE=$(echo $REPLY | tr " " "\n" |\
			awk -F"=" '$1=="ISO_FILE"{print $2}')
		BASE_CHANL=$(echo $REPLY | tr " " "\n" |\
			awk -F"=" '$1=="BASE_CHANL"{print $2}')
		DIST_LABEL=$(echo $REPLY | tr " " "\n" |\
			awk -F"=" '$1=="DIST_LABEL"{print $2}')
		rc=0
		test -n "$BASE_CHANL"; rc=$?
		test -n "$ISO_FILE"; rc=$?
		test -z "$DIST_LABEL" && DIST_LABEL=$(echo $BASE_CHANL |\
		tr -d "-" | sed -e s/pool// -e s/x86_64/64/ -e s/i.86/32/)
		if [ $rc -eq 0 ]; then
			echo single_distribution
		else
			echo "WARN: $EXE $FUNCNAME : invalid data for $DIST_LABEL"
		fi
	done
 	echo "INFO: end $EXE $FUNCNAME"
}


function help() {
	echo "usage:	$(basename $0) [OPTION]"
	echo
	echo " --help		show help"
	echo " --version	show version"
}


# main()
case $1 in
	-v|--version)
		echo -n "$(basename $EXE) "
		head -11 $EXE | grep "^# Version: "
		exit
	;;
	-h|--help)
		help
		exit
	;;
	*)
		echo "INFO: start $EXE"
		create_distributions
		echo "INFO: normal_end $EXE"
	;;
esac
#
