#!/bin/sh
ERASETMP=/tmp/erase.cmd
BATMP=/tmp/.bainst
LINE="================================================================="
#echo $LINE
if [ -e /usr/sbin/sfdisk ]; then
   FDISK=/usr/sbin/sfdisk
else
   FDISK=/sbin/fdisk
fi
if [ -f /.bainfo -o -f /.meoboot ]; then
   # we are not in Flash, so we have to complain
   if [ -f /etc/enigma2/settings ]; then
      if [ `grep "config.osd.language=de_DE" /etc/enigma2/settings | wc -l` -gt 0 ]; then
         echo "Barry Allen sollte nur installiert/aktualisiert werden wenn man vom Flash gebootet ist !"
      else
         echo "Barry Allen should be installed/upgraded ONLY when booted from Flash, Sorry !"
      fi
   else
      echo "Barry Allen should be installed/upgraded ONLY when booted from Flash, Sorry !"
   fi
   exit 1
fi
if [ `uname -r | grep 3.4 | grep dm7080 | wc -l` -eq 0 -a  `uname -r | grep 3.4 | grep dm820 | wc -l` -eq 0 -a  `uname -r | grep 3.4 | grep dm520 | wc -l` -eq 0 ]; then
   if [ -f /etc/enigma2/settings ]; then
      if [ `grep "config.osd.language=de_DE" /etc/enigma2/settings | wc -l` -gt 0 ]; then
         echo "Dieser Barry Allen kit kann nur in DreamOS auf der dm7080, dm820 oder der dm520 installiert/aktualisiert werden!"
      else
         echo "This Barry Allen kit installs/upgrades only in DreamOS on the dm7080, dm820 or dm520!"
      fi
   else
      echo "This Barry Allen kit installs/upgrades only in DreamOS on the dm7080, dm820 or dm520!"
   fi
   exit 1
fi
if [ `uname -r | grep dm7080 | wc -l` -gt 0 ]; then
   echo "Installing Barry Allen on dm7080"
fi
if [ `uname -r | grep dm820 | wc -l` -gt 0 ]; then
   echo "Installing Barry Allen on dm820"
fi
if [ `uname -r | grep dm520 | wc -l` -gt 0 ]; then
   echo "Installing Barry Allen on dm520"
fi
echo $LINE
BAHOME=/media/ba
mkdir $BAHOME > /dev/null 2>&1
LIBDIR=/lib/modules/`uname -r`
if [ -f $BAHOME/ba.sh ]; then
   if [ -f /etc/enigma2/settings ]; then
   if [ `grep "config.osd.language=de_DE" /etc/enigma2/settings | wc -l` -gt 0 ]; then
      echo "Barry Allen ist bereits installiert, kein Formatieren noetig"
      echo "Sie koennen sich also wieder entspannen !"
   else
      echo "Barry Allen already installed, no Format needed"
      echo "You can relax now !"
   fi
   else
      echo "Barry Allen already installed, no Format needed"
      echo "You can relax now !"
   fi
   exit 0
fi
SWAPS=`cat /proc/swaps | grep -v Filename | cut -d" " -f 1`
for SWAP in $SWAPS; do
   swapoff $SWAP > /dev/null 2>&1
done
if [ -f /etc/enigma2/settings ]; then
   if [ `grep "config.osd.language=de_DE" /etc/enigma2/settings | wc -l` -gt 0 ]; then
      echo "Barry Allen stoppt automount, rebooten Sie um es zurueck zu bekommen"
   else
      echo "Barry Allen stops automount, reboot after installation to get it back"
   fi
else
      echo "Barry Allen stops automount, reboot after installation to get it back"
fi
if [ -e /lib/systemd/systemd ]; then
   systemclt stop autofs  > /dev/null 2>&1
else
   /etc/init.d/autofs stop > /dev/null 2>&1
