Annexe 9. Script de restauration▲
Sélectionnez
#!/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 <<EOF
Debian-Secinst v0.1.6 Restore script
Enter alt-[F1-F4] to : have this menu, have a shell, look at the logs.
To reboot : ctrl-alt-del
Sélectionnez
/bin/cat $SERVER_INFOS
Menu
(
1
) : Show actual partition table.
(
2
) : Show backuped partition table.
(
3
) : Show backuped fstab file.
*****
(
4
) : Write the backuped partition table to disk.
(
5
) : Format disk using backuped fstab file.
(
6
) : Mount disk partitions using backuped fstab file.
(
7
) : Restore the system.
(
8
) : Lilo the system using backuped lilo file.
(
9
) : Syncing and unmounting restored system.
*****
(
A) : Automated script (
4
-5
-6
-7
-8
-9
).
EOF
}
wait_user
(
)
{
/usr/bin/test $AUTOMATED
=
0
&&
{
echo "Press enter when you're done with this"
read waituser
}
}
clear_and_title
(
)
{
/usr/bin/clear
echo "Debian-Secinst v0.1.6 Restore script"
echo
}
##########################
# NON CONSEQUENT ACTIONS #
##########################
show_actual
(
)
{
clear_and_title
echo "Actual partition table is :"
/sbin/fdisk -lu $DISK
echo
wait_user
}
show_backuped
(
)
{
clear_and_title
echo "Backuped partition table is (
$BACKUPED
) :"
echo
/bin/cat $BACKUPED
echo
wait_user
}
show_fstabed
(
)
{
clear_and_title
echo "Backuped fstab file is (
$FSTABED
) :"
echo
/bin/cat $FSTABED
echo
wait_user
}
######################
# CONSEQUENT ACTIONS #
######################
write_backuped
(
)
{
/usr/bin/test $AUTOMATED
=
0
&&
clear_and_title
echo "You're about to write a new partitions table..."
echo "This will delete any data présent 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 " I am deleting the actual partitions table..."
/bin/dd if
=
/dev/zero of
=
$DISK
bs
=
512
count
=
1
>
/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 présent 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