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

Last change on this file since 2081 was 2081, checked in by Bruno Cornec, 15 years ago

Support added for udevadm and start_udev in mandriva 2009.0, udev 128

  • Property svn:keywords set to Id
File size: 21.3 KB
Line 
1#!/bin/sh
2#
3# $Id: init 2081 2008-12-14 10:23:09Z 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 # Many possibilities depending on udev versions
294 if [ -x /sbin/startudev ]; then
295 /sbin/startudev
296 fi
297 if [ -x /sbin/start_udev ]; then
298 /sbin/start_udev
299 fi
300 # Depending on udevd version it gives back the hand or not :-(
301 /sbin/udevd --daemon &
302 sleep 5
303 mkdir -p /dev/.udev/queue/
304 if [ -x /sbin/udevtrigger ]; then
305 /sbin/udevtrigger
306 fi
307 create_dev_makedev
308 if [ -x /sbin/udevsettle ]; then
309 /sbin/udevsettle
310 fi
311 # It seems we need to have more static devs on some distro were
312 # udev as some other requirements to be covered later on.
313 # So in the mean time:
314 for d in `ls /dev.static`; do
315 if [ ! -e /dev/$d ]; then
316 mv /dev.static/$d /dev
317 fi
318 done
319 echo $PKLVL > /proc/sys/kernel/printk
320}
321
322RstHW() {
323
324 # Restore the HW configuration if available (NOT by default)
325 answer="NO"
326
327 grep -q nohw /proc/cmdline
328 if [ "$?" -eq 0 ]; then
329 return
330 fi
331 if [ -x ./mindi-rsthw ]; then
332 grep -q RESTORE /proc/cmdline
333 if [ "$?" -ne 0 ]; then
334 #clear
335 echo "*********************************************************************"
336 echo "Do you want to restore the HW configuration of the original machine ?"
337 echo "(This may dammage your hardware so be sure to check twice before saying yes)"
338 echo "*********************************************************************"
339 echo "Please confirm by typing YES exactly as written here (NO by default)"
340 echo -n "--> "
341 read answer
342 else
343 answer="YES"
344 fi
345 if [ "$answer" = "YES" ] ; then
346 ./mindi-rsthw
347 fi
348 fi
349}
350
351
352#RunDevfsd() {
353# loc=`which devfsd 2> /dev/null`
354# if [ "$loc" != "" ] ; then
355# LogIt "Starting devfsd"
356# devfsd /dev &
357# sleep 5
358# fi
359#}
360
361
362
363SpaceTests() {
364 [ -e "/tmp/filelist.full" ] && cp /tmp/filelist.full /tmp/FLF
365 if [ "`HowMuchFreeSpaceOnRamdisk`" -le "3" ] ; then
366 LogIt "Ramdisk is a bit smaller than I would like." 1
367 LogIt "Please re-run Mondo/Mindi but edit /usr/local/mindi first" 1
368 LogIt "and set EXTRA_SPACE to something high, e.g. 8000" 1
369 Die "Aborting. Please reboot."
370 fi
371 rm -f /tmp/FLF
372}
373
374StartUSBKbd() {
375# Prepare minimal USB env in case we have USB kbd such as with iLO
376[ -d /proc/bus/usb ] && ! grep -q /proc/bus/usb /proc/mounts && mount -t usbfs none /proc/bus/usb
377echo "$DENY_MODS" | grep -Eq 'uhcd_hci |usbhid |usbcore '
378if [ $? -eq 0 ]; then
379 return
380fi
381modprobe -q uhcd_hci
382modprobe -q usbhid
383}
384
385
386
387StartLvms() {
388 if [ -e "/tmp/i-want-my-lvm" ] ; then
389 LogIt "Scanning LVM's..." 1
390 if which lvm ; then
391 modprobe -q dm-mod
392 modprobe -q dm_mod
393 lvm vgscan --mknodes
394 else
395 vgscan
396 fi
397 grep -E "^#.*vgchange" /tmp/i-want-my-lvm | sed "s/^#[ ]*//" > /tmp/start-lvm
398 chmod +x /tmp/start-lvm
399 echo -en "Starting LVM's..."
400 /tmp/start-lvm &
401 for i in 1 2 3 4 5 ; do
402 echo -en "."
403 sleep 1
404 done
405 echo "Done."
406 fi
407# If necessary, cannibalize 'analyze-my-lvm'; copy some of its code here,
408# pipe vgscan's output, strip it, run 'vgchange' on its output, etc.etc.
409 LogIt "LVM's have been started."
410}
411
412
413StartMpath() {
414 if [ "`grep -i nompath /proc/cmdline`" ]; then
415 return;
416 fi
417 echo "Starting Mpath..."
418 if [ -x /sbin/multipath ]; then
419 mkdir -p /var/lib/multipath
420 cat > /etc/multipath.conf << EOF
421defaults {
422 user_friendly_names yes
423}
424EOF
425 /sbin/multipath -v 0
426 if [ -x /sbin/kpartx ]; then
427 /sbin/dmsetup ls --target multipath --exec "/sbin/kpartx -a -p p"
428 fi
429 fi
430}
431
432StartRaids() {
433 local raid_devices i
434
435 raid_devices=`grep /dev/md /tmp/mountlist.txt | cut -d' ' -f1`
436 if which raidstart > /dev/null 2> /dev/null ; then
437 for i in $raid_devices ; do
438 if grep `basename $i` /proc/mdstat > /dev/null 2> /dev/null ; then
439 LogIt "$i is started already; no need to run 'raidstart $i'" 1
440 else
441 LogIt "Running 'raidstart $i'" 1
442 raidstart $i
443 fi
444 done
445 elif which mdrun > /dev/null 2> /dev/null ; then
446 LogIt "Running 'mdrun'" 1
447 mdrun
448 elif which mdadm > /dev/null 2> /dev/null ; then
449 LogIt "Running 'mdadm'" 1
450 for i in $raid_devices ; do
451 if grep `basename $i` /proc/mdstat > /dev/null 2> /dev/null ; then
452 LogIt "$i is started already; no need to run 'mdadm $i'" 1
453 else
454 if [ -f /etc/mdadm.conf ] ; then
455 LogIt "Running 'mdadm $i' with user supplied /etc/mdadm.conf" 1
456 mdadm -A $i -c /etc/mdadm.conf
457 elif [ -f /etc/mdadm/mdadm.conf ] ; then
458 LogIt "Running 'mdadm $i' with user supplied /etc/mdadm/mdadm.conf" 1
459 mdadm -A $i -c /etc/mdadm/mdadm.conf
460 else
461 LogIt "Running 'mdadm $i'" 1
462 mdadm -Ac partitions -m dev $i
463 fi
464 fi
465 done
466 elif which dmraid > /dev/null 2> /dev/null ; then
467 if [ "`grep -i nodmraid /proc/cmdline`" ]; then
468 return;
469 fi
470 for x in $(/sbin/dmraid -ay -i -p -t 2>/dev/null | grep -E -iv "^no " |awk -F ':' '{ print $1 }') ; do
471 echo "Please send the result of /sbin/dmraid -ay -i -p -t to the devteam !!!"
472 return
473 #dmname=$(resolve_dm_name $x)
474 #[ -z "$dmname" ] && continue
475 #/sbin/dmraid -ay -i -p "$dmname" >/dev/null 2>&1
476 #/sbin/kpartx -a -p p "/dev/mapper/$dmname"
477 done
478 else
479 LogIt "Warning: Neither 'raidstart' nor 'mdrun''found. RAID devices may not have started." 1
480 fi
481
482}
483
484
485TryAgainToFindCD() {
486 local res
487 mount | grep /mnt/cdrom && return 0
488 [ "`grep "backup_media_type" /tmp/mondo-restore.cfg 2> /dev/null | grep "cdstream"`" ] && return
489 LogIt "Trying to mount CD-ROM a 2nd time..."
490 find-and-mount-cdrom --second-try
491 res=$?
492 if [ "$res" -eq "0" ] ; then
493 CD_MOUNTED_OK=yes
494 LogIt "CD-ROM drive mounted successfully." 1
495 else
496 LogIt "I still cannot find or mount the CD-ROM drive, by the way."
497 fi
498}
499
500
501
502UseTmpfs()
503{
504 local mount_cmd
505 echo -en "Mounting /tmp/tmpfs..."
506 mkdir -p /tmp/tmpfs
507# For technical reasons, some sets are as large as 16MB.
508# I am allowing 32MB because selective restore occupies a lot of space.
509 for size in 64m 48m 40m 32m ; do
510 mount_cmd="mount /dev/shm -t tmpfs -o size=$size" ; # was 34m until 04/2003
511 LogIt "Trying '$mount_cmd'"
512 $mount_cmd /tmp/tmpfs 2>> $LOGFILE
513 res=$?
514 [ "$res" -eq "0" ] && break
515 done
516 if [ "$res" -ne "0" ] ; then
517 LogIt "Failed. I could not run '$mount_cmd /tmp/tmpfs'. Your kernel is BROKEN or you do not have enough RAM." 1
518 umount /tmp/tmpfs > /dev/null 2> /dev/null
519 rmdir /tmp/tmpfs
520 ln -sf /mnt/RESTORING/tmp /tmp/tmpfs; # used by mondo-restore
521 LogIt "Failed to mount /tmp/tmpfs; using ugly softlink instead"
522 else
523 LogIt "Great. Pivot succeeded w/ size=$size" 1
524 echo -en "Pivoting /tmp..."
525 umount /tmp/tmpfs
526 mkdir -p /tmp.old
527 mv /tmp/* /tmp.old/
528 # Try to Deal with a busybox bug on inexistant links
529 cp /tmp/* /tmp.old/
530 rm -f /tmp/*
531 $mount_cmd /tmp
532 mv /tmp.old/* /tmp/
533 # Try to Deal with a busybox bug on inexistant links
534 cp /tmp.old/* /tmp/
535 rm -rf /tmp.old
536 mkdir -p /tmp/tmpfs
537 mkdir -p $GROOVY
538 echo "Done."
539 LogIt "Successfully mounted dynamic /tmp ramdisk"
540# mkdir -p /tmp/tmpfs/var
541# mv -f /var/log /tmp/tmpfs/var/log
542# ln -sf /tmp/tmpfs/var/log /var/log
543 fi
544}
545
546
547WelcomeMessage()
548{
549 export ARCH=`uname -m`
550
551 echo "********************************************************************"
552 echo "MINDI-LINUX by Mondo Dev Team - web site: http://www.mondorescue.org"
553 echo "Boot disk based on AlfaLinux & Trinux. BusyBox by Erik Andersen."
554which petris > /dev/null 2> /dev/null && echo "Petris was written by Peter Seidler <p.seidler@mail1.stofanet.dk>."
555 echo "Executables and source code are covered by the GNU GPL. No warranty."
556 echo "running on $ARCH"
557 echo "********************************************************************"
558}
559
560
561EnableCcissIfAppropriate() {
562 local i fname
563 for i in 0 1 2 3 ; do
564 fname="/proc/driver/cciss/cciss$i"
565 if [ -e "$fname" ] ; then
566 LogIt "Engaging $fname"
567 echo "engage scsi" > $fname
568 LogIt "...result=$?"
569 fi
570 done
571}
572
573ModprobeAllModules() {
574
575 for m in `find /lib/modules -name '*\.ko*' -o -name '*\.o*'`; do
576 k=`basename $m | sed 's/\.ko.*$//'`
577 j=`basename $k | sed 's/\.o.*$//'`
578 echo "$DENY_MODS" | grep -q "$j "
579 if [ $? -eq 0 ]; then
580 echo "Denying $j..."
581 continue
582 fi
583 echo "Probing $j..."
584 modprobe -q $j
585 done
586}
587
588ExtractDataDisksAndLoadModules() {
589 echo "Installing additional tools ..."
590 install-additional-tools
591 # Keep the kernel silent again
592 PKLVL=`cut -f1 /proc/sys/kernel/printk`
593 echo 0 > /proc/sys/kernel/printk
594 ModprobeAllModules
595 echo $PKLVL > /proc/sys/kernel/printk
596
597 # Retry failed udev events now that local filesystems are mounted read-write
598 # (useful for rules creating network ifcfg files)
599 if [ -e "/tmp/USE-UDEV" ] ; then
600 if [ -x /sbin/udevadm ]; then
601 /sbin/udevadm trigger --retry-failed
602 fi
603 fi
604}
605
606# ------------------------ main -----------------------
607
608MINDI_VER=PBVER
609MINDI_REV=PBREV
610trap CaughtSoftReset SIGTERM
611LOGFILE=/var/log/mondorestore.log
612PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/mondo:/usr/games
613GROOVY=/tmp/groovy-stuff
614USER=root
615export PATH GROOVY USER LOGFILE
616
617echo "Welcome to init (from mindi ${MINDI_VER}-r${MINDI_REV})"
618
619mount -o remount rw /
620[ ! "$GROOVY" ] && Die "I'm not groovy!"
621for i in $GROOVY /mnt/cdrom /mnt/isodir /var/local/petris /tmp/isodir; do
622 mkdir -p $i
623done
624#/bin/update
625mount /proc/ /proc -v -t proc
626mkdir /sys 2> /dev/null
627mount /sys/ /sys -v -t sysfs 2>> $LOGFILE
628# For ESX 3
629[ -d /proc/vmware ] && ! grep -q /vmfs /proc/mounts && mount -t vmfs /vmfs /vmfs
630rm -f /foozero
631
632if [ "`grep -i denymods /proc/cmdline`" ]; then
633 export DENY_MODS="`cat /proc/cmdline | sed 's~.*denymods=\"\(.*\)\".*~\1~'` mondonone"
634else
635 export DENY_MODS=" "
636fi
637if [ "`grep -i 'obdr ' /tmp/mondo-restore.cfg 2> /dev/null`" ]; then
638 # Do not try to load usb storage when dealing with OBDR it makes the modprobe hang :-(
639 export DENY_MODS="usb-storage $DENY_MODS"
640fi
641if [ "`grep -i forcemods /proc/cmdline`" ]; then
642 export FORCE_MODS="`cat /proc/cmdline | sed 's~.*forcemods=\"\(.*\)\".*~\1~'` mondonone"
643else
644 export FORCE_MODS=" "
645fi
646
647echo "Activating a potential USB keyboard/mouse"
648StartUSBKbd
649
650if [ -f /proc/sys/kernel/exec-shield ]; then
651 echo 0 > /proc/sys/kernel/exec-shield 2>> /dev/null
652fi
653
654if [ -f /proc/modules ]; then
655 echo "/sbin/modprobe" > /proc/sys/kernel/modprobe
656fi
657
658if [ -e "/tmp/USE-UDEV" ] ; then
659 RunUdevd
660fi
661ExtractDevTarballs
662LaunchTerminals
663
664# Keeping kernel silent for module insertion
665PKLVL=`cut -f1 /proc/sys/kernel/printk`
666echo 0 > /proc/sys/kernel/printk
667ModprobeAllModules
668echo $PKLVL > /proc/sys/kernel/printk
669
670EnableCcissIfAppropriate
671#-------------------------------
672#WHOLIVESINAPINEAPPLEUNDERTHESEA#;# --- don't touch this :)
673#-------------------------------
674UseTmpfs
675if [ ! -e "/tmp/mondo-restore.cfg" ] ; then
676 LogIt "Warning - /tmp/mondo-restore.cfg not found"
677fi
678
679if [ "`grep -i 'obdr ' /tmp/mondo-restore.cfg 2>/dev/null`" ] || [ "`grep -i ' udev' /tmp/mondo-restore.cfg 2>/dev/null`" ]; then
680 HandleTape
681 ExtractDataDisksAndLoadModules
682elif [ "`grep -i pxe /proc/cmdline`" ]; then
683 # We need to get here exported variables from start-nfs
684 . /sbin/start-nfs
685
686 # Simulate a local CD
687 echo "/mnt/cdrom" > /tmp/CDROM-LIVES-HERE
688 CD_MOUNTED_OK=yes
689 ExtractDataDisksAndLoadModules
690elif [ "`grep -i usb= /proc/cmdline`" ] || [ "`grep -i usb /tmp/mondo-restore.cfg 2>/dev/null | grep media-type`" ]; then
691 . /sbin/start-usb
692
693 # Simulate a local CD
694 echo "/mnt/cdrom" > /tmp/CDROM-LIVES-HERE
695 CD_MOUNTED_OK=yes
696 ExtractDataDisksAndLoadModules
697else
698 HandleCDROM
699 ExtractDataDisksAndLoadModules
700 # We need to get here exported variables from start-nfs
701 . /sbin/start-nfs
702fi
703res=$?
704ConfigureLoggingDaemons
705if [ -e "/tmp/USE-DEVFS" ] ; then
706 umount /mnt/cdrom 2> /dev/null
707 mv /dev/cdrom /cdrom.lnk 2> /dev/null
708 CD_MOUNTED_OK=""
709 RunDevfsd
710fi
711LoadKeymap
712WelcomeMessage
713RstHW
714echo "Starting potential Raid/LVMs ..."
715PauseForRaids
716StartRaids
717StartMpath
718StartLvms
719CopyBootDevEntry
720mkdir -p /tmp/tmpfs
721sleep 2
722#clear
723if [ -e "/dev/md0" ] && [ ! -e "/dev/md/0" ] && [ "`grep /dev/md/ /tmp/mountlist.txt`" != "" ] ; then
724 LogIt "Creating /dev/md/* softlinks just in case." 1
725 mkdir -p /dev/md
726 cp -af /dev/md0 /dev/md/0 2> /dev/null
727 cp -af /dev/md1 /dev/md/1 2> /dev/null
728 cp -af /dev/md2 /dev/md/2 2> /dev/null
729fi
730# SpaceTests; # Mandrake Linux 8.1 doesn't like this
731[ -e "/tmp/mountlist.txt" ] && cp -f /tmp/mountlist.txt /tmp/mountlist.original
732
733if ! [ "`grep -i "pxe" /proc/cmdline`" ] ; then
734 res="`cat /mnt/cdrom/archives/THIS-CD-NUMBER 2> /dev/null`"
735 [ "$res" != "1" ] && [ "$res" != "" ] && Die "This is CD #$res in the series. Please insert CD #1."
736 [ -e "/cdrom.lnk" ] && mv -f /cdrom.lnk /dev/cdrom && mount /dev/cdrom /mnt/cdrom && CD_MOUNTED_OK=yes
737 [ "$CD_MOUNTED_OK" != "yes" ] && TryAgainToFindCD
738 #mount | grep cdrom > /dev/null 2> /dev/null || mount /dev/cdrom /mnt/cdrom >> $LOGFILE 2>> $LOGFILE
739fi
740hack-cfg-if-necessary || LogIt "Cannot find hack-cfg-if-necessary"
741
742# Log some useful info
743LogIt "init (from mindi v$MINDI_VER-r${MINDI_REV})"
744LogIt "/proc/cmdline is:"
745cat /proc/cmdline >> $LOGFILE
746LogIt "df result:"
747LogIt "----------"
748df >> $LOGFILE
749LogIt "-------------"
750LogIt "mount result:"
751LogIt "-------------"
752mount >> $LOGFILE
753LogIt "-------------"
754LogIt "lsmod result:"
755LogIt "-------------"
756lsmod >> $LOGFILE
757LogIt "-------------"
758LogIt "dmesg result:"
759LogIt "-------------"
760dmesg >> $LOGFILE
761LogIt "-------------"
762LogIt "/proc/swaps:" >> $LOGFILE
763LogIt "-------------"
764cat /proc/swaps >> $LOGFILE
765LogIt "-------------"
766LogIt "/proc/filesystems:" >> $LOGFILE
767LogIt "-------------"
768cat /proc/filesystems >> $LOGFILE
769LogIt "-------------"
770LogIt "/proc/partitions:" >> $LOGFILE
771LogIt "-------------"
772cat /proc/partitions >> $LOGFILE
773
774
775ide-opt
776
777#ctrlaltdel soft
778for path in /usr.bin /usr/bin ; do
779 fname=$path/nano
780 [ -e "$fname" ] && ln -sf $fname /usr/bin/pico
781done
782res=`which nano 2> /dev/null`
783[ "$res" ] && ln -sf /usr/bin/
784for i in null stdout stdin stderr ; do
785 cp -af /dev/$i /tmp
786done
787# Not sure it's still needed, but shouldn't hurt
788if [ -e "/tmp/USE-UDEV" ] ; then
789 if [ -x /sbin/udevadm ]; then
790 /sbin/udevadm trigger --retry-failed
791 fi
792fi
793if grep "backup-media-type" /tmp/mondo-restore.cfg > /dev/null 2> /dev/null ; then
794 LogIt "backup-media-type is specified in config file - great."
795 LogIt "Calling post-init $mountlist"
796 post-init
797else
798 LogIt "backup-media-type is not specified in config file."
799 LogIt "I think this media has no archives on it."
800fi
801if grep "RESTORE" /proc/cmdline > /dev/null 2> /dev/null ; then
802 echo "Rebooting in 10 seconds automatically as per reboot order"
803 echo -en "Press ^C to interrupt if you have to ..."
804 for i in 1 2 3 4 5 6 7 8 9 10 ; do
805 sleep 1
806 echo -en "."
807 done
808 echo "Boom."
809 sleep 1
810else
811 echo -en "Type 'exit' to reboot the PC\n"
812 umount /mnt/cdrom 2> /dev/null
813 mount / -o rw,remount > /dev/null 2> /dev/null
814 LogIt "Launching Shell"
815 sh
816fi
817CaughtSoftReset
818# reboot
Note: See TracBrowser for help on using the repository browser.