1 |
beyerle@PS |
1 |
#!/bin/bash
|
|
|
2 |
#
|
|
|
3 |
# Saves data to a usbstick (default)
|
|
|
4 |
# or a partition (user input)
|
|
|
5 |
# Scientific Linux Live CD
|
|
|
6 |
#
|
|
|
7 |
# Urs Beyerle, PSI
|
|
|
8 |
#
|
|
|
9 |
|
|
|
10 |
### definitions
|
|
|
11 |
CONFIG_FOLDER=""
|
|
|
12 |
MOUNTDIR=livecd
|
|
|
13 |
. /$MOUNTDIR/live/liblinuxlive
|
|
|
14 |
|
|
|
15 |
# PSI setup?
|
|
|
16 |
PSI=$( cmdline_parameter psi )
|
|
|
17 |
|
132 |
beyerle@PS |
18 |
# # folder where we find data which was previously stored
|
|
|
19 |
# (can be on an usbstick or harddisk partition)
|
|
|
20 |
SAVEFOLDER=SL_LIVECD
|
1 |
beyerle@PS |
21 |
|
|
|
22 |
echo
|
|
|
23 |
|
|
|
24 |
### this script should be run as root
|
|
|
25 |
# (if not, somethings will not be stored)
|
|
|
26 |
if [ "$( whoami )" != "root" ]; then
|
|
|
27 |
echo "********************************************"
|
|
|
28 |
echo "WARNING: Run this script as root or sudo !!"
|
|
|
29 |
echo "As normal user not everything will be saved."
|
|
|
30 |
echo "Run instead: # sudo $0"
|
|
|
31 |
echo "********************************************"
|
|
|
32 |
echo
|
|
|
33 |
echo "Press a key to continue (CTRL-C to exit)"
|
|
|
34 |
read -n 1
|
|
|
35 |
fi
|
|
|
36 |
|
|
|
37 |
### search usb sticks
|
|
|
38 |
echo "Search for usbstick..."
|
|
|
39 |
USBMOUNT=$( grep -i /media/usb /etc/fstab | tail -n 1 | awk '{ print $2 }' )
|
|
|
40 |
if [ $USBMOUNT ]; then
|
|
|
41 |
# mount usbstick, if not already mounted
|
|
|
42 |
mount | grep -q " $USBMOUNT "
|
|
|
43 |
if [ "$?" != "0" ]; then
|
|
|
44 |
echo "Mount $USBMOUNT"
|
|
|
45 |
mount $USBMOUNT 2>/dev/null
|
|
|
46 |
fi
|
|
|
47 |
fi
|
|
|
48 |
|
|
|
49 |
### if no usbstick, ask the user for a partition
|
|
|
50 |
if [ ! $USBMOUNT ]; then
|
|
|
51 |
echo "No usbstick found."
|
|
|
52 |
echo "Type in a partition you want to store the data to."
|
|
|
53 |
echo -n "(e.g. /dev/hda1, /dev/sda1, ...): "
|
|
|
54 |
read MOUNT_DEV
|
|
|
55 |
# search $MOUNT_DEV in fstab
|
|
|
56 |
USBMOUNT=$( grep "^$MOUNT_DEV " /etc/fstab | tail -n 1 | awk '{ print $2 }' )
|
|
|
57 |
if [ ! $USBMOUNT ]; then
|
|
|
58 |
mkdir -p /mnt/$MOUNT_DEV
|
|
|
59 |
USBMOUNT=/mnt/$MOUNT_DEV
|
|
|
60 |
fi
|
|
|
61 |
# mount read write
|
|
|
62 |
mount -rw $MOUNT_DEV $USBMOUNT 2>/dev/null
|
|
|
63 |
if [ "$?" != "0" ]; then
|
|
|
64 |
echo "ERROR: Can not mount $MOUNT_DEV to $USBMOUNT"
|
|
|
65 |
sleep 5; exit 1
|
|
|
66 |
else
|
|
|
67 |
echo "Mounted $MOUNT_DEV to $USBMOUNT."
|
|
|
68 |
fi
|
|
|
69 |
fi
|
|
|
70 |
|
|
|
71 |
### search for $SAVEFOLDER on $USBMOUNT
|
|
|
72 |
if [ -d $USBMOUNT/$SAVEFOLDER ]; then
|
|
|
73 |
CONFIG_FOLDER=$USBMOUNT/$SAVEFOLDER
|
|
|
74 |
echo "Found folder '$SAVEFOLDER' on $USBMOUNT."
|
|
|
75 |
else
|
|
|
76 |
mkdir -p $USBMOUNT/$SAVEFOLDER
|
|
|
77 |
if [ "$?" = "0" ]; then
|
|
|
78 |
echo "Folder $SAVEFOLDER created on $USBMOUNT."
|
|
|
79 |
CONFIG_FOLDER=$USBMOUNT/$SAVEFOLDER
|
|
|
80 |
else
|
|
|
81 |
echo "ERROR: Can not write to $USBMOUNT."
|
|
|
82 |
CONFIG_FOLDER=""
|
|
|
83 |
fi
|
|
|
84 |
fi
|
|
|
85 |
|
|
|
86 |
### Create README.txt in $CONFIG_FOLDER
|
|
|
87 |
echo "Do not delete this folder!" > $CONFIG_FOLDER/README.txt
|
|
|
88 |
echo "It is used to store your data from LiveCD." >> $CONFIG_FOLDER/README.txt
|
|
|
89 |
if [ "$?" = "0" ]; then
|
|
|
90 |
echo "Saved $CONFIG_FOLDER/README.txt"
|
|
|
91 |
else
|
|
|
92 |
echo "ERROR: Could not save $CONFIG_FOLDER/README.txt !"
|
|
|
93 |
fi
|
|
|
94 |
|
|
|
95 |
### put parameter "keyboard" to config (if not yet there)
|
|
|
96 |
CONFIG_FILE=$CONFIG_FOLDER/config
|
|
|
97 |
grep -q "KEYBOARD=" $CONFIG_FILE 2>/dev/null
|
|
|
98 |
if [ "$?" != "0" ]; then
|
|
|
99 |
# what keyborad do I have?
|
|
|
100 |
. /etc/sysconfig/keyboard
|
|
|
101 |
echo KEYBOARD=$KEYTABLE >> $CONFIG_FILE
|
|
|
102 |
echo "Saved $CONFIG_FILE"
|
|
|
103 |
fi
|
|
|
104 |
|
|
|
105 |
### put restore script to setup (if setup does not yet exists)
|
|
|
106 |
SETUP_FILE=$CONFIG_FOLDER/setup
|
|
|
107 |
if [ ! -e $SETUP_FILE ]; then
|
|
|
108 |
cat > $SETUP_FILE <<'EOF'
|
|
|
109 |
#!/bin/bash
|
|
|
110 |
#
|
|
|
111 |
# restore tar.gz files, if found on usbstick
|
|
|
112 |
files=$( ls $CONFIG_FOLDER/*.tar.gz )
|
|
|
113 |
cd /
|
|
|
114 |
for file in $files; do
|
|
|
115 |
tar xfzP $file 2>/dev/null
|
|
|
116 |
if [ "$?" = "0" ]; then
|
|
|
117 |
echo "$file restored."
|
|
|
118 |
fi
|
|
|
119 |
done
|
|
|
120 |
EOF
|
|
|
121 |
echo "Saved $SETUP_FILE"
|
|
|
122 |
fi
|
|
|
123 |
|
|
|
124 |
### save /home, /etc/passwd /etc/shadow, ...
|
|
|
125 |
# as tar.gz. files
|
|
|
126 |
echo "Start saving tar.gz files to $CONFIG_FOLDER:"
|
|
|
127 |
SAVES="/home \
|
|
|
128 |
/root \
|
|
|
129 |
/etc/passwd \
|
|
|
130 |
/etc/shadow \
|
|
|
131 |
/etc/group"
|
|
|
132 |
|
|
|
133 |
for save in $SAVES; do
|
|
|
134 |
echo -n "Save $save ... "
|
|
|
135 |
tar cfzP $CONFIG_FOLDER/$( basename $save ).tar.gz $save
|
|
|
136 |
if [ "$?" = "0" ]; then
|
|
|
137 |
echo " done."
|
|
|
138 |
else
|
|
|
139 |
echo "ERROR: Could not save $save to $USBMOUNT !"
|
|
|
140 |
fi
|
|
|
141 |
done
|
|
|
142 |
|
|
|
143 |
### save /etc/X11/xorg.conf
|
|
|
144 |
cp -a /etc/X11/xorg.conf $CONFIG_FOLDER/
|
|
|
145 |
echo "Xserver configuration file 'xorg.conf' saved to $CONFIG_FOLDER."
|
|
|
146 |
|
|
|
147 |
### inform user
|
|
|
148 |
echo "If you don't want to keep one of these config files, just delete it."
|
|
|
149 |
echo
|
|
|
150 |
|
|
|
151 |
### umount $USBMOUNT
|
|
|
152 |
echo "Unmount $USBMOUNT"
|
|
|
153 |
umount $USBMOUNT 2>/dev/null
|
|
|
154 |
echo "$0 finished."
|
|
|
155 |
echo
|
|
|
156 |
echo "Please <press a key> ..."
|
|
|
157 |
read -n 1
|