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

Last change on this file since 2087 was 2086, checked in by Bruno Cornec, 15 years ago
  • use the distro df instead of the busybox one, to better support -P option usage now.
  • Property svn:keywords set to Id
File size: 20.8 KB
RevLine 
[1]1#!/bin/sh
2#
[736]3# $Id: init 2086 2008-12-14 14:43:11Z 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
203PauseForRaids() {
[1747]204 if [ "`dmesg | grep -i "RAID Controller"`" != "" ] || [ "`dmesg | grep -i "Vendor: 3ware"`" != "" ] ; then
205 LogIt "RAID controller(s) detected. Pausing 10 seconds to let them warm up." 1
206 echo -en "Pausing..."
207 for i in 1 2 3 4 5 6 7 8 9 10 ; do
208 sleep 1
209 echo -en "$(($i*10))%..."
210 done
211 echo "Done."
212 fi
[1]213}
214
215
216# 06/13/2002 --- DuckX's & Hugo's new routine
217# 10/11/2003 --- added a simple devfsd.conf file
218# 01/24/2005 --- cater for arbitrary locations of devfsd.conf by using the
219# config file path compiled into devfsd
220RunDevfsd() {
[1747]221 loc=`which devfsd 2> /dev/null`
222 if [ "$loc" != "" ] ; then
[1]223 LogIt "Devfs found. Testing kernel support..."
224 if [ ! -e "/dev/.devfsd" ] ; then
[746]225 mount -t devfs devfs /dev 2>> $LOGFILE
[1747]226 if [ "$?" -ne "0" ] ; then
[1]227 LogIt "Error while trying to mount devfs"
228 else
229 LogIt "Devfs mounted OK"
230 fi
231 fi
232 #check if the kernel supports devfs
233 if [ -e "/dev/.devfsd" ] ; then
234 [ -d "/proc/1" ] || mount -n /proc
235 LogIt "Kernel support found. Creating config file and starting devfsd"
[911]236 conffile=`strings $loc | grep -E "devfsd.conf$"`
[1]237 [ "$conffile" ] || conffile="/etc/devfsd.conf"
238 confpath=`echo $conffile | sed "s/\/devfsd\.conf$//"`
239 [ -d "$confpath" ] || mkdir -p $confpath
240 echo -en "REGISTER .* MKOLDCOMPAT\nUNREGISTER .* RMOLDCOMPAT\n" > $conffile
241 devfsd /dev &
242 sleep 5
243 else
244 LogIt "No devfs kernel support."
245 fi
[1747]246 fi
[1]247}
248
[1718]249# Taken from udev management in Mandriva 2008.0. Kudos guys
250make_extra_nodes () {
251 # there are a few things that sysfs does not export for us.
252 # these things are listed in /etc/udev/links.conf
253 grep '^[^#]' /etc/udev-links.conf | \
254 while read type name arg1; do
255 [ "$type" -a "$name" -a ! -e "/dev/$name" -a ! -L "/dev/$name" ] ||continue
256 case "$type" in
257 L) ln -s $arg1 /dev/$name ;;
258 D) mkdir -p /dev/$name ;;
[1719]259 M) mknod /dev/$name $arg1 && chmod 600 /dev/$name;;
260 *) echo "udev-links.conf: unparseable line (%s %s %s)\n" "$type" "$name" "$arg1" ;;
[1718]261 esac
262 done
263}
264
[1792]265create_dev_makedev() {
266 if [ -e /sbin/MAKEDEV ]; then
267 ln -sf /sbin/MAKEDEV /dev/MAKEDEV
268 else
269 ln -sf /bin/true /dev/MAKEDEV
270 fi
271}
[1718]272
[1716]273RunUdevd() {
[1718]274 # Inspiration from Mandriva 2008.0 startup script
275 echo "Preparing udev environment..."
276 mv /dev /dev.static
277 mkdir /dev
278 mount -n -o size=5M,mode=0755 -t tmpfs none /dev
279 make_extra_nodes
280 mount -n -t devpts -o mode=620 none /dev/pts
281 mount -n -t tmpfs none /dev/shm
[1789]282 if [ -e /proc/sys/kernel/hotplug ]; then
283 echo > /proc/sys/kernel/hotplug
284 fi
[1734]285 PKLVL=`cut -f1 /proc/sys/kernel/printk`
286 echo 0 > /proc/sys/kernel/printk
[2081]287 # Many possibilities depending on udev versions
[1759]288 if [ -x /sbin/startudev ]; then
289 /sbin/startudev
290 fi
[2081]291 if [ -x /sbin/start_udev ]; then
292 /sbin/start_udev
293 fi
[1759]294 # Depending on udevd version it gives back the hand or not :-(
295 /sbin/udevd --daemon &
[1863]296 sleep 5
[1792]297 mkdir -p /dev/.udev/queue/
[1789]298 if [ -x /sbin/udevtrigger ]; then
299 /sbin/udevtrigger
300 fi
[1792]301 create_dev_makedev
[1816]302 if [ -x /sbin/udevsettle ]; then
303 /sbin/udevsettle
304 fi
[1824]305 # It seems we need to have more static devs on some distro were
306 # udev as some other requirements to be covered later on.
307 # So in the mean time:
308 for d in `ls /dev.static`; do
309 if [ ! -e /dev/$d ]; then
310 mv /dev.static/$d /dev
311 fi
312 done
[1816]313 echo $PKLVL > /proc/sys/kernel/printk
[1716]314}
[1]315
[1761]316RstHW() {
[1]317
[1761]318 # Restore the HW configuration if available (NOT by default)
319 answer="NO"
[1]320
[1815]321 grep -q nohw /proc/cmdline
322 if [ "$?" -eq 0 ]; then
323 return
324 fi
[1761]325 if [ -x ./mindi-rsthw ]; then
326 grep -q RESTORE /proc/cmdline
327 if [ "$?" -ne 0 ]; then
[1815]328 #clear
[1761]329 echo "*********************************************************************"
330 echo "Do you want to restore the HW configuration of the original machine ?"
331 echo "(This may dammage your hardware so be sure to check twice before saying yes)"
332 echo "*********************************************************************"
333 echo "Please confirm by typing YES exactly as written here (NO by default)"
334 echo -n "--> "
335 read answer
336 else
337 answer="YES"
338 fi
[1910]339 if [ "$answer" = "YES" ] ; then
[1761]340 ./mindi-rsthw
341 fi
342 fi
343}
[1]344
[1761]345
[1]346#RunDevfsd() {
347# loc=`which devfsd 2> /dev/null`
348# if [ "$loc" != "" ] ; then
349# LogIt "Starting devfsd"
350# devfsd /dev &
351# sleep 5
352# fi
353#}
354
355
356
[1787]357StartUSBKbd() {
358# Prepare minimal USB env in case we have USB kbd such as with iLO
359[ -d /proc/bus/usb ] && ! grep -q /proc/bus/usb /proc/mounts && mount -t usbfs none /proc/bus/usb
[1830]360echo "$DENY_MODS" | grep -Eq 'uhcd_hci |usbhid |usbcore '
[1829]361if [ $? -eq 0 ]; then
362 return
363fi
[1922]364modprobe -q uhcd_hci
365modprobe -q usbhid
[1787]366}
[1]367
368
[1787]369
[1]370StartLvms() {
[1747]371 if [ -e "/tmp/i-want-my-lvm" ] ; then
372 LogIt "Scanning LVM's..." 1
[739]373 if which lvm ; then
[1922]374 modprobe -q dm-mod
375 modprobe -q dm_mod
[739]376 lvm vgscan --mknodes
377 else
378 vgscan
379 fi
[1747]380 grep -E "^#.*vgchange" /tmp/i-want-my-lvm | sed "s/^#[ ]*//" > /tmp/start-lvm
381 chmod +x /tmp/start-lvm
382 echo -en "Starting LVM's..."
383 /tmp/start-lvm &
384 for i in 1 2 3 4 5 ; do
[1410]385 echo -en "."
386 sleep 1
[1747]387 done
388 echo "Done."
389 fi
[1]390# If necessary, cannibalize 'analyze-my-lvm'; copy some of its code here,
391# pipe vgscan's output, strip it, run 'vgchange' on its output, etc.etc.
[1747]392 LogIt "LVM's have been started."
[1]393}
394
395
[2072]396StartMpath() {
397 if [ "`grep -i nompath /proc/cmdline`" ]; then
398 return;
399 fi
400 echo "Starting Mpath..."
401 if [ -x /sbin/multipath ]; then
402 mkdir -p /var/lib/multipath
403 cat > /etc/multipath.conf << EOF
404defaults {
405 user_friendly_names yes
406}
407EOF
408 /sbin/multipath -v 0
409 if [ -x /sbin/kpartx ]; then
410 /sbin/dmsetup ls --target multipath --exec "/sbin/kpartx -a -p p"
411 fi
412 fi
413}
414
[1]415StartRaids() {
[1747]416 local raid_devices i
[1273]417
[1747]418 raid_devices=`grep /dev/md /tmp/mountlist.txt | cut -d' ' -f1`
[623]419 if which raidstart > /dev/null 2> /dev/null ; then
[1747]420 for i in $raid_devices ; do
421 if grep `basename $i` /proc/mdstat > /dev/null 2> /dev/null ; then
422 LogIt "$i is started already; no need to run 'raidstart $i'" 1
423 else
[623]424 LogIt "Running 'raidstart $i'" 1
425 raidstart $i
[1747]426 fi
427 done
[623]428 elif which mdrun > /dev/null 2> /dev/null ; then
429 LogIt "Running 'mdrun'" 1
430 mdrun
[1273]431 elif which mdadm > /dev/null 2> /dev/null ; then
432 LogIt "Running 'mdadm'" 1
433 for i in $raid_devices ; do
[1747]434 if grep `basename $i` /proc/mdstat > /dev/null 2> /dev/null ; then
435 LogIt "$i is started already; no need to run 'mdadm $i'" 1
436 else
[1610]437 if [ -f /etc/mdadm.conf ] ; then
438 LogIt "Running 'mdadm $i' with user supplied /etc/mdadm.conf" 1
439 mdadm -A $i -c /etc/mdadm.conf
440 elif [ -f /etc/mdadm/mdadm.conf ] ; then
441 LogIt "Running 'mdadm $i' with user supplied /etc/mdadm/mdadm.conf" 1
442 mdadm -A $i -c /etc/mdadm/mdadm.conf
443 else
444 LogIt "Running 'mdadm $i'" 1
445 mdadm -Ac partitions -m dev $i
446 fi
[1747]447 fi
448 done
[2075]449 elif which dmraid > /dev/null 2> /dev/null ; then
[2072]450 if [ "`grep -i nodmraid /proc/cmdline`" ]; then
451 return;
452 fi
453 for x in $(/sbin/dmraid -ay -i -p -t 2>/dev/null | grep -E -iv "^no " |awk -F ':' '{ print $1 }') ; do
454 echo "Please send the result of /sbin/dmraid -ay -i -p -t to the devteam !!!"
455 return
456 #dmname=$(resolve_dm_name $x)
457 #[ -z "$dmname" ] && continue
458 #/sbin/dmraid -ay -i -p "$dmname" >/dev/null 2>&1
459 #/sbin/kpartx -a -p p "/dev/mapper/$dmname"
460 done
[623]461 else
462 LogIt "Warning: Neither 'raidstart' nor 'mdrun''found. RAID devices may not have started." 1
463 fi
464
[1]465}
466
467
468TryAgainToFindCD() {
[1747]469 local res
470 mount | grep /mnt/cdrom && return 0
[1983]471 [ "`grep "backup_media_type" /tmp/mondo-restore.cfg 2> /dev/null | grep "cdstream"`" ] && return
[1747]472 LogIt "Trying to mount CD-ROM a 2nd time..."
473 find-and-mount-cdrom --second-try
474 res=$?
475 if [ "$res" -eq "0" ] ; then
476 CD_MOUNTED_OK=yes
477 LogIt "CD-ROM drive mounted successfully." 1
478 else
479 LogIt "I still cannot find or mount the CD-ROM drive, by the way."
480 fi
[1]481}
482
483
484
485UseTmpfs()
486{
[1747]487 local mount_cmd
488 echo -en "Mounting /tmp/tmpfs..."
489 mkdir -p /tmp/tmpfs
[1]490# For technical reasons, some sets are as large as 16MB.
491# I am allowing 32MB because selective restore occupies a lot of space.
[1747]492 for size in 64m 48m 40m 32m ; do
493 mount_cmd="mount /dev/shm -t tmpfs -o size=$size" ; # was 34m until 04/2003
494 LogIt "Trying '$mount_cmd'"
495 $mount_cmd /tmp/tmpfs 2>> $LOGFILE
496 res=$?
497 [ "$res" -eq "0" ] && break
498 done
499 if [ "$res" -ne "0" ] ; then
500 LogIt "Failed. I could not run '$mount_cmd /tmp/tmpfs'. Your kernel is BROKEN or you do not have enough RAM." 1
501 umount /tmp/tmpfs > /dev/null 2> /dev/null
502 rmdir /tmp/tmpfs
503 ln -sf /mnt/RESTORING/tmp /tmp/tmpfs; # used by mondo-restore
504 LogIt "Failed to mount /tmp/tmpfs; using ugly softlink instead"
505 else
506 LogIt "Great. Pivot succeeded w/ size=$size" 1
507 echo -en "Pivoting /tmp..."
508 umount /tmp/tmpfs
509 mkdir -p /tmp.old
[1752]510 mv /tmp/* /tmp.old/
511 # Try to Deal with a busybox bug on inexistant links
[1747]512 cp /tmp/* /tmp.old/
513 rm -f /tmp/*
514 $mount_cmd /tmp
[1752]515 mv /tmp.old/* /tmp/
516 # Try to Deal with a busybox bug on inexistant links
[1747]517 cp /tmp.old/* /tmp/
518 rm -rf /tmp.old
519 mkdir -p /tmp/tmpfs
520 mkdir -p $GROOVY
[1]521 echo "Done."
522 LogIt "Successfully mounted dynamic /tmp ramdisk"
523# mkdir -p /tmp/tmpfs/var
524# mv -f /var/log /tmp/tmpfs/var/log
525# ln -sf /tmp/tmpfs/var/log /var/log
[1747]526 fi
[1]527}
528
529
530WelcomeMessage()
531{
[1813]532 export ARCH=`uname -m`
533
[1747]534 echo "********************************************************************"
535 echo "MINDI-LINUX by Mondo Dev Team - web site: http://www.mondorescue.org"
536 echo "Boot disk based on AlfaLinux & Trinux. BusyBox by Erik Andersen."
[1]537which petris > /dev/null 2> /dev/null && echo "Petris was written by Peter Seidler <p.seidler@mail1.stofanet.dk>."
[1747]538 echo "Executables and source code are covered by the GNU GPL. No warranty."
539 echo "running on $ARCH"
540 echo "********************************************************************"
[1]541}
542
543
544EnableCcissIfAppropriate() {
[1747]545 local i fname
546 for i in 0 1 2 3 ; do
[1410]547 fname="/proc/driver/cciss/cciss$i"
548 if [ -e "$fname" ] ; then
549 LogIt "Engaging $fname"
550 echo "engage scsi" > $fname
551 LogIt "...result=$?"
552 fi
[1747]553 done
[1]554}
555
[1802]556ModprobeAllModules() {
[1]557
[1922]558 for m in `find /lib/modules -name '*\.ko*' -o -name '*\.o*'`; do
[1927]559 k=`basename $m | sed 's/\.ko.*$//'`
560 j=`basename $k | sed 's/\.o.*$//'`
[1830]561 echo "$DENY_MODS" | grep -q "$j "
[1829]562 if [ $? -eq 0 ]; then
[1830]563 echo "Denying $j..."
[1829]564 continue
565 fi
566 echo "Probing $j..."
[1815]567 modprobe -q $j
[1802]568 done
569}
570
[287]571ExtractDataDisksAndLoadModules() {
572 echo "Installing additional tools ..."
573 install-additional-tools
[1800]574 # Keep the kernel silent again
575 PKLVL=`cut -f1 /proc/sys/kernel/printk`
[1802]576 echo 0 > /proc/sys/kernel/printk
[1922]577 ModprobeAllModules
[1800]578 echo $PKLVL > /proc/sys/kernel/printk
[2081]579
580 # Retry failed udev events now that local filesystems are mounted read-write
581 # (useful for rules creating network ifcfg files)
582 if [ -e "/tmp/USE-UDEV" ] ; then
583 if [ -x /sbin/udevadm ]; then
584 /sbin/udevadm trigger --retry-failed
585 fi
586 fi
[287]587}
[1]588
589# ------------------------ main -----------------------
590
[1698]591MINDI_VER=PBVER
592MINDI_REV=PBREV
[1]593trap CaughtSoftReset SIGTERM
[1643]594LOGFILE=/var/log/mondorestore.log
[1236]595PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/mondo:/usr/games
[1]596GROOVY=/tmp/groovy-stuff
597USER=root
[1315]598export PATH GROOVY USER LOGFILE
[1]599
[1716]600echo "Welcome to init (from mindi ${MINDI_VER}-r${MINDI_REV})"
[898]601
[1]602mount -o remount rw /
603[ ! "$GROOVY" ] && Die "I'm not groovy!"
[1885]604for i in $GROOVY /mnt/cdrom /mnt/isodir /var/local/petris /tmp/isodir; do
[1747]605 mkdir -p $i
[1]606done
607#/bin/update
608mount /proc/ /proc -v -t proc
609mkdir /sys 2> /dev/null
610mount /sys/ /sys -v -t sysfs 2>> $LOGFILE
[1824]611# For ESX 3
612[ -d /proc/vmware ] && ! grep -q /vmfs /proc/mounts && mount -t vmfs /vmfs /vmfs
[1]613rm -f /foozero
614
[1829]615if [ "`grep -i denymods /proc/cmdline`" ]; then
616 export DENY_MODS="`cat /proc/cmdline | sed 's~.*denymods=\"\(.*\)\".*~\1~'` mondonone"
[1830]617else
618 export DENY_MODS=" "
[1829]619fi
[1983]620if [ "`grep -i 'obdr ' /tmp/mondo-restore.cfg 2> /dev/null`" ]; then
[1958]621 # Do not try to load usb storage when dealing with OBDR it makes the modprobe hang :-(
[1960]622 export DENY_MODS="usb-storage $DENY_MODS"
[1958]623fi
[1829]624if [ "`grep -i forcemods /proc/cmdline`" ]; then
625 export FORCE_MODS="`cat /proc/cmdline | sed 's~.*forcemods=\"\(.*\)\".*~\1~'` mondonone"
[1830]626else
627 export FORCE_MODS=" "
[1829]628fi
629
[1826]630echo "Activating a potential USB keyboard/mouse"
[1787]631StartUSBKbd
632
[1720]633if [ -f /proc/sys/kernel/exec-shield ]; then
634 echo 0 > /proc/sys/kernel/exec-shield 2>> /dev/null
635fi
[1]636
[1729]637if [ -f /proc/modules ]; then
638 echo "/sbin/modprobe" > /proc/sys/kernel/modprobe
639fi
640
[1716]641if [ -e "/tmp/USE-UDEV" ] ; then
[1747]642 RunUdevd
[1716]643fi
[1798]644ExtractDevTarballs
[1]645LaunchTerminals
[1718]646
[1789]647# Keeping kernel silent for module insertion
648PKLVL=`cut -f1 /proc/sys/kernel/printk`
649echo 0 > /proc/sys/kernel/printk
[1922]650ModprobeAllModules
[1789]651echo $PKLVL > /proc/sys/kernel/printk
[1718]652
[1]653EnableCcissIfAppropriate
654#-------------------------------
655#WHOLIVESINAPINEAPPLEUNDERTHESEA#;# --- don't touch this :)
656#-------------------------------
657UseTmpfs
658if [ ! -e "/tmp/mondo-restore.cfg" ] ; then
[1747]659 LogIt "Warning - /tmp/mondo-restore.cfg not found"
[1]660fi
661
[1983]662if [ "`grep -i 'obdr ' /tmp/mondo-restore.cfg 2>/dev/null`" ] || [ "`grep -i ' udev' /tmp/mondo-restore.cfg 2>/dev/null`" ]; then
[1747]663 HandleTape
[287]664 ExtractDataDisksAndLoadModules
[737]665elif [ "`grep -i pxe /proc/cmdline`" ]; then
[870]666 # We need to get here exported variables from start-nfs
[1747]667 . /sbin/start-nfs
[737]668
[287]669 # Simulate a local CD
670 echo "/mnt/cdrom" > /tmp/CDROM-LIVES-HERE
[1747]671 CD_MOUNTED_OK=yes
[287]672 ExtractDataDisksAndLoadModules
[1983]673elif [ "`grep -i usb= /proc/cmdline`" ] || [ "`grep -i usb /tmp/mondo-restore.cfg 2>/dev/null | grep media-type`" ]; then
[1747]674 . /sbin/start-usb
[1698]675
676 # Simulate a local CD
677 echo "/mnt/cdrom" > /tmp/CDROM-LIVES-HERE
[1747]678 CD_MOUNTED_OK=yes
[1698]679 ExtractDataDisksAndLoadModules
[1]680else
[1885]681 HandleCDROM
[287]682 ExtractDataDisksAndLoadModules
[870]683 # We need to get here exported variables from start-nfs
[1747]684 . /sbin/start-nfs
[1]685fi
686res=$?
687ConfigureLoggingDaemons
688if [ -e "/tmp/USE-DEVFS" ] ; then
[1747]689 umount /mnt/cdrom 2> /dev/null
690 mv /dev/cdrom /cdrom.lnk 2> /dev/null
691 CD_MOUNTED_OK=""
692 RunDevfsd
[1]693fi
[1813]694LoadKeymap
695WelcomeMessage
696RstHW
[232]697echo "Starting potential Raid/LVMs ..."
[1]698PauseForRaids
699StartRaids
[2072]700StartMpath
[1]701StartLvms
702CopyBootDevEntry
703mkdir -p /tmp/tmpfs
704sleep 2
705#clear
[241]706if [ -e "/dev/md0" ] && [ ! -e "/dev/md/0" ] && [ "`grep /dev/md/ /tmp/mountlist.txt`" != "" ] ; then
[1747]707 LogIt "Creating /dev/md/* softlinks just in case." 1
708 mkdir -p /dev/md
709 cp -af /dev/md0 /dev/md/0 2> /dev/null
710 cp -af /dev/md1 /dev/md/1 2> /dev/null
711 cp -af /dev/md2 /dev/md/2 2> /dev/null
[1]712fi
713[ -e "/tmp/mountlist.txt" ] && cp -f /tmp/mountlist.txt /tmp/mountlist.original
714
[241]715if ! [ "`grep -i "pxe" /proc/cmdline`" ] ; then
[1]716 res="`cat /mnt/cdrom/archives/THIS-CD-NUMBER 2> /dev/null`"
717 [ "$res" != "1" ] && [ "$res" != "" ] && Die "This is CD #$res in the series. Please insert CD #1."
718 [ -e "/cdrom.lnk" ] && mv -f /cdrom.lnk /dev/cdrom && mount /dev/cdrom /mnt/cdrom && CD_MOUNTED_OK=yes
719 [ "$CD_MOUNTED_OK" != "yes" ] && TryAgainToFindCD
720 #mount | grep cdrom > /dev/null 2> /dev/null || mount /dev/cdrom /mnt/cdrom >> $LOGFILE 2>> $LOGFILE
721fi
722hack-cfg-if-necessary || LogIt "Cannot find hack-cfg-if-necessary"
723
[1403]724# Log some useful info
[1837]725LogIt "init (from mindi v$MINDI_VER-r${MINDI_REV})"
[1413]726LogIt "/proc/cmdline is:"
[1403]727cat /proc/cmdline >> $LOGFILE
[1413]728LogIt "df result:"
729LogIt "----------"
[1403]730df >> $LOGFILE
[1413]731LogIt "-------------"
732LogIt "mount result:"
733LogIt "-------------"
[1403]734mount >> $LOGFILE
[1413]735LogIt "-------------"
736LogIt "lsmod result:"
737LogIt "-------------"
[1403]738lsmod >> $LOGFILE
[1413]739LogIt "-------------"
[1476]740LogIt "dmesg result:"
741LogIt "-------------"
742dmesg >> $LOGFILE
[2015]743LogIt "-------------"
744LogIt "/proc/swaps:" >> $LOGFILE
745LogIt "-------------"
746cat /proc/swaps >> $LOGFILE
747LogIt "-------------"
748LogIt "/proc/filesystems:" >> $LOGFILE
749LogIt "-------------"
750cat /proc/filesystems >> $LOGFILE
751LogIt "-------------"
752LogIt "/proc/partitions:" >> $LOGFILE
753LogIt "-------------"
754cat /proc/partitions >> $LOGFILE
[1403]755
[2015]756
[1983]757ide-opt
[1]758
759#ctrlaltdel soft
760for path in /usr.bin /usr/bin ; do
[1747]761 fname=$path/nano
762 [ -e "$fname" ] && ln -sf $fname /usr/bin/pico
[1]763done
764res=`which nano 2> /dev/null`
765[ "$res" ] && ln -sf /usr/bin/
766for i in null stdout stdin stderr ; do
[1747]767 cp -af /dev/$i /tmp
[1]768done
[2081]769# Not sure it's still needed, but shouldn't hurt
770if [ -e "/tmp/USE-UDEV" ] ; then
771 if [ -x /sbin/udevadm ]; then
772 /sbin/udevadm trigger --retry-failed
773 fi
774fi
[1]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.