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

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