#!/bin/sh
# e gerbier 11/09/2003 <eric.gerbier@free.fr>
# license GNU GPL
# sauvegarde sur cd des infos essentielles sur un linux :
# table des partitions
# liste des packages installes
# /etc
# /home
# /root

espace_libre() {
	fs=$1
	out=$(df -k -P $fs | grep "$fs" | awk '{print $4}')
	echo $out
}

uid=$(id -u)
if [ "$uid" != 0 ]
then
	echo "travailler sous root svp"
	exit
fi

# calcul de l'espace disque necessaire
total=$(du -skc /home /etc /root 2> /dev/null| grep total | awk '{print $1}')

# test espace disque libre
# on travaille sur /tmp
# il faut voir si /tmp est un fs separe ou non 
dir="/tmp"
out=$(df -P | grep "/tmp")
if [ -n "$out" ]
then
	dispo=`espace_libre "/tmp"`
else
	dispo=`espace_libre "/"`
fi

if [ "$dispo" -lt "$total" ]
then
	echo "pas assez d espace disque : necessaire : $total, libre : $dispo"
	exit
else
	echo "espace libre ok ($dispo >> $total)"
fi

# recuperation de la liste des packages installes
outdeb=$(type dpkg 2> /dev/null)
outrpm=$(type rpm  2> /dev/null)
if [ -n "$outdeb" ]
then
	# on est en debian
	dpkg -l > ${dir}/packages
elif [ -n "$outrpm" ]
then
	# packages rpm
	rpm -qa | sort > ${dir}/packages
else
	echo "pas de packages trouves"
fi

# partitions
sfdisk -d /dev/hda > ${dir}/sfdisk.out

titre=sav_$(date +'%Y_%m_%d_%X') 

# creation de l'image iso
mkisofs -iso-level 3 -R -J -no-bak -o ${dir}/cd.iso \
-graft-points ${titre}/home=/home ${titre}/etc=/etc ${titre}/root=/root \
${titre}/packages=${dir}/packages ${titre}/sfdisk.out=${dir}/sfdisk.out 

# verification
isovfy ${dir}/cd.iso

mkdir -p /mnt/iso
mount -o loop ${dir}/cd.iso  /mnt/iso
mc  /mnt/iso
umount /mnt/iso

# test gravage
cdrecord -checkdrive

# gravage
echo "inserer un cdrom et taper sur une touche"
read r
cdrecord dev=0,0 -v -multi ${dir}/cd.iso

# verification
mount /dev/cdrom
mc /mnt/cdrom
umount /mnt/cdrom

# menage
rm -f ${dir}/packages ${dir}/sfdisk.out
rm -f ${dir}/cd.iso
