#!/bin/sh
# Installation de NoiseLess Linux
clear
echo "Installation de NoiseLess Linux 0.0.5 ( Peut être inutilisable )"
echo
echo "Pour installer noiseless vous devez lui allouer un disque dur."
echo "Il faut avoir cree avec fdisk une partion primaire d'environ (2.2 x ramdisk) "
echo "Lorsque noiseless seras demaré, cette partition seras /dev/hda1."
echo 
echo "Sur quelle disque dur voulez vous installer Noiseless ?"
echo -n "Eg: /dev/hdc - Votre choix: "
read DISK
if [ $DISK ]; then
   if [ -a $DISK ]; then
      echo Attention les donnés de "$DISK"1 serons ecrases.
      echo -n "Tappez ok pour confirmer: "
      read OK
      case $OK in
	   ok)		
	   	./mke2fs "$DISK"1
		if [ $? != 0 ]; then
		   exit 1
		fi ;;
	   *)	echo "Au revoir." ; exit 1 ;;
      esac
   else
   	echo "Vous avez fait une erreur."
	exit 1
   fi
      
else
   echo "Veillez entrer le nom du disque..."
   exit 1
fi

mkdir -p /tmp/noiseless
mount "$DISK"1 /tmp/noiseless
if [ $? != 0 ]; then exit 1; fi

echo "Copie du noyeau..."
cp bzImage /tmp/noiseless/
if [ $? != 0 ]; then exit 1; fi


mkdir -p /tmp/noiseless/boot

echo "Copie les fichiers utiles a lilo..."
cp initrd.img /tmp/noiseless
cp /boot/map /tmp/noiseless/boot
if [ $? != 0 ]; then exit 1; fi
RAM_OK=no

while [ $RAM_OK = no ]; do
      echo
      echo
      echo "Veuillez chosir que vous voulez pour votre RAMDISK..."
      echo "Attention, il faut avoir plus de memoire que de RAMDISK."
      echo "De plus que votre ramdisk. Si vous utilisez des logiciels"
      echo "gourmand en memoire comme squid, prevoyez 64Mo de plus."
      echo "1) 12Mo ( ne marche pas encore)     8) 128Mo"
      echo "2) 16Mo			  	9) 163Mo"
      echo "3) 24Mo				10) 256Mo"
      echo "4) 32Mo		 		11) 384Mo"
      echo "5) 48Mo		 		12) 512Mo"
      echo "6) 64Mo		 		13) 768Mo"
      echo "7) 96Mo		 		14) 1Go"
      echo -n "Votre choix: "
      read taille
      case $taille in
	   1) MEGS=12 ; RAM_OK=yes ;;
	   2) MEGS=16 ; RAM_OK=yes ;;
	   3) MEGS=24 ; RAM_OK=yes ;;
	   4) MEGS=32 ; RAM_OK=yes ;;
	   5) MEGS=48 ; RAM_OK=yes ;;
	   6) MEGS=64 ; RAM_OK=yes ;;
	   7) MEGS=96 ; RAM_OK=yes ;;
	   8) MEGS=128 ; RAM_OK=yes ;;
	   9) MEGS=163 ; RAM_OK=yes ;;
	   10) MEGS=256 ; RAM_OK=yes ;;
	   11) MEGS=384 ; RAM_OK=yes ;;
	   12) MEGS=512 ; RAM_OK=yes ;;
	   13) MEGS=768 ; RAM_OK=yes ;;
	   14) MEGS=1024 ; RAM_OK=yes ;;
	   *) echo erreur ;;
	   esac
	      
done
echo
echo "Preparation d'une image de $MEGS Mo"
BLOCKS=$[ $MEGS * 2048 ]
dd if=/dev/zero of=noiseless.fs bs=512 count=$BLOCKS

echo "Creation d'un systeme de fichier ext2 sur noiseless.fs"
# On cree un fichier "yes" avec la lettre y afin d'eviter
# le message de mke2fs qui demande confirmation sur
# la creation d'un systeme fichier hors d'un peripherique
echo y > yes
./mke2fs noiseless.fs < yes
rm yes

