source: MondoRescue/branches/2.2.8/mindi/rootfs/sbin/init@ 2075

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

Fix a syntax error in init script for dmraid support

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