source: MondoRescue/branches/2.2.8/mindi/rootfs/sbin/init@ 2086

Last change on this file since 2086 was 2086, checked in by Bruno Cornec, 15 years ago
  • use the distro df instead of the busybox one, to better support -P option usage now.
  • Property svn:keywords set to Id
File size: 20.8 KB
Line 
1#!/bin/sh
2#
3# $Id: init 2086 2008-12-14 14:43:11Z bruno $
4#
5# init script launched during the restore process
6#------------------------------------------------------------
7
8
9CaughtSoftReset() {
10 trap SIGTERM
11 reboot
12}
13
14
15ConfigureLoggingDaemons() {
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."
22}
23
24
25
26CopyBootDevEntry() {
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
33 echo "OK."
34 return 0
35 fi
36 mkdir -p $outfile
37 rmdir $outfile
38 cp -pRdf $devfile $outfile
39 if [ "$?" -ne "0" ] ; then
40 echo "Failed."
41 return 1
42 else
43 echo "OK."
44 return 0
45 fi
46}
47
48
49
50Die() {
51 LogIt "Fatal error! $1" 1
52 exit 1
53}
54
55
56
57ExtractDevTarballs() {
58 cd /
59 for fname in ataraid.tgz ida.tgz i2o.tgz rd.tgz raw.tgz cciss.tgz nst.tgz dm.tgz vc.tgz ; do
60 if [ ! -e "/$fname" ] ; then
61 LogIt "/$fname not found; cannot extract to /." 1
62 else
63 echo -en "\rExtracting /$fname... "
64 tar -zxf /$fname || LogIt "Error occurred while extracting /$fname"
65 fi
66 done
67 echo -en "\r"
68 LogIt "Extracted additional /dev entries OK. " 1
69}
70
71
72
73LaunchTerminals() {
74 openvt 2 /bin/sh
75 openvt 3 /bin/sh
76 openvt 4 /bin/sh
77 openvt 5 /bin/sh
78 openvt 6 /bin/sh
79 openvt 7 /bin/sh /sbin/wait-for-petris
80 openvt 8 /usr/bin/tail -f $LOGFILE
81 # May avoid shell error messages
82 chmod 666 /dev/tty* /dev/console
83}
84
85
86LoadKeymap() {
87 local fname
88 fname=`cat /tmp/KEYMAP-LIVES-HERE 2> /dev/null`
89 [ "$fname" = "" ] && return
90 if which loadkeys > /dev/null 2> /dev/null ; then
91 loadkeys $fname
92# loadkmap != loadkeys
93# elif which loadkmap > /dev/null 2> /dev/null ; then
94# loadkmap < $fname
95 else
96 LogIt "Using default keyboard map." 1
97 fi
98}
99
100
101UntarTapeStuff() {
102 local old_pwd res
103 old_pwd=`pwd`
104 cd $GROOVY
105 [ "$1" != "" ] && tapedev=$1
106 [ ! "$tapedev" ] && tapedev=`grep media-dev /tmp/mondo-restore.cfg 2>/dev/null | tr -s ' ' ' ' | cut -d' ' -f2`
107 mt -f $tapedev rewind
108 mt -f $tapedev fsf 2
109 dd if=$tapedev bs=32k count=1024 | tar -zx
110 res=$?
111 if [ "$res" -eq "0" ] ; then
112 # Store the dev name in case we changed it interactively
113 if [ -f "/tmp/mondo-restore.cfg" ]; then
114 sed -i "s/^media-dev .*$/media-dev $tapedev/" /tmp/mondo-restore.cfg
115 fi
116 fi
117 cd $old_pwd
118 return $res
119}
120
121HandleTape() {
122 local res tapedev
123 tapedev="" ; # will be set by UntarTapeStuff()
124
125 # Here we can add the USB storage module, it's working even with OBDR !
126 modprobe -q usb-storage
127 # Tape takes some time to appear
128 sleep 10
129 cd $GROOVY
130 UntarTapeStuff $tapedev
131 res=$?
132 while [ "$res" -ne "0" ] ; do
133 LogIt "$tapedev failed to act as extended data disk for booting." 1
134 LogIt "Please specify an alternate tape device," 1
135 LogIt "or hit <Enter> to boot from another media." 1
136 echo -en "---> "
137 read tapedev
138 if [ "$tapedev" ] ; then
139 LogIt "User specified $tapedev instead"
140 UntarTapeStuff $tapedev
141 res=$?
142 else
143 LogIt "User opted not to specify an alternate tapedev"
144 res=1
145 break
146 fi
147 done
148 # For post-init
149 export TAPEDEV=$tapedev
150
151 if [ "$res" -ne "0" ] ; then
152 cd /
153 LogIt "Failed to use tape as extended datadisk. Reverting to another media." 1
154 HandleCDROM
155 res=$?
156 else
157 LogIt "Using tape as extended datadisk. Good." 3
158 echo "Using tape as extd ddisk." > /tmp/TAPEDEV-HAS-DATA-DISKS
159 res=0
160 CD_MOUNTED_OK=yes
161 fi
162 return $res
163}
164
165
166
167HandleCDROM() {
168 # Just in case we have an iLO ensure we will map it correctly
169 echo "$DENY_MODS" | grep -q "usb-storage "
170 if [ $? -eq 0 ]; then
171 return
172 fi
173 echo "Activating a potential USB Storage device"
174 modprobe -q usb-storage
175 for i in 1 2 3 4 5 6 7 8 9 10 ; do
176 sleep 1
177 echo -en "."
178 done
179
180 find-and-mount-cdrom
181 res=$?
182 if [ "$res" -ne "0" ] ; then
183 LogIt "First call to find-and-mount-cdrom failed." 1
184 LogIt "Sleeping for 3 seconds and trying again." 1
185 sleep 3
186 find-and-mount-cdrom
187 res=$?
188 fi
189 if [ "$res" -eq "0" ] ; then
190 LogIt "OK, I am running on a CD-ROM. Good." 3
191 CD_MOUNTED_OK=yes
192 else
193 LogIt "You probably not have the right drivers" 3
194 LogIt "to support the hardware on which we are running" 3
195 LogIt "Your archives are probably fine but" 3
196 LogIt "your tape streamer and/or CD-ROM drive are unsupported at that point." 3
197 CD_MOUNTED_OK=""
198 fi
199 return 0
200}
201
202
203PauseForRaids() {
204 if [ "`dmesg | grep -i "RAID Controller"`" != "" ] || [ "`dmesg | grep -i "Vendor: 3ware"`" != "" ] ; then
205 LogIt "RAID controller(s) detected. Pausing 10 seconds to let them warm up." 1
206 echo -en "Pausing..."
207 for i in 1 2 3 4 5 6 7 8 9 10 ; do
208 sleep 1
209 echo -en "$(($i*10))%..."
210 done
211 echo "Done."
212 fi
213}
214
215
216# 06/13/2002 --- DuckX's & Hugo's new routine
217# 10/11/2003 --- added a simple devfsd.conf file
218# 01/24/2005 --- cater for arbitrary locations of devfsd.conf by using the
219# config file path compiled into devfsd
220RunDevfsd() {
221 loc=`which devfsd 2> /dev/null`
222 if [ "$loc" != "" ] ; then
223 LogIt "Devfs found. Testing kernel support..."
224 if [ ! -e "/dev/.devfsd" ] ; then
225 mount -t devfs devfs /dev 2>> $LOGFILE
226 if [ "$?" -ne "0" ] ; then
227 LogIt "Error while trying to mount devfs"
228 else
229 LogIt "Devfs mounted OK"
230 fi
231 fi
232 #check if the kernel supports devfs
233 if [ -e "/dev/.devfsd" ] ; then
234 [ -d "/proc/1" ] || mount -n /proc
235 LogIt "Kernel support found. Creating config file and starting devfsd"
236 conffile=`strings $loc | grep -E "devfsd.conf$"`
237 [ "$conffile" ] || conffile="/etc/devfsd.conf"
238 confpath=`echo $conffile | sed "s/\/devfsd\.conf$//"`
239 [ -d "$confpath" ] || mkdir -p $confpath
240 echo -en "REGISTER .* MKOLDCOMPAT\nUNREGISTER .* RMOLDCOMPAT\n" > $conffile
241 devfsd /dev &
242 sleep 5
243 else
244 LogIt "No devfs kernel support."
245 fi
246 fi
247}
248
249# Taken from udev management in Mandriva 2008.0. Kudos guys
250make_extra_nodes () {
251 # there are a few things that sysfs does not export for us.
252 # these things are listed in /etc/udev/links.conf
253 grep '^[^#]' /etc/udev-links.conf | \
254 while read type name arg1; do
255 [ "$type" -a "$name" -a ! -e "/dev/$name" -a ! -L "/dev/$name" ] ||continue
256 case "$type" in
257 L) ln -s $arg1 /dev/$name ;;
258 D) mkdir -p /dev/$name ;;
259 M) mknod /dev/$name $arg1 && chmod 600 /dev/$name;;
260 *) echo "udev-links.conf: unparseable line (%s %s %s)\n" "$type" "$name" "$arg1" ;;
261 esac
262 done
263}
264
265create_dev_makedev() {
266 if [ -e /sbin/MAKEDEV ]; then
267 ln -sf /sbin/MAKEDEV /dev/MAKEDEV
268 else
269 ln -sf /bin/true /dev/MAKEDEV
270 fi
271}
272
273RunUdevd() {
274 # Inspiration from Mandriva 2008.0 startup script
275 echo "Preparing udev environment..."
276 mv /dev /dev.static
277 mkdir /dev
278 mount -n -o size=5M,mode=0755 -t tmpfs none /dev
279 make_extra_nodes
280 mount -n -t devpts -o mode=620 none /dev/pts
281 mount -n -t tmpfs none /dev/shm
282 if [ -e /proc/sys/kernel/hotplug ]; then
283 echo > /proc/sys/kernel/hotplug
284 fi
285 PKLVL=`cut -f1 /proc/sys/kernel/printk`
286 echo 0 > /proc/sys/kernel/printk
287 # Many possibilities depending on udev versions
288 if [ -x /sbin/startudev ]; then
289 /sbin/startudev
290 fi
291 if [ -x /sbin/start_udev ]; then
292 /sbin/start_udev
293 fi
294 # Depending on udevd version it gives back the hand or not :-(
295 /sbin/udevd --daemon &
296 sleep 5
297 mkdir -p /dev/.udev/queue/
298 if [ -x /sbin/udevtrigger ]; then
299 /sbin/udevtrigger
300 fi
301 create_dev_makedev
302 if [ -x /sbin/udevsettle ]; then
303 /sbin/udevsettle
304 fi
305 # It seems we need to have more static devs on some distro were
306 # udev as some other requirements to be covered later on.
307 # So in the mean time:
308 for d in `ls /dev.static`; do
309 if [ ! -e /dev/$d ]; then
310 mv /dev.static/$d /dev
311 fi
312 done
313 echo $PKLVL > /proc/sys/kernel/printk
314}
315
316RstHW() {
317
318 # Restore the HW configuration if available (NOT by default)
319 answer="NO"
320
321 grep -q nohw /proc/cmdline
322 if [ "$?" -eq 0 ]; then
323 return
324 fi
325 if [ -x ./mindi-rsthw ]; then
326 grep -q RESTORE /proc/cmdline
327 if [ "$?" -ne 0 ]; then
328 #clear
329 echo "*********************************************************************"
330 echo "Do you want to restore the HW configuration of the original machine ?"
331 echo "(This may dammage your hardware so be sure to check twice before saying yes)"
332 echo "*********************************************************************"
333 echo "Please confirm by typing YES exactly as written here (NO by default)"
334 echo -n "--> "
335 read answer
336 else
337 answer="YES"
338 fi
339 if [ "$answer" = "YES" ] ; then
340 ./mindi-rsthw
341 fi
342 fi
343}
344
345
346#RunDevfsd() {
347# loc=`which devfsd 2> /dev/null`
348# if [ "$loc" != "" ] ; then
349# LogIt "Starting devfsd"
350# devfsd /dev &
351# sleep 5
352# fi
353#}
354
355
356
357StartUSBKbd() {
358# Prepare minimal USB env in case we have USB kbd such as with iLO
359[ -d /proc/bus/usb ] && ! grep -q /proc/bus/usb /proc/mounts && mount -t usbfs none /proc/bus/usb
360echo "$DENY_MODS" | grep -Eq 'uhcd_hci |usbhid |usbcore '
361if [ $? -eq 0 ]; then
362 return
363fi
364modprobe -q uhcd_hci
365modprobe -q usbhid
366}
367
368
369
370StartLvms() {
371 if [ -e "/tmp/i-want-my-lvm" ] ; then
372 LogIt "Scanning LVM's..." 1
373 if which lvm ; then
374 modprobe -q dm-mod
375 modprobe -q dm_mod
376 lvm vgscan --mknodes
377 else
378 vgscan
379 fi
380 grep -E "^#.*vgchange" /tmp/i-want-my-lvm | sed "s/^#[ ]*//" > /tmp/start-lvm
381 chmod +x /tmp/start-lvm
382 echo -en "Starting LVM's..."
383 /tmp/start-lvm &
384 for i in 1 2 3 4 5 ; do
385 echo -en "."
386 sleep 1
387 done
388 echo "Done."
389 fi
390# If necessary, cannibalize 'analyze-my-lvm'; copy some of its code here,
391# pipe vgscan's output, strip it, run 'vgchange' on its output, etc.etc.
392 LogIt "LVM's have been started."
393}
394
395
396StartMpath() {
397 if [ "`grep -i nompath /proc/cmdline`" ]; then
398 return;
399 fi
400 echo "Starting Mpath..."
401 if [ -x /sbin/multipath ]; then
402 mkdir -p /var/lib/multipath
403 cat > /etc/multipath.conf << EOF
404defaults {
405 user_friendly_names yes
406}
407EOF
408 /sbin/multipath -v 0
409 if [ -x /sbin/kpartx ]; then
410 /sbin/dmsetup ls --target multipath --exec "/sbin/kpartx -a -p p"
411 fi
412 fi
413}
414
415StartRaids() {
416 local raid_devices i
417
418 raid_devices=`grep /dev/md /tmp/mountlist.txt | cut -d' ' -f1`
419 if which raidstart > /dev/null 2> /dev/null ; then
420 for i in $raid_devices ; do
421 if grep `basename $i` /proc/mdstat > /dev/null 2> /dev/null ; then
422 LogIt "$i is started already; no need to run 'raidstart $i'" 1
423 else
424 LogIt "Running 'raidstart $i'" 1
425 raidstart $i
426 fi
427 done
428 elif which mdrun > /dev/null 2> /dev/null ; then
429 LogIt "Running 'mdrun'" 1
430 mdrun
431 elif which mdadm > /dev/null 2> /dev/null ; then
432 LogIt "Running 'mdadm'" 1
433 for i in $raid_devices ; do
434 if grep `basename $i` /proc/mdstat > /dev/null 2> /dev/null ; then
435 LogIt "$i is started already; no need to run 'mdadm $i'" 1
436 else
437 if [ -f /etc/mdadm.conf ] ; then
438 LogIt "Running 'mdadm $i' with user supplied /etc/mdadm.conf" 1
439 mdadm -A $i -c /etc/mdadm.conf
440 elif [ -f /etc/mdadm/mdadm.conf ] ; then
441 LogIt "Running 'mdadm $i' with user supplied /etc/mdadm/mdadm.conf" 1
442 mdadm -A $i -c /etc/mdadm/mdadm.conf
443 else
444 LogIt "Running 'mdadm $i'" 1
445 mdadm -Ac partitions -m dev $i
446 fi
447 fi
448 done
449 elif which dmraid > /dev/null 2> /dev/null ; then
450 if [ "`grep -i nodmraid /proc/cmdline`" ]; then
451 return;
452 fi
453 for x in $(/sbin/dmraid -ay -i -p -t 2>/dev/null | grep -E -iv "^no " |awk -F ':' '{ print $1 }') ; do
454 echo "Please send the result of /sbin/dmraid -ay -i -p -t to the devteam !!!"
455 return
456 #dmname=$(resolve_dm_name $x)
457 #[ -z "$dmname" ] && continue
458 #/sbin/dmraid -ay -i -p "$dmname" >/dev/null 2>&1
459 #/sbin/kpartx -a -p p "/dev/mapper/$dmname"
460 done
461 else
462 LogIt "Warning: Neither 'raidstart' nor 'mdrun''found. RAID devices may not have started." 1
463 fi
464
465}
466
467
468TryAgainToFindCD() {
469 local res
470 mount | grep /mnt/cdrom && return 0
471 [ "`grep "backup_media_type" /tmp/mondo-restore.cfg 2> /dev/null | grep "cdstream"`" ] && return
472 LogIt "Trying to mount CD-ROM a 2nd time..."
473 find-and-mount-cdrom --second-try
474 res=$?
475 if [ "$res" -eq "0" ] ; then
476 CD_MOUNTED_OK=yes
477 LogIt "CD-ROM drive mounted successfully." 1
478 else
479 LogIt "I still cannot find or mount the CD-ROM drive, by the way."
480 fi
481}
482
483
484
485UseTmpfs()
486{
487 local mount_cmd
488 echo -en "Mounting /tmp/tmpfs..."
489 mkdir -p /tmp/tmpfs
490# For technical reasons, some sets are as large as 16MB.
491# I am allowing 32MB because selective restore occupies a lot of space.
492 for size in 64m 48m 40m 32m ; do
493 mount_cmd="mount /dev/shm -t tmpfs -o size=$size" ; # was 34m until 04/2003
494 LogIt "Trying '$mount_cmd'"
495 $mount_cmd /tmp/tmpfs 2>> $LOGFILE
496 res=$?
497 [ "$res" -eq "0" ] && break
498 done
499 if [ "$res" -ne "0" ] ; then
500 LogIt "Failed. I could not run '$mount_cmd /tmp/tmpfs'. Your kernel is BROKEN or you do not have enough RAM." 1
501 umount /tmp/tmpfs > /dev/null 2> /dev/null
502 rmdir /tmp/tmpfs
503 ln -sf /mnt/RESTORING/tmp /tmp/tmpfs; # used by mondo-restore
504 LogIt "Failed to mount /tmp/tmpfs; using ugly softlink instead"
505 else
506 LogIt "Great. Pivot succeeded w/ size=$size" 1
507 echo -en "Pivoting /tmp..."
508 umount /tmp/tmpfs
509 mkdir -p /tmp.old
510 mv /tmp/* /tmp.old/
511 # Try to Deal with a busybox bug on inexistant links
512 cp /tmp/* /tmp.old/
513 rm -f /tmp/*
514 $mount_cmd /tmp
515 mv /tmp.old/* /tmp/
516 # Try to Deal with a busybox bug on inexistant links
517 cp /tmp.old/* /tmp/
518 rm -rf /tmp.old
519 mkdir -p /tmp/tmpfs
520 mkdir -p $GROOVY
521 echo "Done."
522 LogIt "Successfully mounted dynamic /tmp ramdisk"
523# mkdir -p /tmp/tmpfs/var
524# mv -f /var/log /tmp/tmpfs/var/log
525# ln -sf /tmp/tmpfs/var/log /var/log
526 fi
527}
528
529
530WelcomeMessage()
531{
532 export ARCH=`uname -m`
533
534 echo "********************************************************************"
535 echo "MINDI-LINUX by Mondo Dev Team - web site: http://www.mondorescue.org"
536 echo "Boot disk based on AlfaLinux & Trinux. BusyBox by Erik Andersen."
537which petris > /dev/null 2> /dev/null && echo "Petris was written by Peter Seidler <p.seidler@mail1.stofanet.dk>."
538 echo "Executables and source code are covered by the GNU GPL. No warranty."
539 echo "running on $ARCH"
540 echo "********************************************************************"
541}
542
543
544EnableCcissIfAppropriate() {
545 local i fname
546 for i in 0 1 2 3 ; do
547 fname="/proc/driver/cciss/cciss$i"
548 if [ -e "$fname" ] ; then
549 LogIt "Engaging $fname"
550 echo "engage scsi" > $fname
551 LogIt "...result=$?"
552 fi
553 done
554}
555
556ModprobeAllModules() {
557
558 for m in `find /lib/modules -name '*\.ko*' -o -name '*\.o*'`; do
559 k=`basename $m | sed 's/\.ko.*$//'`
560 j=`basename $k | sed 's/\.o.*$//'`
561 echo "$DENY_MODS" | grep -q "$j "
562 if [ $? -eq 0 ]; then
563 echo "Denying $j..."
564 continue
565 fi
566 echo "Probing $j..."
567 modprobe -q $j
568 done
569}
570
571ExtractDataDisksAndLoadModules() {
572 echo "Installing additional tools ..."
573 install-additional-tools
574 # Keep the kernel silent again
575 PKLVL=`cut -f1 /proc/sys/kernel/printk`
576 echo 0 > /proc/sys/kernel/printk
577 ModprobeAllModules
578 echo $PKLVL > /proc/sys/kernel/printk
579
580 # Retry failed udev events now that local filesystems are mounted read-write
581 # (useful for rules creating network ifcfg files)
582 if [ -e "/tmp/USE-UDEV" ] ; then
583 if [ -x /sbin/udevadm ]; then
584 /sbin/udevadm trigger --retry-failed
585 fi
586 fi
587}
588
589# ------------------------ main -----------------------
590
591MINDI_VER=PBVER
592MINDI_REV=PBREV
593trap CaughtSoftReset SIGTERM
594LOGFILE=/var/log/mondorestore.log
595PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/mondo:/usr/games
596GROOVY=/tmp/groovy-stuff
597USER=root
598export PATH GROOVY USER LOGFILE
599
600echo "Welcome to init (from mindi ${MINDI_VER}-r${MINDI_REV})"
601
602mount -o remount rw /
603[ ! "$GROOVY" ] && Die "I'm not groovy!"
604for i in $GROOVY /mnt/cdrom /mnt/isodir /var/local/petris /tmp/isodir; do
605 mkdir -p $i
606done
607#/bin/update
608mount /proc/ /proc -v -t proc
609mkdir /sys 2> /dev/null
610mount /sys/ /sys -v -t sysfs 2>> $LOGFILE
611# For ESX 3
612[ -d /proc/vmware ] && ! grep -q /vmfs /proc/mounts && mount -t vmfs /vmfs /vmfs
613rm -f /foozero
614
615if [ "`grep -i denymods /proc/cmdline`" ]; then
616 export DENY_MODS="`cat /proc/cmdline | sed 's~.*denymods=\"\(.*\)\".*~\1~'` mondonone"
617else
618 export DENY_MODS=" "
619fi
620if [ "`grep -i 'obdr ' /tmp/mondo-restore.cfg 2> /dev/null`" ]; then
621 # Do not try to load usb storage when dealing with OBDR it makes the modprobe hang :-(
622 export DENY_MODS="usb-storage $DENY_MODS"
623fi
624if [ "`grep -i forcemods /proc/cmdline`" ]; then
625 export FORCE_MODS="`cat /proc/cmdline | sed 's~.*forcemods=\"\(.*\)\".*~\1~'` mondonone"
626else
627 export FORCE_MODS=" "
628fi
629
630echo "Activating a potential USB keyboard/mouse"
631StartUSBKbd
632
633if [ -f /proc/sys/kernel/exec-shield ]; then
634 echo 0 > /proc/sys/kernel/exec-shield 2>> /dev/null
635fi
636
637if [ -f /proc/modules ]; then
638 echo "/sbin/modprobe" > /proc/sys/kernel/modprobe
639fi
640
641if [ -e "/tmp/USE-UDEV" ] ; then
642 RunUdevd
643fi
644ExtractDevTarballs
645LaunchTerminals
646
647# Keeping kernel silent for module insertion
648PKLVL=`cut -f1 /proc/sys/kernel/printk`
649echo 0 > /proc/sys/kernel/printk
650ModprobeAllModules
651echo $PKLVL > /proc/sys/kernel/printk
652
653EnableCcissIfAppropriate
654#-------------------------------
655#WHOLIVESINAPINEAPPLEUNDERTHESEA#;# --- don't touch this :)
656#-------------------------------
657UseTmpfs
658if [ ! -e "/tmp/mondo-restore.cfg" ] ; then
659 LogIt "Warning - /tmp/mondo-restore.cfg not found"
660fi
661
662if [ "`grep -i 'obdr ' /tmp/mondo-restore.cfg 2>/dev/null`" ] || [ "`grep -i ' udev' /tmp/mondo-restore.cfg 2>/dev/null`" ]; then
663 HandleTape
664 ExtractDataDisksAndLoadModules
665elif [ "`grep -i pxe /proc/cmdline`" ]; then
666 # We need to get here exported variables from start-nfs
667 . /sbin/start-nfs
668
669 # Simulate a local CD
670 echo "/mnt/cdrom" > /tmp/CDROM-LIVES-HERE
671 CD_MOUNTED_OK=yes
672 ExtractDataDisksAndLoadModules
673elif [ "`grep -i usb= /proc/cmdline`" ] || [ "`grep -i usb /tmp/mondo-restore.cfg 2>/dev/null | grep media-type`" ]; then
674 . /sbin/start-usb
675
676 # Simulate a local CD
677 echo "/mnt/cdrom" > /tmp/CDROM-LIVES-HERE
678 CD_MOUNTED_OK=yes
679 ExtractDataDisksAndLoadModules
680else
681 HandleCDROM
682 ExtractDataDisksAndLoadModules
683 # We need to get here exported variables from start-nfs
684 . /sbin/start-nfs
685fi
686res=$?
687ConfigureLoggingDaemons
688if [ -e "/tmp/USE-DEVFS" ] ; then
689 umount /mnt/cdrom 2> /dev/null
690 mv /dev/cdrom /cdrom.lnk 2> /dev/null
691 CD_MOUNTED_OK=""
692 RunDevfsd
693fi
694LoadKeymap
695WelcomeMessage
696RstHW
697echo "Starting potential Raid/LVMs ..."
698PauseForRaids
699StartRaids
700StartMpath
701StartLvms
702CopyBootDevEntry
703mkdir -p /tmp/tmpfs
704sleep 2
705#clear
706if [ -e "/dev/md0" ] && [ ! -e "/dev/md/0" ] && [ "`grep /dev/md/ /tmp/mountlist.txt`" != "" ] ; then
707 LogIt "Creating /dev/md/* softlinks just in case." 1
708 mkdir -p /dev/md
709 cp -af /dev/md0 /dev/md/0 2> /dev/null
710 cp -af /dev/md1 /dev/md/1 2> /dev/null
711 cp -af /dev/md2 /dev/md/2 2> /dev/null
712fi
713[ -e "/tmp/mountlist.txt" ] && cp -f /tmp/mountlist.txt /tmp/mountlist.original
714
715if ! [ "`grep -i "pxe" /proc/cmdline`" ] ; then
716 res="`cat /mnt/cdrom/archives/THIS-CD-NUMBER 2> /dev/null`"
717 [ "$res" != "1" ] && [ "$res" != "" ] && Die "This is CD #$res in the series. Please insert CD #1."
718 [ -e "/cdrom.lnk" ] && mv -f /cdrom.lnk /dev/cdrom && mount /dev/cdrom /mnt/cdrom && CD_MOUNTED_OK=yes
719 [ "$CD_MOUNTED_OK" != "yes" ] && TryAgainToFindCD
720 #mount | grep cdrom > /dev/null 2> /dev/null || mount /dev/cdrom /mnt/cdrom >> $LOGFILE 2>> $LOGFILE
721fi
722hack-cfg-if-necessary || LogIt "Cannot find hack-cfg-if-necessary"
723
724# Log some useful info
725LogIt "init (from mindi v$MINDI_VER-r${MINDI_REV})"
726LogIt "/proc/cmdline is:"
727cat /proc/cmdline >> $LOGFILE
728LogIt "df result:"
729LogIt "----------"
730df >> $LOGFILE
731LogIt "-------------"
732LogIt "mount result:"
733LogIt "-------------"
734mount >> $LOGFILE
735LogIt "-------------"
736LogIt "lsmod result:"
737LogIt "-------------"
738lsmod >> $LOGFILE
739LogIt "-------------"
740LogIt "dmesg result:"
741LogIt "-------------"
742dmesg >> $LOGFILE
743LogIt "-------------"
744LogIt "/proc/swaps:" >> $LOGFILE
745LogIt "-------------"
746cat /proc/swaps >> $LOGFILE
747LogIt "-------------"
748LogIt "/proc/filesystems:" >> $LOGFILE
749LogIt "-------------"
750cat /proc/filesystems >> $LOGFILE
751LogIt "-------------"
752LogIt "/proc/partitions:" >> $LOGFILE
753LogIt "-------------"
754cat /proc/partitions >> $LOGFILE
755
756
757ide-opt
758
759#ctrlaltdel soft
760for path in /usr.bin /usr/bin ; do
761 fname=$path/nano
762 [ -e "$fname" ] && ln -sf $fname /usr/bin/pico
763done
764res=`which nano 2> /dev/null`
765[ "$res" ] && ln -sf /usr/bin/
766for i in null stdout stdin stderr ; do
767 cp -af /dev/$i /tmp
768done
769# Not sure it's still needed, but shouldn't hurt
770if [ -e "/tmp/USE-UDEV" ] ; then
771 if [ -x /sbin/udevadm ]; then
772 /sbin/udevadm trigger --retry-failed
773 fi
774fi
775if grep "backup-media-type" /tmp/mondo-restore.cfg > /dev/null 2> /dev/null ; then
776 LogIt "backup-media-type is specified in config file - great."
777 LogIt "Calling post-init $mountlist"
778 post-init
779else
780 LogIt "backup-media-type is not specified in config file."
781 LogIt "I think this media has no archives on it."
782fi
783if grep "RESTORE" /proc/cmdline > /dev/null 2> /dev/null ; then
784 echo "Rebooting in 10 seconds automatically as per reboot order"
785 echo -en "Press ^C to interrupt if you have to ..."
786 for i in 1 2 3 4 5 6 7 8 9 10 ; do
787 sleep 1
788 echo -en "."
789 done
790 echo "Boom."
791 sleep 1
792else
793 echo -en "Type 'exit' to reboot the PC\n"
794 umount /mnt/cdrom 2> /dev/null
795 mount / -o rw,remount > /dev/null 2> /dev/null
796 LogIt "Launching Shell"
797 sh
798fi
799CaughtSoftReset
800# reboot
Note: See TracBrowser for help on using the repository browser.