root/branches/2.2.10/mindi/rootfs/sbin/init

Revision 2587, 25.1 kB (checked in by bruno, 6 months ago)

r3714@localhost: bruno | 2010-03-03 10:42:28 +0100
svk merge -r3649:3678 //prj/local-mondorescue/branches/2.2.9


r3666@localhost (orig r2578): bruno | 2010-02-12 13:35:29 +0100

  • Free the sz_devfile fifo for ntfs later as it was used in between, causing a problem to backup NT

FS dev. Fix #392.


r3667@localhost (orig r2579): bruno | 2010-02-12 15:27:07 +0100
analyze-my-lvm now provides an option to call GiveMapperOfdm? that can be used in mindi. Solve #395

r3668@localhost (orig r2580): bruno | 2010-02-12 17:12:18 +0100

  • When using excludevs= also exclude from mountlist the devices mentioned. Fix #393.

    r3669@localhost (orig r2581): bruno | 2010-02-12 17:15:53 +0100
  • the post install ascript passed with post= should just exists and not be executable. It's now mad

e executable by init. Maybe a fix for #394


r3670@localhost (orig r2582): vicgat | 2010-02-15 19:35:39 +0100

r3671@localhost (orig r2583): bruno | 2010-02-15 20:05:45 +0100

  • Fix reporting when a module is not found (pollutes logs)

    r3672@localhost (orig r2584): bruno | 2010-02-15 20:09:23 +0100
  • Adds a missing module for iSCSI support

    r3673@localhost (orig r2585): bruno | 2010-02-15 20:45:50 +0100
  • Fix problems of wrongly detected Duplicate mountpoints in case of lvm

    r3674@localhost (orig r2586): bruno | 2010-02-16 13:15:38 +0100
  • Avoids error messages from stat in analyze-my-lvm

    r3663@athonet (orig r2577): bruno | 2010-02-09 02:08:39 +0100
  • First try to improve OVM support with ocfs2 and Xen modules added

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