#ANNEXE 9 - Script de restauration #================================= # #!/bin/sh # # Debian-secinst v0.1.6 : ANNEXE 9 - Script de restauration # Simon Castro # # NDR : Beware of the command syntax, the script will be executed by ash. # ############# # VARIABLES # ############# # The disk to use ... DISK=`cat /backup/disk_name` # Informations about the system this restore disk was created for SERVER_INFOS="/backup/server_infos" ### Backuped configuration files used to restore the system # The backuped partition table BACKUPED="/backup/partitions_table" # The backuped /etc/fstab file FSTABED="/backup/fstab_file" # The textfile with the fdisk script : fdisk /dev/xda < $FDISK_SCRIPT FDISK_SCRIPT="/backup/fdisk_script" # The backuped lilo configuration file to use to lilo the system. LILO="/backup/lilo_file" ### Backuped system files # Path to the file with the system archives information file (the cdrom is mounted on the /mnt mountpoint of the root filesystem) ARCHIVES="/mnt/archives/infos.txt" ##################### # DISPLAY FUNCTIONS # ##################### display_menu() { /bin/cat < /dev/null /bin/sync echo " I'm creating the new partitions table..." fdisk $DISK < $FDISK_SCRIPT > /dev/null echo " Done..." echo /usr/bin/test $AUTOMATED = 0 && wait_user } } # # NDR : The search command for labels on ext partitions is really bad... # Couldn't find another way to get the label if fstab file contains /dev/xdaX with X > 9 # format_disk() { /usr/bin/test $AUTOMATED = 0 && clear_and_title echo "You're about to format the disk using the backuped fstab file..." echo "This will delete any data present on the disk." echo -n "Are you sure you want to do that (N/y) ? " /usr/bin/test $AUTOMATED = 0 && read userissure /usr/bin/test $AUTOMATED = 1 || /usr/bin/test "$userissure" = "y" && { echo echo echo "Formatting Swap partition(s) : " for i in `/bin/grep swap $FSTABED | /usr/bin/tr '\t' ' ' | /usr/bin/cut -d ' ' -f 1` do echo " $i" /sbin/mkswap $i > /dev/null done echo echo "Formatting Ext2 partition(s) : " for i in `/bin/grep ext2 $FSTABED | /usr/bin/cut -d ' ' -f 1` do LABEL=`/bin/grep "$i " $FSTABED | /usr/bin/cut -d ' ' -f 2` echo " $i on $LABEL" /sbin/mke2fs -L $LABEL $i > /dev/null done echo /bin/sync echo " Done..." echo /usr/bin/test $AUTOMATED = 0 && wait_user } } mount_partitions() { /usr/bin/test $AUTOMATED = 0 && clear_and_title echo "You're about to mount the backuped's fstab file partition on the current disk..." echo -n "Are you sure you want to do that (N/y) ? " /usr/bin/test $AUTOMATED = 0 && read userissure /usr/bin/test $AUTOMATED = 1 || /usr/bin/test "$userissure" = "y" && { echo echo "Mounting / partition on /target : " echo SLASH=`/bin/grep " / " $FSTABED | /usr/bin/cut -d ' ' -f 1` MOUNTED=0 /bin/mount $SLASH /target && MOUNTED=1 /usr/bin/test $MOUNTED = 0 && { echo echo "FAILED ... Waiting for user action ..." AUTOMATED=0 read useraction } /usr/bin/test $MOUNTED = 1 && { echo " $SLASH / partition is now on /target..." echo for i in `/bin/grep ext2 $FSTABED | /bin/grep -v " / " | /usr/bin/cut -d ' ' -f 1` do LABEL=`/bin/grep "$i " $FSTABED | /usr/bin/cut -d ' ' -f 2` echo -n " Creating /target$LABEL mountpoint ... " /bin/mkdir "/target$LABEL" echo "Mounting $i on /target$LABEL" /bin/mount -t ext2 $i "/target$LABEL" done echo echo " Done..." echo /usr/bin/test $AUTOMATED = 0 && wait_user } } } restore_system() { /usr/bin/test $AUTOMATED = 0 && clear_and_title echo "You're about to restore the system files on the current disk..." echo -n "Are you sure you want to do that (N/y) ? " /usr/bin/test $AUTOMATED = 0 && read userissure /usr/bin/test $AUTOMATED = 1 || /usr/bin/test "$userissure" = "y" && { echo echo " Mounting cdrom on /mnt" /bin/mount /dev/hdc /mnt -t iso9660 && MOUNTED=1 /usr/bin/test $MOUNTED = 0 && { echo echo "FAILED ... Waiting for user action ..." AUTOMATED=0 read useraction } /usr/bin/test $MOUNTED = 1 && { echo " Cdrom is now on /mnt..." echo echo "Going to /target" cd /target echo echo "Restoring the system with .tar.gz archives : " for archive in `cat $ARCHIVES | /bin/grep "tar.gz"` do echo " Restoring $archive..." /bin/tar zxvfp $archive > /dev/null done /bin/sync echo echo "Restoring the system with .cpio archives : " for archive in `cat $ARCHIVES | /bin/grep ".cpio"` do echo " Restoring $archive..." /bin/cpio -id < $archive > /dev/null done /bin/sync echo echo "Unmounting cdrom..." /bin/umount /dev/hdc echo echo " Done..." echo /usr/bin/test $AUTOMATED = 0 && wait_user } } } lilo_system() { /usr/bin/test $AUTOMATED = 0 && clear_and_title echo "You're about to lilo the current disk with the backuped lilo file..." echo -n "Are you sure you want to do that (N/y) ? " /usr/bin/test $AUTOMATED = 0 && read userissure /usr/bin/test $AUTOMATED = 1 || /usr/bin/test "$userissure" = "y" && { echo echo "Lilo-ing current disk..." /sbin/lilo -C $LILO echo " Done..." echo /usr/bin/test $AUTOMATED = 0 && wait_user } } sync_system() { /usr/bin/test $AUTOMATED = 0 && clear_and_title echo "You're about to sync the current disk and umount /target restored file system..." echo -n "Are you sure you want to do that (N/y) ? " /usr/bin/test $AUTOMATED = 0 && read userissure /usr/bin/test $AUTOMATED = 1 || /usr/bin/test "$userissure" = "y" && { echo echo echo "Syncing..." /bin/sync echo echo "Umounting partitions : " CPT=1 while /usr/bin/test $CPT -le `/bin/cat $FSTABED | /bin/grep -v " / " | /usr/bin/wc -l` do LABEL=`/usr/bin/tail -n $CPT $FSTABED | /usr/bin/head -n 1 | /usr/bin/cut -d ' ' -f 1` echo " Unmounting $LABEL" /bin/umount $LABEL CPT=$(($CPT+1)) done echo echo "Unmounting '/' partition... " /bin/umount /target echo echo " Done..." echo /usr/bin/test $AUTOMATED = 0 && wait_user } } ################## # AUTOMATED CALL # ################## automated() { AUTOMATED=1 clear_and_title write_backuped format_disk mount_partitions restore_system lilo_system sync_system echo "Automated script done..." echo echo "You can now check the restored system with a shell or reboot the system..." read waituser AUTOMATED=0 } ######## # MAIN # ######## while [ 1 ] do /usr/bin/clear AUTOMATED=0 display_menu echo -n "What do you want ? " read userinput case $userinput in 1) show_actual ;; 2) show_backuped ;; 3) show_fstabed ;; 4) write_backuped ;; 5) format_disk ;; 6) mount_partitions ;; 7) restore_system ;; 8) lilo_system ;; 9) sync_system ;; A) automated ;; esac /usr/bin/clear done