#!/bin/ash

# SYS Install / Rescue  Programm. 
#    W.Landgraf 2007-2010 ff.                                            
#    Lizenz: GPL
#    Zugehoerige Hilfs- oder Erweiterungsprogramme z.Zt:
#    mkdev, mkpart, copysys, chkuserconf, mkuserconf, mountsysfs, installiso

if test $PWD != / ; then chroot .  ./init ; exit ; fi ;   # immer unter chroot laufen, damit alle System-Programme vhd .
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 ueber Dateien wie /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 



######  max. 2 Versuche von Installation und/oder Rescue   vor abschalten des Rechners
#                   Beim 1. Durchlauf von RESCUE koennen u.a. fehlende Sachen fuer eine Installation korrigiert werden,
#                     zBsp Install-DVD einlegen oder SYS_Linux.iso Datei kopieren, Partitionen aendern, usw, danach rescue mit
#                     exit   verlassen.      Stattdessen kann man freilich auch neu booten, daher Konzept inzwischen ueberfluessig

for DURCHLAUF in 1 2 ; do
echo " == DURCHLAUF : " $DURCHLAUF " === "   >> logfile 2>&1 

RESCUE=0      # default: Installation (bei REBOOT>0 stets).         RESCUE > 0 ist Rescue-System statt Installation
              #  RESCUE=1: direkt/schnell in rescue gehen , =20 vorher eine Meldung anzeigen (bei fehlgeschlagener Installation)


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 äußeren System vor chroot möglichst viele Partitionen "   >> logfile 2>&1 
echo "     unmounten, da dort gemountete Probleme im inneren System/Installer beim mounten und Erkennen zu Problemen führen"    >> logfile 2>&1 
echo "     Irgndwo gemountete Dateisysteme / Partitionen sind im chroot-Bereich insbesondere nicht redimensionierbar"    >> logfile 2>&1 

date >> logfile 2>&1 


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


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         

mkdir -p /von   >> logfile 2>&1                 # dorthin werden u.a. .iso-Dateien gemountet, auch fuer rescue-System
./mkdev  >> logfile 2>&1 

read PROBLEM REST < problem
#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  FÃR INSTALATION 
#      NECESSARIO :  NÃTIG : \Zn 
#               \Z4 $SIZEGB  GB \Zn

#"  9 42 
#fi ;
# Nachfolgendes dÃ¼rft bei Installer vom CD aus gestartete 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 
#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 
#fi ;

if test $PROBLEM -gt 10 ; then RESCUE=1 ; fi ;     # PROBLEM > 10 so schwerwiegend dass keine Installation moeglich. Schnell nach rescue gehen


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         

read FESTPLATTEN < festplatten ; read USBKEYS < usbkeys ; read CDS < cds ; read LEEREGERAETE < leeregeraete   # haben alle /dev


if test $RESCUE = 0 ; then
echo " Geraete-Kurzbezeichnungen fuer Eingabe : "  >> logfile 2>&1 
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 /von gemountet VON: " $VON " auf Part. VON00: "  $VON00 " auf Geraet VON000: " $VON000 >> logfile 2>&1  
fi ;



### Altes System suchen und user-config uebernehmen

# 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=- 
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 
echo $OLDSYS $KBD $KBD0 $LANG $LANG0 $USER00 $USER0 $CHAP1 $CHAP2 $PAP1 $PAP2  >> logfile 2>&1  

./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 "nach chkuserconf: " OLDSYS KBD KBD0 LANG LANG0 USER00 USER0 CHAP1 CHAP2 PAP1 PAP2  >> logfile 2>&1  
echo  $OLDSYS $KBD $KBD0 $LANG $LANG0 $USER00 $USER0 $CHAP1 $CHAP2 $PAP1 $PAP2  >> logfile 2>&1  

echo " keyboard und Sprache fuer Install/Rescue setzen:   KBD: " $KBD "  LANG: " $LANG   >> logfile 2>&1 
loadkeys $KBD   >> logfile 2>&1 
LANG=$LANG                                 # In der initrd unter ash funktioniert alles nur halb, sollte dadurch global werden



  

