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

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