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

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

Support added for udevadm and start_udev in mandriva 2009.0, udev 128

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