if test $RESCUE = 0 ; then


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


if test $REBOOT = 0 ; then



DEFAULTMACHEN=" "  ; if test $DURCHLAUF = 2 ; then DEFAULTMACHEN="--defaultno" ; echo -e "\a" ; fi ; 

clear 

dialog   --title " S Y S " --yes-label "INSTAL" --no-label "RESCUE"  $DEFAULTMACHEN  --timeout 6 --colors --no-collapse --yesno  "

           \Zb\Z1 SYS \Zn   


   
 \Z3 Instalacao    Installierung\Zn

    \Z3 Socorro    Rescue \Zn



   Versao 0.23-r4+    1/2/10
 \Z4 ftp://guyane.dyn-o-saur.com \Zn

" 21 34    

RESCUE=$?

echo -e "\a"

VERBOTEN=" France USA Israel " 

dialog   --title "afirm if you are citizen of, or living at .." --yes-label "NAO / NEIN" --no-label "SIM / JA" --timeout 6 --colors --no-collapse --yesno  "

     \Z3     Afirma se voce     Bestaetigen falls Sie
   e cidadao de ... ,   Buerger von ... sind
     ou viva em ... :       oder in ... wohnen :\Zn
                           
               $VERBOTEN

" 16 54    

VERBOTEN0=$?

if test $VERBOTEN0 = 1 ; then 

dialog --title "not permitted you use SYS or its install tool .."  --no-collapse --colors --infobox "

Em $VERBOTEN ou para seus citadoes 
podem ter limitacoes legais usar software livre,
e inclusive para nossa protecao nao concordamos 
com o uso de SYS por tais pessoas e nao e 
permitido eles usarem os utilitarios de 
instalacao e administracao do SYS. 

In $VERBOTEN oder fuer dessen Buerger  
koennen rechtliche Einschraenkungen fuer open Software
bestehen, und, einschliesslich zu unserem Schutz,
stimmen wir der Benutzung von SYS durch solche
Personen nicht zu, und erlauben nicht den Gebrauch
der SYS Install- und Verwaltungsprogramme durch sie.
 
" 0 0 

sleep 18 
reboot -f
exit

fi ;      


if test $VERBOTEN0 = 255 ; then             # um waehrend nachfolgender Dauer die timeout-Meldung loszuwerden ... 
dialog --title "  wait .. "  --no-collapse --colors --infobox "
   . . .   
" 4 14 
fi ;


#  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 " RESCUE, SYSSCHONDA 1: " $RESCUE  $SYSSCHONDA >> logfile 2>&1 
sync 


RESCUE1=$RESCUE

# siehe auch DEFAULTMACHEN in Abfrage-Fenster 
if test $RESCUE = 255 ; then  RESCUE=0 ; fi ;     #  normalerweise default = installieren 
# beim 2. Durchlauf default = rescue :
if test $DURCHLAUF != 1 ; then if test $RESCUE != 0 ; then  RESCUE=20 
#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 ;  

fi ;    # if RESCUE = 0  vor Begruessungs-Fenster


# Ausgabegeraet NACH0 abfragen falls mehr als 1 vhd
if test $RESCUE = 0 ; then
read NTARGETS TARGETS < targets  #  read UNW NACH0 REST < targets   # aber per installinfo uebergeben
#read UNW NACH0 REST < targets    #   weg da bestes NACH0 in mkdev vorgeschlagen
echo $TARGETS > scr0 
if test $NTARGETS -gt 1 ; then     
dialog --title " install DEVICE :  size, unpartitioned, empty " --default-item $NACH0 --timeout 7 --no-collapse --colors --menu  "
        
        
        \Z1 AONDE INSTALAR       WOHIN INSTALLIEREN \Zn
                      ( \Z4 $SIZEGB G \Zn )
              
      DISCO     Tamanho  nao-particionado  desocupado
      GERAET    Groesse  unpartitioniert      leer
        
 " 0 0 0  --file scr0  2> scr
