#!/bin/sh

# board/cv/sd_produktion_create.d/sudo_me.sh

MLO_PRODUKTION=MLO-produktion
UBOOT_PRODUKTION=u-boot.img-produktion

MLO_STANDARD=MLO-standard
UBOOT_STANDARD=u-boot.img-standard

name=$0
p="$(dirname $0)"
build_name=. # relikt von yocto, hier so gesetzt dass moeglichst wenig geaendert werden muss
machine_name=${build_name} # aktuell einfach so festgelegt und hier vorausgesetzt!

msg() {
	printf "\n*** $1 ***\n\n"
}

# Voraussetzung: $p/../../../../output_produktion/images und $p/../../../../output_standard/images sind Verzeichnisse und enthalten die jeweiligen komplett mit buildroot gebauten images
td=$p/../../../..

usage() {
	echo "usage: $1 [ <options> ] <stat. IP-Adr. im Device (fuer Update mit Config-Tool)> "
	echo "           <stat. IP-Adr. des PCs in der Produktion auf dem der Produktionsassistent laeuft>"
	echo "           <Port des Produktionsassistenten>"
	echo "           [ <path/to/output.tar.gz> ]"
	echo "1) $1 <Device IP> <PC IP> <PC port>"
	echo "     Verwendet Dateien in ${td}."
	echo "2) $1 <Device IP> <PC IP> <PC port> <path/to/output.tar.gz>"
	echo "     Verwendet output.tar.gz."
	echo "3) $1 -h | --help"
	echo "     Gibt diesen Text aus."
}

if [ "$1" = "-h" -o "$1" = "--help" ]
then
	usage $name
	exit 3
fi

IP=$1

if [ "${IP}" = "" ]
then
	usage $name
	exit 3
fi

PC_IP=$2

if [ "${PC_IP}" = "" ]
then
	usage $name
	exit 3
fi

PC_PORT=$3

if [ "${PC_PORT}" = "" ]
then
	usage $name
	exit 3
fi

if [ "$5" != "" ]
then
	usage $name
	exit 3
fi



OUT_TAR=$5

if [ "${OUT_TAR}" != "" ]
then
	td=/tmp/br_outputs

	mkdir -p ${td}
	rm -rf "${td}/output_produktion" "${td}/output_standard"
	echo "Entpacke ${OUT_TAR} nach ${td} ..."
	if ! tar xf "${OUT_TAR}" -C "${td}"
	then
		echo "  FEHLER. Breche ab..."
		exit 1
	fi
	echo "  DONE."

fi


############## pruefe verzeichnisse und dateien in ${td}

tdpi="${td}/output_produktion/images"
tdsi="${td}/output_standard/images"
files_p="MLO u-boot.img boot.scr uImage.cv_octavo_emlix"
files_s="MLO rootfs.ubi u-boot.img uImage.cv_octavo_emlix"

printf "\nPruefe Verzeichnisse...\n\n"

check_dirs="${tdpi} ${tdsi}"

for d in ${check_dirs}
do
	echo "d: $d"
	if ! [ -d "$d" ]
	then
		msg "Verzeichnis $d nicht gefunden!"
		exit 1
	fi
done

printf "\nPruefe Dateien in ${tdpi}..."

for f in ${files_p}
do
	tmpf="${tdpi}/${f}"
	echo "f: $tmpf"
	if ! [ -f "$tmpf" ]
	then
		msg "Datei $tmpf nicht gefunden!"
		exit 1
	fi
	tmpf=
done

printf "\nPruefe Dateien in ${tdsi}..."

for f in ${files_s}
do
	tmpf="${tdsi}/${f}"
	echo "f: $tmpf"
	if ! [ -f "$tmpf" ]
	then
		msg "Datei $tmpf nicht gefunden!"
		exit 1
	fi
	tmpf=
done

# Pruefe rootfs.tar extra, dieses wird benoetigt, wenn auch nicht auf die Boot-Partition kopiert, daher nicht in files_p enthalten.
if ! [ -f "${tdpi}/rootfs.tar" ]
then
	msg "Datei ${tdpi}/rootfs.tar nicht gefunden!"
	exit 1
fi

sdb=/mnt/sdcard/BOOT
sdr=/mnt/sdcard/ROOTFS

for f in ${files_s}
do
	tmpf="${tdsi}/${f}"
	if ! cp "${tmpf}" "${sdb}/STANDARD_${f}"
	then
		msg "Konnte ${tmpf} nicht nach ${sdb}/STANDARD_${f} kopieren!"
		exit 1
	fi
	tmpf=
