#!/bin/ash


if test $PWD != / ; then chroot .  ./init ; exit ; fi ;   # always run into chroot .
sleep 5                      

SERIAL=` /bin/date -u +%d:%m:%y-%X `                                   #  %s


./mountsysfs   >> /dev/zero 2>&1     # macht /proc , device-nodes usw     
/bin/setterm -powersave off -blank 0   # auf Konsole schicken, nicht umleiten       
sleep 5      # USB-Geraete dauern


# Uebergabe der Parameter in /devs , /parts, /installinfo  
# /installinfo nicht initialisieren, bei ggf. noetigem reboot 
# - etwa falls auf boot/root-Geraet vom lfnd System installiert wird - 
# werden dort Informationen wie Ziel-Partition aufgehoben und weiterverwendet

TST=0      # normaler Betrieb
REBOOT=0   # =0 normalerweise bzw vor reboot, =1 nach reboot mit neuer Partitions-Tabelle
#TST=1      # test
SIZE=40000000   # Sektoren  , V. 0.20   Wird in mkpart genauer bestimmt  
DEVZERO="if=/dev/zero"      # ash interpretiert nicht richtig das if in dd
#REDIRECT="  >> logfile 2>&1  "     # Ersetzt nicht richtig 


NACH=- ; NACH0=- ; VON=- ; KLEINER=-  ; OLDSYS=- ; WINDOWS=-   
echo  $TST $SIZE $NACH0 $NACH $VON $KLEINER $OLDSYS $WINDOWS  >> installinfo         
# anhaengen, falls /installinfo schon da / reboot werden alte, sonst obige Werte genommen

read  TST SIZE NACH0 NACH VON KLEINER OLDSYS WINDOWS REST  < installinfo  >> /dev/zero 2>&1          
if test $NACH != -  >> /dev/zero 2>&1 ; then REBOOT=1 ; fi ;       # Test ob Fortsetzung nach reboot


if test $REBOOT = 0 ; then  echo " "  > logfile 2>&1  ; fi ;          
if test $REBOOT = 0 ; then echo " ======= Linux SYS Install-Programm  ----   Anfang logfile   von Installation: " $SERIAL " ====== " >> logfile 2>&1 ; fi ;
if test $REBOOT != 0 ; then echo " ======= Linux SYS Install-Programm  ----   Fortsetzung nach Reboot logfile   von Installation: " $SERIAL " ====== " >> logfile 2>&1 ; fi ;
echo " Falls Installation von lfnd. System aus, zBsp mit .iso-Datei, im ueren System vor chroot mglichst viele Partitionen "   >> logfile 2>&1
echo "     unmounten, da dort gemountete Probleme im inneren System/Installer beim mounten und Erkennen zu Problemen fhren"    >> logfile 2>&1
echo "     Irgndwo gemountete Dateisysteme / Partitionen sind im chroot-Bereich insbesondere nicht redimensionierbar"    >> logfile 2>&1

date >> logfile 2>&1

echo " Vorgabe: TST SIZE NACH0 NACH VON KLEINER OLDSYS WINDOWS: "  >> logfile 2>&1 
echo  $TST $SIZE $NACH0 $NACH $VON $KLEINER $OLDSYS $WINDOWS  >> logfile 2>&1         


# 0.0. Feststellung der Geraete (endgueltig und Ablauf der Installation regelnd), 
# nicht der Partitionen (waehrend der Installation veraenderbar)
echo  $TST $SIZE $NACH0 $NACH $VON $KLEINER $OLDSYS $WINDOWS  > installinfo         

./mkdev  >> logfile 2>&1 

read  TST SIZE NACH0 NACH VON KLEINER OLDSYS WINDOWS REST  < installinfo  >> logfile 2>&1         
echo " nach mkdev: TST SIZE NACH0 NACH VON KLEINER OLDSYS WINDOWS: "  >> logfile 2>&1 
echo  $TST $SIZE $NACH0 $NACH $VON $KLEINER $OLDSYS $WINDOWS  >> logfile 2>&1         