if test $? = 0 ; then  read NACH0 UNW < scr 
fi ; fi ;
grep "$NACH0" devices > scr
read NACH0 UNW DISKSIZE REST < scr           # erste HD mit Groesse .ne. 0 als Install-Platte NACH0 angesehen 
echo  $TST $SIZE $NACH0 $NACH $VON $KLEINER $OLDSYS $WINDOWS  > installinfo  
echo  $DISKSIZE > disksize 
echo "### Installation nach Geraet: " $NACH0 " Groesse: " $DISKSIZE " Sektoren" >> logfile 2>&1
echo " Geraete-Kurzbezeichnungen fuer Ausgabe : "  >> logfile 2>&1 
NACH000=${NACH0#/dev/}   # NACH00=${NACH#/dev/}  , NACH hier noch unbekannt    
echo " Ausgabe /nach auf Geraet NACH000: " $NACH000  >> logfile 2>&1  
fi ;


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

    \Z1 APAGAR TODO ?     ALLES LOESCHEN ? \Zn

" 8 46   
LOESCHEN=$?

dialog --title "  wait .. "  --no-collapse --colors --infobox "
   . . .   
" 4 14 

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 uba ubb ubc ubd  ; 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 ) 
umount /$J$K            # Aenderungen wd. effektiv erst nachdem ALLE Partitionen auf NACH000 ungemountet wurden oder reboot    
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 ;    # RESCUE = 0      # fi ; falls nur beim 1. Durchlauf alles loeschen



echo " MACHEN 2: " $RESCUE   >> 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 uba ubb ubc ubd  ; 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/... nötig 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  rmdir  /$J$I   >> logfile 2>&1 ; fi ;    # nicht rm -r sonst wird ganzes System gelöscht 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 


DEFAULTMACHEN=" "  ; if test $RESCUE1 != 0 ; then DEFAULTMACHEN="--defaultno" ; echo -e "\a" ; fi ; 

if test $RESCUE = 0  ; then        
echo -e "\a"

dialog  --title "SYS is already instaled, affirm a 2nd installation" --yes-label "INSTAL" --no-label "RESCUE" $DEFAULTMACHEN --timeout 9 --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   

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

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

if test $RESCUE = 255 ; then   if test $RESCUE1 = 0 ; then RESCUE=0 
else  RESCUE=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: " $RESCUE   >> logfile 2>&1 

if test $DURCHLAUF != 1 ; then if test $RESCUE != 0 ; then  RESCUE=20 
#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 $RESCUE = 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 RESCUE=1 = lilo reparieren


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


fi ;   # REBOOT = 0

#RESCUE=$MACHEN    
echo " MACHEN 5 (0=install, 1=rescue): " $RESCUE   >> 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 
           # Vielleicht ist resize auch nicht noetig oder sehr schnell, falls im Hintergrund 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'`" 20 72  
sleep 15
done
 
) &

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

