source: MondoRescue/branches/3.3/mindi/rootfs/etc/init.d/rcS@ 3661

Last change on this file since 3661 was 3661, checked in by Bruno Cornec, 7 years ago

Adds preliminary DRBD support

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