source: MondoRescue/branches/3.2/mindi/rootfs/etc/init.d/rcS@ 3275

Last change on this file since 3275 was 3274, checked in by Bruno Cornec, 12 years ago
  • Improves systemd support at startup of the restore media when the system uses it (new user, groups, files included from /usr/lib/systemd, dbus,
  • Moves mindi to a bash script to try to get more debug info by redirecting into the LOGFILE. Not working yet.
  • Adds lvmetad daemon to list and launch it at restore time as new LVM version seems to need it.
  • End of renaming of mondo-restore?cfg into mondorestore.cfg
  • Property svn:keywords set to Id
File size: 30.9 KB
RevLine 
[3274]1#!/bin/bash
[1]2#
[736]3# $Id: rcS 3274 2014-04-29 19:32:32Z bruno $
[1]4#
[736]5# init script launched during the restore process
[1]6#------------------------------------------------------------
7
8CaughtSoftReset() {
[1747]9 trap SIGTERM
[2890]10
[2893]11 reboot
[1]12}
13
14
15ConfigureLoggingDaemons() {
[1747]16 echo -en "Running klogd..."
17 klogd -c 2 > /dev/null 2> /dev/null
18 echo -en "Done.\nRunning syslogd..."
19 syslogd > /dev/null 2> /dev/null
20 echo "Done."
21 LogIt "klogd and syslogd have been started."
[1]22}
23
24
25
26CopyBootDevEntry() {
[1747]27 local outfile devfile
28 devfile=/dev/boot_device
29 outfile=`cat /BOOTLOADER.DEVICE 2> /dev/null`
30 [ ! "$outfile" ] && return 0
31 echo -en "Copying boot device to $outfile..."
32 if [ -e "$outfile" ] ; then
[2174]33 echo "not needed."
[1410]34 return 0
[1747]35 fi
36 mkdir -p $outfile
37 rmdir $outfile
38 cp -pRdf $devfile $outfile
39 if [ "$?" -ne "0" ] ; then
[1410]40 echo "Failed."
41 return 1
[1747]42 else
[1410]43 echo "OK."
44 return 0
[1747]45 fi
[1]46}
47
48
[2888]49GetShell() {
50 echo -en "Type 'exit' to reboot the PC\n"
51 umount -d /mnt/cdrom 2> /dev/null
52 mount / -o rw,remount > /dev/null 2> /dev/null
[3051]53 for i in `cat /proc/cmdline`; do
[3247]54 echo $i | grep -qi console= && console=`echo $i | cut -d= -f2`
55 echo $i | grep -qi serial= && serial=`echo $i | cut -d= -f2`
56 done
57 LogIt "Launching Shell"
58 if [[ $serial != "" && -e $serial ]]; then
59 setsid sh -c "exec sh <$serial >$serial 2>&1"
60 elif [[ $console != "" && -e /dev/$console ]]; then
61 setsid sh -c "exec sh </dev/$console >/dev/$console 2>&1"
62 else
63 setsid sh -c "exec sh </dev/tty1 >/dev/tty1 2>&1"
64 fi
[2888]65}
[1]66
[2888]67
[1]68Die() {
[1747]69 LogIt "Fatal error! $1" 1
[2888]70 GetShell
[1]71}
72
73
74ExtractDevTarballs() {
[1747]75 cd /
76 for fname in ataraid.tgz ida.tgz i2o.tgz rd.tgz raw.tgz cciss.tgz nst.tgz dm.tgz vc.tgz ; do
77 if [ ! -e "/$fname" ] ; then
78 LogIt "/$fname not found; cannot extract to /." 1
79 else
80 echo -en "\rExtracting /$fname... "
81 tar -zxf /$fname || LogIt "Error occurred while extracting /$fname"
82 fi
83 done
84 echo -en "\r"
85 LogIt "Extracted additional /dev entries OK. " 1
[1]86}
87
88
89
90LaunchTerminals() {
[2727]91 # Depending on busybox version, syntax of openvt is different
92 /bin/busybox --help 2>&1 | head -1 | grep -Eq "1\.7\.3|1\.2\."
93 if [ "$?" -eq "0" ] ; then
94 opt=""
95 else
96 # 1.18.3 requires -c
97 opt="-c"
98 fi
99 openvt $opt 2 /bin/sh
100 openvt $opt 3 /bin/sh
101 openvt $opt 4 /bin/sh
102 openvt $opt 5 /bin/sh
103 openvt $opt 6 /bin/sh
104 openvt $opt 7 /bin/sh /sbin/wait-for-petris
105 openvt $opt 8 /usr/bin/tail -f $LOGFILE
[3274]106 if [ -f /var/log/messages ]; then
107 openvt $opt 9 /usr/bin/tail -f /var/log/messages
108 fi
[1922]109 # May avoid shell error messages
110 chmod 666 /dev/tty* /dev/console
[2484]111 # By default first serial line is configured as tty
[3274]112 # Required to have a correct serial console support (MP on ia64 or VSP with iLO e.g.)
[2484]113 for i in `cat /proc/cmdline` ; do
[3200]114 echo $i | grep -qi serial= && serial=`echo $i | cut -d= -f2`
[2484]115 done
[2487]116 # Doing that is only valid when using a real serial line
[3274]117 if [[ $serial != "" && -e $serial ]]; then
[2498]118 LogIt "Redirecting serial $serial to /dev/tty" 1
[2487]119 ln -s -f $serial /dev/tty
120 fi
[1]121}
122
123
124LoadKeymap() {
[1747]125 local fname
126 fname=`cat /tmp/KEYMAP-LIVES-HERE 2> /dev/null`
127 [ "$fname" = "" ] && return
128 if which loadkeys > /dev/null 2> /dev/null ; then
129 loadkeys $fname
[2846]130 LogIt "Using $fname keyboard map." 1
[1747]131 else
[2731]132 LogIt "Using default US keyboard map." 1
[1747]133 fi
[1]134}
135
136
137UntarTapeStuff() {
[1747]138 local old_pwd res
139 old_pwd=`pwd`
140 cd $GROOVY
141 [ "$1" != "" ] && tapedev=$1
[3274]142 [ ! "$tapedev" ] && tapedev=`grep media-dev /tmp/mondorestore.cfg 2>/dev/null | tr -s ' ' ' ' | cut -d' ' -f2`
[1962]143 mt -f $tapedev rewind
[3119]144 if [ $? -ne 0 ]; then
145 LogIt "WARNING: $tapedev failed to rewind, either not a tape or still in OBDR mode." 1
146 LogIt " Trying to find the corresponding SCSI generic device." 1
147 c=0
148 for d in `ls /sys/class/scsi_device/*`; do
149 devtype=`cat $d/device/type`
[3153]150 if [ "$devtype" -eq "1" ]; then
[3119]151 LogIt "NOTE: Device /dev/sg$c is a Sequential device." 1
152 if [ -x /usr/bin/sg_map ]; then
153 dev=`/usr/bin/sg_map | grep -E "^/dev/sg$c" | awk '{print $2}'`
154 LogIt " Retry using device $dev" 1
155 fi
[3153]156 elif [ "$devtype" -eq "0" ]; then
[3119]157 # Skipping a HDD
[3135]158 /bin/true
[3153]159 elif [ "$devtype" -eq "5" ]; then
[3119]160 # Checking whether it's a CD or a tape in OBDR mode
161 grep -q -i -E 'dat|ultrium|tape' $d/device/model
162 if [ $? -eq 0 ]; then
163 # Is probably a Tape drive left in OBDR.
164 LogIt "Found that /dev/sg$c is a tape drive (`cat $d/device/model`)." 1
165 grep -q -i -w 'hp' $d/device/vendor
166 if [ $? -eq 0 ]; then
167 LogIt "This is an HP tape drive, even better :-)." 1
168 fi
169 if [ -x /usr/bin/sg_reset ]; then
170 OBDR_MODS="st mptsas mptspi aic7xxx aic94xx mpt2sas "
171 if [ "`grep -i obdrmods /proc/cmdline`" ]; then
172 OBDR_MODS="$OBDR_MODS `cat /proc/cmdline | sed 's~.*obdrmods=\"\(.*\)\".*~\1~'`"
173 fi
174 LogIt "Removing modules $OBDR_MODS." 1
175 for m in $OBDR_MODS; do
176 rmmod $i
177 done
178 LogIt "Trying to force device /dev/sg$c to be in sequential mode." 1
179 /usr/bin/sg_reset -d /dev/sg$c
180 LogIt "Inserting modules `rev $OBDR_MODS`." 1
181 for m in `rev $OBDR_MODS`; do
182 modprobe $i
183 done
184 LogIt "Retry again as the device has been set back into sequential mode." 1
185 mt -f $tapedev fsf 2
186 res=$?
187 # exit the loop to continue and return if that previous mt failed.
188 # If it succeeded we transparently continue !!
189 break
190 else
191 LogIt "WARNING: Unable to reset /dev/sg$c as the sg_reset command is not availble." 1
192 fi
193 fi
194 else
195 LogIt "Device /dev/sg$c has an unknown type $devtype." 1
196 fi
197 c=`expr $c + 1`
198 done
199
200 if [ $res -ne 0 ]; then
201 cd $old_pwd
202 return $res
203 fi
204 fi
205
[1958]206 mt -f $tapedev fsf 2
[2915]207 # 32k is DEFAULT_INTERNAL_TAPE_BLOCK_SIZE
208 mt -f $tapedev setblk 32768
[1747]209 dd if=$tapedev bs=32k count=1024 | tar -zx
210 res=$?
211 if [ "$res" -eq "0" ] ; then
[1958]212 # Store the dev name in case we changed it interactively
[3274]213 if [ -f "/tmp/mondorestore.cfg" ]; then
214 sed -i "s/^media-dev .*$/media-dev $tapedev/" /tmp/mondorestore.cfg
[1983]215 fi
[1747]216 fi
217 cd $old_pwd
218 return $res
[1]219}
220
221HandleTape() {
[1747]222 local res tapedev
223 tapedev="" ; # will be set by UntarTapeStuff()
[1963]224
[1968]225 # Here we can add the USB storage module, it's working even with OBDR !
[2964]226 modprobe -q usb-storage 2> /dev/null
[1968]227 # Tape takes some time to appear
228 sleep 10
[1747]229 cd $GROOVY
[1958]230 UntarTapeStuff $tapedev
[1747]231 res=$?
[3124]232 tapedev="default tape device"
[1747]233 while [ "$res" -ne "0" ] ; do
234 LogIt "$tapedev failed to act as extended data disk for booting." 1
[3124]235 LogIt "Please specify an alternate non-rewinding tape device, such as /dev/nst0" 1
[1885]236 LogIt "or hit <Enter> to boot from another media." 1
[1747]237 echo -en "---> "
238 read tapedev
239 if [ "$tapedev" ] ; then
240 LogIt "User specified $tapedev instead"
241 UntarTapeStuff $tapedev
242 res=$?
243 else
244 LogIt "User opted not to specify an alternate tapedev"
245 res=1
[1]246 break
[1747]247 fi
248 done
[1962]249 # For post-init
250 export TAPEDEV=$tapedev
[1]251
[1747]252 if [ "$res" -ne "0" ] ; then
[1410]253 cd /
[1885]254 LogIt "Failed to use tape as extended datadisk. Reverting to another media." 1
255 HandleCDROM
[1410]256 res=$?
[1747]257 else
[1410]258 LogIt "Using tape as extended datadisk. Good." 3
259 echo "Using tape as extd ddisk." > /tmp/TAPEDEV-HAS-DATA-DISKS
260 res=0
[1747]261 CD_MOUNTED_OK=yes
262 fi
263 return $res
[1]264}
265
266
267
[1885]268HandleCDROM() {
[1825]269 # Just in case we have an iLO ensure we will map it correctly
[1830]270 echo "$DENY_MODS" | grep -q "usb-storage "
[1829]271 if [ $? -eq 0 ]; then
272 return
273 fi
[1826]274 echo "Activating a potential USB Storage device"
[2964]275 modprobe -q usb-storage 2> /dev/null
[1826]276 for i in 1 2 3 4 5 6 7 8 9 10 ; do
277 sleep 1
278 echo -en "."
279 done
[1825]280
[1747]281 find-and-mount-cdrom
282 res=$?
283 if [ "$res" -ne "0" ] ; then
[898]284 LogIt "First call to find-and-mount-cdrom failed." 1
285 LogIt "Sleeping for 3 seconds and trying again." 1
286 sleep 3
287 find-and-mount-cdrom
288 res=$?
[1747]289 fi
290 if [ "$res" -eq "0" ] ; then
[3274]291 LogIt "OK, I am running on a CD-ROM. Good." 1
[1747]292 CD_MOUNTED_OK=yes
293 else
[3274]294 LogIt "You probably not have the right drivers" 1
295 LogIt "to support the hardware on which we are running" 1
296 LogIt "Your archives are probably fine but" 1
297 LogIt "your tape streamer and/or CD-ROM drive are unsupported at that point." 1
[898]298 CD_MOUNTED_OK=""
[1747]299 fi
300 return 0
[1]301}
302
303
304PauseForRaids() {
[1747]305 if [ "`dmesg | grep -i "RAID Controller"`" != "" ] || [ "`dmesg | grep -i "Vendor: 3ware"`" != "" ] ; then
306 LogIt "RAID controller(s) detected. Pausing 10 seconds to let them warm up." 1
307 echo -en "Pausing..."
308 for i in 1 2 3 4 5 6 7 8 9 10 ; do
309 sleep 1
310 echo -en "$(($i*10))%..."
311 done
312 echo "Done."
313 fi
[1]314}
315
316
317# 06/13/2002 --- DuckX's & Hugo's new routine
318# 10/11/2003 --- added a simple devfsd.conf file
319# 01/24/2005 --- cater for arbitrary locations of devfsd.conf by using the
320# config file path compiled into devfsd
321RunDevfsd() {
[1747]322 loc=`which devfsd 2> /dev/null`
323 if [ "$loc" != "" ] ; then
[1]324 LogIt "Devfs found. Testing kernel support..."
325 if [ ! -e "/dev/.devfsd" ] ; then
[746]326 mount -t devfs devfs /dev 2>> $LOGFILE
[3274]327 if [ "$?" -ne "0" ] ; then
328 LogIt "Error while trying to mount devfs"
[1]329 else
[3274]330 LogIt "Devfs mounted OK"
[1]331 fi
332 fi
333 #check if the kernel supports devfs
334 if [ -e "/dev/.devfsd" ] ; then
335 [ -d "/proc/1" ] || mount -n /proc
336 LogIt "Kernel support found. Creating config file and starting devfsd"
[911]337 conffile=`strings $loc | grep -E "devfsd.conf$"`
[1]338 [ "$conffile" ] || conffile="/etc/devfsd.conf"
339 confpath=`echo $conffile | sed "s/\/devfsd\.conf$//"`
340 [ -d "$confpath" ] || mkdir -p $confpath
341 echo -en "REGISTER .* MKOLDCOMPAT\nUNREGISTER .* RMOLDCOMPAT\n" > $conffile
342 devfsd /dev &
343 sleep 5
344 else
345 LogIt "No devfs kernel support."
346 fi
[1747]347 fi
[1]348}
349
[1718]350# Taken from udev management in Mandriva 2008.0. Kudos guys
[2845]351MakeExtraNodes () {
[1718]352 # there are a few things that sysfs does not export for us.
353 # these things are listed in /etc/udev/links.conf
354 grep '^[^#]' /etc/udev-links.conf | \
355 while read type name arg1; do
356 [ "$type" -a "$name" -a ! -e "/dev/$name" -a ! -L "/dev/$name" ] ||continue
357 case "$type" in
358 L) ln -s $arg1 /dev/$name ;;
359 D) mkdir -p /dev/$name ;;
[1719]360 M) mknod /dev/$name $arg1 && chmod 600 /dev/$name;;
361 *) echo "udev-links.conf: unparseable line (%s %s %s)\n" "$type" "$name" "$arg1" ;;
[1718]362 esac
363 done
364}
365
[2845]366CreateDevMakedev() {
[1792]367 if [ -e /sbin/MAKEDEV ]; then
368 ln -sf /sbin/MAKEDEV /dev/MAKEDEV
369 else
370 ln -sf /bin/true /dev/MAKEDEV
371 fi
372}
[1718]373
[1716]374RunUdevd() {
[3274]375 # Initial Inspiration from Mandriva 2008.0 startup script
376 LogIt "Preparing udev environment..." 1
[1718]377 mv /dev /dev.static
378 mkdir /dev
379 mount -n -o size=5M,mode=0755 -t tmpfs none /dev
[2845]380 MakeExtraNodes
[1718]381 mount -n -t devpts -o mode=620 none /dev/pts
382 mount -n -t tmpfs none /dev/shm
[1789]383 if [ -e /proc/sys/kernel/hotplug ]; then
384 echo > /proc/sys/kernel/hotplug
385 fi
[1734]386 PKLVL=`cut -f1 /proc/sys/kernel/printk`
387 echo 0 > /proc/sys/kernel/printk
[2081]388 # Many possibilities depending on udev versions
[1759]389 if [ -x /sbin/startudev ]; then
390 /sbin/startudev
391 fi
[2081]392 if [ -x /sbin/start_udev ]; then
393 /sbin/start_udev
394 fi
[1759]395 # Depending on udevd version it gives back the hand or not :-(
[2673]396 ps | grep -v grep |grep udevd 2> /dev/null 1> /dev/null
[2437]397 if [ $? -ne 0 ]; then
[2965]398 if [ -x /sbin/udevd ]; then
399 /sbin/udevd --daemon &
400 elif [ -x /usr/bin/udevd ]; then
401 /usr/bin/udevd --daemon &
[3172]402 elif [ -x /usr/lib/systemd/systemd-udevd ]; then
[3274]403 # from https://github.com/hut/minirc/blob/master/rc
404 mkdir -p /run/systemd/journal
405 /usr/lib/systemd/systemd-udevd --daemon
406 udevadm trigger --action=add --type=subsystems
407 udevadm trigger --action=add --type=devices
[2965]408 fi
[2437]409 echo "Waiting for udev to start..."
410 sleep 5
[3274]411 LogIt "udev started manually" 1
[2437]412 fi
[1792]413 mkdir -p /dev/.udev/queue/
[1789]414 if [ -x /sbin/udevtrigger ]; then
415 /sbin/udevtrigger
416 fi
[2442]417 echo "Waiting for udev to discover..."
[2845]418 CreateDevMakedev
[2182]419 # Newer version use udevadm for that
[2437]420 if [ -x /sbin/udevsettle ]; then
[2442]421 /sbin/udevsettle --timeout=10
[2846]422 LogIt "Discovering with udevsettle"
[2965]423 elif [ -x /sbin/udevadm ] || [ -x /usr/bin/udevadm ]; then
424 ua=`UdevadmTrigger`
425 $ua settle --timeout=10
[2846]426 LogIt "Discovering with udevadm"
[1816]427 fi
[1824]428 # It seems we need to have more static devs on some distro were
429 # udev as some other requirements to be covered later on.
430 # So in the mean time:
431 for d in `ls /dev.static`; do
432 if [ ! -e /dev/$d ]; then
433 mv /dev.static/$d /dev
434 fi
435 done
[1816]436 echo $PKLVL > /proc/sys/kernel/printk
[1716]437}
[1]438
[1761]439RstHW() {
[1]440
[1761]441 # Restore the HW configuration if available (NOT by default)
442 answer="NO"
[1]443
[1815]444 grep -q nohw /proc/cmdline
445 if [ "$?" -eq 0 ]; then
446 return
447 fi
[1761]448 if [ -x ./mindi-rsthw ]; then
449 grep -q RESTORE /proc/cmdline
450 if [ "$?" -ne 0 ]; then
[1815]451 #clear
[1761]452 echo "*********************************************************************"
453 echo "Do you want to restore the HW configuration of the original machine ?"
454 echo "(This may dammage your hardware so be sure to check twice before saying yes)"
455 echo "*********************************************************************"
456 echo "Please confirm by typing YES exactly as written here (NO by default)"
457 echo -n "--> "
458 read answer
459 else
460 answer="YES"
461 fi
[1910]462 if [ "$answer" = "YES" ] ; then
[1761]463 ./mindi-rsthw
464 fi
465 fi
466}
[1]467
[1761]468
[1787]469StartUSBKbd() {
470# Prepare minimal USB env in case we have USB kbd such as with iLO
471[ -d /proc/bus/usb ] && ! grep -q /proc/bus/usb /proc/mounts && mount -t usbfs none /proc/bus/usb
[1830]472echo "$DENY_MODS" | grep -Eq 'uhcd_hci |usbhid |usbcore '
[1829]473if [ $? -eq 0 ]; then
474 return
475fi
[2964]476modprobe -q uhcd_hci 2> /dev/null
477modprobe -q usbhid 2> /dev/null
[1787]478}
[1]479
480
[1787]481
[1]482StartLvms() {
[2477]483 if [ "`grep -i nolvm /proc/cmdline`" ]; then
484 return;
485 fi
[1747]486 if [ -e "/tmp/i-want-my-lvm" ] ; then
[3274]487 # Recent LVM need this caching daemon to work
488 if [ -x /usr/sbin/lvmetad ]; then
489 /usr/sbin/lvmetad
490 fi
[1747]491 LogIt "Scanning LVM's..." 1
[739]492 if which lvm ; then
[2964]493 modprobe -q dm-mod 2> /dev/null
494 modprobe -q dm_mod 2> /dev/null
[2845]495 lvm vgscan --mknodes
[739]496 else
[2845]497 vgscan
[739]498 fi
[2533]499
500 # Exclude devices we may not want
501 rm -f /tmp/restorevgs
[2564]502 for d in $MINDI_EXCLUDE_DEVS ; do
[2580]503 echo "LVM exclusion == $d"
[2533]504 EXCLUDE_VGS=`grep " $d" /tmp/i-want-my-lvm | grep vgcreate | awk '{print $4}'`
505 vg=`echo $EXCLUDE_VGS | sed "s/ /|/g"`
506 if [ "$vg" != "" ]; then
507 re=" $d|$vg"
508 else
509 re=" $d"
510 fi
511 # Remove VGs from i-want-my-lvm
512 grep -Ev "$re" /tmp/i-want-my-lvm > /tmp/i-want-my-lvm.new
513 mv /tmp/i-want-my-lvm.new /tmp/i-want-my-lvm
514 # Prepare script to restore the VG exluded here if needed
515 for v in $EXCLUDE_VGS; do
516 echo "vgcfgrestore $v" >> /tmp/restorevgs
517 # Remove LVs from mountlist
518 EXCLUDE_LVS=`grep " $v" /tmp/i-want-my-lvm | grep lvcreate | sed "s/^.*-n \([^ ][^ ]*\) .*$/$1/"`
519 for l in $EXCLUDE_LVS; do
[2535]520 # FIXME: Should search for all possible device names here
[3203]521 if [ -f "/tmp/mountlist.txt" ]; then
522 grep -Ev "/dev/$v/$l" /tmp/mountlist.txt > /tmp/mountlist.txt.new
523 grep -Ev "/dev/mapper/${v}-$l" /tmp/mountlist.txt.new > /tmp/mountlist.txt
524 fi
[2533]525 done
526 done
527 done
528
[1747]529 grep -E "^#.*vgchange" /tmp/i-want-my-lvm | sed "s/^#[ ]*//" > /tmp/start-lvm
530 chmod +x /tmp/start-lvm
531 echo -en "Starting LVM's..."
532 /tmp/start-lvm &
533 for i in 1 2 3 4 5 ; do
[2845]534 echo -en "."
535 sleep 1
[1747]536 done
537 echo "Done."
538 fi
[1]539# If necessary, cannibalize 'analyze-my-lvm'; copy some of its code here,
540# pipe vgscan's output, strip it, run 'vgchange' on its output, etc.etc.
[1747]541 LogIt "LVM's have been started."
[1]542}
543
[2177]544StartPowerPath() {
[1]545
[2177]546 # Taken from the init script of EMC PowerPath on RHEL
[2845]547 if [ -f /etc/emcp_devicesDB.dat ]; then
548 if [ -f /etc/emcp_devicesDB.idx ]; then
549 /etc/opt/emcpower/emcpmgr map -p > /dev/null 2>&1
550 fi
551 fi
[2177]552
[2845]553 /sbin/powermt config > /dev/null 2>&1
554 # Wait for udev to finish creating emcpower devices
555 #
556 pdfound=1
557 for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15; do
558 pdfound=1
559 for pd in `/bin/ls -d /sys/block/emcpower* 2> /dev/null`; do
560 bpd=`basename $pd`
561 if [ ! -e /dev/$bpd ]; then
562 pdfound=0
563 sleep 2
564 break;
565 fi
566 done
567 if [ "$pdfound" -eq 1 ]; then
[2177]568 break
[2845]569 fi
570 done
571 if [ "$pdfound" -eq 0 ]; then
572 echo "Unable to start PowerPath"
573 fi
[2177]574
[2845]575 /sbin/powermt load > /dev/null 2>&1
576 /etc/opt/emcpower/emcpmgr map > /dev/null 2>&1
577 /etc/opt/emcpower/powercf -C > /dev/null 2>&1
578 if [ ! -e /etc/powermt.custom ]; then
579 /sbin/powermt save > /dev/null 2>&1
580 fi
581 /sbin/powermt register > /dev/null 2>&1
582 /sbin/powermig transition -startup -noprompt > /dev/null 2>&1
[2177]583}
584
[2072]585StartMpath() {
586 if [ "`grep -i nompath /proc/cmdline`" ]; then
587 return;
588 fi
[3203]589 if [ -f "/tmp/mountlist.txt" ] && [ "`grep mpath /tmp/mountlist.txt`" ]; then
[2353]590 if [ -x /sbin/multipath ]; then
591 echo "Starting Mpath..."
592 mkdir -p /var/lib/multipath
593 cat > /etc/multipath.conf << EOF
[2072]594defaults {
595 user_friendly_names yes
596}
597EOF
[2353]598 /sbin/multipath -v 0
599 if [ -x /sbin/kpartx ]; then
600 /sbin/dmsetup ls --target multipath --exec "/sbin/kpartx -a -p p"
601 fi
[2846]602 LogIt "Multipath started"
[2072]603 fi
604 fi
605}
606
[1]607StartRaids() {
[1747]608 local raid_devices i
[1273]609
[2353]610 if [ "`grep -i noraid /proc/cmdline`" ]; then
611 return;
612 fi
613
[3203]614 if [ -f "/tmp/mountlist.txt" ]; then
615 raid_devices=`grep /dev/md /tmp/mountlist.txt | cut -d' ' -f1`
616 else
617 raid_devices=""
618 fi
619
[623]620 if which raidstart > /dev/null 2> /dev/null ; then
[1747]621 for i in $raid_devices ; do
622 if grep `basename $i` /proc/mdstat > /dev/null 2> /dev/null ; then
623 LogIt "$i is started already; no need to run 'raidstart $i'" 1
624 else
[623]625 LogIt "Running 'raidstart $i'" 1
626 raidstart $i
[1747]627 fi
628 done
[623]629 elif which mdrun > /dev/null 2> /dev/null ; then
[2353]630 if [ "`grep -i nomd /proc/cmdline`" ]; then
631 return;
632 fi
[623]633 LogIt "Running 'mdrun'" 1
634 mdrun
[1273]635 elif which mdadm > /dev/null 2> /dev/null ; then
[2353]636 if [ "`grep -i nomd /proc/cmdline`" ]; then
637 return;
638 fi
[1273]639 LogIt "Running 'mdadm'" 1
640 for i in $raid_devices ; do
[1747]641 if grep `basename $i` /proc/mdstat > /dev/null 2> /dev/null ; then
642 LogIt "$i is started already; no need to run 'mdadm $i'" 1
643 else
[1610]644 if [ -f /etc/mdadm.conf ] ; then
645 LogIt "Running 'mdadm $i' with user supplied /etc/mdadm.conf" 1
646 mdadm -A $i -c /etc/mdadm.conf
647 elif [ -f /etc/mdadm/mdadm.conf ] ; then
648 LogIt "Running 'mdadm $i' with user supplied /etc/mdadm/mdadm.conf" 1
649 mdadm -A $i -c /etc/mdadm/mdadm.conf
650 else
651 LogIt "Running 'mdadm $i'" 1
652 mdadm -Ac partitions -m dev $i
653 fi
[1747]654 fi
655 done
[2075]656 elif which dmraid > /dev/null 2> /dev/null ; then
[2072]657 if [ "`grep -i nodmraid /proc/cmdline`" ]; then
658 return;
659 fi
660 for x in $(/sbin/dmraid -ay -i -p -t 2>/dev/null | grep -E -iv "^no " |awk -F ':' '{ print $1 }') ; do
661 echo "Please send the result of /sbin/dmraid -ay -i -p -t to the devteam !!!"
662 return
663 #dmname=$(resolve_dm_name $x)
664 #[ -z "$dmname" ] && continue
665 #/sbin/dmraid -ay -i -p "$dmname" >/dev/null 2>&1
666 #/sbin/kpartx -a -p p "/dev/mapper/$dmname"
667 done
[623]668 else
669 LogIt "Warning: Neither 'raidstart' nor 'mdrun''found. RAID devices may not have started." 1
670 fi
671
[1]672}
673
674
675TryAgainToFindCD() {
[1747]676 local res
677 mount | grep /mnt/cdrom && return 0
[3274]678 [ "`grep "backup_media_type" /tmp/mondorestore.cfg 2> /dev/null | grep "cdstream"`" ] && return
[1747]679 LogIt "Trying to mount CD-ROM a 2nd time..."
680 find-and-mount-cdrom --second-try
681 res=$?
682 if [ "$res" -eq "0" ] ; then
683 CD_MOUNTED_OK=yes
684 LogIt "CD-ROM drive mounted successfully." 1
685 else
686 LogIt "I still cannot find or mount the CD-ROM drive, by the way."
687 fi
[1]688}
689
690
691
692UseTmpfs()
693{
[1747]694 local mount_cmd
695 echo -en "Mounting /tmp/tmpfs..."
696 mkdir -p /tmp/tmpfs
[1]697# For technical reasons, some sets are as large as 16MB.
698# I am allowing 32MB because selective restore occupies a lot of space.
[3035]699 for size in 256m 128m 64m 48m 40m 32m ; do
[1747]700 mount_cmd="mount /dev/shm -t tmpfs -o size=$size" ; # was 34m until 04/2003
701 LogIt "Trying '$mount_cmd'"
702 $mount_cmd /tmp/tmpfs 2>> $LOGFILE
703 res=$?
704 [ "$res" -eq "0" ] && break
705 done
706 if [ "$res" -ne "0" ] ; then
707 LogIt "Failed. I could not run '$mount_cmd /tmp/tmpfs'. Your kernel is BROKEN or you do not have enough RAM." 1
708 umount /tmp/tmpfs > /dev/null 2> /dev/null
709 rmdir /tmp/tmpfs
[3274]710 ln -sf /mnt/RESTORING/tmp /tmp/tmpfs; # used by mondorestore
[1747]711 LogIt "Failed to mount /tmp/tmpfs; using ugly softlink instead"
712 else
713 LogIt "Great. Pivot succeeded w/ size=$size" 1
714 echo -en "Pivoting /tmp..."
715 umount /tmp/tmpfs
716 mkdir -p /tmp.old
[1752]717 mv /tmp/* /tmp.old/
718 # Try to Deal with a busybox bug on inexistant links
[1747]719 cp /tmp/* /tmp.old/
720 rm -f /tmp/*
721 $mount_cmd /tmp
[1752]722 mv /tmp.old/* /tmp/
723 # Try to Deal with a busybox bug on inexistant links
[1747]724 cp /tmp.old/* /tmp/
725 rm -rf /tmp.old
726 mkdir -p /tmp/tmpfs
727 mkdir -p $GROOVY
[1]728 echo "Done."
729 LogIt "Successfully mounted dynamic /tmp ramdisk"
730# mkdir -p /tmp/tmpfs/var
731# mv -f /var/log /tmp/tmpfs/var/log
732# ln -sf /tmp/tmpfs/var/log /var/log
[1747]733 fi
[1]734}
735
736
737WelcomeMessage()
738{
[1747]739 echo "********************************************************************"
740 echo "MINDI-LINUX by Mondo Dev Team - web site: http://www.mondorescue.org"
741 echo "Boot disk based on AlfaLinux & Trinux. BusyBox by Erik Andersen."
[1]742which petris > /dev/null 2> /dev/null && echo "Petris was written by Peter Seidler <p.seidler@mail1.stofanet.dk>."
[1747]743 echo "Executables and source code are covered by the GNU GPL. No warranty."
744 echo "running on $ARCH"
745 echo "********************************************************************"
[1]746}
747
748EnableCcissIfAppropriate() {
[2908]749 local f
[2913]750
751 # In some cases, the OBDR tape remains in CD-ROM mode. This branch solves that issue (#498)
[3274]752 if [ "`grep -i 'obdr ' /tmp/mondorestore.cfg 2>/dev/null`" ] && [ -x /usr/bin/hpsa_obdr_mode ]; then
[2925]753 for lun in `/usr/bin/hpsa_obdr_mode -m query /dev/cciss/* 2>&1 | grep "is an OBDR device" | cut -d' ' -f4`; do
[2913]754 /usr/bin/hpsa_obdr_mode -m query -l $lun /dev/cciss/* 2>&1 | grep -q "is in CD-ROM mode"
755 if [ $? -eq 0 ]; then
756 # This tape/lun should be brought back in Sequential mode
757 LogIt "Putting back tape $lun in Sequential mode..."
758 /usr/bin/hpsa_obdr_mode -m tape -l $lun /dev/cciss/* 2>&1 > /dev/null
759 fi
760 done
761 fi
762
763 # Now engage all Smart Array controllers to detect attached devices
[2955]764 if [ -d "/proc/driver/cciss" ]; then
765 for f in /proc/driver/cciss/cciss* ; do
766 LogIt "Engaging $f"
767 echo "engage scsi" > $f
768 LogIt "...result=$?"
769 done
770 fi
[1]771}
772
[1802]773ModprobeAllModules() {
[1]774
[2562]775 lismod=`find /lib/modules -name '*\.ko*' -o -name '*\.o*'`
776 # loading forced modules first
777 for m in $lismod; do
[1927]778 k=`basename $m | sed 's/\.ko.*$//'`
779 j=`basename $k | sed 's/\.o.*$//'`
[2562]780 echo "$FORCE_MODS" | grep -q "$j "
781 if [ $? -eq 0 ]; then
782 echo "Forcing first $j..."
[2964]783 modprobe -q $j 2> /dev/null
[2562]784 fi
785 done
786 for m in $lismod; do
787 k=`basename $m | sed 's/\.ko.*$//'`
788 j=`basename $k | sed 's/\.o.*$//'`
[1830]789 echo "$DENY_MODS" | grep -q "$j "
[1829]790 if [ $? -eq 0 ]; then
[1830]791 echo "Denying $j..."
[1829]792 continue
793 fi
[2562]794 echo "$FORCE_MODS" | grep -q "$j "
795 if [ $? -eq 0 ]; then
796 continue
797 fi
[1829]798 echo "Probing $j..."
[2964]799 modprobe -q $j 2> /dev/null
[1802]800 done
801}
802
[2755]803UdevadmTrigger() {
[2844]804
[2965]805# This function should just echo the return value $ua
806
[2844]807if [ -x /sbin/udevadm ]; then
[2965]808 ua="/sbin/udevadm"
809elif [ -x /usr/bin/udevadm ]; then
810 ua="/usr/bin/udevadm"
811else
812 LogIt "WARNING: Unable to find udevadm. Not triggering udev"
813 ua="/bin/true"
814fi
815
816v="`$ua --version`"
817
818if [ -x "$v" ]; then
819 LogIt "Triggering udev again..."
820 if [ "$v" -ge "146" -a "$v" -lt "174" ]; then
821 $ua trigger --type=failed
822 elif [ "$v" -lt "146" ]; then
823 $ua trigger --retry-failed
[2755]824 else
[2965]825 LogIt "... not needed"
[2755]826 fi
[2844]827fi
[2965]828echo $ua
[2755]829}
830
[287]831ExtractDataDisksAndLoadModules() {
[2846]832 LogIt "Installing additional tools ..." 1
[2888]833 # BCO: test return value
[287]834 install-additional-tools
[1800]835 # Keep the kernel silent again
836 PKLVL=`cut -f1 /proc/sys/kernel/printk`
[1802]837 echo 0 > /proc/sys/kernel/printk
[1922]838 ModprobeAllModules
[1800]839 echo $PKLVL > /proc/sys/kernel/printk
[2081]840
841 # Retry failed udev events now that local filesystems are mounted read-write
842 # (useful for rules creating network ifcfg files)
843 if [ -e "/tmp/USE-UDEV" ] ; then
[2965]844 ua=`UdevadmTrigger`
[2081]845 fi
[287]846}
[1]847
848# ------------------------ main -----------------------
849
[1698]850MINDI_VER=PBVER
851MINDI_REV=PBREV
[1]852trap CaughtSoftReset SIGTERM
[2964]853trap GetShell SIGINT
[1643]854LOGFILE=/var/log/mondorestore.log
[1236]855PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/mondo:/usr/games
[1]856GROOVY=/tmp/groovy-stuff
857USER=root
[2163]858ARCH=`uname -m`
[1]859
[2163]860export PATH GROOVY USER LOGFILE ARCH
861
[3274]862mount -o remount rw /
863rm -f $LOGFILE
[898]864
[3274]865# Creates log file
866LogIt ""
867echo "Welcome to init (from mindi ${MINDI_VER}-r${MINDI_REV})" | tee -a $LOGFILE
868
869mkdir /proc 2> /dev/null
870mount /proc /proc -v -t proc 2>> $LOGFILE
871mkdir /sys 2> /dev/null
872mount /sys /sys -v -t sysfs 2>> $LOGFILE
873
874# Redirect every message to the LOGFILE
875exec > >(tee -a ${LOGFILE})
876exec 2> >(tee -a ${LOGFILE} >&2)
877
[1]878[ ! "$GROOVY" ] && Die "I'm not groovy!"
[1885]879for i in $GROOVY /mnt/cdrom /mnt/isodir /var/local/petris /tmp/isodir; do
[1747]880 mkdir -p $i
[1]881done
[1824]882# For ESX 3
883[ -d /proc/vmware ] && ! grep -q /vmfs /proc/mounts && mount -t vmfs /vmfs /vmfs
[1]884
[1829]885if [ "`grep -i denymods /proc/cmdline`" ]; then
886 export DENY_MODS="`cat /proc/cmdline | sed 's~.*denymods=\"\(.*\)\".*~\1~'` mondonone"
[1830]887else
888 export DENY_MODS=" "
[1829]889fi
[3274]890if [ "`grep -i 'obdr ' /tmp/mondorestore.cfg 2> /dev/null`" ]; then
[1958]891 # Do not try to load usb storage when dealing with OBDR it makes the modprobe hang :-(
[1960]892 export DENY_MODS="usb-storage $DENY_MODS"
[1958]893fi
[1829]894if [ "`grep -i forcemods /proc/cmdline`" ]; then
895 export FORCE_MODS="`cat /proc/cmdline | sed 's~.*forcemods=\"\(.*\)\".*~\1~'` mondonone"
[1830]896else
897 export FORCE_MODS=" "
[1829]898fi
[2533]899if [ "`grep -i excludedevs /proc/cmdline`" ]; then
[2564]900 export MINDI_EXCLUDE_DEVS="`cat /proc/cmdline | sed 's~.*excludedevs=\"\(.*\)\".*~\1~'` mondonone"
[2580]901 for d in $MINDI_EXCLUDE_DEVS ; do
902 echo "Mountlist exclusion == $d"
[3203]903 if [ -e "/tmp/mountlist.txt" ]; then
904 perl -i -ne 'print $_ unless m~$d~' /tmp/mountlist.txt
905 fi
[2580]906 done
[2533]907else
[2564]908 export MINDI_EXCLUDE_DEVS=" "
[2533]909fi
[1829]910
[1826]911echo "Activating a potential USB keyboard/mouse"
[1787]912StartUSBKbd
913
[1720]914if [ -f /proc/sys/kernel/exec-shield ]; then
915 echo 0 > /proc/sys/kernel/exec-shield 2>> /dev/null
916fi
[1]917
[1729]918if [ -f /proc/modules ]; then
919 echo "/sbin/modprobe" > /proc/sys/kernel/modprobe
920fi
921
[1716]922if [ -e "/tmp/USE-UDEV" ] ; then
[1747]923 RunUdevd
[1716]924fi
[1798]925ExtractDevTarballs
[1]926LaunchTerminals
[1718]927
[3274]928# Keeping kernel silent for module insertion
[1789]929PKLVL=`cut -f1 /proc/sys/kernel/printk`
930echo 0 > /proc/sys/kernel/printk
[1922]931ModprobeAllModules
[1789]932echo $PKLVL > /proc/sys/kernel/printk
[1718]933
[1]934EnableCcissIfAppropriate
935#-------------------------------
936#WHOLIVESINAPINEAPPLEUNDERTHESEA#;# --- don't touch this :)
937#-------------------------------
938UseTmpfs
[3274]939if [ ! -e "/tmp/mondorestore.cfg" ] ; then
940 LogIt "Warning - /tmp/mondorestore.cfg not found"
[1]941fi
[2182]942if [ "`grep -i pxe /proc/cmdline`" ] || [ "`grep -i net /proc/cmdline`" ]; then
[2380]943 # We need to get here exported variables from start-netfs
944 . /sbin/start-netfs
[2182]945fi
[1]946
[3274]947if [ "`grep -i 'obdr ' /tmp/mondorestore.cfg 2>/dev/null`" ] || [ "`grep -i ' udev' /tmp/mondorestore.cfg 2>/dev/null`" ]; then
[1747]948 HandleTape
[287]949 ExtractDataDisksAndLoadModules
[737]950elif [ "`grep -i pxe /proc/cmdline`" ]; then
[287]951 # Simulate a local CD
952 echo "/mnt/cdrom" > /tmp/CDROM-LIVES-HERE
[1747]953 CD_MOUNTED_OK=yes
[287]954 ExtractDataDisksAndLoadModules
[2182]955 # Fake the conf file to force it to NFS mode, even if we made originally a CD (mandatory for mondorestore to work correctly)
[3274]956 sed -i "s/backup-media-type.*/backup-media-type netfs/" /tmp/mondorestore.cfg
957elif [ "`grep -i usb= /proc/cmdline`" ] || [ "`grep -i usb /tmp/mondorestore.cfg 2>/dev/null | grep media-type`" ]; then
[1747]958 . /sbin/start-usb
[1698]959
960 # Simulate a local CD
961 echo "/mnt/cdrom" > /tmp/CDROM-LIVES-HERE
[1747]962 CD_MOUNTED_OK=yes
[1698]963 ExtractDataDisksAndLoadModules
[1]964else
[1885]965 HandleCDROM
[287]966 ExtractDataDisksAndLoadModules
[2380]967 # We need to get here exported variables from start-netfs
968 . /sbin/start-netfs
[1]969fi
970res=$?
971ConfigureLoggingDaemons
972if [ -e "/tmp/USE-DEVFS" ] ; then
[2878]973 umount -d /mnt/cdrom 2> /dev/null
[1747]974 mv /dev/cdrom /cdrom.lnk 2> /dev/null
975 CD_MOUNTED_OK=""
976 RunDevfsd
[1]977fi
[1813]978LoadKeymap
979WelcomeMessage
980RstHW
[2559]981echo "Starting potential Raid/Multipath ..."
[2580]982[ -e "/tmp/mountlist.txt" ] && cp -f /tmp/mountlist.txt /tmp/mountlist.original
[1]983PauseForRaids
984StartRaids
[2072]985StartMpath
[1]986StartLvms
987CopyBootDevEntry
988mkdir -p /tmp/tmpfs
989sleep 2
990#clear
[3203]991if [ -e "/dev/md0" ] && [ ! -e "/dev/md/0" ] && [ -e "/tmp/mountlist.txt" ] && [ "`grep /dev/md/ /tmp/mountlist.txt`" != "" ] ; then
[1747]992 LogIt "Creating /dev/md/* softlinks just in case." 1
993 mkdir -p /dev/md
994 cp -af /dev/md0 /dev/md/0 2> /dev/null
995 cp -af /dev/md1 /dev/md/1 2> /dev/null
996 cp -af /dev/md2 /dev/md/2 2> /dev/null
[1]997fi
998
[241]999if ! [ "`grep -i "pxe" /proc/cmdline`" ] ; then
[1]1000 res="`cat /mnt/cdrom/archives/THIS-CD-NUMBER 2> /dev/null`"
1001 [ "$res" != "1" ] && [ "$res" != "" ] && Die "This is CD #$res in the series. Please insert CD #1."
1002 [ -e "/cdrom.lnk" ] && mv -f /cdrom.lnk /dev/cdrom && mount /dev/cdrom /mnt/cdrom && CD_MOUNTED_OK=yes
1003 [ "$CD_MOUNTED_OK" != "yes" ] && TryAgainToFindCD
1004 #mount | grep cdrom > /dev/null 2> /dev/null || mount /dev/cdrom /mnt/cdrom >> $LOGFILE 2>> $LOGFILE
1005fi
1006hack-cfg-if-necessary || LogIt "Cannot find hack-cfg-if-necessary"
1007
[1403]1008# Log some useful info
[1837]1009LogIt "init (from mindi v$MINDI_VER-r${MINDI_REV})"
[1413]1010LogIt "/proc/cmdline is:"
[2346]1011LogIt "----------"
[1403]1012cat /proc/cmdline >> $LOGFILE
[2346]1013LogIt "----------"
[1413]1014LogIt "df result:"
1015LogIt "----------"
[1403]1016df >> $LOGFILE
[1413]1017LogIt "-------------"
1018LogIt "mount result:"
1019LogIt "-------------"
[1403]1020mount >> $LOGFILE
[1413]1021LogIt "-------------"
1022LogIt "lsmod result:"
1023LogIt "-------------"
[1403]1024lsmod >> $LOGFILE
[1413]1025LogIt "-------------"
[1476]1026LogIt "dmesg result:"
1027LogIt "-------------"
1028dmesg >> $LOGFILE
[2015]1029LogIt "-------------"
[2979]1030LogIt "/proc/mdstat:" >> $LOGFILE
1031LogIt "-------------"
1032cat /proc/mdstat >> $LOGFILE
1033LogIt "-------------"
[2015]1034LogIt "/proc/swaps:" >> $LOGFILE
1035LogIt "-------------"
1036cat /proc/swaps >> $LOGFILE
1037LogIt "-------------"
1038LogIt "/proc/filesystems:" >> $LOGFILE
1039LogIt "-------------"
1040cat /proc/filesystems >> $LOGFILE
1041LogIt "-------------"
1042LogIt "/proc/partitions:" >> $LOGFILE
1043LogIt "-------------"
1044cat /proc/partitions >> $LOGFILE
[2346]1045LogIt "-------------"
1046LogIt "fdisk result:" >> $LOGFILE
1047LogIt "-------------"
1048fdisk -l >> $LOGFILE
[2768]1049LogIt "-------------"
[3274]1050if [ -f /tmp/mondorestore.cfg ]; then
1051 LogIt "/tmp/mondorestore.cfg result:" >> $LOGFILE
[2832]1052 LogIt "-------------"
[3274]1053 cat /tmp/mondorestore.cfg >> $LOGFILE
[2832]1054fi
[1403]1055
[1983]1056ide-opt
[1]1057
1058#ctrlaltdel soft
1059for i in null stdout stdin stderr ; do
[1747]1060 cp -af /dev/$i /tmp
[1]1061done
[2081]1062# Not sure it's still needed, but shouldn't hurt
1063if [ -e "/tmp/USE-UDEV" ] ; then
[2965]1064 ua=`UdevadmTrigger`
[2081]1065fi
[3274]1066if grep "backup-media-type" /tmp/mondorestore.cfg > /dev/null 2> /dev/null ; then
[1747]1067 LogIt "backup-media-type is specified in config file - great."
[2197]1068 LogIt "Calling post-init"
[2380]1069 # start-netfs moved it under /tmp as the NFS share is already unmounted
[3210]1070 if [ _"$pre" != _"" ] && [ "`echo $pre | grep -E '^/tmp/isodir'`" ]; then
[2533]1071 pre=`echo $pre | sed 's|^/tmp/isodir|/tmp|'`
[2255]1072 fi
[3210]1073 if [ _"$pre" != _"" ] && [ -x $pre ]; then
[2255]1074 echo "Executing preliminary script $pre"
1075 LogIt "Executing preliminary script $pre"
1076 $pre
1077 fi
[1747]1078 post-init
[1]1079else
[1747]1080 LogIt "backup-media-type is not specified in config file."
[1885]1081 LogIt "I think this media has no archives on it."
[1]1082fi
[2255]1083if [ "`grep -i "post=" /proc/cmdline`" ] ; then
[2249]1084 for i in `cat /proc/cmdline` ; do
[3210]1085 echo $i | grep -qi post= && post=`echo $i | cut -d= -f2`
[2249]1086 done
[2380]1087 # start-netfs moved it under /tmp as the NFS share is already unmounted
[2255]1088 if [ "`echo $post | grep -E '^/tmp/isodir'`" ]; then
1089 post=`echo $post | sed 's|^/tmp/isodir|/tmp|'`
[2253]1090 fi
[2581]1091 if [ -r $post ]; then
[2255]1092 echo "Executing final script $post"
1093 LogIt "Executing final script $post"
1094 if [ "`echo $post | grep -E '^/mnt/RESTORING'`" ]; then
[2253]1095 mount-me
1096 fi
[2581]1097 chmod 755 $post
[2255]1098 $post
1099 if [ "`echo $post | grep -E '^/mnt/RESTORING'`" ]; then
[2253]1100 unmount-me
1101 fi
[2249]1102 fi
1103fi
[1612]1104if grep "RESTORE" /proc/cmdline > /dev/null 2> /dev/null ; then
1105 echo "Rebooting in 10 seconds automatically as per reboot order"
1106 echo -en "Press ^C to interrupt if you have to ..."
1107 for i in 1 2 3 4 5 6 7 8 9 10 ; do
1108 sleep 1
1109 echo -en "."
1110 done
1111 echo "Boom."
1112 sleep 1
1113else
[2888]1114 GetShell
[1612]1115fi
[1]1116CaughtSoftReset
Note: See TracBrowser for help on using the repository browser.