fi
sleep 5
killall -9 automount > /dev/null 2>&1
#
# automounts and swapping is now stopped, now unmount the rest
#
umount /media/ba > /dev/null 2>&1
MOUNTS=`cat /proc/mounts | grep /media | cut -d" " -f 1`
for MOUNT in $MOUNTS; do
   umount $MOUNT > /dev/null 2>&1
done
#
# device hunt starts now
#
rm $BAHOME > /dev/null 2>&1
mkdir $BAHOME > /dev/null 2>&1

$FDISK -l > $BATMP 2>&1
DEVICES=`grep /dev $BATMP | grep -v isk | grep -v mmcblk0 | grep 1 | cut -d" " -f 1`
if [ ! -e $BAHOME/ba.sh ]; then
   for DEVICE in $DEVICES;
      do
      if [ ! -e $BAHOME/ba.sh  ]; then
         mount -t ext4 $DEVICE $BAHOME > /dev/null 2>&1 
      fi
      if [ ! -e $BAHOME/ba.sh  ]; then
         umount $DEVICE $BAHOME > /dev/null 2>&1 
      fi
   done
fi
if [ -d $BAHOME/noba ]; then
   if [ -f /etc/enigma2/settings ]; then
   if [ `grep "config.osd.language=de_DE" /etc/enigma2/settings | wc -l` -gt 0 ]; then
      echo "es wurde ein noba Directory und ein ba.sh auf dem Barry Allen device gefunden !"
      echo "das ist ein Wiederspruch, tut mir leid !"
   else
      echo "found a noba directory and a ba.sh on Barry Allen device, sorry !"
   fi
   else
      echo "found a noba directory and a ba.sh on Barry Allen device, sorry !"
   fi
   rm $BAHOME/ba.sh > /dev/null 2>&1
   if [ -f /etc/enigma2/settings ]; then
   if [ `grep "config.osd.language=de_DE" /etc/enigma2/settings | wc -l` -gt 0 ]; then
      echo "Barry Allen hat aber das ba.sh entfernt, daher nochmals probieren  ..."
   else
      echo "but Barry Allen removed the ba.sh so that you can try again ..."
   fi
   else
      echo "but Barry Allen removed the ba.sh so that you can try again ..."
   fi
   umount $BAHOME > /dev/null 2>&1
   exit 1
fi
if [ -f $BAHOME/ba.sh ]; then
   if [ -f /etc/enigma2/settings ]; then
   if [ `grep "config.osd.language=de_DE" /etc/enigma2/settings | wc -l` -gt 0 ]; then
      echo "Barry Allen ist bereits installiert, kein Formatieren noetig"
      echo "Sie koennen sich also wieder entspannen !"
   else
      echo "Barry Allen already installed, no Format needed"
      echo "You can relax now !"
   fi
   else
      echo "Barry Allen already installed, no Format needed"
      echo "You can relax now !"
   fi
   exit 0
