source: MondoRescue/branches/2.2.9/mindi/rootfs/sbin/init@ 2497

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

r3620@localhost: bruno | 2009-11-18 10:31:36 +0100

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