echo " Geraete-Kurzbezeichnungen wo Ein- und Ausgabe sind: "  >> logfile 2>&1 
NACH000=${NACH0#/dev/}   # NACH00=${NACH#/dev/}  , NACH hier noch unbekannt    
VON000=${VON#/dev/} ; VON00=${VON000%/SYS_Linux.iso} 
VON000=${VON00%[1-9]} ; if test $VON00 = $VON000 ; then VON00=- ; fi ; 
# VON00 = -  falls Install-DVD , sonst Name der Partition mit .iso -Datei
echo " Eingabe gemountet: " $VON " auf Part.: "  $VON00 " auf Geraet: " $VON000 >> logfile 2>&1  
echo " Ausgabe auf Geraet: " $NACH000  >> logfile 2>&1  



# alte user-config nicht mehr nach ggf reboot kopieren noch neu initialisieren sondern zuletzt gefundene Werte verwenden, 
# da alte Partition ggf nicht mehr da
if test $REBOOT = 0 ; then               
OLDSYS=-   #echo "-" > userconf     # falls kein altes System mit * in Part.Tafel gefunden werden sollte 
fdisk -l > scr  
grep -v 'Disk' scr  > scr0    
grep '/dev/' scr0  > scr    
grep '*' scr  > scr0                # Altes System Partition muss mit * markiert sein, hilfsweise wird erste Partition genommen
if test $? -eq 0 ; then read OLDSYS REST < scr0   ; if test $? -eq 0 ; then OLDSYS=$OLDSYS  ; else  OLDSYS=- ; OLDSYSNR=0 ; fi ;fi ;     # Partition mit boot -Label  
if test $OLDSYS = - ; then read OLDSYS REST < scr  ; if test $? -eq 0 ; then OLDSYS=$OLDSYS  ; else  OLDSYS=- ; OLDSYSNR=0 ; fi ;fi ;     # Partition mit boot -Label  
LANG0="-" ; KBD0="-" ;   LANG="pt_BR" ; KBD="br_abnt2" ; USER00=- ; USER=-    # LANG ist Systemvariable, kann nicht - gesetzt wd
CHAP1=- ; PAP1=$CHAP1 ; CHAP2=- ; PAP2=$CHAP2 
echo $OLDSYS $KBD $KBD0 $LANG $LANG0 $USER00 $USER0 $CHAP1 $CHAP2 $PAP1 $PAP2 > userconf 

./chkuserconf    >> logfile 2>&1 

fi ;      #  REBOOT = 0     
# ... aber alte Werte neu einlesen nach evtl. reboot mit neuen Partitionen (NACH -ne 0)
read OLDSYS KBD KBD0 LANG LANG0 USER00 USER0 CHAP1 CHAP2 PAP1 PAP2 REST < userconf 

  
echo " erfolgter REBOOT = " $REBOOT " , Install nach: " $NACH  >> logfile 2>&1
MACHEN=0




######  max. 2 Versuche von Installation und/oder Rescue

for DURCHLAUF in 1 2 ; do

if test $REBOOT = 0 ; then

echo " == DURCHLAUF : " $DURCHLAUF " === "   >> logfile 2>&1

PROBLEM=0       # schwere/leichte Probleme:   > 10: Abbruch , < 10 versuchen weiterzumachen
echo $PROBLEM > problem  



clear 

dialog   --title " S Y S " --yes-label "INSTAL" --no-label "RESCUE" --timeout 5 --colors --no-collapse --yesno  "

           \Zb\Z1 SYS \Zn   


   
 \Z3 Instalacao    Installierung\Zn

    \Z3 Socorro    Rescue \Zn



     Versao 0.23-r2     2/6/9
      \Z4 www.copaya.yi.org \Zn

" 20 34    

MACHEN=$?

#  0 :  Install   1 : rescue   255 : timeout  --> 0
#  Wird nichts eingegeben, installieren falls SYS_SCHON_DA = 0 , rescue falls SYS_SCHON_DA = 1
#     Incl. damit zweite Installation nur falls ausdr. verlangt (falls jemand geschlafen hat Install-CD rauszunehmen und restart) 

echo " MACHEN, SYSSCHONDA 1: " $MACHEN  $SYSSCHONDA >> logfile  2>&1 
sync 


MACHEN1=$MACHEN
if test $MACHEN = 255 ; then MACHEN=0 ; fi ;     #  normalerweise default = installieren 
# beim 2. Durchlauf default = rescue :
if test $DURCHLAUF != 1 ; then if test $MACHEN != 0 ; then  
clear ; mv -f installinfo installinfo.log  >> /dev/zero 2>&1  ; cat rescue.txt ; /bin/bash -li ;  sync ; /sbin/reboot -f   >> /dev/zero 2>&1 
fi ; fi ;  

### 0.1.  Ob von vornherein alle Disks ganz loeschen (zBsp bei voellig vermurkstem alten System)
# falls (nur) beim 1. Durchlauf fragen ob alles loeschen :
# if test $DURCHLAUF = 1 ; then 
if test $MACHEN = 0 ; then
dialog  --title "erase everything ??" --yes-label "NAO / NEIN" --no-label "SIM / JA" --timeout 4 --colors --no-collapse --yesno  "

    \Z1 APAGAR TODO ?     ALLES LOESCHEN ? \Zn

" 8 46   
LOESCHEN=$?
if test $LOESCHEN = 1 ; then
# SYSSCHONDA=0  # falls nur 1.Durchlauf relevant 
# echo -e "o \nw " > fdisk.machen  
for J in $NACH000 ; do                             # Nur Install-Geraet loeschen 
#for J in hda hdb hdc hdd sda sdb sdc sdd  ; do     # falls alle Platten loeschen
echo " falls " $VON00 " Partition, nicht loeschen da dort .iso -Datei ist"  >> logfile 2>&1
for K in 1 2 3 4 5 ; do 
if test $J$K != $VON00 ; then             #  VON= /$J$K/SYS_Linux.iso oder - 
# root-Disk ausnehmen !! Ebenso ggf. usb-keys
echo " loeschen:  " /dev/$J$K   >> logfile 2>&1
#dialog --title "  delete .. "  --no-collapse --colors --infobox "
# apagar  loeschen:    /dev/$J    
#" 6 36 
### ( dd $DEVZERO of=/dev/$J bs=1k count=1    >> /dev/zero 2>&1 ) 
echo -e "d \n"$K" \nw " > fdisk.machen
/sbin/fdisk /dev/$J < fdisk.machen   >> logfile 2>&1        
fi ; 
done ; done
sync
/dev/makedevs.sh   >> logfile 2>&1
/sbin/fdisk -l  >> logfile 2>&1  
sync  
fi ;    # LOESCHEN = 1
fi ;    # MACHEN = 0      # fi ; falls nur beim 1. Durchlauf alles loeschen



echo " MACHEN 2: " $MACHEN   >> logfile  2>&1 



### 0.2. Ggf. schon vhd. Installationen von SYS loeschen oder ueberschreiben

SYSSCHONDA=0  ; OBSCHONDA=0  #  grobe Suche ob selbe Version von SYS schon irgendwo installiert ist . 
                             # Genommen wird erste gefundene Instalation
# verbessern: fuer jede gefundene Installation / Partition abfragen ob loeschen,
# bis zum ersten Mal nein = default gewaehlt wurde
# Veraenderbar, da solche Partitionen geloescht wd. koennen, und da sich ggf
# bei Problemen/Platzmangel Meinung des Benutzers aendert ob loeschen

for J in $NACH000 ; do       
#for J in sda hda sdb hdb sdc hdc sdd hdd  ; do  
for I in 1 2 3 4 ; do
if test $SYSSCHONDA = 0 ; then 
mkdir -p /$J$I   >> logfile  2>&1
umount /dev/$J$I    >> logfile  2>&1                       # umount /dev/... ntig sonst stets Fehlschlag mit $?
mount /dev/$J$I /$J$I   >> logfile  2>&1  ; IFMOUNT=$?     #  nicht mount -o ro  da immer Fehlschlag falls schon rw gemountet      
echo "Suche nach vhd SYS Installation auf Partition: " /dev/$J$I " Versuch mount nach: " /$J$I  " IFMOUNT: " $IFMOUNT    >> logfile  2>&1   
if test $IFMOUNT -eq 32 ; then  rm  /$J$I   >> logfile  2>&1 ; fi ;    # nicht rm -r sonst wird ganzes System gelscht falls gemountet aber IFMOUNT falsch positiv
( cat /$J$I/etc/SYS-version > scr0 )  >> logfile  2>&1
read OBSCHONDA REST < scr0   >> logfile  2>&1       #  wird bei erfolgreicher Installation am Ende von copysys hineingeschrieben 
if test "$OBSCHONDA" = SYS   >> logfile  2>&1 ; then SYSSCHONDA=1 ; DEVSCHONDA0=/$J$I ; DEVSCHONDA00=/dev/$J  
echo " SYS schon da auf Partition: " /dev/$J$I  >> logfile  2>&1 
fi ;  # OBSCHONDA
umount /$J$I    >> logfile  2>&1        # noetig umount sonst Probleme mit fdisk und Einlesen neuer Part.Tab.

fi ;  # end SYSSCHONDA=0      
done 
done


if test $SYSSCHONDA = 1   ; then 

if test $MACHEN = 0  ; then        
dialog  --title "SYS is already instaled, affirm a 2nd installation" --yes-label "INSTAL" --no-label "RESCUE" --timeout 7 --colors --no-collapse --yesno  "

\Z1 SYS JA E INSTALLADO   SYS IST SCHON INSTALLIERT \Zn
                \Z3 /dev$DEVSCHONDA0 \Zn
 Afirmar se deve ser    Bestaetigen falls es 
 instalado outra vez    zusaetzlich nochmal
      adicionalmente    installiert werden soll  
  (se nao -> rescue)    (sonst -> rescue) \Zn

" 14 52   

MACHEN=$?
  
dialog --title "  wait .. "  --no-collapse --colors --infobox "
   . . .   
" 4 14 

echo " MACHEN 3: " $MACHEN   >> logfile  2>&1 

if test $MACHEN = 255 ; then   if test $MACHEN1 = 0 ; then MACHEN=0 
else  MACHEN=1 ; fi   ; fi ;  
                        #  Wenn beim 1.mal ausdruecklich (kein Zeitlimit) instal gewaehlt, ist das beim 2.mal default      
                        #  falls schon ein SYS installiert, default = rescue / lilo reparieren
echo " MACHEN 4: " $MACHEN   >> logfile  2>&1 

if test $DURCHLAUF != 1 ; then if test $MACHEN != 0 ; then 
clear ; mv -f installinfo installinfo.log  >> /dev/zero 2>&1  ; cat rescue.txt ; /bin/bash -li ;  sync ; /sbin/reboot -f   >> /dev/zero 2>&1   
fi  ; fi ;        

if test $MACHEN = 1 ; then  
echo " lilo  von SYS -Installierung auf Partition" /dev$DEVSCHONDA0  " reparieren, in MBR von Festplatte " $DEVSCHONDA00  " installieren: "  >> logfile  2>&1 
# Falls nach rescue statt install weil Instalation schon da, wenigstens bootloader der ersten Installation von SYS erneuern
mkdir -p $DEVSCHONDA0  >> logfile  2>&1 
mount /dev$DEVSCHONDA0 $DEVSCHONDA0  >> logfile  2>&1   
chroot $DEVSCHONDA0 /sbin/lilo -b $DEVSCHONDA00  >> logfile  2>&1 
umount /dev$DEVSCHONDA0   >> logfile  2>&1 
fi ;   # end MACHEN=1 = lilo reparieren


fi  ;  # end  MACHEN=0 = installieren 
fi ;   # end  SYSSCHONDA=1


fi ;   # REBOOT = 0

RESCUE=$MACHEN    
echo " MACHEN 5 (0=install, 1=rescue): " $MACHEN   >> logfile  2>&1 
#echo $RESCUE > rescue   
#read RESCUE REST < rescue



if test $RESCUE = 0 ; then

###  1. Instalation ########################################################################################


#RESCUE=1 ; echo "1  Anfang init " > rescue    # wenn Installierung klappt, dann am Ende derselben =0 setzen, wenn was schieflaeuft, =1 lassen


read  TST SIZE NACH0 NACH VON KLEINER OLDSYS WINDOWS REST  < installinfo  >> logfile 2>&1         
# Hier ggf Dialog z. Auswahl einer Partition einbauen
echo " vor mkpart: TST SIZE NACH0 NACH VON KLEINER OLDSYS WINDOWS: "  >> logfile 2>&1 
echo  $TST $SIZE $NACH0 $NACH $VON $KLEINER $OLDSYS $WINDOWS  >> logfile 2>&1         
echo  $TST $SIZE $NACH0 $NACH $VON $KLEINER $OLDSYS $WINDOWS  > installinfo         


##### 1.1.  Partitionen machen ###########################################################################################

if test $REBOOT = 0 ; then  
echo " REBOOT  " $REBOOT  >> logfile 2>&1 

(

dialog --title "verifying & optimizing the computer .."  --no-collapse --colors --infobox "
   \Z1 VERIFICACAO         UEBERPRUEFUNG
E APERFEICOACAO         UND REORGANISATION
  DO COMPUTADOR         DES COMPUTERS \Zn

             ...

     \Z3 Aguarde !         Warten !\Zn
         (5 - 15 min.)


  \Z3 Se o monitor         Falls Bildschirm
ou as mensagens         oder Schrift vorher
   ficam pretos         schwarz werden,
  antes, aperta         druecken:
            \Zn \Z4 CTRL \Zn

" 22 41

sleep 40   # noetig damit dieser Text einige Zeit lang angezeigt wird,  /resize.txt gemacht wird 
           # Falls im Vordergrund mkpart vorher fertig, wird das hier ueberschrieben

while   [ -e rs ]  ; do  
dialog --title "resizing .."  --no-collapse --colors --infobox "`cat rs | sed 's/-//g' | sed 's///g'`" 0 0   2>> logfile 
sleep 30
done
 
) &

touch rs  >> logfile 2>&1 
echo  $TST $SIZE $NACH0 $NACH $VON $KLEINER $OLDSYS $WINDOWS  > installinfo         

./mkpart  >> logfile 2>&1          #  schreibt Install-Device und Install-Partition  in   installdevice

read  TST SIZE NACH0 NACH VON KLEINER OLDSYS WINDOWS REST  < installinfo  >> logfile 2>&1         
echo " nach mkpart: TST SIZE NACH0 NACH VON KLEINER OLDSYS WINDOWS: "  >> logfile 2>&1 
NACH00=${NACH#/dev/}

cat rs | sed 's/-//g' | sed 's///g'  >> logfile 2>&1  
echo " komisch, ich sollte schon geloescht sein ... " >> rs ; sync ; rm -f rs  >> logfile 2>&1   

#dialog  --clear --infobox " " 0 0          # Versuch damit abzufangen dass Text nach Monitor-Timeout schwarz wird

read PROBLEM REST < problem
SIZEGB=$(( $SIZE / 2000000 + 1))

if test $PROBLEM = 5 ; then
dialog --title "need to delete partition $KLEINER" --yes-label "OK" --no-label "PARAR/HALT" --timeout 5 --no-collapse --colors --yesno "
   \Z1 NECESSARIO APAGAR  NOETIG PARTITION
         A PARTICAO :  ZU LOESCHEN : \Zn 
               \Z4 $KLEINER  \Zn

"  9 42 
MACHEN=$?
#  0 :  continue   1 : stop   255 : timeout  --> 0
if test $MACHEN != 1 ; then MACHEN=0 ; fi ;
if test $MACHEN = 1 ; then PROBLEM=15 ; fi ;
# Hier ggf. in einer ntfs/vfat Partition viel loeschen wie Programme usw und dann mkpart nochmal aufrufen 

fi ;  # end PROBLEM=5 


if test $PROBLEM = 11 ; then
dialog --title "no space for install (needs $SIZEGB GB)" --no-collapse --colors --msgbox "
   \Z1 ESPACO INSUFI-  ZUWENIG PLATZ
 CIENTE P/INSTALAR  FR INSTALATION 
      NECESSARIO :  NTIG : \Zn 
               \Z4 $SIZEGB  GB \Zn

"  9 42 

#sleep  20

fi ;

# Nachfolgendes dürfte eigentlich nicht passieren, nur falls hier nicht vorgesehene dev-Namen:

if test $PROBLEM = 12 ; then
dialog --title "install-DVD $VON could not found/read .." --no-collapse --colors --msgbox "
 \Z1 DVD DA INSTALACAO  INSTAL-DVD NICHT
        NAO LEGIVEL  AUFFINDBAR / LESBAR \Zn 
               \Z4 $VON \Zn

"  9 46 

#sleep  20

fi ;


if test $PROBLEM = 13 ; then
dialog --title "destination disk $NACH not found/writeable .." --no-collapse --colors --msgbox "
  \Z1 DISCO AONDE INSTALAR  ZIEL-FESTPLATTE NICHT
 NAO ACHADO / C PROBLEM  AUFFINDBAR / SCHREIBBAR \Zn 
                  \Z4 $NACH \Zn

"  9 53 

#sleep  20

fi ;




if test $PROBLEM -le 10 ; then  



if test $KLEINER != - ;  then      
dialog --title "shrinking a partition .." --no-collapse --colors --infobox "

 \Z1 REDIMENSIONAR     VERKLEINERN
     A PARTICAO     DER PARTITION \Zn 
           \Z4 $KLEINER \Zn

"  8 40 

#sleep 3 

fi ;


if test $PROBLEM = 6 ; then
dialog --title "After installation, save your files from the unpartitioned space .." --no-collapse --colors --infobox "
 \Z1 DEPOIS DA INSTALACAO SALVA OS      NACH DER INSTALATION DATEN VOM 
   DADOS DO ESPACO NAO-PARTICIONADO   NICHT-PARTITIONERTEN BEREICH
   QUE ERA ANTES A PARTICAO           RETTEN, WAR ZUVOR PARTITION \Zn 
                              \Z4 $NACH \Zn

"  8 74 


sleep  12

fi ;


# Ueberfluessig da Name der Partition auch in naechstem Fenster steht
#dialog --title "making a new partition $NACH .." --no-collapse --colors --infobox "

#\Z1 NOVA PARTICAO:      NEUE PARTITION: \Zn
#           \Z4 $NACH \Zn

#"  8 40 

#sleep 3  

##echo " lsof" $NACH " vor fdisk:"   >> logfile 2>&1 
##echo " Neue Partition benutzt von: "  >> logfile 2>&1 ;  lsof $NACH  >> logfile 2>&1 


echo " HIER JETZT ALLE AUSGEFUEHRTEN FDISK -OPERATIONEN WIRKLICH DURCHFUEHREN : "  >> logfile 2>&1 
cat fdisk.machen  >> logfile 2>&1
umount $NACH0*  >> logfile 2>&1                                #  sonst wird neue Part.Tafel nicht eingelesen
/sbin/fdisk $NACH0 < fdisk.machen   >> logfile 2>&1  
FDISKERR=$? ; echo " FDISK Fehler ? :" $FDISKERR   >> logfile 2>&1 


/dev/makedevs.sh   >> logfile 2>&1
ls -l $NACH   >> logfile 2>&1 
sync 

echo " 

*** neue  Partitionen : 

"   >> logfile 2>&1
/sbin/fdisk -lu $NACH0 >> logfile 2>&1  


if test $VON00 != - ; then                       # falls kein Install-DVD sondern .iso-Datei

# Test ob neue Partition effektiv da und beschreibbar ist.  
### Geanderte Partitionen muessen innerhalb und ausserhalb von chroot ungemountet sein. ###
# Bescheuerterweise liest mit fdisk der Kernel die neue Part-Tafel vom Geraet mit gemountetem / nicht ein, ioctl Fehler.
# parted macht dies korrekt.  Als Minimal-Anwendung formatieren wir damit die neue Partition (normalerweise nicht noetig)          
# oder mit partprobe 
(
ls -l $NACH  >> logfile 2>&1 ; LSERR=$? ; echo " LSERR: " $LSERR  >> logfile 2>&1
dd $DEVZERO of=$NACH bs=1024 count=1 >> logfile 2>&1 ; DDERR=$? ; echo $DDERR 0 > /scr ; echo " DDERR: " $DDERR  >> logfile 2>&1
if test $DDERR != 0 ; then      
hdparm -fF $NACH0  >> logfile 2>&1 ; hdparm -z $NACH0  >> logfile 2>&1 ; sync    
dd $DEVZERO of=$NACH bs=1024 count=1 >> logfile 2>&1 ; DDERR=$? ; echo $DDERR 0 > /scr ; echo " DDERR: " $DDERR  >> logfile 2>&1
fi ;
if test $DDERR != 0 ; then    
for J in 1 2 3 4  ; do 
if test $NACH0$J = $NACH ; then NACHNR=$J ; echo " Ziel-Partition-NR: " $NACHNR >> logfile 2>&1 ; fi ; 
done  
#sync ; kill -HUP `lsof -t $NACH`  >> logfile 2>&1 
#hdparm -fF $NACH0  >> logfile 2>&1 ; hdparm -z $NACH0  >> logfile 2>&1   
parted $NACH0 mkfs yes $NACHNR ext2 quit i  >> logfile 2>&1 ; PARTEDERR=$? ; echo " PARTEDERR: " $PARTEDERR 
sync
# ls -l $NACH  >> logfile 2>&1 ; LSERR=$? ; echo " LSERR: " $LSERR >> logfile 2>&1 
dd $DEVZERO of=$NACH bs=1024 count=1 >> logfile 2>&1 ; DDERR=$? ; echo $DDERR $PARTEDERR > /scr ; echo " DDERR: " $DDERR >> logfile 2>&1
fi ;    # DDERR -ne 0 
)
read DDERR PARTEDERR REST < /scr


if test $DDERR != 0 ; then REBOOT=1 ; fi ;         # Ziel-Partition muss beschreibbar sein, sonst reboot
# Abfrage ob jetzt rebooten. Hier sollte man nur mit REBOOT=0 (vor ggf. reboot) und RESCUE=0 (Installation) hinkommen


if test $FDISKERR = 1 ; then 
### Gegenwaertig besser IMMER reboot, wenn auf das root-Geraet / von einer .iso-Datei installiert wird, denn ansonsten
### zu viele Probleme, besonders falls Partitionen geaendert wurden, aber auch mit resize des installierten Systemes
REBOOT=1
if test $REBOOT = 0 ; then 
dialog  --title "erase everything ??" --yes-label "AUTO" --no-label "SIM / JA"  --colors --no-collapse --yesno  "

            \Z1 REBOOT PARA   REBOOT ZUM ?
   ATUALIZAR PARTICOES ?   PARTITIONEN ERNEUERN ?   \Zn

" 9 58    
REBOOT0=$? 
sleep 8 
if test $REBOOT0 = 1 ; then REBOOT=1  ;  fi ;
fi ; fi ;  



if test $TST -eq 1 ; then exit  ; fi ;

# reboot falls von .iso -Datei installiert wurde 
#   oder anderswie Ziel- Partion (insbes. auf dem root-Geraet) nicht richtig vom
#   Kernel upgedated / erkannt wird
####grep "SYS_Linux.iso" installinfo  >> logfile 2>&1  ; VONISOFILE=$? 
# grep -w "d " fdisk.machen  >> logfile 2>&1 ; PARTGELOESCHT=$?
####echo " VONISOFILE: " $VONISOFILE   # " , PARTGELOESCHT: " $PARTGELOESCHT  >> logfile 2>&1 
####if test $VONISOFILE = 0 ; then     #if test $PARTGELOESCHT = 0 ; then 
####echo " REBOOT da von .iso Datei installiert  "  >> logfile 2>&1  
if test $REBOOT != 0 ; then            # was effektiv zaehlt ist ob NACH beschreibbar ist 
dialog --title "reboot for update partitions" --no-collapse --colors  --infobox "
      \Z1 APOS RELANCAR COM AS    NACH REBOOT MIT GEAENDERTEN  
 PARTICOES REDIMENSIONADAS,    PARTITIONEN, INSTALLER   
 LANCA INSTALADOR OUTRA VEZ    ERNEUT AUFRUFEN \Zn     

"  7 66 
sync 
sleep 5 

echo " init erster Aufruf, vor reboot: TST SIZE NACH0 NACH VON KLEINER OLDSYS WINDOWS: "  >> logfile 2>&1 
echo  $TST $SIZE $NACH0 $NACH $VON $KLEINER $OLDSYS $WINDOWS  >  installinfo  
echo  $TST $SIZE $NACH0 $NACH $VON $KLEINER $OLDSYS $WINDOWS    >> logfile 2>&1

echo "installinfo aufheben, nicht loeschen, Installation geht nach reboot weiter"  >> logfile 2>&1
cp -f logfile  logfile.0  > dev/zero 2>&1
/sbin/reboot -f   >> /dev/zero 2>&1
fi ;    # REBOOT = 0 

fi ;    # VON00 -ne 0    also Install-DVD

fi ;    # PROBLEM -lt 10 
fi ;    # REBOOT = 0  
echo " Ob bereits REBOOT erfolgte vor Kopieren vom System:  REBOOT = " $REBOOT  >> logfile 2>&1
echo " Installieren nach: " $NACH  >> logfile 2>&1




##### 1.2. System instalieren ##################################################################

#LOGDEV=$NACH0"2"  ; if test $NACH = $NACH0"2" ; then LOGDEV=$NACH0"1" ; fi ;    
#mkdir /log ; mount $LOGDEV /log ; cat logfile > /log/logfile 
        VON1="" ; NV="SYS_Linux.ext3"       # ggf an copysys anpassen
        echo " === Info auf dem DVD ueber gepacktes / ungepacktes SYStem === " >> logfile 2>&1 
        cat /von$VON1/$NV.lzma.md5  >> logfile 2>&1  
        cat /von$VON1/$NV.md5  >> logfile 2>&1  
        ls -s /von$VON1/$NV.lzma > scr ; read SIZELZMA REST < scr
        if test $? != 0 ; then SIZELZMA=4300000 ; fi ;  
        SIZELZMAMB=$(( $SIZELZMA / 1024 )) ; SIZELZMA=$(( $SIZELZMA * 1024 )) ; SIZEGB=$(( $SIZE / 2000000 + 1))
        SIZE100=$(( $SIZELZMA / 100 )) ; SIZE60=$(( $SIZELZMA / 60 )) ; DAUERNOCHMIN="10 - 50"
        echo " System lesen von: " /von$VON1/$NV.lzma "  Groesse: " $SIZELZMAMB " MB " >> logfile 2>&1  
        IOPOS=fdinfo/0  #   IOPOS=io    # wo in /proc/$PSID die Eingabeposition lesen       
        sync  

(
        sleep 29  ; DAUERSCHON=30    # Dies vor Abfrage der ps-id damit lzma im Vordergrund Zeit hat zu starten
        PSID=nil ; while ! [ -e /proc/$PSID/$IOPOS ]  ; do sleep 1 ; ps -e | grep lzcat > scr0 ; read PSID REST < scr0 ;  done 

	while [ -e /proc/$PSID/$IOPOS ] ; do  
        read UNW GELESEN REST < /proc/$PSID/$IOPOS
        PROZENT=$(( $GELESEN / $SIZE100 ))  ;  if test $PROZENT -gt 98 ; then PROZENT=99  ; fi ;
#       DAUERTOTALMIN=$(( $SIZE60 * $DAUERSCHON )) ; DAUERTOTALMIN=$(( $DAUERTOTALMIN / $GELESEN))
#       DAUERSCHONMIN=$(( $DAUERSCHON / 60 )) ; DAUERNOCHMIN=$(( $DAUERTOTALMIN - $DAUERSCHONMIN ))
#       if test $DAUERSCHONMIN -le 2 ; then DAUERNOCHMIN="10 - 50"  ; fi ;
#       DAUERSCHON=$(( $DAUERSCHON + 30 )) 
#       echo " schon : " $DAUERSCHON $DAUERSCHONMIN " noch : " $DAUERNOCHMIN " total : " $DAUERTOTALMIN
#        echo " lzma laeuft: " $PSID >> logfile 2>&1 
#echo "Prozent: " $PROZENT " Zeit: " $DAUERSCHONMIN "  Dauer total min: " $DAUERTOTALMIN " Dauer Noch min: " $DAUERNOCHMIN >> logfile 2>&1 
#cp -f logfile  /log/logfile ; sync     #  um genau festzustellen wo Absturz erfolgte, falls der Fall. cat nicht schachteln 
 # Ausdruck ; echo "XXX" ; echo " -- ainda / noch : " $DAUERNOCHMIN " min." ; echo "XXX"    geht nicht 
        sleep 30  
#        echo $PROZENT >> logfile 2>&1 
        echo $PROZENT   
        done 

#        echo " CD lesen  Fortschrittanzeiger fertig" >> logfile 2>&1 

) | dialog --title "installing  SYS  to  $NACH ..." --no-collapse  --colors  --gauge "

    \Zb\Z1 INSTALACAO        INSTALLIERUNG\Zn
            \Z4 $SIZEGB  GB \Zn
           para        nach 
          \Z4 $NACH \Zn
          ($DAUERNOCHMIN min)
              ...

     \Z3   Aguarde,       Abwarten,
 ate sair o CD,       bis CD rauskommt,  
  nao cancela !       nicht abbrechen ! \Zn  

   Se letras ou     Wenn Schrift oder
monitor ficarem     Bildschirm schwarz
  preto, tecla:     werden, druecken:
             \Z4 CTRL \Zn


"  24  40  0 &

# Fortschrittbalken laeuft im Hintergrund und zeigt Fortschritt von lzma an


#echo " Kopieren System / Progressbar fertig" >> logfile  # ;  cat logfile > /log/logfile ; sync  ; umount /log  

echo " Ziel-Device vor copysys: "  >> logfile 2>&1 ; ls -l $NACH   >> logfile 2>&1 

echo  $TST $SIZE $NACH0 $NACH $VON $KLEINER $OLDSYS $WINDOWS  > installinfo         

./copysys  >> logfile 2>&1 

read  TST SIZE NACH0 NACH VON KLEINER OLDSYS WINDOWS REST  < installinfo  >> logfile 2>&1         
echo " nach copysys: TST SIZE NACH0 NACH VON KLEINER OLDSYS WINDOWS: "  >> logfile 2>&1 



echo " Ggf. in einem alten System " $OLDSYS0 " gefundene Sprache, Tastatur-Sprache, Benutzername uebernehmen"  >> logfile 2>&1 

#read OLDSYS0 KBD KBD0 LANG LANG0 USER00 USER0 < userconf  >> logfile 2>&1   # Falls in einem Unterprogramm

./mkuserconf  >> logfile 2>&1
 
 

echo  "System installiert.  Weitere Konfiguration im System selbst machen."    >> logfile 2>&1 



mkdir -p /nach/var/log  
cp -f logfile  /nach/var/log/SYS_Linux.install.$SERIAL.log ; cp -f logfile  /nach/SYS_Linux.install.$SERIAL.log 
cp -f logfile  /nach/var/log/SYS_Linux.install.log ; cp -f logfile  /nach/SYS_Linux.install.log  # speater weg 

read PROBLEM REST < problem

if test $PROBLEM = 1 ; then
dialog --title "instalation ready but has any small problem .." --no-collapse --colors --msgbox "

 \Z1 INSTALACAO FEITA MAS   INSTALLATION ERFOLGT
 ESTA COM ALGUM PROBLEMA  ABER HAT KLEINE FEHLER \Zn 

"  9 50 

#sleep  20
# PROBLEM=21       # falls man Probleme beim mounten des installierten Systemes als 'grosses Problem' machen will und -> rescue

fi ;


if test $PROBLEM = 20 ; then
dialog --title "Install-CD defect (md5 wrong)" --no-collapse --colors --msgbox "

 \Z1 DVD DA INSTALACAO  CORUMPIDO,    INSTALL-CD FEHLERHAFT,
 A TELECARREGAR / COPIAR OUTRA VEZ    NOCHMAL DOWNLOADEN / KOPIEREN \Zn 

"  9 65

#sleep  20

fi ;

date  >> logfile  2>&1 

if test $TST -eq 2 ; then exit  ; fi ;






if test $PROBLEM -le 10 ; then  


### 1.3. fertig falls Installation und diese erfolgreich war #####################################################################

dialog --title "remove the CD and press RESET for reboot !!" --no-collapse --colors --infobox "

   \Z1 RELANCAR O COMPUTADOR      NEUSTART DES RECHNERS \Zn


              \Z4\Zb Favor tira      Bitte das CD aus
          o CD do drive !      dem Laufwerk nehmen !\Zn 


   *** \Z3 Relanca c/o butao \Zn *** \Z3 Zum neustarten  
             \Z4 RESET  \Zn ***      \Z3 Knopf \Zn \Z4 RESET \Z3 druecken\Zn
  Mais tarde, digita como      Spaeter als Benutzer
   usuario =\Zn \Z4 root \Zn ! ***      = \Z4 root \Z3 eingeben \Zn ! ***

 
  Lingua, Teclado, Video,      Sprache, Tastatur, Monitor, 
Som, Internet, Aparencia:      Sound, Internet, Verhalten:
   Qualquer \Z3 configuracao \Zn    Alle \Z3 Konfigurierung \Zn 
     ja\Z1 se faz no sistema      erfolgt im istallierten
               instalado:      System:
  \Zn \Z4 Centro de Controle \Zn ,  \Z4 Kontrollzentrum \Zn ,  
         \Z4 sound config \Zn ,  \Z4 sound config \Zn ,   
             \Z4 ADSL config \Zn\Z4 ADSL config \Zn
                        ...
           

"  28 60

#sleep 7

 
read TST SIZE NACH0 NACH VON KLEINER OLDSYS WINDOWS REST < installinfo


# Nicht reboot mit CD im Laufwerk, sonst erneute Instalierung
umount $VON   >> logfile  2>&1  ;  eject $VON   >> logfile  2>&1    
sleep 15
mount $VON /von    >> logfile  2>&1 ; OBCDDRAUSSEN=$?             # schlgt bei .iso -Datei wg. loop fehl, also OK 
if test $OBCDDRAUSSEN != 32 ; then
umount $VON    >> logfile  2>&1 ;  eject $VON   >> logfile  2>&1  

cp -f logfile  /nach/var/log/SYS_Linux.install.$SERIAL.log >> logfile  2>&1
cp -f logfile  /nach/SYS_Linux.install.$SERIAL.log >> logfile  2>&1 
cp -f logfile  /nach/var/log/SYS_Linux.install.log >> logfile  2>&1 
cp -f logfile  /nach/SYS_Linux.install.log >> logfile  2>&1 

dialog --title "remove CD , then press ENTER or RESET !!"  --no-collapse --colors --msgbox "
 \Z1 Tira o CD, e depois    CD rausnehmen, danach
aperta \Zn \Z4 ENTER \Zn \Z1 !!! \Zn  \Z4 ENTER \Zn \Z1 druecken !!! \Zn
" 10 52
fi ;     # end OBCDDRAUSSEN = 0
#/sbin/brc  ;  /sbin/reboot -f                       # spaeter raus um nachfolgenden Weg zu durchlaufen

fi ;     # end PROBLEM -le 10 


#read RESCUE REST < /rescue                          # rescue kann waehrend der Installierung geaendert werden, zBsp bei Fehlern 
if test $PROBLEM -gt 10 ;  then  RESCUE=1 ; fi ;      # Falls irgendein Problem bei der Instalation, ins rescue-System gehen


fi ;     # end RESCUE -eq 0  





echo $RESCUE " = RESCUE in init , "  $PROBLEM " = PROBLEM in init "  >> logfile  2>&1


echo  " Alle Partitionen mounten um logfile zu dumpen und/oder um sie in rescue gemountet zu haben "  >> logfile  2>&1
#### Alle Partitionen mounten            Spaeter ggf verbessern und Ergebnisse von mkpart nutzen   
#     falls Installation  also PROBLEM >0, oder aber unbedingt,  auf alle Partitionen auch logfile sichern (spaeter ggf weg)
#for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ; do
for J in sda hda sdb hdb sdc hdc sdd hdd ; do  
ls /dev/$J > /dev/zero ; if test $? = 0 ; then        # nur wenn Geraet ueberhaupt da; unklar ob sicher ohne udevd / in initrd, ggf. weg          
for I in 1 2 3 4 5 ; do 
mkdir -p /$J$I > /dev/zero 
IFMOUNT=32 
# Vorsicht bei fehlerhaftem mount von NTFS kann ganze Installation abstuerzen.  Ausserdem als ntfs-3g... , als mount ... nicht bekannt 
#  Nicht -o ro falls im ueren System rw
if test $IFMOUNT -ne 0 ; then  mount /dev/$J$I /$J$I -t ntfs    >> logfile  2>&1 ; if test $? -eq 0 ; then  umount /$J$I  
echo $J$I " ifmount: " $IFMOUNT  " Versuch als ntfs zu mounten: "   >> logfile  2>&1 
ntfs-3g /dev/$J$I /$J$I -o force,rw,remove_hiberfile,show_sys_files   >> logfile  2>&1 ; IFMOUNT=$?
fi; fi ;   
if test $IFMOUNT -ne 0 ; then mount /dev/$J$I /$J$I   >> logfile  2>&1   ; IFMOUNT=$?; fi ; 
echo $J$I " ifmount: " $IFMOUNT  " gemountet "  >> logfile  2>&1 
if test $IFMOUNT -ne 32 ; then
#if test $PROBLEM -gt 0 ; then 
mkdir -p /$J$I/var/log   >> logfile  2>&1 
cp -f logfile  /$J$I/var/log/SYS_Linux.install.$SERIAL.log    >> logfile  2>&1 
cp -f logfile  /$J$I/var/log/SYS_Linux.install.log    >> logfile  2>&1 
cp -f logfile  /$J$I/SYS_Linux.install.$SERIAL.log    >> logfile  2>&1 
cp -f logfile  /$J$I/SYS_Linux.install.log    >> logfile  2>&1 
#fi ; 
fi ;
if test $IFMOUNT -eq 32 ; then  rm  /$J$I  >> logfile  2>&1 ; fi ;     # Falls mounten erfolglos, leeren Ordner loeschen Nicht rm -r 
# sync ; umount /dev/$J$I ; rm  /$J$I                                # falls nur temporaeres mounten, etwa um was zu schreiben
done 
fi ; 
done
sync 




rm devcdrom devices* devs df0 disksize fdisk* part* problem rescue scr* tmp* userconf    >> logfile  2>&1 



#### 2. Rescue-System  (falls gewählt oder falls fehlgeschlagene Installation) ######################################################


if test $RESCUE -gt 0 ; then         # RESCUE=0 nur bei fehlerfreier Instalation, falls auch dann ins RRESCUE-System
                                     #   gegangen werden soll (etwa weil reboot nicht funktioniert), diese Abfrage raus    

rm installinfo    >> logfile  2>&1 


clear 
dialog --title "RESCUE -- for leave press CTRL-ALT-DEL"   --no-collapse --colors --infobox "
             \Zb\Z1 SOCORRO \Zn \Zb\Z1 RESCUE \Zn
      
\Z5 Sistema para tarefas     System fuer kleine
 pequenas e consertos      Arbeiten und Notfaelle\Zn      
      
      \Z3 Para terminar,     Zum Beenden, 
    juntos ou digita:        druecken oder eingeben:\Zn 
                   \Z4  exit \Zn
       \Z3 Para re-boot,     Zum neu booten, 
     aperta os butoes     zusammen die Tasten \Zn
                 \Z4 CTRL ALT DEL \Zn \Z3 
"  15 54 

sleep 5


clear 
cat rescue.txt 
/bin/bash -li  

clear 

fi ;   # end RESCUE -gt 0 



###  3.  Reboot .  ############################################################################# 


#if test $RESCUE = 0 ; then

mv -f installinfo installinfo.log  >> logfile  2>&1   


dialog --title "rebooting ..." --no-collapse --colors --infobox "
\Z1 relancando ...     neu starten ... \Zn
"  6 40 
sync 
/sbin/brc   >> /dev/zero 2>&1
/sbin/reboot -f   >> /dev/zero 2>&1

#fi ; 


if test $TST = 0 ; then
dialog --title "press CTRL-ALT-DEL for reboot !!" --no-collapse --colors --infobox "
\Z1Se quiser reboot    Falls reboot \Zn
 \Z1APERTA juntos :    gleichzeitig druecken: \Zn
         \Z4 CTRL ALT DEL \Zn
"  9 44 
#chroot /nach  reboot -fph       # wenn eject nicht geht,  halt statt reboot  
sleep 5
fi ;


done      # DURCHLAUF

sleep 20 

sync 
/sbin/halt -fn     # sicherheitshalber    :| 
  
echo "Halt"   

# 
   