done

for f in ${files_p}
do
	tmpf="${tdpi}/${f}"
	if ! cp "${tmpf}" "${sdb}/${f}"
	then
		msg "Konnte ${tmpf} nicht nach ${sdb}/${f} kopieren!"
		exit 1
	fi
	tmpf=
done

# Leere 2. Partition der SD-Karte fuer rootfs

# zur sicherheit bei rm -rf keine variable verwendet! GEFAEHRLICHER BEFEHL!
if ! rm -rf /mnt/sdcard/ROOTFS/*
then
	msg 'Konnte /mnt/sdcard/ROOTFS/* nicht loeschen!'
	exit 1
fi

# rootfs.tar in die 2. Partition der SD-Karte extrahieren.

if ! tar -C "${sdr}" -vxf "${tdpi}/rootfs.tar"
then
	msg "Konnte ${tdpi}/rootfs.tar nicht nach ${sdr} entpacken!"
	exit 1
fi


# /etc/network/interfaces erstellen mit statischer IP, die als Argument an dieses Skript uebergeben wurde

echo "Setze statische IP ${IP} in /etc/network/interfaces ..."
#if ! sudo cp -r "${p}/interfaces_1" /mnt/sdcard/ROOTFS/etc/network/interfaces
if ! cp -r "${p}/interfaces_1" /mnt/sdcard/ROOTFS/etc/network/interfaces
then
	echo "  FEHLER. Breche ab..."
	exit 11
fi
#if ! sudo printf "\taddress ${IP}\n" >> /mnt/sdcard/ROOTFS/etc/network/interfaces
if ! printf "\taddress ${IP}\n" >> /mnt/sdcard/ROOTFS/etc/network/interfaces
then
	echo "  FEHLER. Breche ab..."
	exit 12
fi
#if ! sudo cat "${p}/interfaces_2" >> /mnt/sdcard/ROOTFS/etc/network/interfaces
if ! cat "${p}/interfaces_2" >> /mnt/sdcard/ROOTFS/etc/network/interfaces
then
	echo "  FEHLER. Breche ab..."
	exit 13
fi
echo "  DONE."


# Erstelle /scripts/produktion.d/ip.txt und /scripts/produktion.d/port.txt mit IP und Port aus den entsprechenden Argumenten fuer dieses Skript.

echo "Erstelle Verzeichnis /scripts/produktion.d"
#if ! sudo mkdir /mnt/sdcard/ROOTFS/scripts/produktion.d
if ! mkdir /mnt/sdcard/ROOTFS/scripts/produktion.d
then
	echo "  FEHLER. Breche ab..."
	exit 14
fi
echo "  DONE."

echo "Setze statische IP des Produktions-PCs in /scripts/produktion.d/ip.txt auf ${PC_IP}"
#if ! sudo echo "${PC_IP}" >/mnt/sdcard/ROOTFS/scripts/produktion.d/ip.txt
if ! echo "${PC_IP}" >/mnt/sdcard/ROOTFS/scripts/produktion.d/ip.txt
then
	echo "  FEHLER. Breche ab..."
	exit 15
fi
echo "  DONE."

echo "Setze Port des Produktions-PCs in /scripts/produktion.d/port.txt auf ${PC_PORT}"
#if ! sudo echo "${PC_PORT}" >/mnt/sdcard/ROOTFS/scripts/produktion.d/port.txt
if ! echo "${PC_PORT}" >/mnt/sdcard/ROOTFS/scripts/produktion.d/port.txt
then
	echo "  FEHLER. Breche ab..."
	exit 16
fi
echo "  DONE."


# Ggf. existierende Backup-Dateien von manuellen Anpassungen im rootfs_overlay (die evtl. vergessen wurden) loeschen damit keine unerwuenschten und schwer auszumachende Effekte beim "Init" von Linux auftreten.

echo "Entferne alle Dateien *~ aus rootfs ..."
for f in $(find /mnt/sdcard/ROOTFS/etc -name '*~')
do
	if ! rm "$f"
	then
		echo "  Konnte $f nicht entfernen. Breche ab..."
		exit 17
	fi
done
echo "  DONE."



echo "Mache alle Skripte in /mnt/sdcard/ROOTFS/scripts/ ausführbar ..."
if ! sudo chmod +x /mnt/sdcard/ROOTFS/scripts/*.sh
then
	echo "  FEHLER. Breche ab..."
	exit 10
fi
echo "  DONE."