mkdir -p /nach  >> logfile 2>&1 
./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 
echo  $TST $SIZE $NACH0 $NACH $VON $KLEINER $OLDSYS $WINDOWS  >> logfile 2>&1 
NACH00=${NACH#/dev/} ; echo " NACH00 : " $NACH00  >> logfile 2>&1 

#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   
mv rs tmp >> logfile 2>&1    # falls rs immer noch da ist, manchmal ist es sehr hartnaeckig, dann geht obige Schleife weiter, selbst wenn wir laengst in rescue sind ...

#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 7 --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 -le 10 ; then  


# Hierfuer wird inzwischen detailliertes Protokoll waehrend dem resize ausgegeben
#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 6 
#
#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 6  

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

echo " ###### "   >> logfile 2>&1 
echo " ###### HIER JETZT ALLE AUSGEFUEHRTEN FDISK -OPERATIONEN WIRKLICH DURCHFUEHREN : "  >> logfile 2>&1 
echo " ###### "   >> logfile 2>&1 
echo "    Eingabe /von    gemountet VON: " $VON " auf Part. VON00: "  $VON00 " auf Geraet VON000: " $VON000 >> logfile 2>&1  
echo "    Ausgabe /nach   Geraet NACH0 : " $NACH0 " bzw. /dev/NACH000 : /dev/"$NACH000  >> logfile 2>&1     # Bsp: NACH000 = sda   
echo "    Install- Partition NACH :  " $NACH , "  NACH00 : " $NACH00   >> logfile 2>&1 
# ALLE Partitionen auf NACH0 muessen entmountet werden, auch /von falls .iso dort, sonst wird neue Part.Tafel nicht eingelesen
echo " VON000 , /NACH000 : " $VON000 /$NACH000  >> logfile 2>&1
if test $VON000 = /$NACH000 ; then   # if test  $VON00 != - ; then                    # falls .iso  ist sowieso  VON000 = " " != NACH00
       umount -d /von  >> logfile 2>&1 ; echo "   /von  ungemountet, da auf Zieldisk mit /nach "  >> logfile 2>&1  ; fi ; # fi ;
umount $NACH0*  >> logfile 2>&1    ; umount  /$NACH00*   >> logfile 2>&1  
echo " Alle Partitionen auf " $NACH0 " sollten nun ungemountet sein,  auch /von falls dort: "  >> logfile 2>&1 ;  df >> logfile 2>&1  

cat fdisk.machen  >> logfile 2>&1 
/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 $VON000 = /$NACH000 ; then    echo "VON00 VON" : $VON00 $VON >> logfile 2>&1   # if test  $VON00 != - ; then  
echo " Install .iso unter /von mounten" >> logfile 2>&1 
mount /dev$VON00 $VON00   >> logfile 2>&1 ;  ls -l  $VON00/SYS_Linux.iso   >> logfile 2>&1   
mount $VON /von -t udf -o ro,unhide,loop  >> logfile 2>&1   ;  ls -l  /von   >> logfile 2>&1 
echo "   /von  gemountet"   >> logfile 2>&1    ; fi ; # fi ; 
df  >> logfile 2>&1 



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

# Ausser vielleicht bei der root-Partition, besteht kein echter Grund, dass Geraete oder Partitionen nach Aenderungen 
#nicht SOFORT upgedated, oder gar bzgl der normalen Benutzung blockiert werden.   Noch mehr, wenn das Geraet nicht
#das root-Geraet ist; wenn root auf einer initrd ist; wenn eine neue Partition in bisher unpartitioniertem Bereich
#angelegt wird.
#Aber in Linux ist ja alles total bescheuert.  Selbst wenn der Installer von einer initrd aus laeuft, und man eine neue
#Partition im bisher unpartitioniertem Bereich einer Festplatte anlegt, wird nach fdisk die Partitionstabelle erst
#nach dem naechsten boot upgedatet ...
#Bis dahin funktionieren diverse Programme nicht, andere doch, andere gelegentlich oder nicht.   Totale Unsicherheit ...
#dd geht meist nicht, lzcat entpackt zwar aber oft 'irgendwo' hin (Daten hinterher nicht auffindbar), resize2fs geht
#manchmal, manchmal auch nicht.  Nach Aufruf von parted geht manches besser ...  

# Insbesondere wenn mit installiso ein .iso installiert wird, und per chroot in die entpackte initrd als Installer
#  gegangen wird, geht umount der aussen gemounteten Partitionen nicht, usw

# 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 
(
DDERR=0 ; PARTEDERR=0 ; REST=0 ; FORMATERR=0 ; RESIZERR=0 
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   
echo " parted : " >> logfile 2>&1 
dialog --title " formating .."  --no-collapse --colors --infobox "
   . . .   
" 4 16
date >> logfile 2>&1
parted $NACH0 mkfs yes $NACHNR ext2 quit i  >> logfile 2>&1 ; PARTEDERR=$? ; echo " PARTEDERR: " $PARTEDERR >> logfile 2>&1 
date >> logfile 2>&1
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: " $DDERR >> logfile 2>&1 
# Formatieren der Ziel-Partition ist zwar nicht noetig, machen wir aber, um zu testen ob resize effektiv geht
dialog --title " resizing .."  --no-collapse --colors --infobox "
   . . .   
" 4 16
date >> logfile 2>&1
mke2fs $NACH  >> logfile 2>&1 ; FORMATERR=$?    # hat schon parted gemacht
resize2fs -fFM $NACH  >> logfile 2>&1 ; resize2fs -fF $NACH  >> logfile 2>&1 ; RESIZERR=$? 
date >> logfile 2>&1
echo " FORMATERR , RESIZERR: " $FORMATERR , $RESIZERR >> logfile 2>&1 
fi ;    # DDERR -ne 0 
echo $DDERR $PARTEDERR $FORMATERR $RESIZERR > /scr ;
)
read DDERR PARTEDERR FORMATERR RESIZERR REST < /scr
echo " ### DDERR PARTEDERR REST FORMATERR RESIZERR : " $DDERR $PARTEDERR $FORMATERR $RESIZERR  >> logfile 2>&1 

# REBOOT=1  Abfrage, default reboot ,   REBOOT=0  kein reboot ,  REBOOT=-1 in jedem Fall KEIN reboot (zBsp wir sind in ramfs)
REBOOT=0   

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 REBOOT=1 ; fi ;
 
### 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
## ACHTUNG: nicht rebooten falls / auf einer initrd ist ##
if test $RESIZERR != 0 ; then  REBOOT=1 ; fi ;



# Hier Bedingungen dass jedenfalls KEIN reboot    zBsp da / nicht auf Geraet sondern initrd :
RAMFS=0 ; df /   >> logfile 2>&1 ;  if test $? != 0 ; then RAMFS=1 ; fi ;  
echo " / :   0 = auf Geraet , 1 = initrd:  " $RAMFS    >> logfile 2>&1  
# ...
# 


if test $REBOOT != 0 ; then                  # falls eigentlich reboot gemacht werden muesste ... 
dialog  --title "reboot ??" --yes-label "AUTO" --no-label "SIM / JA"  --timeout 7 --colors --no-collapse --yesno  "

          A particao nova    Die Neue Partition
       tem problemas com:    hat Probleme mit:   
             formatar / formatieren : $FORMATERR 
               copiar / beschreiben : $DDERR 
                    parted / parted : $PARTEDERR 
             redimensionar / resize : $RESIZERR 
       
         reboot recommendado / reboot empfohlen

            impedimentos:    Hinderungsgruende:
            
                              ramfs : $RAMFS

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

" 26 58   
REBOOT0=$? 
#sleep 1 
if test $REBOOT0 = 0 ; then REBOOT=0 ; fi ; if test $REBOOT0 = 1 ; then REBOOT=1 ; fi ; if test $REBOOT0 = 255 ; then REBOOT=1  ;  fi ; 
fi ; 

if test $RAMFS != 0 ; then REBOOT=0 ; 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 6 

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
echo " ###### "   >> logfile 2>&1 
echo " ###### INSTALL-PARTITION SOLLTE JETZT DA SEIN,  UND FUNKTIONIEREN ODER REBOOT "  >> logfile 2>&1 
echo " ###### "   >> logfile 2>&1 




fi ;    # PROBLEM -le 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 >> logfile 2>&1 DEV /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  # & 

#dialog --title "resize partition, and configuration .." --no-collapse --colors --infobox "
# Attribuir todo espaco     Allen freien Platz     
#vazio    (pode demorar     zuordnen    (kann dauern
#  num computador lento     bei langsamem Rechner mit
# com disco grande),  e     grosser Festplatte),  und
#          configuracao     Konfigurierung
#                       ...
#"  10 58 

#sleep 5

# Um jeden Dialog zu sehen, muesste man in /copysys bei Ende des jeweils zugehoerigen Prozesses sofort killall -HUP while 
# machen und/oder rs loeschen.     Andererseits brauchen nicht unbedingt alle Dialoge angezeigt werden, nur die langdauernder
# Prozesse.   Fuer resize loeschen wir rs sobald fertig, aber nicht while der vorigen Anzeige, der Dialog fuer resize wird
# also nur angezeigt wenn er laenger dauert als das letzte while von vorigem Dialog + 5 sek .  
# Andererseits sollen bei schnell ablaufender Installierung, die Dialoge unten in /init nicht durch nachtropfende obige
# Dialoge vom Hintergrund gestoert werden, sodass wir diese nach Rueckkehr von copysys stoppen.
sleep 5       # Vielleicht ist resize nicht noetig oder sehr schnell

while   [ -e rs ]  ; do  
dialog --title "resizing .."  --no-collapse --colors --infobox "`cat rs | sed 's/-//g' | sed 's///g'`" 20 72   
sleep 15
done

dialog --title "configuration .." --no-collapse --colors --infobox "
\Z3  CONFIGURACAO     KONFIGURIERUNG \Zn
             ...
"  6 38 


) &

