Changeset 1747 in MondoRescue for branches/2.2.5/mindi/rootfs/sbin/init
- Timestamp:
- Oct 30, 2007, 1:18:55 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2.2.5/mindi/rootfs/sbin/init
r1741 r1747 8 8 9 9 CaughtSoftReset() { 10 11 10 trap SIGTERM 11 reboot 12 12 } 13 13 14 14 15 15 ConfigureLoggingDaemons() { 16 17 18 19 20 21 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." 22 22 } 23 23 … … 25 25 26 26 CopyBootDevEntry() { 27 28 29 30 31 32 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 33 33 echo "OK." 34 34 return 0 35 36 37 38 39 35 fi 36 mkdir -p $outfile 37 rmdir $outfile 38 cp -pRdf $devfile $outfile 39 if [ "$?" -ne "0" ] ; then 40 40 echo "Failed." 41 41 return 1 42 42 else 43 43 echo "OK." 44 44 return 0 45 45 fi 46 46 } 47 47 … … 49 49 50 50 Die() { 51 52 51 LogIt "Fatal error! $1" 1 52 exit 1 53 53 } 54 54 … … 56 56 57 57 ExtractDevTarballs() { 58 59 60 61 62 63 64 65 66 67 68 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 69 69 } 70 70 … … 72 72 73 73 LaunchTerminals() { 74 75 76 77 78 79 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 80 80 } 81 81 82 82 83 83 LoadKeymap() { 84 85 86 87 88 84 local fname 85 fname=`cat /tmp/KEYMAP-LIVES-HERE 2> /dev/null` 86 [ "$fname" = "" ] && return 87 if which loadkeys > /dev/null 2> /dev/null ; then 88 loadkeys $fname 89 89 # loadkmap != loadkeys 90 90 # elif which loadkmap > /dev/null 2> /dev/null ; then 91 91 # loadkmap < $fname 92 93 94 92 else 93 LogIt "Using default keyboard map." 1 94 fi 95 95 } 96 96 97 97 98 98 UntarTapeStuff() { 99 100 101 102 103 99 local old_pwd res 100 old_pwd=`pwd` 101 cd $GROOVY 102 [ "$1" != "" ] && tapedev=$1 103 [ ! "$tapedev" ] && tapedev=`grep media-dev /tmp/mondo-restore.cfg | tr -s ' ' ' ' | cut -d' ' -f2` 104 104 # tar -zxf $tapedev 105 106 107 105 dd if=$tapedev bs=32k count=1024 | tar -zx 106 res=$? 107 if [ "$res" -eq "0" ] ; then 108 108 grep -v media-dev /tmp/mondo-restore.cfg > /tmp/mr.cfg 109 109 echo "media-dev $tapedev" >> /tmp/mr.cfg 110 111 112 113 110 cp -f /tmp/mr.cfg /tmp/mondo-restore.cfg 111 fi 112 cd $old_pwd 113 return $res 114 114 } 115 115 116 116 HandleTape() { 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 117 local res tapedev 118 tapedev="" ; # will be set by UntarTapeStuff() 119 cd $GROOVY 120 UntarTapeStuff $tapedev || UntarTapeStuff /dev/st0 || UntarTapeStuff /dev/osst0 || UntarTapeStuff /dev/ht0 121 res=$? 122 while [ "$res" -ne "0" ] ; do 123 LogIt "$tapedev failed to act as extended data disk for booting." 1 124 LogIt "Please specify an alternate tape device," 1 125 LogIt "or hit <Enter> to boot from CD/floppies." 1 126 echo -en "---> " 127 read tapedev 128 if [ "$tapedev" ] ; then 129 LogIt "User specified $tapedev instead" 130 UntarTapeStuff $tapedev 131 res=$? 132 else 133 LogIt "User opted not to specify an alternate tapedev" 134 res=1 135 135 break 136 137 138 139 136 fi 137 done 138 139 if [ "$res" -ne "0" ] ; then 140 140 cd / 141 141 LogIt "Failed to use tape as extended datadisk. Reverting to floppies." 1 142 142 HandleCDROMorFloppies 143 143 res=$? 144 144 else 145 145 # clear 146 146 LogIt "Using tape as extended datadisk. Good." 3 147 147 echo "Using tape as extd ddisk." > /tmp/TAPEDEV-HAS-DATA-DISKS 148 148 res=0 149 150 151 149 CD_MOUNTED_OK=yes 150 fi 151 return $res 152 152 } 153 153 … … 155 155 156 156 HandleCDROMorFloppies() { 157 158 159 157 find-and-mount-cdrom 158 res=$? 159 if [ "$res" -ne "0" ] ; then 160 160 LogIt "First call to find-and-mount-cdrom failed." 1 161 161 LogIt "Sleeping for 3 seconds and trying again." 1 … … 163 163 find-and-mount-cdrom 164 164 res=$? 165 166 165 fi 166 if [ "$res" -eq "0" ] ; then 167 167 LogIt "OK, I am running on a CD-ROM. Good." 3 168 169 168 CD_MOUNTED_OK=yes 169 elif [ "$res" -eq "1" ] ; then 170 170 LogIt "OK, I am running on floppies. Good." 3 171 171 CD_MOUNTED_OK="" 172 172 else 173 173 LogIt "OK, I am falling back to floppy mode." 3 174 175 176 177 178 179 174 LogIt "That means you'll have to copy the data disk images from" 3 175 LogIt "the CD/hard disk/whatever to physical 1.44MB disks and" 3 176 LogIt "insert them, one after the other. Please see the manual." 3 177 LogIt "The images are in /images on the CD, or /root/images/mindi" 3 178 LogIt "on your hard disk. Your archives are probably fine but" 3 179 LogIt "your tape streamer and/or CD-ROM drive are eccentric. :-)" 3 180 180 CD_MOUNTED_OK="" 181 182 181 fi 182 return 0 183 183 } 184 184 … … 193 193 # Load the VIA IDE module first thing if it exists (requires ide-core). 194 194 # This is to ensure that DMA is working for VIA chipsets with 2.6 kernels. 195 196 197 195 for module in /ide-core.ko /via82cxxx.ko; do 196 [ -f "$module" ] && MyInsmod $module > /dev/null 2> /dev/null 197 done 198 198 # Then load the remaining modules in normal (i.e. arbitrary) order. 199 200 201 202 203 199 for j in 1 2 3 4 5 ; do 200 for i in `ls /*.*o* 2> /dev/null` ; do 201 [ -f "$i" ] && MyInsmod $i > /dev/null 2> /dev/null 202 done 203 done 204 204 } 205 205 … … 207 207 208 208 PauseForRaids() { 209 210 211 212 213 214 215 216 217 209 if [ "`dmesg | grep -i "RAID Controller"`" != "" ] || [ "`dmesg | grep -i "Vendor: 3ware"`" != "" ] ; then 210 LogIt "RAID controller(s) detected. Pausing 10 seconds to let them warm up." 1 211 echo -en "Pausing..." 212 for i in 1 2 3 4 5 6 7 8 9 10 ; do 213 sleep 1 214 echo -en "$(($i*10))%..." 215 done 216 echo "Done." 217 fi 218 218 } 219 219 … … 224 224 # config file path compiled into devfsd 225 225 RunDevfsd() { 226 227 226 loc=`which devfsd 2> /dev/null` 227 if [ "$loc" != "" ] ; then 228 228 LogIt "Devfs found. Testing kernel support..." 229 229 if [ ! -e "/dev/.devfsd" ] ; then 230 230 mount -t devfs devfs /dev 2>> $LOGFILE 231 231 if [ "$?" -ne "0" ] ; then 232 232 LogIt "Error while trying to mount devfs" 233 233 else … … 249 249 LogIt "No devfs kernel support." 250 250 fi 251 251 fi 252 252 } 253 253 … … 301 301 302 302 SpaceTests() { 303 304 305 306 307 308 309 310 303 [ -e "/tmp/filelist.full" ] && cp /tmp/filelist.full /tmp/FLF 304 if [ "`HowMuchFreeSpaceOnRamdisk`" -le "3" ] ; then 305 LogIt "Ramdisk is a bit smaller than I would like." 1 306 LogIt "Please re-run Mondo/Mindi but edit /usr/local/mindi first" 1 307 LogIt "and set EXTRA_SPACE to something high, e.g. 8000" 1 308 Die "Aborting. Please reboot." 309 fi 310 rm -f /tmp/FLF 311 311 } 312 312 … … 314 314 315 315 StartLvms() { 316 317 316 if [ -e "/tmp/i-want-my-lvm" ] ; then 317 LogIt "Scanning LVM's..." 1 318 318 if which lvm ; then 319 319 MyInsmod dm-mod … … 323 323 vgscan 324 324 fi 325 326 327 328 329 325 grep -E "^#.*vgchange" /tmp/i-want-my-lvm | sed "s/^#[ ]*//" > /tmp/start-lvm 326 chmod +x /tmp/start-lvm 327 echo -en "Starting LVM's..." 328 /tmp/start-lvm & 329 for i in 1 2 3 4 5 ; do 330 330 echo -en "." 331 331 sleep 1 332 333 334 332 done 333 echo "Done." 334 fi 335 335 # If necessary, cannibalize 'analyze-my-lvm'; copy some of its code here, 336 336 # pipe vgscan's output, strip it, run 'vgchange' on its output, etc.etc. 337 337 LogIt "LVM's have been started." 338 338 } 339 339 340 340 341 341 StartRaids() { 342 343 344 342 local raid_devices i 343 344 raid_devices=`grep /dev/md /tmp/mountlist.txt | cut -d' ' -f1` 345 345 if which raidstart > /dev/null 2> /dev/null ; then 346 347 348 349 346 for i in $raid_devices ; do 347 if grep `basename $i` /proc/mdstat > /dev/null 2> /dev/null ; then 348 LogIt "$i is started already; no need to run 'raidstart $i'" 1 349 else 350 350 LogIt "Running 'raidstart $i'" 1 351 351 raidstart $i 352 353 352 fi 353 done 354 354 elif which mdrun > /dev/null 2> /dev/null ; then 355 355 LogIt "Running 'mdrun'" 1 … … 358 358 LogIt "Running 'mdadm'" 1 359 359 for i in $raid_devices ; do 360 361 362 360 if grep `basename $i` /proc/mdstat > /dev/null 2> /dev/null ; then 361 LogIt "$i is started already; no need to run 'mdadm $i'" 1 362 else 363 363 if [ -f /etc/mdadm.conf ] ; then 364 364 LogIt "Running 'mdadm $i' with user supplied /etc/mdadm.conf" 1 … … 371 371 mdadm -Ac partitions -m dev $i 372 372 fi 373 374 373 fi 374 done 375 375 else 376 376 LogIt "Warning: Neither 'raidstart' nor 'mdrun''found. RAID devices may not have started." 1 … … 381 381 382 382 TryAgainToFindCD() { 383 384 385 386 387 388 389 390 391 392 393 394 383 local res 384 mount | grep /mnt/cdrom && return 0 385 [ "`grep "backup_media_type" /tmp/mondo-restore.cfg | grep "cdstream"`" ] && return 386 LogIt "Trying to mount CD-ROM a 2nd time..." 387 find-and-mount-cdrom --second-try 388 res=$? 389 if [ "$res" -eq "0" ] ; then 390 CD_MOUNTED_OK=yes 391 LogIt "CD-ROM drive mounted successfully." 1 392 else 393 LogIt "I still cannot find or mount the CD-ROM drive, by the way." 394 fi 395 395 } 396 396 … … 399 399 UseTmpfs() 400 400 { 401 402 403 401 local mount_cmd 402 echo -en "Mounting /tmp/tmpfs..." 403 mkdir -p /tmp/tmpfs 404 404 # For technical reasons, some sets are as large as 16MB. 405 405 # I am allowing 32MB because selective restore occupies a lot of space. 406 for size in 64m 48m 40m 32m ; do 407 mount_cmd="mount /dev/shm -t tmpfs -o size=$size" ; # was 34m until 04/2003 408 LogIt "Trying '$mount_cmd'" 409 $mount_cmd /tmp/tmpfs 2>> $LOGFILE 410 res=$? 411 [ "$res" -eq "0" ] && break 412 done 413 if [ "$res" -ne "0" ] ; then 414 LogIt "Failed. I could not run '$mount_cmd /tmp/tmpfs'. Your kernel is BROKEN or you do not have enough RAM." 1 415 umount /tmp/tmpfs > /dev/null 2> /dev/null 416 rmdir /tmp/tmpfs 417 ln -sf /mnt/RESTORING/tmp /tmp/tmpfs; # used by mondo-restore 418 LogIt "Failed to mount /tmp/tmpfs; using ugly softlink instead" 419 else 420 LogIt "Great. Pivot succeeded w/ size=$size" 1 421 echo -en "Pivoting /tmp..." 422 umount /tmp/tmpfs 423 mkdir -p /tmp.old 424 mv -f /tmp/* /tmp.old/ 425 $mount_cmd /tmp 426 mv /tmp.old/* /tmp/ 427 rmdir /tmp.old 428 mkdir -p /tmp/tmpfs 429 mkdir -p $GROOVY 406 for size in 64m 48m 40m 32m ; do 407 mount_cmd="mount /dev/shm -t tmpfs -o size=$size" ; # was 34m until 04/2003 408 LogIt "Trying '$mount_cmd'" 409 $mount_cmd /tmp/tmpfs 2>> $LOGFILE 410 res=$? 411 [ "$res" -eq "0" ] && break 412 done 413 if [ "$res" -ne "0" ] ; then 414 LogIt "Failed. I could not run '$mount_cmd /tmp/tmpfs'. Your kernel is BROKEN or you do not have enough RAM." 1 415 umount /tmp/tmpfs > /dev/null 2> /dev/null 416 rmdir /tmp/tmpfs 417 ln -sf /mnt/RESTORING/tmp /tmp/tmpfs; # used by mondo-restore 418 LogIt "Failed to mount /tmp/tmpfs; using ugly softlink instead" 419 else 420 LogIt "Great. Pivot succeeded w/ size=$size" 1 421 echo -en "Pivoting /tmp..." 422 umount /tmp/tmpfs 423 mkdir -p /tmp.old 424 cp /tmp/* /tmp.old/ 425 rm -f /tmp/* 426 $mount_cmd /tmp 427 cp /tmp.old/* /tmp/ 428 rm -rf /tmp.old 429 mkdir -p /tmp/tmpfs 430 mkdir -p $GROOVY 430 431 echo "Done." 431 432 LogIt "Successfully mounted dynamic /tmp ramdisk" … … 433 434 # mv -f /var/log /tmp/tmpfs/var/log 434 435 # ln -sf /tmp/tmpfs/var/log /var/log 435 436 fi 436 437 } 437 438 … … 439 440 WelcomeMessage() 440 441 { 441 442 443 442 echo "********************************************************************" 443 echo "MINDI-LINUX by Mondo Dev Team - web site: http://www.mondorescue.org" 444 echo "Boot disk based on AlfaLinux & Trinux. BusyBox by Erik Andersen." 444 445 which petris > /dev/null 2> /dev/null && echo "Petris was written by Peter Seidler <p.seidler@mail1.stofanet.dk>." 445 446 447 446 echo "Executables and source code are covered by the GNU GPL. No warranty." 447 echo "running on $ARCH" 448 echo "********************************************************************" 448 449 } 449 450 450 451 451 452 EnableCcissIfAppropriate() { 452 453 453 local i fname 454 for i in 0 1 2 3 ; do 454 455 fname="/proc/driver/cciss/cciss$i" 455 456 if [ -e "$fname" ] ; then … … 458 459 LogIt "...result=$?" 459 460 fi 460 461 done 461 462 } 462 463 … … 489 490 [ ! "$GROOVY" ] && Die "I'm not groovy!" 490 491 for i in $GROOVY /mnt/floppy /mnt/cdrom /mnt/isodir /var/local/petris /tmp/isodir; do 491 492 mkdir -p $i 492 493 done 493 494 #/bin/update … … 506 507 507 508 if [ -e "/tmp/USE-UDEV" ] ; then 508 509 RunUdevd 509 510 else 510 511 ExtractDevTarballs … … 524 525 UseTmpfs 525 526 if [ ! -e "/tmp/mondo-restore.cfg" ] ; then 526 527 LogIt "Warning - /tmp/mondo-restore.cfg not found" 527 528 fi 528 529 529 530 if [ "`grep -i 'tape ' /tmp/mondo-restore.cfg`" ] || [ "`grep -i udev /tmp/mondo-restore.cfg`" ]; then 530 531 HandleTape 531 532 ExtractDataDisksAndLoadModules 532 533 elif [ "`grep -i pxe /proc/cmdline`" ]; then 533 534 # We need to get here exported variables from start-nfs 534 535 . /sbin/start-nfs 535 536 536 537 # Simulate a local CD 537 538 echo "/mnt/cdrom" > /tmp/CDROM-LIVES-HERE 538 539 CD_MOUNTED_OK=yes 539 540 ExtractDataDisksAndLoadModules 540 541 elif [ "`grep -i usb= /proc/cmdline`" ] || [ "`grep -i usb /tmp/mondo-restore.cfg | grep media-type`" ]; then 541 542 # We need to get here exported variables from start-nfs 542 543 . /sbin/start-usb 543 544 544 545 # Simulate a local CD 545 546 echo "/mnt/cdrom" > /tmp/CDROM-LIVES-HERE 546 547 CD_MOUNTED_OK=yes 547 548 ExtractDataDisksAndLoadModules 548 549 else … … 550 551 ExtractDataDisksAndLoadModules 551 552 # We need to get here exported variables from start-nfs 552 553 . /sbin/start-nfs 553 554 fi 554 555 res=$? 555 556 ConfigureLoggingDaemons 556 557 if [ -e "/tmp/USE-DEVFS" ] ; then 557 558 559 560 558 umount /mnt/cdrom 2> /dev/null 559 mv /dev/cdrom /cdrom.lnk 2> /dev/null 560 CD_MOUNTED_OK="" 561 RunDevfsd 561 562 fi 562 563 echo "Starting potential Raid/LVMs ..." … … 570 571 #clear 571 572 if [ -e "/dev/md0" ] && [ ! -e "/dev/md/0" ] && [ "`grep /dev/md/ /tmp/mountlist.txt`" != "" ] ; then 572 573 574 575 576 573 LogIt "Creating /dev/md/* softlinks just in case." 1 574 mkdir -p /dev/md 575 cp -af /dev/md0 /dev/md/0 2> /dev/null 576 cp -af /dev/md1 /dev/md/1 2> /dev/null 577 cp -af /dev/md2 /dev/md/2 2> /dev/null 577 578 fi 578 579 export ARCH=`uname -m` … … 617 618 #ctrlaltdel soft 618 619 for path in /usr.bin /usr/bin ; do 619 620 620 fname=$path/nano 621 [ -e "$fname" ] && ln -sf $fname /usr/bin/pico 621 622 done 622 623 res=`which nano 2> /dev/null` 623 624 [ "$res" ] && ln -sf /usr/bin/ 624 625 for i in null stdout stdin stderr ; do 625 626 cp -af /dev/$i /tmp 626 627 done 627 628 if grep "backup-media-type" /tmp/mondo-restore.cfg > /dev/null 2> /dev/null ; then 628 629 630 629 LogIt "backup-media-type is specified in config file - great." 630 LogIt "Calling post-init $mountlist" 631 post-init 631 632 else 632 633 633 LogIt "backup-media-type is not specified in config file." 634 LogIt "I think this CD/floppy has no archives on it." 634 635 fi 635 636 if grep "RESTORE" /proc/cmdline > /dev/null 2> /dev/null ; then
Note:
See TracChangeset
for help on using the changeset viewer.