source: MondoRescue/branches/2.2.6/mindi/rootfs/sbin/init@ 1927

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