# 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  $TST $SIZE $NACH0 $NACH $VON $KLEINER $OLDSYS $WINDOWS       >> logfile 2>&1      

#( killall -HUP sleep ; rm -f rs ; killall -HUP sleep )    >> logfile 2>&1      # um obigen 1. Dialog zu beenden falls er noch weiterlaeuft 
rm -f rs    >> 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      >> logfile 2>&1 
cp -f logfile  /nach/var/log/SYS_Linux.install.$SERIAL.log >> /dev/zero 2>&1 # ; cp -f logfile  /nach/SYS_Linux.install.$SERIAL.log 
cp -f logfile  /nach/var/log/SYS_Linux.install.log >> /dev/zero 2>&1 ; cp -f logfile  /nach/logfile >> /dev/zero 2>&1  # 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  6
# 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  6

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 #####################################################################
echo -e "\a"


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 14

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

#read FESTPLATTEN < festplatten
#I00=0
#for I0 in $FESTPLATTEN ; do I00=$(( $I00 + 1 )) ; done
#echo $I00 " Festplatten vhd "
#if test $I00 -gt 1 ; then
#hdparm -I $NACH0 | grep "Model Number " ...

# Falls mehrere Festplatten vhd, sieht BIOS meist als erste 0x80 diejenige,
# die im BIOS als erste eingestelt ist, oder die per F8, F11 im Boot-Menue 
# gewaehlt wurde, und die es bleibt auch wenn anschliessend mit SYS root=/dev/...
# auf eine andere gewechselt wird.   ./boot/map muss beim booten vhd sein,
# auch bei other=... , wird aber oft nicht gefunden, dann wird bootlader
# oder Kernel nicht gefunden. Zwar versucht das   copysys   zu konfigurieren,
# es bleibt aber immer unsicher.  Nachfolgend eine maximal allgemein gehaltene
# Hilfe falls es nicht bootet. 