fi
#
# we probably have to format, so let's simply take the first device <= 64GB
#
umount $BAHOME > /dev/null 2>&1
DISKS=`cat /proc/partitions | grep sd`
DISKSM=`cat /proc/partitions | grep mmc | grep -v mmcblk0`
DISKS="$DISKS $DISKSM"
#echo $DISKS
NUMBER=0
BADEVICE="none"
for ITEM in $DISKS; do                                                           
      if [ $NUMBER = 2 ]; then                                                  
         SIZE=$ITEM                                                             
      fi                                                                        
      if [ $NUMBER = 3 ]; then                                                  
         DEVICE=$ITEM                                                            
         LEN=${#DEVICE}
         if [ $LEN -eq 3 -o $LEN -eq 7 -a $SIZE -lt 70000000 ]; then
	         if [ $SIZE -lt 70000000 ]; then
#                   echo "$DEVICE $SIZE"
   	            BADEVICE="/dev/${DEVICE}"
                 fi
         fi
#	 echo $BADEVICE
      fi                                                                        
      NUMBER=`expr $NUMBER "+" 1`                                               
      if [ $NUMBER -eq 4 ]; then 
         NUMBER=0
      fi
done
if [ ! -e $BADEVICE ]; then
   if [ -f /etc/enigma2/settings ]; then
      if [ `grep "config.osd.language=de_DE" /etc/enigma2/settings | wc -l` -gt 0 ]; then
         echo "Kein brauchbares Device gefunden fuer Barry Allen, tut mir leid !"
      else
         echo "No usable Device found for Barry Allen, sorry !"
      fi
   else
      echo "No usable Device found for Barry Allen, sorry !"
   fi
   exit 1
fi
#echo $BADEVICE
LEN=${#BADEVICE}
#echo $LEN
if [ $LEN -eq 8 ]; then
   BAPART=${BADEVICE}1
else
   BAPART=${BADEVICE}p1
fi
mount $BAPART /media/ba > /dev/null 2>&1

if [ -e $BAHOME/movie ]; then
   if [ -f /etc/enigma2/settings ]; then
      if [ `grep "config.osd.language=de_DE" /etc/enigma2/settings | wc -l` -gt 0 ]; then
         echo "Es wurde ein movie directory auf dem Barry Allen Device gefunden, tut mir leid"
         echo "Stecken Sie das device mit movies Directory ab und probieren sie es nochmals"
         echo "nur mit dem Device auf das sich Barry Allen installieren soll"
      else
         echo "movie directory found on Barry Allen device - will not install, Sorry"
         echo "unplug device with movies on it and try again only with the device" 
         echo "attached where Barry Allen should install itself !" 
      fi
   else
      echo "movie directory found on Barry Allen device - will not install, Sorry"
      echo "unplug device with movies on it and try again only with the device" 
      echo "attached where Barry Allen should install itself !" 
   fi
   exit 1
fi

if [ -d $BAHOME/noba ]; then
   if [ -f /etc/enigma2/settings ]; then
   if [ `grep "config.osd.language=de_DE" /etc/enigma2/settings | wc -l` -gt 0 ]; then
      echo "es wurde ein noba Directory dem Barry Allen device gefunden, tut mir leid !"
   else
      echo "found a noba directory on Barry Allen device, sorry !"
   fi
   else
      echo "found a noba directory on Barry Allen device, sorry !"
   fi
   umount $BAHOME > /dev/null 2>&1
   exit 1
fi
if [ -f /etc/enigma2/settings ]; then
   if [ `grep "config.osd.language=de_DE" /etc/enigma2/settings | wc -l` -gt 0 ]; then
      echo "Barry Allen Device wird $BADEVICE !"
   else
      echo "Barry Allen will be on device $BADEVICE !"
   fi
else
   echo "Barry Allen will be on device $BADEVICE !"
fi

umount $BAHOME > /dev/null 2>&1
umount ${BADEVICE} > /dev/null 2>&1
umount ${BADEVICE}1 > /dev/null 2>&1
umount ${BADEVICE}2 > /dev/null 2>&1
umount ${BADEVICE}3 > /dev/null 2>&1
umount ${BADEVICE}4 > /dev/null 2>&1
umount /autofs${BADEVICE} > /dev/null 2>&1
umount /autofs/${BADEVICE}1 > /dev/null 2>&1
umount /autofs/${BADEVICE}2 > /dev/null 2>&1
umount /autofs/${BADEVICE}3 > /dev/null 2>&1
umount /autofs/${BADEVICE}4 > /dev/null 2>&1
umount ${BADEVICE}p1 > /dev/null 2>&1
umount ${BADEVICE}p2 > /dev/null 2>&1
umount ${BADEVICE}p3 > /dev/null 2>&1
umount ${BADEVICE}p4 > /dev/null 2>&1
umount /autofs/${BADEVICE}p1 > /dev/null 2>&1
umount /autofs/${BADEVICE}p2 > /dev/null 2>&1
umount /autofs/${BADEVICE}p3 > /dev/null 2>&1
umount /autofs/${BADEVICE}p4 > /dev/null 2>&1


echo "d" > $ERASETMP
echo "1" >> $ERASETMP
echo "d" >> $ERASETMP
echo "2" >> $ERASETMP
echo "d" >> $ERASETMP
echo "3" >> $ERASETMP
echo "d" >> $ERASETMP
echo "4" >> $ERASETMP
echo "d" >> $ERASETMP
echo "5" >> $ERASETMP
echo "d" >> $ERASETMP
echo "6" >> $ERASETMP
echo "d" >> $ERASETMP
echo "7" >> $ERASETMP
echo "d" >> $ERASETMP
echo "8" >> $ERASETMP
echo "d" >> $ERASETMP
echo "9" >> $ERASETMP
echo "d" >> $ERASETMP
echo "10" >> $ERASETMP
echo "d" >> $ERASETMP
echo "11" >> $ERASETMP
echo "d" >> $ERASETMP
echo "12" >> $ERASETMP
echo "d" >> $ERASETMP
echo "13" >> $ERASETMP
echo "d" >> $ERASETMP
echo "14" >> $ERASETMP
echo "d" >> $ERASETMP
echo "15" >> $ERASETMP
echo "d" >> $ERASETMP
echo "16" >> $ERASETMP
echo "n" >> $ERASETMP
echo "p" >> $ERASETMP
echo "1" >> $ERASETMP
echo "1" >> $ERASETMP
echo "" >> $ERASETMP
echo "w" >> $ERASETMP
if [ `mount | grep $BADEVICE | wc -l` -gt 0 ]; then
   echo "can not unmount Barry Allen device for formating" 
   echo "maybe standing there in telnet, or still used for swapping ?"
   exit 1
fi
# check if WW formatted already
LEN=${#BAPART}
if [ $LEN -eq 9 ]; then
   WWDEVICE=${BADEVICE}2
   WWDEVICE2=${BADEVICE}4
else
   WWDEVICE=${BADEVICE}p2
   WWDEVICE2=${BADEVICE}p4
fi
if [ -e $WWDEVICE -a ! -e $WWDEVICE2 ]; then
   if [ -f /etc/enigma2/settings ]; then
      if [ `grep "config.osd.language=de_DE" /etc/enigma2/settings | wc -l` -gt 0 ]; then
         echo "Wally West hat das $BADEVICE bereits formatiert"
      else
         echo "Wally West already formatted $BADEVICE"
      fi
   else
      echo "Wally West already formatted $BADEVICE"
   fi
   umount $BADEVICE > /dev/null 2>&1
   umount $BAPART > /dev/null 2>&1
   umount $WWDEVICE > /dev/null 2>&1
   umount $BAHOME > /dev/null 2>&1
   mkdir $BAHOME > /dev/null 2>&1
   mount $WWDEVICE $BAHOME > /dev/null 2>&1
   if [ `grep $BAHOME /proc/mounts | wc -l` -lt 1  ]; then
      echo "$BAHOME mount failed, sorry"
      exit 1
   fi
   mkdir $BAHOME/boot > /dev/null 2>&1
   mount $BADEVICE $BAHOME/boot > /dev/null 2>&1
   exit 0
fi

echo "Partitioning Barry Allen device $BADEVICE ..."
fdisk < $ERASETMP $BADEVICE > /dev/null 2>&1
echo "Formatting Barry Allen device $BAPART with ext4 Filesystem ..."
mkfs.ext4 -L BA $BAPART > /dev/null 2>&1
mount $BAPART $BAHOME > /dev/null 2>&1
if [ `mount | grep $BAHOME | wc -l` -lt 1 ]; then
   echo $LINE
   echo "Barry Allen device not mountable after formating, sorry"
   echo $LINE
   exit 1
fi
ln -sfn /etc/hosts $BAHOME/.bafatcheck
if [ ! -f $BAHOME/.bafatcheck ]; then
   echo "link on Barry Allend device not possible"
   echo "maybe still FAT, or read-only mount - sorry !"
   echo $LINE
   exit 1
fi
rm $BAHOME/.bafatcheck > /dev/null 2>&1
exit 0
