#!/bin/ash 

#   mkcdiso           Macht ein CD/DVD .iso -Image einer Linux-Installation und dieses Programmpaketes zur Re-Installation
#                                 (   SYS_Linux  ) 
#                            Vor Anwendung muss das Install-System als initrd gepackt werden 


PWDINIT=`pwd` ;  NV=${PWDINIT##*/}  ;  NAME=${NV%%-[0,1-9]*} ; VERSION=${NV#$NAME-}    #   Von wo aus gestartet wurde,  in Name und Version spalten
#echo "  Name:  "  $NAME   "   Version:  "  $VERSION     # Beispiel:  NAME=SYS_Linux   VERSION=0.15  


# 1.  Ob Partition der Linux-Installation schon als kompaktierte Datei vorhanden und in diesen Ordner kopiert ?
ls > scr 
grep "$NAME.ext3.lzma" scr      #   .lrz .lzma  .bz2  

# 2.    Partition noch nicht als kompakte Datei da, machen
# if test -r SYS_Linux.ext3.lzma  -ne 0 ; then     # ... dieser shit geht nicht
if test $? -ne 0 ; then 
echo " Datei $NAME.ext3.lzma nicht da , aus Partition erzeugen"    # lzma  .lrz  
sleep 20
# 2.1.  Abfragen welche Partition als Install-CD/DVD gerettet werden soll
#   dialog --inputbox "            $ All this shit no working
#Nao tem arquivo compactado da instalacao.
#A instalacao está em qual particao ?   
#( ex: /dev/hda1 )
#<espaco> = nao fazer, neste caso deve
#estar presente uma imagem nao-compactada
#" 20  60  > partition
#cat partition   
#read PARTITION REST < partition
PARTITION=/dev/hda3   ; mkdir -p /scr                  # momentan geht es nur mit /dev/hda1
# 2.2.   benutzter Anteil FSSIZE des Platzes FSSIZE0 der Partition abfragen 
###  if test $PARTITION != " " ; then  
mount $PARTITION  /scr 
df $PARTITION > scr             
umount /scr
echo "df $PARTITION  : "  ;  cat scr   
sleep 20
grep $PARTITION scr > scr0
echo "hier soll Groesse der Partition sein: " ; cat scr0
read UNW1 FSSIZE0 FSSIZE REST < scr0       #  FSSize0 jetzige, FSSize nötige/belegte Groesse Dateien in $PARTITION
FSSIZE1=$(($FSSIZE + $FSSIZE / 20 ))     #  sicherheitshalber etwas grsser machen
echo " Sicherheitshalber gewaehlte Groesse: "  $FSSIZE1
sleep 20
umount -f $PARTITION 
# 2.3. Grsse Datei-System auf benutzten Anteil FSSIZE (+Sicherheit) verringern
e2fsck -f $PARTITION 
#echo " Nur verkleinern, nicht vergrössern.  Blegt: "  $FSSIZE  " .. mal 1.05 : "  $FSSIZE1  " Groesse momentan: " $FSSIZE0
#echo $(($FSSIZE0 - $FSSIZE))
#  focking bash dont work correctly, incl. the following condition dont work
#test $(($FSSIZE0 - $FSSIZE)) -gt 0 ; if test $? -gt 0  ; then  echo "***" ;   resize2fs -f $PARTITION   "$FSSIZE1"k  ;  echo "*** 2" ;  FSSIZE0=$FSSIZE1 ; fi ;    
resize2fs -f $PARTITION   "$FSSIZE1"k 
sync 
# 2.4. Dateisystem woanders hin kopieren (stattdessen die Partition verkleinern, wrde reboot erfordern)
echo " vor dd"
sleep 20
dd if=$PARTITION of=$NAME.ext3 bs=1k count=$FSSIZE1 conv=noerror
ls -l $NAME.ext3 
echo " nach dd"
sleep 20  
###  fi ;

# 2.5. kompaktieren
#bzip2 -9 -fc $NAME.ext3 > $NAME.ext3.bz2       # gross und lahm 
#lrzip -w 2 -L 9 $NAME.ext3    # kompaktiert zu 1/  4.2     ,  mit -M Absturz Problem mit irgendwelchen streams in rzip_fd 
lzma -7 -kf $NAME.ext3         # knapp 1% grsser als lrzip -w 2 -L 9 , aber schneller und lzmacat ist in busybox vhd
#lrzip -l -o $NAME.ext3.lrz $NAME.ext3      # kompaktiert 30x schneller als lzma , 1.5 x so gross
mv $NAME.ext3 ..               # oder loeschen, kann nicht hier bleiben da sonst auf CD  

# 2.6  Aufrumen
resize2fs -f $PARTITION   # Nach dem Packen, Installierung wieder an Grösse der Partitio anpassenn 
fi ;  
sync 

# 3.  CD/DVD  .iso   erzeugen
CDISO="../$NV.iso"                      #  nicht auf der zu kopierenden Partition selbst, oder mit -x ausnehmen 
rm  $CDISO 
mkisofs -o $CDISO  \
  -R -J -A "$NV" \
  -hide-rr-moved \
  -v -d -N \
  -no-emul-boot -boot-load-size 4 -boot-info-table \
  -b boot/isolinux/isolinux.bin \
  -c boot/isolinux/isolinux.boot \
  -V "$NV-DVD" .

sync