echo -e "\a"

dialog --title "  if it dont boot  ..."   --no-collapse --colors --infobox "
                  \Zb\Z1 ATENCAO    ACHTUNG \Zn
      
   Se o systema nao lanca,    Falls das System nicht 
    repita, apertando \Z4 DEL \Zn   startet, wiederholen, 
        varias vezes, e em    oft\Z4 DEL\Zn druecken, und in
       \Z3 BIOS > BOOT > DEVICE PRIORITY > HARDDISKS \Zn 
    colocar um outro disco    eine andere Disk als 
     como o 1.o para cima.    1. nach oben tun.
     Se tiver um so disco.    Falls nur eine Harddisk
      ou se nada adiantou,    vorhanden, oder falls es
           lancar o DVD da    nichts nuetzte, Install-
       instalacao e digita    DVD  starten und schnell
               rapidamente    eingeben
                  \Z4  i root=$NACH  \Zn  
        ou a chave-USB com    bzw. den USB-key mit
                  \Z4 SYS root=$NACH \Zn            
\Zn

"  20 60 

sleep 6 

#fi ;


# 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=$?             # schlägt 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 >> /dev/zero 2>&1 
#cp -f logfile  /nach/SYS_Linux.install.$SERIAL.log >> /dev/zero 2>&1 
cp -f logfile  /nach/var/log/SYS_Linux.install.log >> /dev/zero 2>&1 
cp -f logfile  /nach/logfile >> /dev/zero 2>&1 

