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

Last change on this file since 2487 was 2487, checked in by Bruno Cornec, 14 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
Line 
1#!/bin/sh
2#
3# $Id: init 2487 2009-11-18 20:40:56Z 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 "not needed."
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 # 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
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
92}
93
94
95LoadKeymap() {
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
101# loadkmap != loadkeys
102# elif which loadkmap > /dev/null 2> /dev/null ; then
103# loadkmap < $fname
104 else
105 LogIt "Using default keyboard map." 1
106 fi
107}
108
109
110UntarTapeStuff() {
111 local old_pwd res
112 old_pwd=`pwd`
113 cd $GROOVY
114 [ "$1" != "" ] && tapedev=$1
115 [ ! "$tapedev" ] && tapedev=`grep media-dev /tmp/mondo-restore.cfg 2>/dev/null | tr -s ' ' ' ' | cut -d' ' -f2`
116 mt -f $tapedev rewind
117 mt -f $tapedev fsf 2
118 dd if=$tapedev bs=32k count=1024 | tar -zx
119 res=$?
120 if [ "$res" -eq "0" ] ; then
121 # Store the dev name in case we changed it interactively
122 if [ -f "/tmp/mondo-restore.cfg" ]; then
123 sed -i "s/^media-dev .*$/media-dev $tapedev/" /tmp/mondo-restore.cfg
124 fi
125 fi
126 cd $old_pwd
127 return $res
128}
129
130HandleTape() {
131 local res tapedev
132 tapedev="" ; # will be set by UntarTapeStuff()
133
134 # Here we can add the USB storage module, it's working even with OBDR !
135 modprobe -q usb-storage
136 # Tape takes some time to appear
137 sleep 10
138 cd $GROOVY
139 UntarTapeStuff $tapedev
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
144 LogIt "or hit <Enter> to boot from another media." 1
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
154 break
155 fi
156 done
157 # For post-init
158 export TAPEDEV=$tapedev
159
160 if [ "$res" -ne "0" ] ; then
161 cd /
162 LogIt "Failed to use tape as extended datadisk. Reverting to another media." 1
163 HandleCDROM
164 res=$?
165 else
166 LogIt "Using tape as extended datadisk. Good." 3
167 echo "Using tape as extd ddisk." > /tmp/TAPEDEV-HAS-DATA-DISKS
168 res=0
169 CD_MOUNTED_OK=yes
170 fi
171 return $res
172}
173
174
175
176HandleCDROM() {
177 # Just in case we have an iLO ensure we will map it correctly
178 echo "$DENY_MODS" | grep -q "usb-storage "
179 if [ $? -eq 0 ]; then
180 return
181 fi
182 echo "Activating a potential USB Storage device"
183 modprobe -q usb-storage
184 for i in 1 2 3 4 5 6 7 8 9 10 ; do
185 sleep 1
186 echo -en "."
187 done
188
189 find-and-mount-cdrom
190 res=$?
191 if [ "$res" -ne "0" ] ; then
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=$?
197 fi
198 if [ "$res" -eq "0" ] ; then
199 LogIt "OK, I am running on a CD-ROM. Good." 3
200 CD_MOUNTED_OK=yes
201 else
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
206 CD_MOUNTED_OK=""
207 fi
208 return 0
209}
210
211
212PauseForRaids() {
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
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() {
230 loc=`which devfsd 2> /dev/null`
231 if [ "$loc" != "" ] ; then
232 LogIt "Devfs found. Testing kernel support..."
233 if [ ! -e "/dev/.devfsd" ] ; then
234 mount -t devfs devfs /dev 2>> $LOGFILE
235 if [ "$?" -ne "0" ] ; then
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"
245 conffile=`strings $loc | grep -E "devfsd.conf$"`
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
255 fi
256}
257
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 ;;
268 M) mknod /dev/$name $arg1 && chmod 600 /dev/$name;;
269 *) echo "udev-links.conf: unparseable line (%s %s %s)\n" "$type" "$name" "$arg1" ;;
270 esac
271 done
272}
273
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}
281
282RunUdevd() {
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
291 if [ -e /proc/sys/kernel/hotplug ]; then
292 echo > /proc/sys/kernel/hotplug
293 fi
294 PKLVL=`cut -f1 /proc/sys/kernel/printk`
295 echo 0 > /proc/sys/kernel/printk
296 # Many possibilities depending on udev versions
297 if [ -x /sbin/startudev ]; then
298 /sbin/startudev
299 fi
300 if [ -x /sbin/start_udev ]; then
301 /sbin/start_udev
302 fi
303 # Depending on udevd version it gives back the hand or not :-(
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
310 mkdir -p /dev/.udev/queue/
311 if [ -x /sbin/udevtrigger ]; then
312 /sbin/udevtrigger
313 fi
314 echo "Waiting for udev to discover..."
315 create_dev_makedev
316 # Newer version use udevadm for that
317 if [ -x /sbin/udevsettle ]; then
318 /sbin/udevsettle --timeout=10
319 elif [ -x /sbin/udevadm ]; then
320 /sbin/udevadm trigger
321 /sbin/udevadm settle --timeout=10
322 fi
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
331 echo $PKLVL > /proc/sys/kernel/printk
332}
333
334RstHW() {
335
336 # Restore the HW configuration if available (NOT by default)
337 answer="NO"
338
339 grep -q nohw /proc/cmdline
340 if [ "$?" -eq 0 ]; then
341 return
342 fi
343 if [ -x ./mindi-rsthw ]; then
344 grep -q RESTORE /proc/cmdline
345 if [ "$?" -ne 0 ]; then
346 #clear
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
357 if [ "$answer" = "YES" ] ; then
358 ./mindi-rsthw
359 fi
360 fi
361}
362
363
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
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
378echo "$DENY_MODS" | grep -Eq 'uhcd_hci |usbhid |usbcore '
379if [ $? -eq 0 ]; then
380 return
381fi
382modprobe -q uhcd_hci
383modprobe -q usbhid
384}
385
386
387
388StartLvms() {
389 if [ "`grep -i nolvm /proc/cmdline`" ]; then
390 return;
391 fi
392 if [ -e "/tmp/i-want-my-lvm" ] ; then
393 LogIt "Scanning LVM's..." 1
394 if which lvm ; then
395 modprobe -q dm-mod
396 modprobe -q dm_mod
397 lvm vgscan --mknodes
398 else
399 vgscan
400 fi
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
406 echo -en "."
407 sleep 1
408 done
409 echo "Done."
410 fi
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.
413 LogIt "LVM's have been started."
414}
415
416StartPowerPath() {
417
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
457StartMpath() {
458 if [ "`grep -i nompath /proc/cmdline`" ]; then
459 return;
460 fi
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
466defaults {
467 user_friendly_names yes
468}
469EOF
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
474 fi
475 fi
476}
477
478StartRaids() {
479 local raid_devices i
480
481 if [ "`grep -i noraid /proc/cmdline`" ]; then
482 return;
483 fi
484
485 raid_devices=`grep /dev/md /tmp/mountlist.txt | cut -d' ' -f1`
486 if which raidstart > /dev/null 2> /dev/null ; then
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
491 LogIt "Running 'raidstart $i'" 1
492 raidstart $i
493 fi
494 done
495 elif which mdrun > /dev/null 2> /dev/null ; then
496 if [ "`grep -i nomd /proc/cmdline`" ]; then
497 return;
498 fi
499 LogIt "Running 'mdrun'" 1
500 mdrun
501 elif which mdadm > /dev/null 2> /dev/null ; then
502 if [ "`grep -i nomd /proc/cmdline`" ]; then
503 return;
504 fi
505 LogIt "Running 'mdadm'" 1
506 for i in $raid_devices ; do
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
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
520 fi
521 done
522 elif which dmraid > /dev/null 2> /dev/null ; then
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
534 else
535 LogIt "Warning: Neither 'raidstart' nor 'mdrun''found. RAID devices may not have started." 1
536 fi
537
538}
539
540
541TryAgainToFindCD() {
542 local res
543 mount | grep /mnt/cdrom && return 0
544 [ "`grep "backup_media_type" /tmp/mondo-restore.cfg 2> /dev/null | grep "cdstream"`" ] && return
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
554}
555
556
557
558UseTmpfs()
559{
560 local mount_cmd
561 echo -en "Mounting /tmp/tmpfs..."
562 mkdir -p /tmp/tmpfs
563# For technical reasons, some sets are as large as 16MB.
564# I am allowing 32MB because selective restore occupies a lot of space.
565 for size in 128m 64m 48m 40m 32m ; do
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
583 mv /tmp/* /tmp.old/
584 # Try to Deal with a busybox bug on inexistant links
585 cp /tmp/* /tmp.old/
586 rm -f /tmp/*
587 $mount_cmd /tmp
588 mv /tmp.old/* /tmp/
589 # Try to Deal with a busybox bug on inexistant links
590 cp /tmp.old/* /tmp/
591 rm -rf /tmp.old
592 mkdir -p /tmp/tmpfs
593 mkdir -p $GROOVY
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
599 fi
600}
601
602
603WelcomeMessage()
604{
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."
608which petris > /dev/null 2> /dev/null && echo "Petris was written by Peter Seidler <p.seidler@mail1.stofanet.dk>."
609 echo "Executables and source code are covered by the GNU GPL. No warranty."
610 echo "running on $ARCH"
611 echo "********************************************************************"
612}
613
614
615EnableCcissIfAppropriate() {
616 local i fname
617 for i in 0 1 2 3 ; do
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
624 done
625}
626
627ModprobeAllModules() {
628
629 for m in `find /lib/modules -name '*\.ko*' -o -name '*\.o*'`; do
630 k=`basename $m | sed 's/\.ko.*$//'`
631 j=`basename $k | sed 's/\.o.*$//'`
632 echo "$DENY_MODS" | grep -q "$j "
633 if [ $? -eq 0 ]; then
634 echo "Denying $j..."
635 continue
636 fi
637 echo "Probing $j..."
638 modprobe -q $j
639 done
640}
641
642ExtractDataDisksAndLoadModules() {
643 echo "Installing additional tools ..."
644 install-additional-tools
645 # Keep the kernel silent again
646 PKLVL=`cut -f1 /proc/sys/kernel/printk`
647 echo 0 > /proc/sys/kernel/printk
648 ModprobeAllModules
649 echo $PKLVL > /proc/sys/kernel/printk
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
658}
659
660# ------------------------ main -----------------------
661
662MINDI_VER=PBVER
663MINDI_REV=PBREV
664trap CaughtSoftReset SIGTERM
665LOGFILE=/var/log/mondorestore.log
666PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/mondo:/usr/games
667GROOVY=/tmp/groovy-stuff
668USER=root
669ARCH=`uname -m`
670
671export PATH GROOVY USER LOGFILE ARCH
672
673echo "Welcome to init (from mindi ${MINDI_VER}-r${MINDI_REV})"
674
675mount -o remount rw /
676[ ! "$GROOVY" ] && Die "I'm not groovy!"
677for i in $GROOVY /mnt/cdrom /mnt/isodir /var/local/petris /tmp/isodir; do
678 mkdir -p $i
679done
680#/bin/update
681mount /proc/ /proc -v -t proc
682mkdir /sys 2> /dev/null
683mount /sys/ /sys -v -t sysfs 2>> $LOGFILE
684# For ESX 3
685[ -d /proc/vmware ] && ! grep -q /vmfs /proc/mounts && mount -t vmfs /vmfs /vmfs
686rm -f /foozero
687
688if [ "`grep -i denymods /proc/cmdline`" ]; then
689 export DENY_MODS="`cat /proc/cmdline | sed 's~.*denymods=\"\(.*\)\".*~\1~'` mondonone"
690else
691 export DENY_MODS=" "
692fi
693if [ "`grep -i 'obdr ' /tmp/mondo-restore.cfg 2> /dev/null`" ]; then
694 # Do not try to load usb storage when dealing with OBDR it makes the modprobe hang :-(
695 export DENY_MODS="usb-storage $DENY_MODS"
696fi
697if [ "`grep -i forcemods /proc/cmdline`" ]; then
698 export FORCE_MODS="`cat /proc/cmdline | sed 's~.*forcemods=\"\(.*\)\".*~\1~'` mondonone"
699else
700 export FORCE_MODS=" "
701fi
702
703echo "Activating a potential USB keyboard/mouse"
704StartUSBKbd
705
706if [ -f /proc/sys/kernel/exec-shield ]; then
707 echo 0 > /proc/sys/kernel/exec-shield 2>> /dev/null
708fi
709
710if [ -f /proc/modules ]; then
711 echo "/sbin/modprobe" > /proc/sys/kernel/modprobe
712fi
713
714if [ -e "/tmp/USE-UDEV" ] ; then
715 RunUdevd
716fi
717ExtractDevTarballs
718LaunchTerminals
719
720# Keeping kernel silent for module insertion
721PKLVL=`cut -f1 /proc/sys/kernel/printk`
722echo 0 > /proc/sys/kernel/printk
723ModprobeAllModules
724echo $PKLVL > /proc/sys/kernel/printk
725
726EnableCcissIfAppropriate
727#-------------------------------
728#WHOLIVESINAPINEAPPLEUNDERTHESEA#;# --- don't touch this :)
729#-------------------------------
730UseTmpfs
731if [ ! -e "/tmp/mondo-restore.cfg" ] ; then
732 LogIt "Warning - /tmp/mondo-restore.cfg not found"
733fi
734if [ "`grep -i pxe /proc/cmdline`" ] || [ "`grep -i net /proc/cmdline`" ]; then
735 # We need to get here exported variables from start-netfs
736 . /sbin/start-netfs
737fi
738
739if [ "`grep -i 'obdr ' /tmp/mondo-restore.cfg 2>/dev/null`" ] || [ "`grep -i ' udev' /tmp/mondo-restore.cfg 2>/dev/null`" ]; then
740 HandleTape
741 ExtractDataDisksAndLoadModules
742elif [ "`grep -i pxe /proc/cmdline`" ]; then
743 # Simulate a local CD
744 echo "/mnt/cdrom" > /tmp/CDROM-LIVES-HERE
745 CD_MOUNTED_OK=yes
746 ExtractDataDisksAndLoadModules
747 # Fake the conf file to force it to NFS mode, even if we made originally a CD (mandatory for mondorestore to work correctly)
748 sed -i "s/backup-media-type.*/backup-media-type netfs/" /tmp/mondo-restore.cfg
749elif [ "`grep -i usb= /proc/cmdline`" ] || [ "`grep -i usb /tmp/mondo-restore.cfg 2>/dev/null | grep media-type`" ]; then
750 . /sbin/start-usb
751
752 # Simulate a local CD
753 echo "/mnt/cdrom" > /tmp/CDROM-LIVES-HERE
754 CD_MOUNTED_OK=yes
755 ExtractDataDisksAndLoadModules
756else
757 HandleCDROM
758 ExtractDataDisksAndLoadModules
759 # We need to get here exported variables from start-netfs
760 . /sbin/start-netfs
761fi
762res=$?
763ConfigureLoggingDaemons
764if [ -e "/tmp/USE-DEVFS" ] ; then
765 umount /mnt/cdrom 2> /dev/null
766 mv /dev/cdrom /cdrom.lnk 2> /dev/null
767 CD_MOUNTED_OK=""
768 RunDevfsd
769fi
770LoadKeymap
771WelcomeMessage
772RstHW
773echo "Starting potential Raid/LVMs ..."
774PauseForRaids
775StartRaids
776StartMpath
777StartLvms
778CopyBootDevEntry
779mkdir -p /tmp/tmpfs
780sleep 2
781#clear
782if [ -e "/dev/md0" ] && [ ! -e "/dev/md/0" ] && [ "`grep /dev/md/ /tmp/mountlist.txt`" != "" ] ; then
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
788fi
789[ -e "/tmp/mountlist.txt" ] && cp -f /tmp/mountlist.txt /tmp/mountlist.original
790
791if ! [ "`grep -i "pxe" /proc/cmdline`" ] ; then
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
800# Log some useful info
801LogIt "init (from mindi v$MINDI_VER-r${MINDI_REV})"
802LogIt "/proc/cmdline is:"
803LogIt "----------"
804cat /proc/cmdline >> $LOGFILE
805LogIt "----------"
806LogIt "df result:"
807LogIt "----------"
808df >> $LOGFILE
809LogIt "-------------"
810LogIt "mount result:"
811LogIt "-------------"
812mount >> $LOGFILE
813LogIt "-------------"
814LogIt "lsmod result:"
815LogIt "-------------"
816lsmod >> $LOGFILE
817LogIt "-------------"
818LogIt "dmesg result:"
819LogIt "-------------"
820dmesg >> $LOGFILE
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
833LogIt "-------------"
834LogIt "fdisk result:" >> $LOGFILE
835LogIt "-------------"
836fdisk -l >> $LOGFILE
837
838ide-opt
839
840#ctrlaltdel soft
841for path in /usr.bin /usr/bin ; do
842 fname=$path/nano
843 [ -e "$fname" ] && ln -sf $fname /usr/bin/pico
844done
845res=`which nano 2> /dev/null`
846[ "$res" ] && ln -sf /usr/bin/
847for i in null stdout stdin stderr ; do
848 cp -af /dev/$i /tmp
849done
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
856if grep "backup-media-type" /tmp/mondo-restore.cfg > /dev/null 2> /dev/null ; then
857 LogIt "backup-media-type is specified in config file - great."
858 LogIt "Calling post-init"
859 # start-netfs moved it under /tmp as the NFS share is already unmounted
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
868 post-init
869else
870 LogIt "backup-media-type is not specified in config file."
871 LogIt "I think this media has no archives on it."
872fi
873if [ "`grep -i "post=" /proc/cmdline`" ] ; then
874 for i in `cat /proc/cmdline` ; do
875 echo $i | grep -qi post= && post=`echo $i | cut -d= -f2`
876 done
877 # start-netfs moved it under /tmp as the NFS share is already unmounted
878 if [ "`echo $post | grep -E '^/tmp/isodir'`" ]; then
879 post=`echo $post | sed 's|^/tmp/isodir|/tmp|'`
880 fi
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
885 mount-me
886 fi
887 $post
888 if [ "`echo $post | grep -E '^/mnt/RESTORING'`" ]; then
889 unmount-me
890 fi
891 fi
892fi
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
909CaughtSoftReset
910# reboot
Note: See TracBrowser for help on using the repository browser.