echo "Copie le fichier noiseless dans un repertoire temporaire..."

cp noiseless.fs /tmp/noiseless/

echo "Verifie que le driver loop est dans le noyeau.."
LOOP=NO
while [ $LOOP = NO ]; do
      if [ "$(cat /proc/devices | grep loop)" ] ; then
	 LOOP=yes
      else
      	modprobe loop
	if [ $? != 0 ]; then
	   echo "Impossible d'utiliser le driver loop."
	   exit 1
	fi
      fi
done       
mkdir -p /tmp/loop

mount /tmp/noiseless/noiseless.fs /tmp/loop  -o loop

echo "Extraction de la distribution..."
tar xzvpf noiseless.tgz -C /tmp/loop

BASH_OK=no
while [ $BASH_OK = no ]; do
      echo
      echo
      echo "Certains scripts ont besoin de bash pour fonctionner correctement"
      echo
      echo "C'est le cas par exemple des scripts pour l'initialisation d'une"
      echo "connexion ADSL via un speedtouch USB"
      echo "Si vous choissez d'installer bash: 477kB d'espace suplementaires vont"
      echo "être utilisés."
      echo -n "Faut t'il installer bash ( y/n ): "
      read bash
      case $bash in 
            Y*) cp bash.gz /tmp/loop/bin && ( cd /tmp/loop/bin && gunzip bash.gz ) && BASH_OK=yes ;;
	    y*) cp bash.gz /tmp/loop/bin && ( cd /tmp/loop/bin && gunzip bash.gz  ) && BASH_OK=yes ;;
	    n*) BASH_OK=yes ;;
	    N*) BASH_OK=yes ;;
	    *) BASH_OK=no ;;
	    esac

done

if [ $? != 0 ] ; then exit 1 ; fi
echo "Production des clefs SSH.."
chroot /tmp/loop /sbin/ssh-key

echo "Configuration du mot de passe root."
chroot /tmp/loop /usr/bin/passwd

echo "Vous allez pouvoir configurer le reseau local et le demarrage de noiseless."
chroot /tmp/loop /sbin/noiseconfig 

cron=no
while [ $cron =  no ]; do
     echo
     echo "Configuration de Crond."
     echo root > /tmp/loop/var/spool/cron/crontabs/cron.update
     echo 
     echo "A quelle voulez vous que la sauvegarde du disque dur soit faite ?"
     echo -n "Exemple: 9h15 - votre choix: "
     read time
     HOUR=$( echo $time | tr "h" "\n" | sed -n 1p )
     MIN=$(  echo $time | tr "h" "\n" | sed -n 2p )
     echo "La ligne suivante va être ajouté a votre crontab."
     echo "$MIN $HOUR * * * /sbin/ram2hdd"
     echo -n "Entrez y pour confirmer: "
     read yes
     if [ "$yes" = y ]; then
	cron=yes
	echo "$MIN $HOUR * * * /sbin/ram2hdd" >> /tmp/loop/var/spool/cron/crontabs/root
     fi
done

echo "Creation d'une archive separée pour /var.."
(cd /tmp/loop && tar czf var.tgz var )

echo "Nettoyage de /var ..."
rm -rf /tmp/loop/var/*
echo
echo
echo "Entrez une TIMEZONE pour /etc/TZ ( voir doc uclibc)"
echo "Frappez juste enter pour la France."
echo -n "Votre choix: "
read TIMEZONE
if [ "$TIMEZONE" ]; then
   echo $TIMEZONE > /tmp/loop/etc/TZ
else
   echo CEST-2 > /tmp/loop/etc/TZ
fi

chmod 0444 /tmp/loop/etc/TZ

echo "Generation du fichier lilo.conf"
cat << OEF_LILO > lilo.conf
map=/tmp/noiseless/boot/map
image=/tmp/noiseless/bzImage
append="ramdisk_size=$[ $MEGS * 1024]"
initrd=/tmp/noiseless/initrd.img
root=/dev/ram1
label=Noiseless
read-only
OEF_LILO



echo "Configuration du demarrage.."
lilo -C $PWD/lilo.conf -b $DISK

umount /tmp/loop
umount /tmp/noiseless

