#!/bin/sh
#
# /sbin/fwupdate
#
# (C)opyright Tecomat a.s.
#
# 2018/07/12 Hosek Martin <hosek@tecomat.cz>
#

UPDATE_DIR="/tmp/update"
LOG_FILE="/var/log/update.log"

status=0

Unpack()
{
    echo -n "  Unpacking ... " | tee -a "$LOG_FILE"

    gzip -d "$1" >/dev/null 2>&1

    file=`echo "$1" | sed s/'\.tgz'/'\.tar'/`

    tar xf "$file" >/dev/null 2>&1

    ret=$?

    status=$(($status + $ret))

    if [ $ret == 0 ]; then
	echo "ok" | tee -a "$LOG_FILE"
    else
	echo "error [Unable to unpack file: $file]" | tee -a "$LOG_FILE"
    fi

    return $ret
}

Update()
{
    echo -n "  Updating ... " | tee -a "$LOG_FILE"

    if [ -f "$1"/scripts/install ]; then
	cd "$1"
	scripts/install
	ret=$?
	cd ..
    else
	ret=1
    fi

    status=$(($status + $ret))

    if [ $ret == 0 ]; then
	echo "ok" | tee -a "$LOG_FILE"
    else
	echo "error [Install script failed witch error: $ret]" | tee -a "$LOG_FILE"
    fi

    return $ret
}

Delete()
{
    echo -n "  Deleting ... " | tee -a "$LOG_FILE"

    for i in $*; do
	rm -rf "$i"
        ret=$?
    done

    if [ $ret == 0 ]; then
	echo "ok" | tee -a "$LOG_FILE"
    else
	echo "error" | tee -a "$LOG_FILE"
    fi

    return 0
}

cd $UPDATE_DIR

mount /tmp -o remount,size=20M

for file in `ls [0-9]*_update.tgz 2>/dev/null`; do
    file="`basename $file`"
    dir="`echo $file | sed s/'\..*$'/''/`"

    echo "" >> "$LOG_FILE"
    echo "=== `date` ===" >> "$LOG_FILE"
    echo "" >> "$LOG_FILE"

    echo "Process the file: $file" | tee -a "$LOG_FILE"

    Unpack "$file" || break
    Update "$dir" || break

    Delete "$file" "$dir"
done

Delete "$file" "$dir"

exit $status