dialog --title "remove CD , then press ENTER or RESET !!"  --timeout 7 --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=20 ; 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 uba ubb ubc ubd ; do  
ls /dev/$J  > /dev/zero 2>&1 ; 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 
ls /dev/$J$I  > /dev/zero 2>&1 ; if test $? = 0 ; then        # nur wenn Geraet ueberhaupt da; unklar ob sicher ohne udevd / in initrd, ggf. weg          
mkdir -p /$J$I  > /dev/zero 2>&1 
IFMOUNT=32 
umount /$J$I    >> logfile 2>&1        # falls schon gemountet, und daher mounten nicht geht, kommt auch 32 zurueck
# Vorsicht bei fehlerhaftem mount von NTFS kann ganze Installation abstuerzen.  Ausserdem als ntfs-3g... , als mount ... nicht bekannt 
#  Nicht -o ro falls im äußeren System rw
if test $IFMOUNT -ne 0 ; then  mount /dev/$J$I /$J$I -t ntfs -o ro    >> logfile 2>&1 ; if test $? -eq 0 ; then  umount /$J$I   >> logfile 2>&1  
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=$?
if test $IFMOUNT -ne 0 ; then ntfsfix /dev/$J$I   >> logfile 2>&1
ntfs-3g /dev/$J$I /$J$I -o force,rw,remove_hiberfile,show_sys_files   >> logfile 2>&1 ; IFMOUNT1=$?  
if test $IFMOUNT1 = 0 ; then 
dialog --title "Windows repaired !"  --no-collapse --colors --infobox "
O Windows foi consertado.
Windows wurde repariert.
" 6 30 
sleep 6
fi 
if test $IFMOUNT1 != 0 ; then 
mount /dev/$J$I /$J$I -t ntfs -o ro    >> logfile 2>&1
fi ; 
fi ; 
ln -s /$J$I Windows    >> logfile 2>&1         # falls 2. Windows -Partition, nur Fehlermeldung
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 >> /dev/zero 2>&1 
#cp -f logfile  /$J$I/SYS_Linux.install.$SERIAL.log >> /dev/zero 2>&1 
#cp -f logfile  /$J$I/var/log/SYS_Linux.install.log >> /dev/zero 2>&1 
cp -f logfile  /$J$I/logfile >> /dev/zero 2>&1 
#fi ; 
fi ;
if test $IFMOUNT -eq 32 ; then  rmdir  /$J$I  >> logfile 2>&1 ; fi ;     # Falls mounten erfolglos, leeren Ordner loeschen Nicht rm -r 
# sync ; umount /dev/$J$I ; rmdir  /$J$I                                # falls nur temporaeres mounten, etwa um was zu schreiben
fi ; 
done     #  I = 1 2 3 4 5  Part.-Nr
fi ; 
done     #  J = sda sdb ...Geraet
sync 
echo "logfile nach ueberall gedumpt, loeschen temporaerer Dateien, in RESCUE gehen"  >> logfile 2>&1


echo "Alle temp. Dateien zur Inspektion nach tmp"   >> logfile 2>&1
mv devcdrom devices* devs df0 disksize fdisk* part* problem rescue scr* rs  userconf   tmp   >> logfile 2>&1 
mv partitionen festplatten usbkeys cds targets leeregeraete    tmp   >> logfile 2>&1 
if test $RESCUE -eq 20 ; then cp -f installinfo installinfo.log  >> logfile 2>&1 ; fi ;    
mv installinfo  tmp    >> logfile 2>&1 



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


if test $RESCUE -eq 20 ; then         # RESCUE=0 nur bei fehlerfreier Instalation, falls auch dann ins RRESCUE-System
                                     #   gegangen werden soll (etwa weil reboot nicht funktioniert), diese Abfrage raus   
clear 
echo -e "\a"

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 6

MCDIR1="/" ; MCDIR2="/"        #  mc mit / = Installer oeffnen falls wir durch eine fehlgeschlagene Installation hierhin kamen    

fi ;


if test $RESCUE -gt 0 ; then         # RESCUE=0 nur bei fehlerfreier Instalation, falls auch dann ins RRESCUE-System

