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

Last change on this file since 2072 was 2072, checked in by Bruno Cornec, 15 years ago
  • Adds multipath support (as exists on RHEL 5.2)
    • analyze-my-lvm/mindi uses the /dev/mapper/mpath... entry and not /dev/dm-... entry which is not automatically created at restore time
    • Lots of mapth dmsetup commands added to deplist
    • Adds required modules to mindi
    • Fix a bug for this in mindi around real devices with /dev/mapper/mpath... names
    • init has a new StartMpath function to start multipath correctly hopefully
    • mondorestore has a new clean_multiconf function which removes /var/lib/multipath/bindings and edits /etc/multipath.conf if needed
  • Property svn:keywords set to Id
File size: 20.8 KB
Line 
1#!/bin/sh
2#
3# $Id: init 2072 2008-12-05 14:32:59Z 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
203HowMuchFreeSpaceOnRamdisk() {
204 df -m -P | grep /dev/ram | head -n1 | tr -s '\t' ' ' | cut -d' ' -f4
205}
206
207
208
209PauseForRaids() {
210 if [ "`dmesg | grep -i "RAID Controller"`" != "" ] || [ "`dmesg | grep -i "Vendor: 3ware"`" != "" ] ; then
211 LogIt "RAID controller(s) detected. Pausing 10 seconds to let them warm up." 1
212 echo -en "Pausing..."
213 for i in 1 2 3 4 5 6 7 8 9 10 ; do
214 sleep 1
215 echo -en "$(($i*10))%..."
216 done
217 echo "Done."
218 fi
219}
220
221
222# 06/13/2002 --- DuckX's & Hugo's new routine
223# 10/11/2003 --- added a simple devfsd.conf file
224# 01/24/2005 --- cater for arbitrary locations of devfsd.conf by using the
225# config file path compiled into devfsd
226RunDevfsd() {
227 loc=`which devfsd 2> /dev/null`
228 if [ "$loc" != "" ] ; then
229 LogIt "Devfs found. Testing kernel support..."
230 if [ ! -e "/dev/.devfsd" ] ; then
231 mount -t devfs devfs /dev 2>> $LOGFILE
232 if [ "$?" -ne "0" ] ; then
233 LogIt "Error while trying to mount devfs"
234 else
235 LogIt "Devfs mounted OK"
236 fi
237 fi
238 #check if the kernel supports devfs
239 if [ -e "/dev/.devfsd" ] ; then
240 [ -d "/proc/1" ] || mount -n /proc
241 LogIt "Kernel support found. Creating config file and starting devfsd"
242 conffile=`strings $loc | grep -E "devfsd.conf$"`
243 [ "$conffile" ] || conffile="/etc/devfsd.conf"
244 confpath=`echo $conffile | sed "s/\/devfsd\.conf$//"`
245 [ -d "$confpath" ] || mkdir -p $confpath
246 echo -en "REGISTER .* MKOLDCOMPAT\nUNREGISTER .* RMOLDCOMPAT\n" > $conffile
247 devfsd /dev &
248 sleep 5
249 else
250 LogIt "No devfs kernel support."
251 fi
252 fi
253}
254
255# Taken from udev management in Mandriva 2008.0. Kudos guys
256make_extra_nodes () {
257 # there are a few things that sysfs does not export for us.
258 # these things are listed in /etc/udev/links.conf
259 grep '^[^#]' /etc/udev-links.conf | \
260 while read type name arg1; do
261 [ "$type" -a "$name" -a ! -e "/dev/$name" -a ! -L "/dev/$name" ] ||continue
262 case "$type" in
263 L) ln -s $arg1 /dev/$name ;;
264 D) mkdir -p /dev/$name ;;
265 M) mknod /dev/$name $arg1 && chmod 600 /dev/$name;;
266 *) echo "udev-links.conf: unparseable line (%s %s %s)\n" "$type" "$name" "$arg1" ;;
267 esac
268 done
269}
270
271create_dev_makedev() {
272 if [ -e /sbin/MAKEDEV ]; then
273 ln -sf /sbin/MAKEDEV /dev/MAKEDEV
274 else
275 ln -sf /bin/true /dev/MAKEDEV
276 fi
277}
278
279RunUdevd() {
280 # Inspiration from Mandriva 2008.0 startup script
281 echo "Preparing udev environment..."
282 mv /dev /dev.static
283 mkdir /dev
284 mount -n -o size=5M,mode=0755 -t tmpfs none /dev
285 make_extra_nodes
286 mount -n -t devpts -o mode=620 none /dev/pts
287 mount -n -t tmpfs none /dev/shm
288 if [ -e /proc/sys/kernel/hotplug ]; then
289 echo > /proc/sys/kernel/hotplug
290 fi
291 PKLVL=`cut -f1 /proc/sys/kernel/printk`
292 echo 0 > /proc/sys/kernel/printk
293 if [ -x /sbin/startudev ]; then
294 /sbin/startudev
295 fi
296 # Depending on udevd version it gives back the hand or not :-(
297 /sbin/udevd --daemon &
298 sleep 5
299 mkdir -p /dev/.udev/queue/
300 if [ -x /sbin/udevtrigger ]; then
301 /sbin/udevtrigger
302 fi
303 create_dev_makedev
304 if [ -x /sbin/udevsettle ]; then
305 /sbin/udevsettle
306 fi
307 # It seems we need to have more static devs on some distro were
308 # udev as some other requirements to be covered later on.
309 # So in the mean time:
310 for d in `ls /dev.static`; do
311 if [ ! -e /dev/$d ]; then
312 mv /dev.static/$d /dev
313 fi
314 done
315 echo $PKLVL > /proc/sys/kernel/printk
316}
317
318RstHW() {
319
320 # Restore the HW configuration if available (NOT by default)
321 answer="NO"
322
323 grep -q nohw /proc/cmdline
324 if [ "$?" -eq 0 ]; then
325 return
326 fi
327 if [ -x ./mindi-rsthw ]; then
328 grep -q RESTORE /proc/cmdline
329 if [ "$?" -ne 0 ]; then
330 #clear
331 echo "*********************************************************************"
332 echo "Do you want to restore the HW configuration of the original machine ?"
333 echo "(This may dammage your hardware so be sure to check twice before saying yes)"
334 echo "*********************************************************************"
335 echo "Please confirm by typing YES exactly as written here (NO by default)"
336 echo -n "--> "
337 read answer
338 else
339 answer="YES"
340 fi
341 if [ "$answer" = "YES" ] ; then
342 ./mindi-rsthw
343 fi
344 fi
345}
346
347
348#RunDevfsd() {
349# loc=`which devfsd 2> /dev/null`
350# if [ "$loc" != "" ] ; then
351# LogIt "Starting devfsd"
352# devfsd /dev &
353# sleep 5
354# fi
355#}
356
357
358
359SpaceTests() {
360 [ -e "/tmp/filelist.full" ] && cp /tmp/filelist.full /tmp/FLF
361 if [ "`HowMuchFreeSpaceOnRamdisk`" -le "3" ] ; then
362 LogIt "Ramdisk is a bit smaller than I would like." 1
363 LogIt "Please re-run Mondo/Mindi but edit /usr/local/mindi first" 1
364 LogIt "and set EXTRA_SPACE to something high, e.g. 8000" 1
365 Die "Aborting. Please reboot."
366 fi
367 rm -f /tmp/FLF
368}
369
370StartUSBKbd() {
371# Prepare minimal USB env in case we have USB kbd such as with iLO
372[ -d /proc/bus/usb ] && ! grep -q /proc/bus/usb /proc/mounts && mount -t usbfs none /proc/bus/usb
373echo "$DENY_MODS" | grep -Eq 'uhcd_hci |usbhid |usbcore '
374if [ $? -eq 0 ]; then
375 return
376fi
377modprobe -q uhcd_hci
378modprobe -q usbhid
379}
380
381
382
383StartLvms() {
384 if [ -e "/tmp/i-want-my-lvm" ] ; then
385 LogIt "Scanning LVM's..." 1
386 if which lvm ; then
387 modprobe -q dm-mod
388 modprobe -q dm_mod
389 lvm vgscan --mknodes
390 else
391 vgscan
392 fi
393 grep -E "^#.*vgchange" /tmp/i-want-my-lvm | sed "s/^#[ ]*//" > /tmp/start-lvm
394 chmod +x /tmp/start-lvm
395 echo -en "Starting LVM's..."
396 /tmp/start-lvm &
397 for i in 1 2 3 4 5 ; do
398 echo -en "."
399 sleep 1
400 done
401 echo "Done."
402 fi
403# If necessary, cannibalize 'analyze-my-lvm'; copy some of its code here,
404# pipe vgscan's output, strip it, run 'vgchange' on its output, etc.etc.
405 LogIt "LVM's have been started."
406}
407
408
409StartMpath() {
410 if [ "`grep -i nompath /proc/cmdline`" ]; then
411 return;
412 fi
413 echo "Starting Mpath..."
414 if [ -x /sbin/multipath ]; then
415 mkdir -p /var/lib/multipath
416 cat > /etc/multipath.conf << EOF
417defaults {
418 user_friendly_names yes
419}
420EOF
421 /sbin/multipath -v 0
422 if [ -x /sbin/kpartx ]; then
423 /sbin/dmsetup ls --target multipath --exec "/sbin/kpartx -a -p p"
424 fi
425 fi
426}
427
428StartRaids() {
429 local raid_devices i
430
431 raid_devices=`grep /dev/md /tmp/mountlist.txt | cut -d' ' -f1`
432 if which raidstart > /dev/null 2> /dev/null ; then
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 'raidstart $i'" 1
436 else
437 LogIt "Running 'raidstart $i'" 1
438 raidstart $i
439 fi
440 done
441 elif which mdrun > /dev/null 2> /dev/null ; then
442 LogIt "Running 'mdrun'" 1
443 mdrun
444 elif which mdadm > /dev/null 2> /dev/null ; then
445 LogIt "Running 'mdadm'" 1
446 for i in $raid_devices ; do
447 if grep `basename $i` /proc/mdstat > /dev/null 2> /dev/null ; then
448 LogIt "$i is started already; no need to run 'mdadm $i'" 1
449 else
450 if [ -f /etc/mdadm.conf ] ; then
451 LogIt "Running 'mdadm $i' with user supplied /etc/mdadm.conf" 1
452 mdadm -A $i -c /etc/mdadm.conf
453 elif [ -f /etc/mdadm/mdadm.conf ] ; then
454 LogIt "Running 'mdadm $i' with user supplied /etc/mdadm/mdadm.conf" 1
455 mdadm -A $i -c /etc/mdadm/mdadm.conf
456 else
457 LogIt "Running 'mdadm $i'" 1
458 mdadm -Ac partitions -m dev $i
459 fi
460 fi
461 done
462 elif
463 if [ "`grep -i nodmraid /proc/cmdline`" ]; then
464 return;
465 fi
466 for x in $(/sbin/dmraid -ay -i -p -t 2>/dev/null | grep -E -iv "^no " |awk -F ':' '{ print $1 }') ; do
467 echo "Please send the result of /sbin/dmraid -ay -i -p -t to the devteam !!!"
468 return
469 #dmname=$(resolve_dm_name $x)
470 #[ -z "$dmname" ] && continue
471 #/sbin/dmraid -ay -i -p "$dmname" >/dev/null 2>&1
472 #/sbin/kpartx -a -p p "/dev/mapper/$dmname"
473 done
474 else
475 LogIt "Warning: Neither 'raidstart' nor 'mdrun''found. RAID devices may not have started." 1
476 fi
477
478}
479
480
481TryAgainToFindCD() {
482 local res
483 mount | grep /mnt/cdrom && return 0
484 [ "`grep "backup_media_type" /tmp/mondo-restore.cfg 2> /dev/null | grep "cdstream"`" ] && return
485 LogIt "Trying to mount CD-ROM a 2nd time..."
486 find-and-mount-cdrom --second-try
487 res=$?
488 if [ "$res" -eq "0" ] ; then
489 CD_MOUNTED_OK=yes
490 LogIt "CD-ROM drive mounted successfully." 1
491 else
492 LogIt "I still cannot find or mount the CD-ROM drive, by the way."
493 fi
494}
495
496
497
498UseTmpfs()
499{
500 local mount_cmd
501 echo -en "Mounting /tmp/tmpfs..."
502 mkdir -p /tmp/tmpfs
503# For technical reasons, some sets are as large as 16MB.
504# I am allowing 32MB because selective restore occupies a lot of space.
505 for size in 64m 48m 40m 32m ; do
506 mount_cmd="mount /dev/shm -t tmpfs -o size=$size" ; # was 34m until 04/2003
507 LogIt "Trying '$mount_cmd'"
508 $mount_cmd /tmp/tmpfs 2>> $LOGFILE
509 res=$?
510 [ "$res" -eq "0" ] && break
511 done
512 if [ "$res" -ne "0" ] ; then
513 LogIt "Failed. I could not run '$mount_cmd /tmp/tmpfs'. Your kernel is BROKEN or you do not have enough RAM." 1
514 umount /tmp/tmpfs > /dev/null 2> /dev/null
515 rmdir /tmp/tmpfs
516 ln -sf /mnt/RESTORING/tmp /tmp/tmpfs; # used by mondo-restore
517 LogIt "Failed to mount /tmp/tmpfs; using ugly softlink instead"
518 else
519 LogIt "Great. Pivot succeeded w/ size=$size" 1
520 echo -en "Pivoting /tmp..."
521 umount /tmp/tmpfs
522 mkdir -p /tmp.old
523 mv /tmp/* /tmp.old/
524 # Try to Deal with a busybox bug on inexistant links
525 cp /tmp/* /tmp.old/
526 rm -f /tmp/*
527 $mount_cmd /tmp
528 mv /tmp.old/* /tmp/
529 # Try to Deal with a busybox bug on inexistant links
530 cp /tmp.old/* /tmp/
531 rm -rf /tmp.old
532 mkdir -p /tmp/tmpfs
533 mkdir -p $GROOVY
534 echo "Done."
535 LogIt "Successfully mounted dynamic /tmp ramdisk"
536# mkdir -p /tmp/tmpfs/var
537# mv -f /var/log /tmp/tmpfs/var/log
538# ln -sf /tmp/tmpfs/var/log /var/log
539 fi
540}
541
542
543WelcomeMessage()
544{
545 export ARCH=`uname -m`
546
547 echo "********************************************************************"
548 echo "MINDI-LINUX by Mondo Dev Team - web site: http://www.mondorescue.org"
549 echo "Boot disk based on AlfaLinux & Trinux. BusyBox by Erik Andersen."
550which petris > /dev/null 2> /dev/null && echo "Petris was written by Peter Seidler <p.seidler@mail1.stofanet.dk>."
551 echo "Executables and source code are covered by the GNU GPL. No warranty."
552 echo "running on $ARCH"
553 echo "********************************************************************"
554}
555
556
557EnableCcissIfAppropriate() {
558 local i fname
559 for i in 0 1 2 3 ; do
560 fname="/proc/driver/cciss/cciss$i"
561 if [ -e "$fname" ] ; then
562 LogIt "Engaging $fname"
563 echo "engage scsi" > $fname
564 LogIt "...result=$?"
565 fi
566 done
567}
568
569ModprobeAllModules() {
570
571 for m in `find /lib/modules -name '*\.ko*' -o -name '*\.o*'`; do
572 k=`basename $m | sed 's/\.ko.*$//'`
573 j=`basename $k | sed 's/\.o.*$//'`
574 echo "$DENY_MODS" | grep -q "$j "
575 if [ $? -eq 0 ]; then
576 echo "Denying $j..."
577 continue
578 fi
579 echo "Probing $j..."
580 modprobe -q $j
581 done
582}
583
584ExtractDataDisksAndLoadModules() {
585 echo "Installing additional tools ..."
586 install-additional-tools
587 # Keep the kernel silent again
588 PKLVL=`cut -f1 /proc/sys/kernel/printk`
589 echo 0 > /proc/sys/kernel/printk
590 ModprobeAllModules
591 echo $PKLVL > /proc/sys/kernel/printk
592}
593
594# ------------------------ main -----------------------
595
596MINDI_VER=PBVER
597MINDI_REV=PBREV
598trap CaughtSoftReset SIGTERM
599LOGFILE=/var/log/mondorestore.log
600PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/mondo:/usr/games
601GROOVY=/tmp/groovy-stuff
602USER=root
603export PATH GROOVY USER LOGFILE
604
605echo "Welcome to init (from mindi ${MINDI_VER}-r${MINDI_REV})"
606
607mount -o remount rw /
608[ ! "$GROOVY" ] && Die "I'm not groovy!"
609for i in $GROOVY /mnt/cdrom /mnt/isodir /var/local/petris /tmp/isodir; do
610 mkdir -p $i
611done
612#/bin/update
613mount /proc/ /proc -v -t proc
614mkdir /sys 2> /dev/null
615mount /sys/ /sys -v -t sysfs 2>> $LOGFILE
616# For ESX 3
617[ -d /proc/vmware ] && ! grep -q /vmfs /proc/mounts && mount -t vmfs /vmfs /vmfs
618rm -f /foozero
619
620if [ "`grep -i denymods /proc/cmdline`" ]; then
621 export DENY_MODS="`cat /proc/cmdline | sed 's~.*denymods=\"\(.*\)\".*~\1~'` mondonone"
622else
623 export DENY_MODS=" "
624fi
625if [ "`grep -i 'obdr ' /tmp/mondo-restore.cfg 2> /dev/null`" ]; then
626 # Do not try to load usb storage when dealing with OBDR it makes the modprobe hang :-(
627 export DENY_MODS="usb-storage $DENY_MODS"
628fi
629if [ "`grep -i forcemods /proc/cmdline`" ]; then
630 export FORCE_MODS="`cat /proc/cmdline | sed 's~.*forcemods=\"\(.*\)\".*~\1~'` mondonone"
631else
632 export FORCE_MODS=" "
633fi
634
635echo "Activating a potential USB keyboard/mouse"
636StartUSBKbd
637
638if [ -f /proc/sys/kernel/exec-shield ]; then
639 echo 0 > /proc/sys/kernel/exec-shield 2>> /dev/null
640fi
641
642if [ -f /proc/modules ]; then
643 echo "/sbin/modprobe" > /proc/sys/kernel/modprobe
644fi
645
646if [ -e "/tmp/USE-UDEV" ] ; then
647 RunUdevd
648fi
649ExtractDevTarballs
650LaunchTerminals
651
652# Keeping kernel silent for module insertion
653PKLVL=`cut -f1 /proc/sys/kernel/printk`
654echo 0 > /proc/sys/kernel/printk
655ModprobeAllModules
656echo $PKLVL > /proc/sys/kernel/printk
657
658EnableCcissIfAppropriate
659#-------------------------------
660#WHOLIVESINAPINEAPPLEUNDERTHESEA#;# --- don't touch this :)
661#-------------------------------
662UseTmpfs
663if [ ! -e "/tmp/mondo-restore.cfg" ] ; then
664 LogIt "Warning - /tmp/mondo-restore.cfg not found"
665fi
666
667if [ "`grep -i 'obdr ' /tmp/mondo-restore.cfg 2>/dev/null`" ] || [ "`grep -i ' udev' /tmp/mondo-restore.cfg 2>/dev/null`" ]; then
668 HandleTape
669 ExtractDataDisksAndLoadModules
670elif [ "`grep -i pxe /proc/cmdline`" ]; then
671 # We need to get here exported variables from start-nfs
672 . /sbin/start-nfs
673
674 # Simulate a local CD
675 echo "/mnt/cdrom" > /tmp/CDROM-LIVES-HERE
676 CD_MOUNTED_OK=yes
677 ExtractDataDisksAndLoadModules
678elif [ "`grep -i usb= /proc/cmdline`" ] || [ "`grep -i usb /tmp/mondo-restore.cfg 2>/dev/null | grep media-type`" ]; then
679 . /sbin/start-usb
680
681 # Simulate a local CD
682 echo "/mnt/cdrom" > /tmp/CDROM-LIVES-HERE
683 CD_MOUNTED_OK=yes
684 ExtractDataDisksAndLoadModules
685else
686 HandleCDROM
687 ExtractDataDisksAndLoadModules
688 # We need to get here exported variables from start-nfs
689 . /sbin/start-nfs
690fi
691res=$?
692ConfigureLoggingDaemons
693if [ -e "/tmp/USE-DEVFS" ] ; then
694 umount /mnt/cdrom 2> /dev/null
695 mv /dev/cdrom /cdrom.lnk 2> /dev/null
696 CD_MOUNTED_OK=""
697 RunDevfsd
698fi
699LoadKeymap
700WelcomeMessage
701RstHW
702echo "Starting potential Raid/LVMs ..."
703PauseForRaids
704StartRaids
705StartMpath
706StartLvms
707CopyBootDevEntry
708mkdir -p /tmp/tmpfs
709sleep 2
710#clear
711if [ -e "/dev/md0" ] && [ ! -e "/dev/md/0" ] && [ "`grep /dev/md/ /tmp/mountlist.txt`" != "" ] ; then
712 LogIt "Creating /dev/md/* softlinks just in case." 1
713 mkdir -p /dev/md
714 cp -af /dev/md0 /dev/md/0 2> /dev/null
715 cp -af /dev/md1 /dev/md/1 2> /dev/null
716 cp -af /dev/md2 /dev/md/2 2> /dev/null
717fi
718# SpaceTests; # Mandrake Linux 8.1 doesn't like this
719[ -e "/tmp/mountlist.txt" ] && cp -f /tmp/mountlist.txt /tmp/mountlist.original
720
721if ! [ "`grep -i "pxe" /proc/cmdline`" ] ; then
722 res="`cat /mnt/cdrom/archives/THIS-CD-NUMBER 2> /dev/null`"
723 [ "$res" != "1" ] && [ "$res" != "" ] && Die "This is CD #$res in the series. Please insert CD #1."
724 [ -e "/cdrom.lnk" ] && mv -f /cdrom.lnk /dev/cdrom && mount /dev/cdrom /mnt/cdrom && CD_MOUNTED_OK=yes
725 [ "$CD_MOUNTED_OK" != "yes" ] && TryAgainToFindCD
726 #mount | grep cdrom > /dev/null 2> /dev/null || mount /dev/cdrom /mnt/cdrom >> $LOGFILE 2>> $LOGFILE
727fi
728hack-cfg-if-necessary || LogIt "Cannot find hack-cfg-if-necessary"
729
730# Log some useful info
731LogIt "init (from mindi v$MINDI_VER-r${MINDI_REV})"
732LogIt "/proc/cmdline is:"
733cat /proc/cmdline >> $LOGFILE
734LogIt "df result:"
735LogIt "----------"
736df >> $LOGFILE
737LogIt "-------------"
738LogIt "mount result:"
739LogIt "-------------"
740mount >> $LOGFILE
741LogIt "-------------"
742LogIt "lsmod result:"
743LogIt "-------------"
744lsmod >> $LOGFILE
745LogIt "-------------"
746LogIt "dmesg result:"
747LogIt "-------------"
748dmesg >> $LOGFILE
749LogIt "-------------"
750LogIt "/proc/swaps:" >> $LOGFILE
751LogIt "-------------"
752cat /proc/swaps >> $LOGFILE
753LogIt "-------------"
754LogIt "/proc/filesystems:" >> $LOGFILE
755LogIt "-------------"
756cat /proc/filesystems >> $LOGFILE
757LogIt "-------------"
758LogIt "/proc/partitions:" >> $LOGFILE
759LogIt "-------------"
760cat /proc/partitions >> $LOGFILE
761
762
763ide-opt
764
765#ctrlaltdel soft
766for path in /usr.bin /usr/bin ; do
767 fname=$path/nano
768 [ -e "$fname" ] && ln -sf $fname /usr/bin/pico
769done
770res=`which nano 2> /dev/null`
771[ "$res" ] && ln -sf /usr/bin/
772for i in null stdout stdin stderr ; do
773 cp -af /dev/$i /tmp
774done
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.