source: MondoRescue/branches/stable/mindi/rootfs/sbin/init@ 1977

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

svn merge -r 1938:1976 $SVN_M/branches/2.2.6

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