#  Partitionen die als default im mc geoeffnet werden:      altes System , und USB-key          Demnaechst das mal in mkdev tun
MCDIR2="/"     #  Eine Partition des Geraetes von dem wir den Installer gestartet haben, meist USB-key
read USBKEYS < tmp/usbkeys >> logfile 2>&1  ;  echo " usbkeys:" $USBKEYS    >> logfile 2>&1
if test $USBKEYS != "" ; then
read USBKEY1 REST < tmp/usbkeys >> logfile 2>&1 ; echo "USBKEY: " $USBKEY1 >> logfile 2>&1
df | grep "/dev/" | grep "$USBKEY1" > tmp/scr ; read U1 U2 U3 U4 U5 MCDIR2 REST < tmp/scr
if test $MCDIR2 != "/" ; then  echo "USB-key/Geraet: " $MCDIR2 >> logfile 2>&1 
       rm -f USB >> logfile 2>&1 ; ln -s $MCDIR2 USB ; fi ;      # Man weiss nicht was es fuer ein Geraet ist, daher als USB zeigen   
fi ;
if test $MCDIR2 = "" ; then  MCDIR2="/" ; fi ;   if test $MCDIR2 = "Mounted" ; then  MCDIR2="/" ; fi ;
MCDIR1="/" 
read FESTPLATTEN < tmp/festplatten >> logfile 2>&1  ;  echo " festplatten: " $FESTPLATTEN   >> logfile 2>&1  
if test $FESTPLATTEN != "" ; then
read FESTPLATTEN1 FESTPLATTEN2 REST < tmp/festplatten >> logfile 2>&1 ; echo "FP: " $FESTPLATTEN1  $FESTPLATTEN2  >> logfile 2>&1  
df | grep "/dev/" | grep "$FESTPLATTEN1" > tmp/scr ; df | grep "$FESTPLATTEN2" >> tmp/scr ; read U1 U2 U3 U4 U5 MCDIR1 REST < tmp/scr
if test $WINDOWS != "-" ; then MCDIR1=${WINDOWS#/dev} ; echo "Windows: " $WINDOWS >> logfile 2>&1 
       rm -f Windows >> logfile 2>&1 ; ln -s $MCDIR1 Windows ; fi ;   
fi ; 
if test $MCDIR1 = "" ; then  MCDIR1="/" ; fi ;   if test $MCDIR1 = "Mounted" ; then  MCDIR1="/" ; fi ; 
if test $OLDSYS != "-" ; then MCDIR1=${OLDSYS#/dev} ; echo "altes System: " $OLDSYS >> logfile 2>&1 
       rm -f OldSystem >> logfile 2>&1 ; ln -s $MCDIR1 OldSystem ; fi ; 
# Hoechste Prioritaet hat Altes System OLDSYS, hilfsweise WINDOWS (da am haeufigsten Dateien von kaputtem Windows zu retten sind)
echo "mc oeffnen mit dirs: " $MCDIR1 $MCDIR2 >> logfile 2>&1

if test $RESCUE -ne 20 ; then mv logfile tmp ; fi ;  
clear 
/bin/bash -li -c "mc $MCDIR1 $MCDIR2 ; clear ; cat rescue.txt" 
/bin/bash -li
clear 

fi ;   # end RESCUE -gt 0 



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


#if test $RESCUE = 0 ; then
#  Um mit RESCUE>0 hierhin zu kommen und einen 2. Durchlauf der Installierung zu haben, muss man gerade eben das 
#  rescue-System mit exit verlassen haben

#cp -f logfile  /nach/logfile >> /dev/zero 2>&1 
#mv logfile tmp


dialog --title "rebooting ..." --no-collapse --colors --infobox "
\Z1 relancando ...     neu starten ... \Zn
"  6 38  
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 6
fi ;


done      # DURCHLAUF  .   Also falls wir WEGEN PROBLEMEN BEI DER INSTALLATION hierher nach rescue geraten sind, dann erst
                           #  nach dem 2. Durchlauf  rebooten, um ggf. das Problem zu beheben

sleep 20 

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

# 
