#!/bin/sh

ENABLED=/srv/public/netinst/overlays-live${PROFILE:+/$PROFILE}
PKGSTORE="${PKGSTORE:-/var/db/livecd-packages}"
STACK=cumulative
DATE="`date +%Y%m%d%H%M%S`"
ZDATE="`echo "$DATE" | tr '[0-9]' '0'`"
PDATE="`echo "$DATE" | sed 's/[0-9]/[0-9]/g'`"
SUFFIX=".iso"
#EXCMD="7z e -so"
ExCmd() { # archive file
	local D
	D="`mktemp -d`"
	unsquashfs -d "$D/1" "$1" "$2"
	cat "$D/1/$2"
	find "$D" >> /tmp/log 2>&1
	rm -rf "$D"
}
EXTMP=
ADDHOSTS=""			# what hosts want their hostkey on diskless
DST="`logname`@`hostname`"	# where to copy overlays

Die() { # message [errorcode]
  echo -e "\n$1" >&2
  exit "${2:-1}"
}

CONFIG=$HOME/.overlays-manage
test "$1" = "-c" && { CONFIG="$2"; shift; shift; }
test -r $CONFIG && . $CONFIG || :

POOL="${POOL:-$ENABLED.pool}"

test -d "$ENABLED" || mkdir -p "$ENABLED" || Die "$ENABLED must be writeable for `logname`" 1
test -d "$POOL" || { mkdir -p "$POOL" && chmod 1777 "$POOL"; } || Die "$POOL must be writeable for `logname`" 1

case "$1" in
  	setup)	# display some setup variables for overlays-create
	  	echo "PKGSTORE=$PKGSTORE"
		echo "FROMBIN=`dirname $0`"
		;;
  	info)	# list all overlays and show additional info
	  	echo "	Overlays spooled at $POOL:"
		ls -s "$POOL"
		echo "	Overlays in use at $ENABLED:"
		ls -s "$ENABLED"
		;;
	list)	# list actual overlays
	  (
		cd "$POOL"
		ls *$SUFFIX | fgrep -v $STACK$SUFFIX | sort -r | sort -sut- -k2
		ls *$STACK$SUFFIX
	  )	;;
	diff)	# show packages intalled since initial image
		{
		  ExCmd "$POOL"/$ZDATE-initial$SUFFIX ${PKGSTORE#/}.initial 2> /dev/null | sed 's/-[0-9].*//;s/^/1 /'
		  DIFFDATE=${2:-$(basename "$(ls "$POOL"/*-system-$STACK$SUFFIX | sort | tail -1)")}
		  ExCmd "$POOL"/"${DIFFDATE%%-*}-system-$STACK$SUFFIX" ${PKGSTORE#/} 2> /dev/null | sed 's/-[0-9].*//;s/^/2 /' 
		} | sort -k2 | uniq -uf1
	  	;;
	nosys)	# unlink all cumulative system overlays (for packages reinstall)
	  	rm -f "$ENABLED"/[1-9]*$STACK$SUFFIX
		;;
	clean)	# clean all overlays except initial and manual ones
		rm -f "$ENABLED"/[1-9]*$SUFFIX
		;;
	link)	# link actual overlays
	  (
	  	cd "$POOL"
		for F in $("$0" list); do ln -f "$F" "$ENABLED"/; done
	  )	;;
	relink)	# clean and then link
		"$0" clean
		"$0" link
		;;
	start)	# create an initial persistent overlay
		cat > "$POOL"/"$ZDATE-$2${3:+-$STACK}"$SUFFIX
		;;
	create)	# create an overlay $2=name $3=cumulative?
		cat > "$POOL"/"$DATE-$2${3:+-$STACK}"$SUFFIX
		;;
	erase)	# remove all managed overlays
		echo -n "	Do you want to remove all overlays (yes/no)? "
		read A
		case "$A" in
		  yes)	
		    eval rm "$POOL/$PDATE-*$SUFFIX"
		    eval rm "$ENABLED/$PDATE-*$SUFFIX"
		    ;;
		  no) exit 0;;
		  *)
		    echo "Please answer 'yes' or 'no'."
		    exit 1
		    ;;
		esac
		;;
	*)	# print help
		echo "Usage: $0 <command>" >&2
		grep "^[^(]*)[ 	]*#" "$0" >&2
		exit 1
		;;
esac
