source: MondoRescue/branches/2.2.5/mindi/rootfs/sbin/init@ 1826

Last change on this file since 1826 was 1826, checked in by Bruno Cornec, 16 years ago

Wait more around the USB CD emulated by iLO as it takes up to 5 seconds to come up

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