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

Last change on this file since 3295 was 3295, checked in by Bruno Cornec, 11 years ago
  • Create /dev/shm in case it's not already done
  • Property svn:keywords set to Id
File size: 31.7 KB
RevLine 
[3274]1#!/bin/bash
[1]2#
[736]3# $Id: rcS 3295 2014-06-05 08:27:57Z 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
[3282]132 fname=`grep keymap-lives-here /tmp/mondorestore.cfg | cut -f2 -d' ' 2> /dev/null`
[1747]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
[3293]385 # Contributed during LinuxCon Japan !
386 if [ -x /usr/lib/systemd/systemd-udevd ]; then
387 mount -n -t devtmpfs none /dev
388 else
389 mount -n -o size=5M,mode=0755 -t tmpfs none /dev
390 MakeExtraNodes
391 mount -n -t devpts -o mode=620 none /dev/pts
392 fi
[3295]393 mkdir -p /dev/shm
[1718]394 mount -n -t tmpfs none /dev/shm
[1789]395 if [ -e /proc/sys/kernel/hotplug ]; then
396 echo > /proc/sys/kernel/hotplug
397 fi
[1734]398 PKLVL=`cut -f1 /proc/sys/kernel/printk`
399 echo 0 > /proc/sys/kernel/printk
[2081]400 # Many possibilities depending on udev versions
[1759]401 if [ -x /sbin/startudev ]; then
402 /sbin/startudev
403 fi
[2081]404 if [ -x /sbin/start_udev ]; then
405 /sbin/start_udev
406 fi
[1759]407 # Depending on udevd version it gives back the hand or not :-(
[2673]408 ps | grep -v grep |grep udevd 2> /dev/null 1> /dev/null
[2437]409 if [ $? -ne 0 ]; then
[3277]410 echo "Waiting for udev to start..."
[2965]411 if [ -x /sbin/udevd ]; then
412 /sbin/udevd --daemon &
413 elif [ -x /usr/bin/udevd ]; then
414 /usr/bin/udevd --daemon &
[3172]415 elif [ -x /usr/lib/systemd/systemd-udevd ]; then
[3274]416 # from https://github.com/hut/minirc/blob/master/rc
[3277]417 echo "INFO: This is the systemd version of udev"
[3293]418 # Contributed during LinuxCon Japan
419 #mkdir -p /run/systemd/journal
420 #mount -n -t tmpfs tmpfs /sys/fs/cgroup
[3285]421 #mount -n -t cgroup cgroup /sys/fs/cgroup/systemd
[3274]422 /usr/lib/systemd/systemd-udevd --daemon
423 udevadm trigger --action=add --type=subsystems
424 udevadm trigger --action=add --type=devices
[2965]425 fi
[2437]426 sleep 5
[3274]427 LogIt "udev started manually" 1
[2437]428 fi
[1792]429 mkdir -p /dev/.udev/queue/
[1789]430 if [ -x /sbin/udevtrigger ]; then
431 /sbin/udevtrigger
432 fi
[2442]433 echo "Waiting for udev to discover..."
[2845]434 CreateDevMakedev
[2182]435 # Newer version use udevadm for that
[2437]436 if [ -x /sbin/udevsettle ]; then
[2442]437 /sbin/udevsettle --timeout=10
[2846]438 LogIt "Discovering with udevsettle"
[2965]439 elif [ -x /sbin/udevadm ] || [ -x /usr/bin/udevadm ]; then
440 ua=`UdevadmTrigger`
441 $ua settle --timeout=10
[2846]442 LogIt "Discovering with udevadm"
[1816]443 fi
[1824]444 # It seems we need to have more static devs on some distro were
445 # udev as some other requirements to be covered later on.
446 # So in the mean time:
447 for d in `ls /dev.static`; do
448 if [ ! -e /dev/$d ]; then
449 mv /dev.static/$d /dev
450 fi
451 done
[1816]452 echo $PKLVL > /proc/sys/kernel/printk
[1716]453}
[1]454
[1761]455RstHW() {
[1]456
[1761]457 # Restore the HW configuration if available (NOT by default)
458 answer="NO"
[1]459
[1815]460 grep -q nohw /proc/cmdline
461 if [ "$?" -eq 0 ]; then
462 return
463 fi
[1761]464 if [ -x ./mindi-rsthw ]; then
465 grep -q RESTORE /proc/cmdline
466 if [ "$?" -ne 0 ]; then
[1815]467 #clear
[1761]468 echo "*********************************************************************"
469 echo "Do you want to restore the HW configuration of the original machine ?"
470 echo "(This may dammage your hardware so be sure to check twice before saying yes)"
471 echo "*********************************************************************"
472 echo "Please confirm by typing YES exactly as written here (NO by default)"
473 echo -n "--> "
474 read answer
475 else
476 answer="YES"
477 fi
[1910]478 if [ "$answer" = "YES" ] ; then
[1761]479 ./mindi-rsthw
480 fi
481 fi
482}
[1]483
[1761]484
[1787]485StartUSBKbd() {
486# Prepare minimal USB env in case we have USB kbd such as with iLO
487[ -d /proc/bus/usb ] && ! grep -q /proc/bus/usb /proc/mounts && mount -t usbfs none /proc/bus/usb
[1830]488echo "$DENY_MODS" | grep -Eq 'uhcd_hci |usbhid |usbcore '
[1829]489if [ $? -eq 0 ]; then
490 return
491fi
[2964]492modprobe -q uhcd_hci 2> /dev/null
493modprobe -q usbhid 2> /dev/null
[1787]494}
[1]495
496
[1787]497
[1]498StartLvms() {
[2477]499 if [ "`grep -i nolvm /proc/cmdline`" ]; then
500 return;
501 fi
[1747]502 if [ -e "/tmp/i-want-my-lvm" ] ; then
[3274]503 # Recent LVM need this caching daemon to work
504 if [ -x /usr/sbin/lvmetad ]; then
[3277]505 mkdir -p /run/lvm
[3274]506 /usr/sbin/lvmetad
507 fi
[1747]508 LogIt "Scanning LVM's..." 1
[739]509 if which lvm ; then
[2964]510 modprobe -q dm-mod 2> /dev/null
511 modprobe -q dm_mod 2> /dev/null
[2845]512 lvm vgscan --mknodes
[739]513 else
[2845]514 vgscan
[739]515 fi
[2533]516
517 # Exclude devices we may not want
518 rm -f /tmp/restorevgs
[2564]519 for d in $MINDI_EXCLUDE_DEVS ; do
[2580]520 echo "LVM exclusion == $d"
[3286]521 # LVM: $4 to be checked if changed
[2533]522 EXCLUDE_VGS=`grep " $d" /tmp/i-want-my-lvm | grep vgcreate | awk '{print $4}'`
523 vg=`echo $EXCLUDE_VGS | sed "s/ /|/g"`
524 if [ "$vg" != "" ]; then
525 re=" $d|$vg"
526 else
527 re=" $d"
528 fi
529 # Remove VGs from i-want-my-lvm
530 grep -Ev "$re" /tmp/i-want-my-lvm > /tmp/i-want-my-lvm.new
531 mv /tmp/i-want-my-lvm.new /tmp/i-want-my-lvm
532 # Prepare script to restore the VG exluded here if needed
533 for v in $EXCLUDE_VGS; do
534 echo "vgcfgrestore $v" >> /tmp/restorevgs
535 # Remove LVs from mountlist
[3286]536 # LVM: sed to be checked if changed
[2533]537 EXCLUDE_LVS=`grep " $v" /tmp/i-want-my-lvm | grep lvcreate | sed "s/^.*-n \([^ ][^ ]*\) .*$/$1/"`
538 for l in $EXCLUDE_LVS; do
[2535]539 # FIXME: Should search for all possible device names here
[3203]540 if [ -f "/tmp/mountlist.txt" ]; then
541 grep -Ev "/dev/$v/$l" /tmp/mountlist.txt > /tmp/mountlist.txt.new
542 grep -Ev "/dev/mapper/${v}-$l" /tmp/mountlist.txt.new > /tmp/mountlist.txt
543 fi
[2533]544 done
545 done
546 done
547
[3286]548 # LVM: remove #
[1747]549 grep -E "^#.*vgchange" /tmp/i-want-my-lvm | sed "s/^#[ ]*//" > /tmp/start-lvm
550 chmod +x /tmp/start-lvm
551 echo -en "Starting LVM's..."
552 /tmp/start-lvm &
553 for i in 1 2 3 4 5 ; do
[2845]554 echo -en "."
555 sleep 1
[1747]556 done
557 echo "Done."
558 fi
[1]559# If necessary, cannibalize 'analyze-my-lvm'; copy some of its code here,
560# pipe vgscan's output, strip it, run 'vgchange' on its output, etc.etc.
[1747]561 LogIt "LVM's have been started."
[1]562}
563
[2177]564StartPowerPath() {
[1]565
[2177]566 # Taken from the init script of EMC PowerPath on RHEL
[2845]567 if [ -f /etc/emcp_devicesDB.dat ]; then
568 if [ -f /etc/emcp_devicesDB.idx ]; then
569 /etc/opt/emcpower/emcpmgr map -p > /dev/null 2>&1
570 fi
571 fi
[2177]572
[2845]573 /sbin/powermt config > /dev/null 2>&1
574 # Wait for udev to finish creating emcpower devices
575 #
576 pdfound=1
577 for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15; do
578 pdfound=1
579 for pd in `/bin/ls -d /sys/block/emcpower* 2> /dev/null`; do
580 bpd=`basename $pd`
581 if [ ! -e /dev/$bpd ]; then
582 pdfound=0
583 sleep 2
584 break;
585 fi
586 done
587 if [ "$pdfound" -eq 1 ]; then
[2177]588 break
[2845]589 fi
590 done
591 if [ "$pdfound" -eq 0 ]; then
592 echo "Unable to start PowerPath"
593 fi
[2177]594
[2845]595 /sbin/powermt load > /dev/null 2>&1
596 /etc/opt/emcpower/emcpmgr map > /dev/null 2>&1
597 /etc/opt/emcpower/powercf -C > /dev/null 2>&1
598 if [ ! -e /etc/powermt.custom ]; then
599 /sbin/powermt save > /dev/null 2>&1
600 fi
601 /sbin/powermt register > /dev/null 2>&1
602 /sbin/powermig transition -startup -noprompt > /dev/null 2>&1
[2177]603}
604
[2072]605StartMpath() {
606 if [ "`grep -i nompath /proc/cmdline`" ]; then
607 return;
608 fi
[3203]609 if [ -f "/tmp/mountlist.txt" ] && [ "`grep mpath /tmp/mountlist.txt`" ]; then
[2353]610 if [ -x /sbin/multipath ]; then
611 echo "Starting Mpath..."
612 mkdir -p /var/lib/multipath
613 cat > /etc/multipath.conf << EOF
[2072]614defaults {
615 user_friendly_names yes
616}
617EOF
[2353]618 /sbin/multipath -v 0
619 if [ -x /sbin/kpartx ]; then
620 /sbin/dmsetup ls --target multipath --exec "/sbin/kpartx -a -p p"
621 fi
[2846]622 LogIt "Multipath started"
[2072]623 fi
624 fi
625}
626
[1]627StartRaids() {
[1747]628 local raid_devices i
[1273]629
[2353]630 if [ "`grep -i noraid /proc/cmdline`" ]; then
631 return;
632 fi
633
[3203]634 if [ -f "/tmp/mountlist.txt" ]; then
635 raid_devices=`grep /dev/md /tmp/mountlist.txt | cut -d' ' -f1`
636 else
637 raid_devices=""
638 fi
639
[623]640 if which raidstart > /dev/null 2> /dev/null ; then
[1747]641 for i in $raid_devices ; do
642 if grep `basename $i` /proc/mdstat > /dev/null 2> /dev/null ; then
643 LogIt "$i is started already; no need to run 'raidstart $i'" 1
644 else
[623]645 LogIt "Running 'raidstart $i'" 1
646 raidstart $i
[1747]647 fi
648 done
[623]649 elif which mdrun > /dev/null 2> /dev/null ; then
[2353]650 if [ "`grep -i nomd /proc/cmdline`" ]; then
651 return;
652 fi
[623]653 LogIt "Running 'mdrun'" 1
654 mdrun
[1273]655 elif which mdadm > /dev/null 2> /dev/null ; then
[2353]656 if [ "`grep -i nomd /proc/cmdline`" ]; then
657 return;
658 fi
[1273]659 LogIt "Running 'mdadm'" 1
660 for i in $raid_devices ; do
[1747]661 if grep `basename $i` /proc/mdstat > /dev/null 2> /dev/null ; then
662 LogIt "$i is started already; no need to run 'mdadm $i'" 1
663 else
[1610]664 if [ -f /etc/mdadm.conf ] ; then
665 LogIt "Running 'mdadm $i' with user supplied /etc/mdadm.conf" 1
666 mdadm -A $i -c /etc/mdadm.conf
667 elif [ -f /etc/mdadm/mdadm.conf ] ; then
668 LogIt "Running 'mdadm $i' with user supplied /etc/mdadm/mdadm.conf" 1
669 mdadm -A $i -c /etc/mdadm/mdadm.conf
670 else
671 LogIt "Running 'mdadm $i'" 1
672 mdadm -Ac partitions -m dev $i
673 fi
[1747]674 fi
675 done
[2075]676 elif which dmraid > /dev/null 2> /dev/null ; then
[2072]677 if [ "`grep -i nodmraid /proc/cmdline`" ]; then
678 return;
679 fi
680 for x in $(/sbin/dmraid -ay -i -p -t 2>/dev/null | grep -E -iv "^no " |awk -F ':' '{ print $1 }') ; do
681 echo "Please send the result of /sbin/dmraid -ay -i -p -t to the devteam !!!"
682 return
683 #dmname=$(resolve_dm_name $x)
684 #[ -z "$dmname" ] && continue
685 #/sbin/dmraid -ay -i -p "$dmname" >/dev/null 2>&1
686 #/sbin/kpartx -a -p p "/dev/mapper/$dmname"
687 done
[623]688 else
689 LogIt "Warning: Neither 'raidstart' nor 'mdrun''found. RAID devices may not have started." 1
690 fi
691
[1]692}
693
694
695TryAgainToFindCD() {
[1747]696 local res
697 mount | grep /mnt/cdrom && return 0
[3274]698 [ "`grep "backup_media_type" /tmp/mondorestore.cfg 2> /dev/null | grep "cdstream"`" ] && return
[1747]699 LogIt "Trying to mount CD-ROM a 2nd time..."
700 find-and-mount-cdrom --second-try
701 res=$?
702 if [ "$res" -eq "0" ] ; then
703 CD_MOUNTED_OK=yes
704 LogIt "CD-ROM drive mounted successfully." 1
705 else
706 LogIt "I still cannot find or mount the CD-ROM drive, by the way."
707 fi
[1]708}
709
710
711
712UseTmpfs()
713{
[1747]714 local mount_cmd
715 echo -en "Mounting /tmp/tmpfs..."
716 mkdir -p /tmp/tmpfs
[1]717# For technical reasons, some sets are as large as 16MB.
718# I am allowing 32MB because selective restore occupies a lot of space.
[3035]719 for size in 256m 128m 64m 48m 40m 32m ; do
[1747]720 mount_cmd="mount /dev/shm -t tmpfs -o size=$size" ; # was 34m until 04/2003
721 LogIt "Trying '$mount_cmd'"
722 $mount_cmd /tmp/tmpfs 2>> $LOGFILE
723 res=$?
724 [ "$res" -eq "0" ] && break
725 done
726 if [ "$res" -ne "0" ] ; then
727 LogIt "Failed. I could not run '$mount_cmd /tmp/tmpfs'. Your kernel is BROKEN or you do not have enough RAM." 1
728 umount /tmp/tmpfs > /dev/null 2> /dev/null
729 rmdir /tmp/tmpfs
[3274]730 ln -sf /mnt/RESTORING/tmp /tmp/tmpfs; # used by mondorestore
[1747]731 LogIt "Failed to mount /tmp/tmpfs; using ugly softlink instead"
732 else
733 LogIt "Great. Pivot succeeded w/ size=$size" 1
734 echo -en "Pivoting /tmp..."
735 umount /tmp/tmpfs
736 mkdir -p /tmp.old
[1752]737 mv /tmp/* /tmp.old/
738 # Try to Deal with a busybox bug on inexistant links
[1747]739 cp /tmp/* /tmp.old/
740 rm -f /tmp/*
741 $mount_cmd /tmp
[1752]742 mv /tmp.old/* /tmp/
743 # Try to Deal with a busybox bug on inexistant links
[1747]744 cp /tmp.old/* /tmp/
745 rm -rf /tmp.old
746 mkdir -p /tmp/tmpfs
747 mkdir -p $GROOVY
[1]748 echo "Done."
749 LogIt "Successfully mounted dynamic /tmp ramdisk"
750# mkdir -p /tmp/tmpfs/var
751# mv -f /var/log /tmp/tmpfs/var/log
752# ln -sf /tmp/tmpfs/var/log /var/log
[1747]753 fi
[1]754}
755
756
757WelcomeMessage()
758{
[1747]759 echo "********************************************************************"
760 echo "MINDI-LINUX by Mondo Dev Team - web site: http://www.mondorescue.org"
761 echo "Boot disk based on AlfaLinux & Trinux. BusyBox by Erik Andersen."
[1]762which petris > /dev/null 2> /dev/null && echo "Petris was written by Peter Seidler <p.seidler@mail1.stofanet.dk>."
[1747]763 echo "Executables and source code are covered by the GNU GPL. No warranty."
764 echo "running on $ARCH"
765 echo "********************************************************************"
[1]766}
767
768EnableCcissIfAppropriate() {
[2908]769 local f
[2913]770
771 # In some cases, the OBDR tape remains in CD-ROM mode. This branch solves that issue (#498)
[3274]772 if [ "`grep -i 'obdr ' /tmp/mondorestore.cfg 2>/dev/null`" ] && [ -x /usr/bin/hpsa_obdr_mode ]; then
[2925]773 for lun in `/usr/bin/hpsa_obdr_mode -m query /dev/cciss/* 2>&1 | grep "is an OBDR device" | cut -d' ' -f4`; do
[2913]774 /usr/bin/hpsa_obdr_mode -m query -l $lun /dev/cciss/* 2>&1 | grep -q "is in CD-ROM mode"
775 if [ $? -eq 0 ]; then
776 # This tape/lun should be brought back in Sequential mode
777 LogIt "Putting back tape $lun in Sequential mode..."
778 /usr/bin/hpsa_obdr_mode -m tape -l $lun /dev/cciss/* 2>&1 > /dev/null
779 fi
780 done
781 fi
782
783 # Now engage all Smart Array controllers to detect attached devices
[2955]784 if [ -d "/proc/driver/cciss" ]; then
785 for f in /proc/driver/cciss/cciss* ; do
786 LogIt "Engaging $f"
787 echo "engage scsi" > $f
788 LogIt "...result=$?"
789 done
790 fi
[1]791}
792
[1802]793ModprobeAllModules() {
[1]794
[3278]795 echo "Searching for modules to install..."
[2562]796 lismod=`find /lib/modules -name '*\.ko*' -o -name '*\.o*'`
797 # loading forced modules first
798 for m in $lismod; do
[1927]799 k=`basename $m | sed 's/\.ko.*$//'`
800 j=`basename $k | sed 's/\.o.*$//'`
[2562]801 echo "$FORCE_MODS" | grep -q "$j "
802 if [ $? -eq 0 ]; then
803 echo "Forcing first $j..."
[2964]804 modprobe -q $j 2> /dev/null
[2562]805 fi
806 done
807 for m in $lismod; do
808 k=`basename $m | sed 's/\.ko.*$//'`
809 j=`basename $k | sed 's/\.o.*$//'`
[1830]810 echo "$DENY_MODS" | grep -q "$j "
[1829]811 if [ $? -eq 0 ]; then
[1830]812 echo "Denying $j..."
[1829]813 continue
814 fi
[2562]815 echo "$FORCE_MODS" | grep -q "$j "
816 if [ $? -eq 0 ]; then
817 continue
818 fi
[1829]819 echo "Probing $j..."
[2964]820 modprobe -q $j 2> /dev/null
[1802]821 done
822}
823
[2755]824UdevadmTrigger() {
[2844]825
[2965]826# This function should just echo the return value $ua
827
[2844]828if [ -x /sbin/udevadm ]; then
[2965]829 ua="/sbin/udevadm"
830elif [ -x /usr/bin/udevadm ]; then
831 ua="/usr/bin/udevadm"
832else
833 LogIt "WARNING: Unable to find udevadm. Not triggering udev"
834 ua="/bin/true"
835fi
836
837v="`$ua --version`"
838
839if [ -x "$v" ]; then
840 LogIt "Triggering udev again..."
841 if [ "$v" -ge "146" -a "$v" -lt "174" ]; then
842 $ua trigger --type=failed
843 elif [ "$v" -lt "146" ]; then
844 $ua trigger --retry-failed
[2755]845 else
[2965]846 LogIt "... not needed"
[2755]847 fi
[2844]848fi
[2965]849echo $ua
[2755]850}
851
[287]852ExtractDataDisksAndLoadModules() {
[2846]853 LogIt "Installing additional tools ..." 1
[2888]854 # BCO: test return value
[287]855 install-additional-tools
[1800]856 # Keep the kernel silent again
857 PKLVL=`cut -f1 /proc/sys/kernel/printk`
[1802]858 echo 0 > /proc/sys/kernel/printk
[1922]859 ModprobeAllModules
[1800]860 echo $PKLVL > /proc/sys/kernel/printk
[2081]861
862 # Retry failed udev events now that local filesystems are mounted read-write
863 # (useful for rules creating network ifcfg files)
864 if [ -e "/tmp/USE-UDEV" ] ; then
[2965]865 ua=`UdevadmTrigger`
[2081]866 fi
[287]867}
[1]868
869# ------------------------ main -----------------------
870
[1698]871MINDI_VER=PBVER
872MINDI_REV=PBREV
[1]873trap CaughtSoftReset SIGTERM
[2964]874trap GetShell SIGINT
[1643]875LOGFILE=/var/log/mondorestore.log
[1236]876PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/mondo:/usr/games
[1]877GROOVY=/tmp/groovy-stuff
878USER=root
[2163]879ARCH=`uname -m`
[1]880
[2163]881export PATH GROOVY USER LOGFILE ARCH
882
[3274]883mount -o remount rw /
884rm -f $LOGFILE
[898]885
[3277]886mkdir /proc 2> /dev/null
887mount /proc /proc -t proc
888
[3274]889# Creates log file
890LogIt ""
[3279]891# Backup fd
892exec 4>&2 5>&1
[3277]893# Redirect every message to the LOGFILE
894exec > >(tee -a ${LOGFILE})
895exec 2> >(tee -a ${LOGFILE} >&2)
896
[3278]897echo "Welcome to init (from mindi ${MINDI_VER}-r${MINDI_REV})"
[3274]898
899mkdir /sys 2> /dev/null
[3277]900mount /sys /sys -t sysfs
[3274]901
[1]902[ ! "$GROOVY" ] && Die "I'm not groovy!"
[1885]903for i in $GROOVY /mnt/cdrom /mnt/isodir /var/local/petris /tmp/isodir; do
[1747]904 mkdir -p $i
[1]905done
[1824]906# For ESX 3
907[ -d /proc/vmware ] && ! grep -q /vmfs /proc/mounts && mount -t vmfs /vmfs /vmfs
[1]908
[1829]909if [ "`grep -i denymods /proc/cmdline`" ]; then
910 export DENY_MODS="`cat /proc/cmdline | sed 's~.*denymods=\"\(.*\)\".*~\1~'` mondonone"
[1830]911else
912 export DENY_MODS=" "
[1829]913fi
[3274]914if [ "`grep -i 'obdr ' /tmp/mondorestore.cfg 2> /dev/null`" ]; then
[1958]915 # Do not try to load usb storage when dealing with OBDR it makes the modprobe hang :-(
[1960]916 export DENY_MODS="usb-storage $DENY_MODS"
[1958]917fi
[1829]918if [ "`grep -i forcemods /proc/cmdline`" ]; then
919 export FORCE_MODS="`cat /proc/cmdline | sed 's~.*forcemods=\"\(.*\)\".*~\1~'` mondonone"
[1830]920else
921 export FORCE_MODS=" "
[1829]922fi
[2533]923if [ "`grep -i excludedevs /proc/cmdline`" ]; then
[2564]924 export MINDI_EXCLUDE_DEVS="`cat /proc/cmdline | sed 's~.*excludedevs=\"\(.*\)\".*~\1~'` mondonone"
[2580]925 for d in $MINDI_EXCLUDE_DEVS ; do
926 echo "Mountlist exclusion == $d"
[3203]927 if [ -e "/tmp/mountlist.txt" ]; then
928 perl -i -ne 'print $_ unless m~$d~' /tmp/mountlist.txt
929 fi
[2580]930 done
[2533]931else
[2564]932 export MINDI_EXCLUDE_DEVS=" "
[2533]933fi
[1829]934
[1826]935echo "Activating a potential USB keyboard/mouse"
[1787]936StartUSBKbd
937
[1720]938if [ -f /proc/sys/kernel/exec-shield ]; then
939 echo 0 > /proc/sys/kernel/exec-shield 2>> /dev/null
940fi
[1]941
[1729]942if [ -f /proc/modules ]; then
943 echo "/sbin/modprobe" > /proc/sys/kernel/modprobe
944fi
945
[1716]946if [ -e "/tmp/USE-UDEV" ] ; then
[1747]947 RunUdevd
[1716]948fi
[1798]949ExtractDevTarballs
[1]950LaunchTerminals
[1718]951
[3274]952# Keeping kernel silent for module insertion
[1789]953PKLVL=`cut -f1 /proc/sys/kernel/printk`
954echo 0 > /proc/sys/kernel/printk
[1922]955ModprobeAllModules
[1789]956echo $PKLVL > /proc/sys/kernel/printk
[1718]957
[1]958EnableCcissIfAppropriate
959#-------------------------------
960#WHOLIVESINAPINEAPPLEUNDERTHESEA#;# --- don't touch this :)
961#-------------------------------
962UseTmpfs
[3274]963if [ ! -e "/tmp/mondorestore.cfg" ] ; then
964 LogIt "Warning - /tmp/mondorestore.cfg not found"
[1]965fi
[2182]966if [ "`grep -i pxe /proc/cmdline`" ] || [ "`grep -i net /proc/cmdline`" ]; then
[2380]967 # We need to get here exported variables from start-netfs
968 . /sbin/start-netfs
[2182]969fi
[1]970
[3274]971if [ "`grep -i 'obdr ' /tmp/mondorestore.cfg 2>/dev/null`" ] || [ "`grep -i ' udev' /tmp/mondorestore.cfg 2>/dev/null`" ]; then
[1747]972 HandleTape
[287]973 ExtractDataDisksAndLoadModules
[737]974elif [ "`grep -i pxe /proc/cmdline`" ]; then
[287]975 # Simulate a local CD
976 echo "/mnt/cdrom" > /tmp/CDROM-LIVES-HERE
[1747]977 CD_MOUNTED_OK=yes
[287]978 ExtractDataDisksAndLoadModules
[2182]979 # Fake the conf file to force it to NFS mode, even if we made originally a CD (mandatory for mondorestore to work correctly)
[3274]980 sed -i "s/backup-media-type.*/backup-media-type netfs/" /tmp/mondorestore.cfg
981elif [ "`grep -i usb= /proc/cmdline`" ] || [ "`grep -i usb /tmp/mondorestore.cfg 2>/dev/null | grep media-type`" ]; then
[1747]982 . /sbin/start-usb
[1698]983
984 # Simulate a local CD
985 echo "/mnt/cdrom" > /tmp/CDROM-LIVES-HERE
[1747]986 CD_MOUNTED_OK=yes
[1698]987 ExtractDataDisksAndLoadModules
[1]988else
[1885]989 HandleCDROM
[287]990 ExtractDataDisksAndLoadModules
[2380]991 # We need to get here exported variables from start-netfs
992 . /sbin/start-netfs
[1]993fi
994res=$?
995ConfigureLoggingDaemons
996if [ -e "/tmp/USE-DEVFS" ] ; then
[2878]997 umount -d /mnt/cdrom 2> /dev/null
[1747]998 mv /dev/cdrom /cdrom.lnk 2> /dev/null
999 CD_MOUNTED_OK=""
1000 RunDevfsd
[1]1001fi
[1813]1002LoadKeymap
1003WelcomeMessage
1004RstHW
[2559]1005echo "Starting potential Raid/Multipath ..."
[2580]1006[ -e "/tmp/mountlist.txt" ] && cp -f /tmp/mountlist.txt /tmp/mountlist.original
[1]1007PauseForRaids
1008StartRaids
[2072]1009StartMpath
[1]1010StartLvms
1011CopyBootDevEntry
1012mkdir -p /tmp/tmpfs
1013sleep 2
1014#clear
[3203]1015if [ -e "/dev/md0" ] && [ ! -e "/dev/md/0" ] && [ -e "/tmp/mountlist.txt" ] && [ "`grep /dev/md/ /tmp/mountlist.txt`" != "" ] ; then
[1747]1016 LogIt "Creating /dev/md/* softlinks just in case." 1
1017 mkdir -p /dev/md
1018 cp -af /dev/md0 /dev/md/0 2> /dev/null
1019 cp -af /dev/md1 /dev/md/1 2> /dev/null
1020 cp -af /dev/md2 /dev/md/2 2> /dev/null
[1]1021fi
1022
[241]1023if ! [ "`grep -i "pxe" /proc/cmdline`" ] ; then
[1]1024 res="`cat /mnt/cdrom/archives/THIS-CD-NUMBER 2> /dev/null`"
1025 [ "$res" != "1" ] && [ "$res" != "" ] && Die "This is CD #$res in the series. Please insert CD #1."
1026 [ -e "/cdrom.lnk" ] && mv -f /cdrom.lnk /dev/cdrom && mount /dev/cdrom /mnt/cdrom && CD_MOUNTED_OK=yes
1027 [ "$CD_MOUNTED_OK" != "yes" ] && TryAgainToFindCD
1028 #mount | grep cdrom > /dev/null 2> /dev/null || mount /dev/cdrom /mnt/cdrom >> $LOGFILE 2>> $LOGFILE
1029fi
1030hack-cfg-if-necessary || LogIt "Cannot find hack-cfg-if-necessary"
1031
[1403]1032# Log some useful info
[1837]1033LogIt "init (from mindi v$MINDI_VER-r${MINDI_REV})"
[1413]1034LogIt "/proc/cmdline is:"
[2346]1035LogIt "----------"
[1403]1036cat /proc/cmdline >> $LOGFILE
[2346]1037LogIt "----------"
[1413]1038LogIt "df result:"
1039LogIt "----------"
[1403]1040df >> $LOGFILE
[1413]1041LogIt "-------------"
1042LogIt "mount result:"
1043LogIt "-------------"
[1403]1044mount >> $LOGFILE
[1413]1045LogIt "-------------"
1046LogIt "lsmod result:"
1047LogIt "-------------"
[1403]1048lsmod >> $LOGFILE
[1413]1049LogIt "-------------"
[1476]1050LogIt "dmesg result:"
1051LogIt "-------------"
1052dmesg >> $LOGFILE
[2015]1053LogIt "-------------"
[2979]1054LogIt "/proc/mdstat:" >> $LOGFILE
1055LogIt "-------------"
1056cat /proc/mdstat >> $LOGFILE
1057LogIt "-------------"
[2015]1058LogIt "/proc/swaps:" >> $LOGFILE
1059LogIt "-------------"
1060cat /proc/swaps >> $LOGFILE
1061LogIt "-------------"
1062LogIt "/proc/filesystems:" >> $LOGFILE
1063LogIt "-------------"
1064cat /proc/filesystems >> $LOGFILE
1065LogIt "-------------"
1066LogIt "/proc/partitions:" >> $LOGFILE
1067LogIt "-------------"
1068cat /proc/partitions >> $LOGFILE
[2346]1069LogIt "-------------"
1070LogIt "fdisk result:" >> $LOGFILE
1071LogIt "-------------"
1072fdisk -l >> $LOGFILE
[2768]1073LogIt "-------------"
[3274]1074if [ -f /tmp/mondorestore.cfg ]; then
1075 LogIt "/tmp/mondorestore.cfg result:" >> $LOGFILE
[2832]1076 LogIt "-------------"
[3274]1077 cat /tmp/mondorestore.cfg >> $LOGFILE
[2832]1078fi
[1403]1079
[1983]1080ide-opt
[1]1081
1082#ctrlaltdel soft
1083for i in null stdout stdin stderr ; do
[1747]1084 cp -af /dev/$i /tmp
[1]1085done
[2081]1086# Not sure it's still needed, but shouldn't hurt
1087if [ -e "/tmp/USE-UDEV" ] ; then
[2965]1088 ua=`UdevadmTrigger`
[2081]1089fi
[3274]1090if grep "backup-media-type" /tmp/mondorestore.cfg > /dev/null 2> /dev/null ; then
[1747]1091 LogIt "backup-media-type is specified in config file - great."
[2197]1092 LogIt "Calling post-init"
[2380]1093 # start-netfs moved it under /tmp as the NFS share is already unmounted
[3210]1094 if [ _"$pre" != _"" ] && [ "`echo $pre | grep -E '^/tmp/isodir'`" ]; then
[2533]1095 pre=`echo $pre | sed 's|^/tmp/isodir|/tmp|'`
[2255]1096 fi
[3210]1097 if [ _"$pre" != _"" ] && [ -x $pre ]; then
[2255]1098 echo "Executing preliminary script $pre"
1099 LogIt "Executing preliminary script $pre"
1100 $pre
1101 fi
[1747]1102 post-init
[1]1103else
[1747]1104 LogIt "backup-media-type is not specified in config file."
[1885]1105 LogIt "I think this media has no archives on it."
[1]1106fi
[2255]1107if [ "`grep -i "post=" /proc/cmdline`" ] ; then
[2249]1108 for i in `cat /proc/cmdline` ; do
[3210]1109 echo $i | grep -qi post= && post=`echo $i | cut -d= -f2`
[2249]1110 done
[2380]1111 # start-netfs moved it under /tmp as the NFS share is already unmounted
[2255]1112 if [ "`echo $post | grep -E '^/tmp/isodir'`" ]; then
1113 post=`echo $post | sed 's|^/tmp/isodir|/tmp|'`
[2253]1114 fi
[2581]1115 if [ -r $post ]; then
[2255]1116 echo "Executing final script $post"
1117 LogIt "Executing final script $post"
1118 if [ "`echo $post | grep -E '^/mnt/RESTORING'`" ]; then
[2253]1119 mount-me
1120 fi
[2581]1121 chmod 755 $post
[2255]1122 $post
1123 if [ "`echo $post | grep -E '^/mnt/RESTORING'`" ]; then
[2253]1124 unmount-me
1125 fi
[2249]1126 fi
1127fi
[1612]1128if grep "RESTORE" /proc/cmdline > /dev/null 2> /dev/null ; then
1129 echo "Rebooting in 10 seconds automatically as per reboot order"
1130 echo -en "Press ^C to interrupt if you have to ..."
1131 for i in 1 2 3 4 5 6 7 8 9 10 ; do
1132 sleep 1
1133 echo -en "."
1134 done
1135 echo "Boom."
1136 sleep 1
1137else
[2888]1138 GetShell
[1612]1139fi
[1]1140CaughtSoftReset
Note: See TracBrowser for help on using the repository browser.