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

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