- Timestamp:
- Nov 24, 2005, 1:43:32 AM (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/mindi/mindi
r125 r135 15 15 16 16 RUN_AFTER_INITIAL_BOOT_PHASE="echo \"Who lives in a pineapple under the sea?\" > /tmp/spongebob.squarepants.txt" 17 18 19 17 # after booting from floppy/CD image but before 18 # accessing auxiliary data disks (or the rest of 19 # the CD), the initscript will run the above command. 20 20 21 21 RUN_AFTER_BOOT_PHASE_COMPLETE="ide-opt" 22 23 24 22 # after the emergency boot process is complete but 23 # before the init script runs mondorestore, it will 24 # run this command. 25 25 26 26 MINDI_VERSION=1.04_berlios … … 31 31 WRITE_BOOT_FLOPPIES="yes" ; # do you want to be prompted to write floppy images 32 32 PROMPT_WRITE_BOOT_FLOPPIES="yes" 33 34 35 33 # do you want to be prompted to write 34 # floppy images out to floppy disks? 35 # if 'no', images will not be written to floppies 36 36 37 37 PROMPT_MAKE_CD_IMAGE="yes" 38 39 38 # Ask if you want to make a CD Image to be written? 39 # if this is set to 'no', then the image will be created automatically 40 40 41 41 USE_OWN_KERNEL="no" 42 43 44 42 # If set to "no", you will be prompted for whether or not 43 # you want to use your own kernel, or the supplied default. 44 # If "yes" mindi will automatically use your own kernel. 45 45 MINDI_CONFIG="/etc/mindi/mindi.conf" 46 46 if [ -f $MINDI_CONFIG ]; then 47 47 . $MINDI_CONFIG 48 48 fi 49 49 MY_FSTAB=/etc/fstab … … 70 70 To boot to a command-line prompt (expert mode), type 'expert' <enter>.\n\ 71 71 You may add one or more of the following parameters as well:-\n\n\ 72 73 74 75 76 77 72 donteject - mondorestore will not eject the CD; this is useful if, for\n\ 73 instance, your PC's case has a concealed CD-ROM drive\n\ 74 noresize - your mountlist will not be adjusted to use your unallocated\n\ 75 hard disk space\n\ 76 textonly - do not call any Newt library routines; this is unattractive\n\ 77 but valuable if you find your Newt library has bugs in it\n\n\ 78 78 e.g. Type 'nuke donteject textonly' if you have an unstable Newt library and \n\ 79 79 a PC whose CD-ROM drive tray would be damaged if it unexpectedly ejected.\n\ … … 87 87 88 88 AbortHere() { 89 90 89 [ "$mountpoint" ] && umount $mountpoint 2>> $LOGFILE 90 Die "Program is terminating in response to signal received from OS/user" 91 91 } 92 92 … … 94 94 95 95 HackSyslinuxFile() { 96 97 98 99 100 101 102 103 104 105 106 96 local incoming 97 incoming=`ReadLine` 98 while [ "$incoming" ] ; do 99 echo -en "$incoming" | sed s/24000/$1/ 100 if [ "`echo "$incoming" | grep append`" ] ; then 101 echo -en " $ADDITIONAL_BOOT_PARAMS" 102 fi 103 echo -en "\n" 104 incoming=`ReadLine` 105 done 106 if [ -e "$MINDI_HOME/memtest.img" ] ; then 107 107 # echo -en "label memtest\n kernel memtest.bin\n\n" 108 108 echo -en "label memtest\n kernel memdisk\n append initrd=memtest.img\n\n" 109 109 # echo "Yep, this is a multi-function CD" > $2/MULTIFUNC 110 110 fi 111 111 } 112 112 … … 114 114 115 115 AbortIfYourDistroIsAPieceOfStercus() { 116 117 118 119 120 116 which which > /dev/null 2> /dev/null || Die "Please install 'which'." 117 which strings > /dev/null 2> /dev/null || Die "Please install binutils and libbinutils; you have no 'strings' executable." 118 which gawk > /dev/null 2> /dev/null || Die "Gawk is missing from your computer. Please install gawk. You may find the package on Debian's website. How did I know you're running Debian? Because only Debian would be stupid enough not to include gawk in your distribution." 119 which gawk > /dev/null 2> /dev/null && AWK=`which gawk 2>/dev/null` || AWK="`which awk 2>/dev/null`" 120 if which awk &> /dev/null ; then 121 121 if ! which gawk &> /dev/null ; then 122 123 fi 124 125 126 127 128 129 130 122 LogIt "You have awk but not gawk. Please note that mindi works fine with a _sane_ awk binary. If your awk binary misbehaves then please contact your vendor or distribution's mailing list for technical support." 123 fi 124 fi 125 which mke2fs > /dev/null 2> /dev/null || Die "Please put mke2fs in system path" 126 which afio > /dev/null 2> /dev/null || LogIt "afio not found... mindi doesn't need afio but Mondo does... Be aware...\n" 127 [ ! -e "/etc/issue.net" ] && > /etc/issue.net 128 FDISK=$MINDI_HOME/parted2fdisk.pl 129 FDISKLOG=/tmp/parted2fdisk.log 130 touch $FDISKLOG 131 131 # if [ "`cat /etc/issue.net 2> /dev/null | fgrep -i "debian"`" ] ; then 132 # LogIt "Warning !You are a Debian user. If mindi doesn't generate a good mountlist, it's because of a bug in YOUR awk binary. Don't tell me about it. Tell awk.deb's maintainer about it."132 # LogIt "Warning - You are a Debian user. If mindi doesn't generate a good mountlist, it's because of a bug in YOUR awk binary. Don't tell me about it. Tell awk.deb's maintainer about it." 133 133 # fi 134 134 [ ! -e "$FDISK" ] && Die "Cannot find (s)fdisk" 135 135 } 136 136 … … 139 139 AbortIfMkfsVfatMissing() { 140 140 #if fgrep "vfat" /etc/fstab &> /dev/null ; then 141 142 143 141 if ! which mkfs.vfat &> /dev/null ; then 142 Die "mkfs.vfat missing from your filesystem - please install your dosfstools RPM or DEB package. Perhaps your PATH environmental variable is broken, too?" 143 fi 144 144 #fi 145 145 } … … 150 150 151 151 Aborted() { 152 153 154 155 152 trap SIGHUP SIGTERM SIGTRAP SIGINT 153 [ "$imagesdir" != "" ] && rm -f $imagesdir/mindi*img $imagesdir/*gz $imagesdir/mindi.iso 154 [ "$minidir_root" != "" ] && rm -Rf $minidir_root/* 155 Die "User abort." 156 156 } 157 157 158 158 159 159 AddFileToCfgIfExists() { 160 160 [ -e "$1" ] && echo -en "$2 `cat $1`\n" >> $3 161 161 } 162 162 … … 164 164 165 165 AddFileToDir() { 166 167 168 169 166 local filename minidir_root noof_disks diskno res filesize disksize would_occupy zipsize complevel cutoff compressed_fname siz 167 filename=$1 168 minidir_root=$2 169 noof_disks=$3 170 170 171 171 # diskno=1 172 173 174 175 172 diskno=$noof_disks 173 mkdir -p $minidir_root/$diskno 174 [ "$LAST_COMPRESSED_SIZE" = "" ] && LAST_COMPRESSED_SIZE=0 175 if [ ! -e "$filename" ] ; then 176 176 if [ -h "$filename" ] ; then 177 178 179 else 180 181 fi 182 177 cp --parents -pRdf $filename $minidir_root/$diskno 178 return $noof_disks 179 else 180 Die "AddFileToDir asked me to add $filename, which does not exist. Oops! Did you run out of disk space or is your Linux distro severely broken?" 181 fi 182 fi 183 183 # move to the disk that has room on it (or end up using the last, if all full) 184 184 while [ "$diskno" -lt "40" ] ; do 185 185 mkdir -p $minidir_root/$diskno 186 186 filesize=`du -sk $filename | cut -f1` 187 187 cp --parents -Rdf $filename $minidir_root/$diskno 188 189 190 191 192 193 194 195 196 188 if [ "$filesize" -le "4" ] ; then 189 siz=$filesize 190 elif [ ! -f "$filename" ] ; then 191 siz=0 192 else 193 siz=`grep -m 1 "$filename.gz$" $minidir_root/compressed/compressed.txt | cut -f1` 194 [ "$siz" = "" ] && Die "FIXME - can't find $filename's size." 195 siz=$(($siz-2));# to allow for sectors & the fact that they round up 196 fi 197 197 [ ! "$siz" ] && siz=4 198 198 [ "$siz" -lt "0" ] && siz=0 199 199 LAST_COMPRESSED_SIZE=$(($LAST_COMPRESSED_SIZE+$siz)) 200 200 [ "$LAST_COMPRESSED_SIZE" -le "$MAX_COMPRESSED_SIZE" ] &&return $diskno 201 201 echo "disk=$diskno siz=$LAST_COMPRESSED_SIZE" >> $LOGFILE 202 202 LAST_COMPRESSED_SIZE=0 203 203 rm -f $minidir_root/$diskno/$filename 204 205 206 204 diskno=$(($diskno+1)) 205 done 206 return 0 ; # failed 207 207 } 208 208 … … 211 211 212 212 AddKeyboardMappingFile() { 213 214 215 216 217 213 local mappath r included_list included_item i res ii sss 214 mappath=$1 215 KBDEPTH=$(($KBDEPTH+1)) 216 [ "$KBDEPTH" -gt "128" ] && Die "Edit $MINDI_HOME/mindi and disable FindAndAddUserKeyboardMappingFile (line 1170, approx.)" 217 if [ -e "$bigdir/$mappath" ] ; then 218 218 echo "$mappath already added" >> $LOGFILE 219 219 return 220 221 222 223 224 225 226 227 228 229 230 231 220 elif [ -d "$bigdir/$mappath" ] ; then 221 echo "Cannot add $mappath: it's a directory. Sorry." 222 return 223 fi 224 echo "Added kbd map $mappath" >> $LOGFILE 225 if [ ! -e "$mappath" ] ; then 226 mappath=`find $KEYDIR/keymaps | grep "i[3-8]86" | grep "$locale[^r][^/]" | grep -vx " *#.*"` 227 if [ ! -e "$mappath" ] ; then 228 LogIt "Cannot add $mappath: kbd map file not found" 229 return 230 fi 231 else 232 232 echo -en "`basename $mappath | tr '.' '#' | sed s/#kmap#gz// | sed s/#inc#gz//` " | tr '#' '.' 233 234 235 236 237 238 239 240 241 242 233 fi 234 235 mkdir -p $bigdir/etc 236 cp --parents -pRdf $mappath $bigdir || LogIt "AKMF -- Could not copy $mappath to $bigdir" 237 if [ "`echo $mappath | fgrep ".gz"`" ] ; then 238 included_list=`gzip -dc $mappath | fgrep -i include | sed s/'"'// | sed s/'"'// | cut -d' ' -f2` 239 else 240 included_list=`cat $mappath | fgrep -i include | sed s/'"'// | sed s/'"'// | cut -d' ' -f2` 241 fi 242 for included_item in $included_list ; do 243 243 if [ ! -e "$included_item" ] ; then 244 245 246 247 248 249 else 250 251 fi 252 244 sss=`find $KEYDIR/keymaps | fgrep "${included_item}.inc"` 245 [ "$sss" = "" ] && sss=`find $KEYDIR/keymaps | fgrep "$included_item"` 246 for ii in $sss ; do 247 [ -e "$ii" ] && AddKeyboardMappingFile $ii 248 done 249 else 250 AddKeyboardMappingFile $included_item 251 fi 252 done 253 253 } 254 254 … … 260 260 261 261 ChopUpAndCopyFile() { 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 262 local filename slicesize outdir res biggienumber filesize sliceno noof_slices testfile scratchfile 263 filename=$1 264 outdir=$2 265 slicesize=$3 266 biggienumber=$4 267 268 [ -d "$filename" ] && Die "Cannot chop up $filename: it's a directory. Please amend deplist.txt accordingly." 269 mkdir -p $outdir 270 271 sliceno=0 272 scratchfile=$TMP_ROOT/blah.$$.dat 273 cp -f $filename $scratchfile || Die "CUACF -- cannot copy $filename to $scratchfile - did you run out of disk space?" 274 [ "`head $scratchfile -n1 | fgrep "bin/sh"`" != "" ] && StripComments $scratchfile "-$filename-" 275 [ "`echo "$filename" | fgrep "etc/termcap"`" != "" ] && StripComments $scratchfile "-$filename-" 276 if [ "`echo "$filename" | fgrep "lib/modules/" | grep "\.*o\.gz"`" != "" ] ; then 277 277 mv $scratchfile $scratchfile.gz 278 278 gunzip -f $scratchfile || LogIt "Cannot gunzip $scratchfile.gz" 279 279 filename=`echo "$filename" | tr '.' '#' | sed s/#o#gz/#o/ | sed s/#ko#gz/#ko/ | tr '#' '.'` 280 281 282 283 284 285 286 287 288 289 290 280 fi 281 filesize=`du -sk $scratchfile | cut -f1` 282 noof_slices=$(($filesize/$slicesize)) 283 echo "$filename" > $outdir/slice-$biggienumber.name 284 echo "$filesize" > $outdir/slice-$biggienumber.size 285 [ -x "$scratchfile" ] && StripExecutable $scratchfile "-$filename-" 286 while [ "$sliceno" -le "$noof_slices" ] ; do 287 dd if=$scratchfile skip=$(($sliceno*$slicesize)) of=$outdir/slice-$biggienumber.`printf "%03d" $sliceno` bs=1k count=$slicesize 2> /dev/null 288 sliceno=$(($sliceno+1)) 289 done 290 rm -f $scratchfile 291 291 } 292 292 293 293 294 294 CopyBootBFile() { 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 295 local copy_to copy_from possible_locations liloc 296 copy_to=$1 297 copy_from=/boot/boot.b 298 liloc=`which lilo.real 2>/dev/null` 299 [ $liloc ] || liloc=`which lilo 2>/dev/null` 300 if [ $liloc ]; then 301 if ! [ `strings $liloc | grep "boot\.b"` ]; then 302 LogIt "boot.b files built into lilo; I'll create a dummy." 303 > $copy_to 304 return 0 305 fi 306 fi 307 if [ ! -f "$copy_from" ] ; then 308 LogIt "OK, you don't have a /boot/boot.b file, which is odd because most _good_ Linux distributions come with one, even if it's only a softlink" 309 copy_from=`cat /etc/lilo.conf | grep install= | grep "\.b" | cut -d'=' -f2` 310 if [ ! -f "$copy_from" ] ; then 311 LogIt "Nor can I find it from your /etc/lilo.conf file. This is very odd." 312 copy_from=`FindSensibleBootBFile` 313 LogIt "I'm going to use '$copy_from'" 314 fi 315 fi 316 cp -f $copy_from $copy_to || LogIt "CBBF -- warning -- cannot find your boot.b file. That's it, I quit... (j/k)" 317 317 } 318 318 … … 321 321 322 322 CopyDependenciesToDirectory() { 323 324 325 326 327 328 323 local outdir incoming fname filesize counter 324 outdir=$1 325 mkdir -p $outdir 326 incoming=`ReadLine` 327 counter=0 328 while [ "$incoming" != "" ] ; do 329 329 if [ -d "$incoming" ] ; then 330 331 332 333 334 335 336 337 330 find $incoming/* -maxdepth 0 2> /dev/null | CopyDependenciesToDirectory $outdir 331 elif [ -e "$incoming" ] ; then 332 filesize=`du -sk $incoming | cut -f1` 333 if [ "$filesize" -gt "$(($CHOPSIZE*2))" ] && [ ! -h "$incoming" ] ; then 334 ChopUpAndCopyFile $incoming $outdir $CHOPSIZE $BIGNO 335 BIGNO=$(($BIGNO+1)) 336 else 337 cp --parents -Rdf $incoming $outdir || Die "Cannot copy $incoming to $outdir - did you run out of disk space?" 338 338 if [ "`echo "$incoming" | grep "lib/modules/.*\..*o\.gz"`" != "" ] ; then 339 339 gunzip -f $outdir/$incoming || LogIt "Cannot gunzip $outdir/$incoming" 340 340 fi 341 341 [ -x "$outdir" ] && StripExecutable $outdir "-$filename-" 342 343 344 342 fi 343 counter=$(($counter+1)) 344 if [ "$counter" -ge "5" ] ; then 345 345 counter=0 346 347 348 349 350 346 echo -en "." 347 fi 348 fi 349 incoming=`ReadLine` 350 done 351 351 } 352 352 … … 354 354 355 355 CopyImageToDisk() { 356 357 358 359 360 361 362 363 356 local image dev procno res comment 357 image=$1 358 dev=$2 359 comment=$3 360 [ ! -f "$image" ] && [ ! -b "$image" ] && Die "Image $image does not exist. Did you run out of disk space?" 361 Prompt "About to write $comment. Please press ENTER." 362 echo -en "Formatting disk..." 363 if which fdformat > /dev/null ; then 364 364 fdformat -n $dev > /dev/null 2> /dev/null || Die "Cannot format $dev - is your Linux distro broken?" 365 365 elif which superformat > /dev/null ; then 366 366 superformat $dev > /dev/null 2> /dev/null || Die "Cannot format $dev - is your Linux distro broken?" 367 367 else 368 368 Die "Please install either fdformat or superformat." 369 370 371 369 fi 370 echo -en "\rWriting $comment" 371 if echo $image | grep "mindi-[r|b]oot\.1440" &> /dev/null ; then 372 372 cat $image > $dev & 373 373 else 374 374 dd if=$image of=$dev &> /dev/null & 375 376 377 378 379 380 381 382 383 384 375 fi 376 procno=$! 377 ps $procno > /dev/null 2> /dev/null 378 while [ "$?" -eq "0" ] ; do 379 sleep 3 380 echo -en "." 381 ps $procno > /dev/null 2> /dev/null 382 done 383 echo -e "$DONE" 384 LogIt "$comment has been written." 385 385 } 386 386 … … 390 390 391 391 CountItemsIn() { 392 393 394 392 local r 393 r=0 394 for q in $1 ; do 395 395 r=$(($r+1)) 396 397 396 done 397 echo $r 398 398 } 399 399 … … 404 404 405 405 CreateDataDiskImagesFromTarballs() { 406 407 408 409 410 411 412 413 414 406 local tardir outdir diskno noof_disks kp 407 tardir=$1 408 outdir=$2 409 noof_disks=$3 410 411 mkdir -p $outdir 412 diskno=1 413 echo -en "Creating data disk " 414 while [ "$diskno" -le "$noof_disks" ] ; do 415 415 echo -en "#$diskno..." 416 416 cp -f $tardir/$diskno.tar.gz $outdir || LogIt "[line 250] Cannot copy $tardir/$diskno.tar.gz to $outdir" 417 418 419 420 421 422 417 CreateOneDataDiskImage $tardir/$diskno.tar.gz $outdir/mindi-data-$diskno.img $diskno $noof_disks 418 diskno=$(($diskno+1)) 419 done 420 mv -f $tardir/all.tar.gz $outdir 421 du -sk $outdir/*gz >> $LOGFILE 422 echo -e "$DONE" 423 423 } 424 424 … … 426 426 427 427 CreateOneDataDiskImage() { 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 428 local tarball imagefile dev diskno noof_disks mountpoint 429 tarball=$1 430 imagefile=$2 431 diskno=$3 432 noof_disks=$4 433 434 mountpoint=$TMP_ROOT/mountpoint.$$ 435 mkdir -p $mountpoint 436 dd if=/dev/zero of=$imagefile bs=1k count=1440 &> /dev/null || LogIt "Cannot dd (CODI)\n" 437 mke2fs -N 12 -F $imagefile > /tmp/mke2fs.$$ 2>> /tmp/mke2fs.$$ 438 [ "$?" -ne "0" ] && cat /tmp/mke2fs.$$ 439 rm -f /tmp/mke2fs.$$ 440 mount -t ext2 -o loop $imagefile $mountpoint || Die "Can't loopmount $mountpoint; does your kernel support loopfs? If not, please recompile your kernel. Your Linux distro is broken." 441 mv $tarball $mountpoint/ 442 if [ "$?" -ne "0" ] ; then 443 443 umount $mountpoint 444 444 Die "Tarball $tarball is too big for disk! (CODI)\nTell Hugo to adjust MAX_COMPRESSED_SIZE" 445 446 447 448 445 fi 446 [ "$diskno" -eq "$noof_disks" ] && echo "This is the last disk ($diskno=$noof_disks)" >> $mountpoint/LAST-DISK 447 umount $mountpoint || LogIt "Cannot umount (CODI)\n" 448 rmdir $mountpoint || LogIt "Cannot rmdir (CODI)\n" 449 449 } 450 450 … … 452 452 453 453 DidMondoCallMe() { 454 455 456 457 458 459 454 local res 455 456 res=0 457 [ "`ps ax | fgrep "mondoarchive" | grep -v "grep"`" ] && res=$(($res+1)) 458 [ -f "/var/run/monitas-mondo.pid" ] && res=$(($res+1)) 459 [ "$res" -gt "1" ] && echo "yes" 460 460 } 461 461 … … 464 464 465 465 Die() { 466 467 468 466 local my_partitions i 467 echo "MINDI_VERSION is $MINDI_VERSION" >> $LOGFILE 468 if [ "$1" = "" ] ; then 469 469 LogIt "Fatal error\n" 470 470 else 471 471 LogIt "Fatal error. $1\n" 472 fi 473 sync 474 cd / 475 476 my_partitions=`mount | fgrep $$ | cut -f1 -d' '` 477 [ "$my_partitions" != "" ] && umount $my_partitions 478 [ "$TMP_ROOT" != "/tmp" ] && rm -Rf $TMP_ROOT 479 cd /tmp 480 mkdir -p mindi.err 481 for i in /tmp/mindi-needlist.txt /etc/fstab /etc/lilo.conf /etc/raidtab $LOGFILE /var/log/mondo-archive.log /tmp/mountlist.txt.$$ ; do 482 [ -e "$i" ] && cp -f $i mindi.err/ 483 done 484 rm -f mindi.err.*.tgz 485 tar -c mindi.err -f- | gzip -9 > mindi.err.$$.tgz 486 cd / 487 rm -Rf mindi.err /tmp/mountlist.txt.$$ 488 LogIt "Please e-mail a copy of /tmp/mindi.err.$$.tgz to the mailing list." 489 LogIt "See http://www.mondorescue.org for more information." 490 LogIt "WE CANNOT HELP unless you enclose that file." 491 exit 1 472 fi 473 sync 474 cd / 475 476 my_partitions=`mount | fgrep $$ | cut -f1 -d' '` 477 [ "$my_partitions" != "" ] && umount $my_partitions 478 [ "$TMP_ROOT" != "/tmp" ] && rm -Rf $TMP_ROOT 479 cd /tmp 480 mkdir -p mindi.err 481 for i in /etc/fstab /etc/lilo.conf /etc/raidtab $LOGFILE /var/log/mondo-archive.log /tmp/mountlist.txt.$$ $FDISKLOG ; do 482 [ -e "$i" ] && cp -f $i mindi.err/ 483 done 484 rm -f mindi.err.*.tgz 485 tar -cf - mindi.err | gzip -9 > mindi.err.$$.tgz 486 rm -Rf mindi.err /tmp/mountlist.txt.$$ mindilinux $FDISKLOG 487 LogIt "Please e-mail a copy of /tmp/mindi.err.$$.tgz to the mailing list." 488 LogIt "See http://www.mondorescue.org for more information." 489 LogIt "WE CANNOT HELP unless you enclose that file." 490 exit 1 492 491 } 493 492 … … 496 495 497 496 DropOptimizedLibraries() { 498 499 500 501 502 503 497 local outdir filelist list_of_optimized_libraries optimized_lib_name vanilla_lib_name reason msg resolved res 498 filelist=$1 499 outdir=$2 500 501 list_of_optimized_libraries=`cat $filelist | grep "lib/i[5-7]86/"` 502 if [ "$list_of_optimized_libraries" = "" ] ; then 504 503 return 0 505 506 507 504 fi 505 echo -en "Dropping i686-optimized libraries if appropriate" 506 for optimized_lib_name in $list_of_optimized_libraries ; do 508 507 echo -en "." 509 508 reason="" … … 513 512 echo "Adding $resolved to filelist" >> $LOGFILE 514 513 while [ -h "$resolved" ] ; do 515 516 517 514 resolved=`ls $resolved -l|tr -s ' ' '\t'|$AWK '{printf $NF;}'` 515 LocateFile $resolved >> $filelist 516 echo "Adding $resolved to filelist" >> $LOGFILE 518 517 done 519 518 mkdir -p $outdir$optimized_lib_name > /dev/null 2> /dev/null … … 525 524 echo "$vanilla_lib_name" >> $filelist.tmp 526 525 mv -f $filelist.tmp $filelist 527 528 529 530 526 done 527 cat $filelist | sort | $AWK '{ print $1; }' | uniq > $filelist.tmp 528 mv -f $filelist.tmp $filelist 529 echo -e "$DONE" 531 530 } 532 531 … … 535 534 536 535 FindAndAddUserKeyboardMappingFile() { 537 538 539 540 541 542 543 536 local r res mapfile mappath included_item included_list keyfile mp locale 537 LogIt "Analyzing your keyboard's configuration." 538 KEYDIR=/lib/kbd 539 [ ! -e "$KEYDIR" ] && KEYDIR=/usr/share/kbd # Slackware 540 [ ! -e "$KEYDIR" ] && KEYDIR=/usr/lib/kbd 541 [ ! -e "$KEYDIR" ] && KEYDIR=/usr/share 542 if [ ! -e "$KEYDIR" ] ; then 544 543 LogIt "Keyboard mapping directory not found. I shall use default map at boot-time." 545 544 return 0 546 547 545 fi 546 if [ -e "/etc/sysconfig/keyboard" ] ; then 548 547 echo "Red Hat-style config detected." >> $LOGFILE 549 548 keyfile=/etc/sysconfig/keyboard 550 549 elif [ -e "/etc/rc.d/rc.keymap" ] ; then 551 550 echo "Slackware-style config detected." >> $LOGFILE 552 551 keyfile=/etc/rc.d/rc.keymap 553 554 552 elif [ -e "/etc/rc.config" ] ; then 553 echo "Debian-style config detected." >> $LOGFILE 555 554 keyfile=/etc/rc.config 556 557 555 elif [ -e "/etc/console/boottime.kmap.gz" ] ; then 556 echo "Debian-style config detected." >> $LOGFILE 558 557 echo -en "Adding the following keyboard mapping tables: " 559 558 mkdir -p $bigdir/tmp … … 564 563 echo -e "$DONE" 565 564 return 0 566 565 else 567 566 echo -en "Searching for rc.config ..." 568 567 keyfile=`find /etc -name rc.config | head -n1` 569 568 if [ "$keyfile" = "" ] || [ ! -e "$keyfile" ] ; then 570 571 572 else 573 574 fi 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 569 LogIt "Unknown config detected. Default keyboard map will be used." 570 return 571 else 572 echo "Found $keyfile" >> $LOGFILE 573 fi 574 fi 575 if [ ! -e "$KEYDIR/keymaps" ] ; then 576 LogIt "Keyboard mapping directory not found. Default keyboard map will be used." 577 return 578 fi 579 echo "keyfile=$keyfile" >> $LOGFILE 580 locale=`cat "$keyfile" |fgrep KEYTABLE | tr -d '"' |cut -d'=' -f2` 581 [ ! "$locale" ] && locale=`cat "$keyfile" | grep '.map$' | sed 's/^.* //'` # Slackware 582 echo "locale=$locale" >> $LOGFILE 583 mp=`find $KEYDIR/keymaps | grep "i[3-8]86" | fgrep "${locale}." | grep -vx " *#.*"` 584 [ ! "$mp" ] && mp=`find $KEYDIR/keymaps | grep "i[3-8]86" | grep "$locale[^r][^/]" | grep -vx " *#.*"` 585 for i in $mp ; do 586 mappath=$i 587 [ -e "$i" ] && [ ! -d "$i" ] && break 588 done 589 if [ ! -e "$mappath" ] || [ -d "$mappath" ] ; then 590 mappath=$(locate */kbd/keymaps/*/$locale) 591 fi 592 echo "mappath = $mappath" >> $LOGFILE 593 if [ ! -e "$mappath" ] || [ -d "$mappath" ] ; then 595 594 LogIt "Keyboard mapping file not found. Default keyboard map will be used." 596 595 return 597 598 599 600 601 602 603 604 596 fi 597 echo -en "Adding the following keyboard mapping tables: " 598 mkdir -p $bigdir/tmp 599 echo "$mappath" > $bigdir/tmp/KEYMAP-LIVES-HERE 600 KBDEPTH=0 601 AddKeyboardMappingFile $mappath 602 echo -e "$DONE" 603 return 0 605 604 } 606 605 … … 612 611 # nice patch from Martin Fürstenau 613 612 for mh in /usr/lib /usr/opt /usr/share /usr/local /usr/local/share /usr/share/local /opt /opt/share /usr /ramdisk/usr/local/share /ramdisk/usr/share ; do 614 615 616 617 618 619 613 if [ ! -L $mh ] ; then 614 MH_PATH=$mh 615 SYMLINK=0 616 while [ $MH_PATH != "/" ] ; do 617 MH_PATH=`dirname $MH_PATH` 618 if [ -L $MH_PATH ] ; then 620 619 SYMLINK=1 621 622 623 624 625 620 fi 621 done 622 623 if [ $SYMLINK -ne 1 ] ; then 624 if [ -d "$mh/mindi" ] && [ -e "$mh/mindi/aux-tools" ] ; then 626 625 [ "$MINDI_HOME" ] && Die "You have multiple instances of Mindi - one at $MINDI_HOME and one at $mh/mindi" 627 628 626 MINDI_HOME=$mh/mindi 627 fi 629 628 if [ -d "$mh/mondo" ] && [ -e "$mh/mondo/restore-scripts" ] ; then 630 629 [ "$MONDO_HOME" ] && Die "You have multiple instances of Mondo - one at $MONDO_HOME and one at $mh/mondo" 631 630 MONDO_HOME=$mh/mondo 632 631 fi 633 634 632 fi 633 fi 635 634 done 636 635 # end patch … … 672 671 673 672 FindLiloBinary() { 674 673 if which lilo &> /dev/null ; then 675 674 if which lilo.real > /dev/null 2> /dev/null ; then 676 677 678 else 679 675 LILO_EXE=lilo.real 676 LogIt "lilo.real found; will be used instead of lilo (*grumble* *mutter*)" 677 else 678 LILO_EXE=lilo 680 679 fi 681 680 $LILO_EXE -V | fgrep "21.6" > /dev/null && Die "Please upgrade LILO. Your verison has a serious bug. If you're not _using_ LILO, fine, uninstall it. :)" 682 681 else 683 682 LILO_EXE=`which false` 684 683 fi 685 684 } 686 685 687 686 FindELiloBinary() { 688 687 if which elilo &> /dev/null ; then 689 688 LILO_EXE=elilo 690 689 else 691 690 LILO_EXE=`which false` 692 691 fi 693 692 } 694 693 695 694 696 695 FixPathIfBroken() { 697 698 699 700 701 702 696 if [ -e "/sbin/mkfs" ] && ! which mkfs &> /dev/null ; then 697 PATH=$PATH:/sbin:/usr/sbin 698 export PATH 699 echo "Your PATH did not include /sbin or /usr/sbin. I have fixed that, temporarily." >> $LOGFILE 700 echo "However, you may wish to ask your vendor to provide a permanent fix..." >> $LOGFILE 701 echo "You might like to call 'su -' instead of 'su', for example." >> $LOGFILE 703 702 fi 704 703 } … … 707 706 708 707 FindSensibleBootBFile() { 709 710 711 712 708 local i out last 709 out="" 710 last="" 711 for i in `find /boot -type f | grep -v chain | grep -v os2 | sort -u` ; do 713 712 if [ "`strings $i 2> /dev/null | head -n1`" = "LILO" ] ; then 714 715 716 fi 717 718 713 out="$out $i" 714 last="$i" 715 fi 716 done 717 echo "$last" 719 718 } 720 719 … … 722 721 723 722 FindSpecificModuleInPath() { 724 725 726 723 local modpaths pwd line 724 pwd=`pwd` 725 if [ "$YOUR_KERNEL_SUCKS" ] ; then 727 726 cd $TMP_ROOT 728 727 else 729 728 cd / 730 731 729 fi 730 if [ ! -e "$1" ] ; then 732 731 LogIt "Warning - cannot search specific path '$1'" 733 732 return 1 734 735 736 737 738 739 740 741 733 fi 734 modpaths=`find $1 -name $2.*o -type f` 735 [ "$?" -ne "0" ] && Die "find $1 -name $2.o -type f --- failed" 736 [ "$modpaths" = "" ] && modpaths=`find $1 -name $2.o.gz -type f` 737 [ "$modpaths" = "" ] && modpaths=`find $1 -name $2.ko.gz -type f` 738 [ "$modpaths" = "" ] && modpaths=`find $1 -name $2 -type f` 739 echo "$modpaths" 740 cd $pwd 742 741 } 743 742 … … 745 744 746 745 GenerateGiantDependencyList() { 747 748 749 750 751 752 753 754 755 756 757 758 746 local incoming loc fname list_of_files i tempfile outfile progress filelist res r mapfile mappath included_list included_item old_pwd tempdepfile modres noof_lines lvmversion lvmresolved 747 748 echo -en "Analyzing dependency requirements" 749 outfile=$1 750 tempfile=$TMP_ROOT/$$.txt 751 incoming=`ReadLine` 752 753 > $tempfile 754 progress=0 755 res=0 756 noof_lines=$2 757 while [ "$incoming" != "" ] ; do 759 758 if echo "$incoming" | grep -x " *#.*" &> /dev/null ; then 760 759 # echo "Skipping '$incoming'" 761 762 760 incoming=`ReadLine` 761 continue 763 762 fi 764 763 if [ "$incoming" = "LVMFILES:" ] ; then … … 767 766 # echo "Processing '$incoming'." 768 767 # sleep 1 769 770 771 772 768 filelist=`GenerateListForFile "$incoming"` 769 r=$? 770 [ "$r" -ne "0" ] && LogIt "$incoming not found\n" 771 res=$(($res+$r)) 773 772 # echo "'$incoming' generates filelist '$filelist'" >> $LOGFILE 774 775 773 for fname in $filelist ; do 774 [ "$fname" != "" ] && echo "$fname" >> $tempfile 776 775 done 777 776 progress=$(($progress+1)) … … 786 785 [ "$modres" -eq "2" ] && echo -en "\t\\" 787 786 [ "$modres" -eq "3" ] && echo -en "\t|" 788 789 790 787 incoming=`ReadLine` 788 done 789 if [ "$incoming" = "LVMFILES:" ] ; then 791 790 incoming=`ReadLine` 792 791 lvmversion="" 793 792 while [ "$incoming" != "" ] ; do 794 793 if echo "$incoming" | grep -x " *#.*" &> /dev/null ; then 795 794 # echo "Skipping '$incoming'" 796 795 incoming=`ReadLine` 797 796 continue 798 799 800 801 802 797 fi 798 filelist=`GenerateListForFile "$incoming"` 799 for tool in $filelist ; do 800 lvmresolved=`ResolveSoftlink $tool` 801 if echo "$lvmresolved" | grep "lvmiopversion" &> /dev/null ; then 803 802 if [ "$lvmversion" = "" ] ; then 804 803 lvmversion=`$lvmresolved` … … 822 821 echo "$tool" >> $tempfile 823 822 fi 824 825 826 827 828 829 830 831 832 833 834 835 836 837 done 838 839 840 841 842 843 844 845 846 847 848 823 done 824 progress=$(($progress+1)) 825 echo -en "\r\t\t\t\t\t\t\t\t" 826 i=$(($progress*100)) 827 i=$(($i/$noof_lines)) 828 echo -en "$i" 829 echo -en "%" 830 modres=$(($progress%4)) 831 [ "$modres" -eq "0" ] && echo -en "\t/" 832 [ "$modres" -eq "1" ] && echo -en "\t-" 833 [ "$modres" -eq "2" ] && echo -en "\t\\" 834 [ "$modres" -eq "3" ] && echo -en "\t|" 835 incoming=`ReadLine` 836 done 837 fi 838 echo -en "$DONE\nMaking complete dependency list" 839 840 cat $tempfile | tr -s '/' '/' | sort | uniq > $tempfile.new 841 mv -f $tempfile.new $tempfile 842 > $outfile.pre 843 progress=0 844 noof_lines=`cat $tempfile | wc -l` 845 for fname in `cat $tempfile` ; do 846 tempdepfile=`mktemp /tmp/mindilinux/tempdepfile.XXXXXX` 847 LocateDeps $fname > $tempdepfile 849 848 echo "$fname" >> $outfile.pre 850 849 cat $tempdepfile >> $outfile.pre 851 850 # echo "$fname ----> dependencies:-" >> $LOGFILE 852 851 # cat $tempdepfile | tr -s '/' '/' | sort | uniq >> $LOGFILE 853 852 # echo -en "(end of deplist of $fname)\n\n" >> $LOGFILE 854 853 rm -f $tempdepfile 855 854 progress=$(($progress+1)) 856 857 858 859 860 855 echo -en "\r\t\t\t\t\t\t\t\t" 856 i=$(($progress*100)) 857 i=$(($i/$noof_lines)) 858 echo -en "$i" 859 echo -en "%" 861 860 modres=$(($progress%4)) 862 863 864 865 866 867 861 [ "$modres" -eq "0" ] && echo -en "\t/" 862 [ "$modres" -eq "1" ] && echo -en "\t-" 863 [ "$modres" -eq "2" ] && echo -en "\t\\" 864 [ "$modres" -eq "3" ] && echo -en "\t|" 865 done 866 if [ "`DidMondoCallMe`" ] ; then 868 867 mkdir -p $bigdir/tmp 869 868 mkdir -p $bigdir/sbin 870 869 mkdir -p $bigdir/bin 871 870 if [ -e "$MONDO_TMP/post-nuke.tgz" ] ; then 872 873 874 875 876 871 LogIt "\nIncorporating post-nuke tarball" 872 old_pwd=`pwd` 873 cd $bigdir 874 tar -zxf $MONDO_TMP/post-nuke.tgz || LogIt "Error occurred when untarring post-nuke tarball" 875 cd $old_pwd 877 876 fi 878 877 if cp -f $MONDO_TMP/mondo*restore $bigdir/usr/bin ; then 879 880 else 881 882 883 884 885 886 878 LocateDeps $bigdir/usr/bin/mondo*restore >> $outfile.pre 879 else 880 LogIt "Cannot find mondo*restore in mondo's tempdir, $MONDO_TMP" 881 LogIt "I bet you've got a spare copy of Mondo or Mindi floating around on your system." 882 LogIt "If Mindi was called by Mondo then send me a bug report. It not, type 'ps ax' to see which Mondo-related process is still running; then kill it. :-) Finally, run Mindi again." 883 Die "Odd." 884 fi 885 cp -f $MONDO_TMP/BOOTLOADER.* $bigdir 2> /dev/null || LogIt "\nMondo v1.2x defaults to LILO as the bootloader, BTW." 887 886 if [ -e "$MONDO_TMP/start-nfs" ] ; then 888 889 890 887 LogIt "Incorporating NFS-related settings" 888 cp -f $MONDO_TMP/start-nfs $bigdir/sbin || Die "Cannot find start-nfs" 889 for r in NFS-SERVER-MOUNT NFS-SERVER-PATH NFS-DEV NFS-CLIENT-IPADDR NFS-SERVER-IPADDR ; do 891 890 cp -f $MONDO_TMP/$r $bigdir/tmp || Die "Cannot copy $r - did you run out of disk space?" 892 893 894 fi 895 896 cat $outfile.pre | tr ' ' '\n' | tr '/' '/' -s| fgrep -vx "" | sort -u | egrep -v "/libX11|/libXext|/libXi|/libgtk|/libgdk" > $outfile897 898 899 891 echo "Copying $r to ramdisk" >> $LOGFILE 892 done 893 fi 894 fi 895 cat $outfile.pre | tr ' ' '\n' | tr -s '/' '/' | fgrep -vx "" | sort -u | egrep -v "/libX11|/libXext|/libXi|/libgtk|/libgdk" > $outfile 896 rm -f $tempfile $outfile.pre 897 [ "$res" -eq "0" ] && echo -e "\r\t\t\t\t\t\t\t\t$DONE" || echo "\nFailed." 898 return $res 900 899 } 901 900 … … 905 904 906 905 GenerateListForFile() { 907 908 909 910 911 912 913 914 915 916 906 local files_found loc fname incoming i res 907 incoming="$1" 908 files_found="" 909 res=0 910 911 for fname in $incoming ; do 912 files_found="$files_found `LocateFile $fname`" 913 done 914 915 echo "$files_found" | tr ' ' '\n' | sort -u | tr '\n' ' ' 917 916 } 918 917 … … 922 921 923 922 GetAllRaidMembers() { 924 923 $AWK "/^[[:space:]]*#/ {next} /^[[:space:]]*device/ if(\$2) {print \$2}" < /etc/raidtab 925 924 } 926 925 927 926 928 927 GetFileSizeList() { 929 930 931 932 928 local i 929 for i in `find $1 -type d -o -print` ; do 930 du -sk $i 931 done 933 932 } 934 933 … … 936 935 937 936 GetHomeDir() { 938 939 940 941 937 local res loc 938 loc=`which $1 2>/dev/null` 939 res=`file $loc | $AWK '{print $NF;}'` 940 dirname $res 942 941 } 943 942 … … 950 949 951 950 GetParentRaidDev() { 952 951 $AWK "/^[[:space:]]*#/ {next} /^[[:space:]]*raiddev/ {dev=\$2} /^[[:space:]]*device/ {if(\$2==\"$1\") {print dev; exit}}" < /etc/raidtab 953 952 } 954 953 … … 959 958 960 959 GetRaidDevMembers() { 961 960 $AWK "/^[[:space:]]*#/ {next} /^[[:space:]]*raiddev/ {if(dev) exit; if(\$2 == \"$1\") dev=\$2} /^[[:space:]]*device/ {if(dev) {print \$2}}" < /etc/raidtab 962 961 } 963 962 964 963 965 964 HackAwk() { 966 967 968 969 970 971 972 973 974 975 976 977 965 local pathname filename dir old_pwd new_fname 966 pathname=$1 967 filename=$2 968 dir=`echo "$pathname" | sed s/$filename//` 969 old_pwd=`pwd` 970 cd $dir 971 [ -f "$filename" ] || Die "Can't find $filename at $dir" 972 new_fname="an.icky.icky.spider.ewww" 973 [ "$filename" = "gawk" ] && new_fname="awk" 974 [ "$filename" = "awk" ] && new_fname="gawk" 975 ln -s $filename $new_fname 976 cd $old_pwd 978 977 } 979 978 … … 982 981 983 982 HackMountlist() { 984 983 local scratchdir outfile partlist pst partstr \ 985 984 res partition swapsize 986 987 988 989 990 991 992 985 scratchdir=$TMP_ROOT 986 outfile=$1 987 988 mkdir -p $outfile 989 rm -Rf $outfile 990 > $outfile 991 partlist=$(mount | cut -d' ' -f1,3,5 \ 993 992 | egrep -v "((none|/tmp|/ISOs|/proc|/dev/root) )|/mnt/" \ 994 993 | tr ' ' '|') 995 994 996 997 998 999 1000 1001 1002 1003 995 echo -n "Modifying mountlist..." 996 997 if [ ! -f "/mountlist.hacked" ] ; then 998 Die "Can't find modified mountlist.hacked!" 999 else 1000 cp /mountlist.hacked "$outfile" 1001 LogIt "Done. (Created by auto-archive, I assume?)\n" 1002 fi 1004 1003 } 1005 1004 … … 1008 1007 1009 1008 HackPathsToFailsafe() { 1010 1011 1012 1013 1014 1015 1009 local incoming newpath kver stub i pwd 1010 kver=`uname -r` 1011 incoming=`ReadLine` 1012 pwd=`pwd` 1013 cd $TMP_ROOT 1014 while [ "$incoming" != "" ] ; do 1016 1015 stub=`basename $incoming` 1017 1016 newpath=`FindSpecificModuleInPath lib/modules/$FAILSAFE_KVER $stub` 1018 1017 for i in $newpath ; do 1019 1018 echo "$i" 1020 1019 done 1021 1020 read incoming 1022 1023 1021 done 1022 cd $pwd 1024 1023 } 1025 1024 … … 1027 1026 1028 1027 ListAllPartitions() { 1029 1030 1031 1028 local res currline partition all_partitions ap_orig remaining i j 1029 1030 cat $MY_FSTAB | grep -vx " *#.*" | grep -vx " *none.*" | $AWK '/^\/dev\/[imhs]d||LABEL\=\// && !/fdd|cdr|zip|floppy/ {print $1}' 1032 1031 # for partition in `$FDISK -l | tr -s ' ' '\n' | grep /dev` ; do 1033 1032 # [ -e "$i" ] && all_partitions=echo "$i" 1034 1033 # done 1035 1036 1034 [ -e "/etc/raidtab" ] && $AWK '/^ *device/ {print $2}' /etc/raidtab 1035 return 1037 1036 } 1038 1037 … … 1042 1041 1043 1042 ListImagesForUser() { 1044 1045 1046 1047 1048 1049 1050 1043 local path fname 1044 path=$1 1045 echo -en "In the directory '$path' you will find the images:-\n" 1046 for fname in `ls $path | fgrep mindi-` ; do 1047 printf "%19s " $fname 1048 done 1049 echo " " 1051 1050 } 1052 1051 … … 1054 1053 1055 1054 ListKernelModulePaths() { 1056 1057 1058 1055 local module_list module fname oss r kern 1056 oss="/root/oss/modules" 1057 module_list=`ListKernelModules` 1059 1058 ### 1060 1059 ### Sq-Modification ... Use kernelname for module search path if specified 1061 1060 ### 1062 1063 1064 1065 1066 1067 1068 1061 # kern="`uname -r`" 1062 if [ "${kernelname}" != "" -a "${kernelname}" != "FAILSAFE" ] 1063 then 1064 kern=${kernelname} 1065 else 1066 kern="`uname -r`" 1067 fi 1069 1068 ### 1070 1069 ### Sq-Mod End 1071 1070 ### 1072 1073 1071 for module in $module_list $EXTRA_MODS ; do 1072 r=`find /lib/modules/$kern -type f | grep "/${module}\..*o" | tail -n1` 1074 1073 echo "module $module --> $r" >> $LOGFILE 1075 1074 [ "$r" ] && echo "$r" 1076 1075 [ -f "$oss" ] && find $oss | fgrep $module 1077 1078 1079 1076 done 1077 find /lib/modules/$kern/modules.* -type f 2> /dev/null 1078 [ -f "$oss" ] && find $oss.* 2> /dev/null 1080 1079 } 1081 1080 … … 1083 1082 1084 1083 ListKernelModules() { 1085 1086 1087 1084 local output q 1085 output="" 1086 for q in `lsmod | sed -n '2,$s/ .*//p'` ; do 1088 1087 output="$q $output" 1089 1090 1088 done 1089 echo "$output" 1091 1090 } 1092 1091 … … 1094 1093 1095 1094 LocateDeps() { 1096 1097 1098 1099 1100 1101 1095 local incoming fname deps 1096 incoming="$1" 1097 for fname in $incoming ; do 1098 if [ ! -e "$fname" ] ; then 1099 echo "Warning - $fname does not exist; cannot be LDD'd." >> $LOGFILE 1100 if echo $fname | grep lvm &> /dev/null ; then 1102 1101 echo "This warning only affects you if you are using LVM." >> $LOGFILE 1103 1102 if lsmod | grep lvm &> /dev/null ; then … … 1107 1106 echo "I don't think you are, so don't worry about it." >> $LOGFILE 1108 1107 fi 1109 1110 1111 1108 fi 1109 elif [ -h "$fname" ] && [ -x "$fname" ] ; then 1110 echo "$fname is softlink" >> $LOGFILE 1112 1111 # echo "$fname will not be LDD'd. It is a softlink to `WhatSoftlinkPointsTo $fname`, which should already be in queue to be analyzed." >> $LOGFILE 1113 1112 # echo "$fname" 1114 1115 1116 1117 1113 else 1114 ldd $fname 2> /dev/null | ProcessLDD $fname 1115 fi 1116 done 1118 1117 } 1119 1118 … … 1121 1120 1122 1121 LocateFile() { 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1122 local i path fname_to_find location output resolved tmp stub cache_id loclist 1123 fname_to_find="$1" 1124 if [ "$FILE_CACHE" ] ; then 1125 touch $FILE_CACHE 1126 output=""; cache_id=`echo $fname_to_find | md5sum` 1127 output=`sed -n -e "s/^$cache_id //p" $FILE_CACHE` 1128 if [ ! "$output" = "" ] ; then 1129 echo "$output" 1130 return 0 1131 fi 1132 fi 1133 if echo "$fname_to_find" | grep -x "/.*" ; then 1135 1134 output="$fname_to_find" 1136 1135 location="$fname_to_find" 1137 1136 while [ -h "$location" ] ; do 1138 1139 1140 1137 resolved=`WhatSoftlinkPointsTo $location` 1138 location=$resolved 1139 output="$location $output" 1141 1140 done 1142 1141 echo "$output" 1143 1142 return 0 1144 1145 1146 1143 fi 1144 output="" 1145 for path in /etc /usr /usr/bin /usr/sbin /bin /usr/X11R6/bin /sbin /usr/local/bin /usr/local/sbin /usr/lib /usr/lib64 /usr/lib64/* /lib /lib64 /lib64/* /usr/local/lib /usr/local/lib64 /usr/local/lib64/* /usr/X11R6/lib /usr/X11R6/lib64 /usr/X11R6/lib64/* ; do 1147 1146 [ ! -d "$path" ] && continue 1148 1147 location=`echo "$path/$fname_to_find" | tr -s '/' '/'` 1149 1148 if echo "$location" | grep "lib/lib" 2> /dev/null ; then 1150 1151 else 1152 1149 loclist=`find $path -maxdepth 1 | fgrep "$fname_to_find"` 1150 else 1151 loclist=$location 1153 1152 fi 1154 1153 for location in $loclist ; do 1155 1156 1157 1158 1159 1160 1161 1162 1154 [ ! -e "$location" ] && continue 1155 output="$location $output" 1156 copies_found=$(($copies_found+1)) 1157 while [ -h "$location" ] ; do 1158 resolved=`WhatSoftlinkPointsTo $location` 1159 location=$resolved 1160 output="$location $output" 1161 done 1163 1162 # resolved=`file $location | $AWK '{print $NF;}'` 1164 1163 # if [ "`echo "$resolved" | fgrep "/"`" = "" ] ; then … … 1168 1167 # fi 1169 1168 done 1170 1171 1169 done 1170 if [ "$output" = "" ] ; then 1172 1171 # echo "$fname_to_find not found" >> /dev/stderr 1173 1172 return 1 1174 1175 1176 1177 1173 fi 1174 echo "$output" 1175 [ "$FILE_CACHE" ] && echo -ne "$cache_id $output\n" >> $FILE_CACHE 1176 return 0 1178 1177 } 1179 1178 … … 1181 1180 1182 1181 LogIt() { 1183 1182 if [ -e /dev/stderr ] ; then 1184 1183 echo -e "$1" >> /dev/stderr 1185 1184 elif [ -e /usr/bin/logger ] ; then 1186 1185 /usr/bin/logger -s $1 1187 1188 1186 fi 1187 echo -en "$1" >> $LOGFILE 1189 1188 } 1190 1189 … … 1198 1197 1199 1198 MakeMondoConfigFile() { 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1199 local outfile use_lzo use_comp use_star 1200 outfile=$1 1201 > $outfile 1202 [ "$TAPESIZE" ] && echo "media-size $TAPESIZE" >> $outfile 1203 [ "$TAPEDEV" ] && echo "media-dev $TAPEDEV" >> $outfile 1204 [ "$FILES_IN_FILELIST" ] && echo "files-in-filelist $FILES_IN_FILELIST" >> $outfile 1205 [ "$LAST_FILELIST_NUMBER" ] && echo "last-filelist-number $LAST_FILELIST_NUMBER" >> $outfile 1206 [ "$INTERNAL_TAPE_BLOCK_SIZE" ] && echo "internal-tape-block-size $INTERNAL_TAPE_BLOCK_SIZE" >> $outfile 1207 use_lzo=$USE_LZO; [ "$use_lzo" = "" ] && use_lzo="no" 1208 use_comp=$USE_COMP; [ "$use_comp" = "" ] && use_comp="yes" 1209 use_star=$USE_STAR; [ "$use_star" = "" ] && use_star="no" 1210 echo "use-lzo $use_lzo" >> $outfile 1211 echo "use-star $use_star" >> $outfile 1212 echo "use-comp $use_comp" >> $outfile 1213 echo "datestamp `date`" >> $outfile 1214 [ "$ESTIMATED_TOTAL_NOOF_SLICES" ] && echo "total-slices $ESTIMATED_TOTAL_NOOF_SLICES" >> $outfile 1216 1215 AddFileToCfgIfExists $MONDO_TMP/NFS-CLIENT-IPADDR nfs-client-ipaddr $outfile 1217 1216 AddFileToCfgIfExists $MONDO_TMP/NFS-SERVER-MOUNT nfs-server-mount $outfile … … 1234 1233 1235 1234 MakeModuleLoadingScript() { 1236 1237 1238 1239 1240 1241 1242 1235 local module fname params modpath kver outerloop i modpaths kver searchpath list_to_echo j 1236 tmpmodprobe_flag=$1 1237 outfile=$2 1238 > $outfile || Die "Cannot create empty $outfile" 1239 echo -en "#\041/bin/sh\n\n" >> $outfile 1240 echo "echo -en \"Loading your modules...\"" >> $outfile 1241 if [ "$YOUR_KERNEL_SUCKS" ] ; then 1243 1242 kver=$FAILSAFE_KVER 1244 1243 cd $TMP_ROOT 1245 1244 searchpath=lib/modules/$kver 1246 1245 else 1247 1246 ### 1248 1247 ### Sq-Modification ... Use kernelname for module search path if specified 1249 1248 ### 1250 1251 1252 1253 1254 1255 1256 1249 #kver=`uname -r` 1250 if [ "${kernelname}" != "" ] 1251 then 1252 kver=${kernelname} 1253 else 1254 kver=`uname -r` 1255 fi 1257 1256 ### 1258 1257 ### Sq-Modification end 1259 1258 ### 1260 1259 searchpath=/lib/modules/$kver 1261 1262 1263 1264 1260 fi 1261 1262 echo -en "for outerloop in 1 2 3 4 5 ; do\necho -en \".\"\n" >> $outfile 1263 list_to_echo="`ListKernelModules`" 1265 1264 # LTE=`echo "$list_to_echo" | tr ' ' '\n' | grep -n "" | cut -d':' -f2,3,4 | tr '\n' ' '` 1266 1265 # lte_old="$LTE" … … 1270 1269 # done 1271 1270 #echo "LTE = '$LTE'" >> $LOGFILE 1272 1273 1271 # Make temporary modprobe.conf file if we are told so 1272 if [ $tmpmodprobe_flag == "Y" ] ; then 1274 1273 infile="/tmp/modprobe.conf.mindi.$$" 1275 cat `find /etc/modprobe.d - name "*" -xtype f -maxdepth 1` > $infile1276 1274 cat `find /etc/modprobe.d -maxdepth 1 -name "*" -xtype f` > $infile 1275 else 1277 1276 infile="/etc/modules.conf" 1278 1279 1277 fi 1278 for module in $list_to_echo $EXTRA_MODS ; do 1280 1279 params=`sed -n "s/^options \\+$module \\+//p" $infile` 1281 1280 modpaths=`FindSpecificModuleInPath $searchpath $module` 1282 1281 for i in $modpaths ; do 1283 1282 echo "MyInsmod $i $params > /dev/null 2> /dev/null" \ 1284 1283 | tr '.' '#' \ 1285 1284 | sed s/#o#gz/#o/ \ … … 1287 1286 | sed s/#ko#gz/#ko/ \ 1288 1287 | sed s/#ko#gz/#ko/ \ 1289 1290 1291 1292 done 1293 1294 1295 1296 1288 | tr '#' '.' >> $outfile 1289 1290 echo -en "$i added to module list.\n" >> $LOGFILE 1291 done 1292 done 1293 echo -en "done\n" >> $outfile 1294 echo "echo \"Done.\"" >> $outfile 1295 chmod +x $outfile 1297 1296 # cp $outfile /tmp/out.txt 1298 1299 1300 1297 cd / 1298 # Remove temporary modprobe.conf file if we have created one 1299 if [ $tmpmodprobe_flag == "Y" ] ; then 1301 1300 rm -f $infile 1302 1301 fi 1303 1302 } 1304 1303 … … 1308 1307 1309 1308 MakeMountlist() { 1310 1309 local scratchdir mountlist all_partitions current_partition \ 1311 1310 partition_size partition_format outstring partition_number \ 1312 1311 partition_mountpt c_p lwm_info psz lvm_dev unofficial_outstring \ 1313 1312 absolute_partition old_partition_fmt 1314 1313 1315 1316 1317 1314 echo "Your raw fstab file looks like this:-" >> $LOGFILE 1315 cat $MY_FSTAB >> $LOGFILE 1316 echo "Your mountlist will look like this:-" 1318 1317 1319 1318 # scratchdir, mountlist(OUT) 1320 1321 1319 scratchdir=$TMP_ROOT 1320 mountlist=$1 1322 1321 1323 1322 # NB: partition = device 1324 1323 # NB: mountpt = where the device is mounted 1325 1324 1326 1327 1328 1329 1330 1331 1332 1333 1334 1325 [ -e "$MY_FSTAB" ] || Die "Cannot find your fstab file ($MY_FSTAB)" 1326 1327 rm -f $mountlist 1328 mkdir -p $mountlist 1329 rm -Rf $mountlist 1330 > $mountlist 1331 echo -en "\rHang on...\r" 1332 all_partitions="" 1333 1335 1334 # Workaround until fdisk2parted.pl is fixed 1336 1335 [ "$ARCH" != "ia64" ] && FDISK=`which fdisk` 1337 1336 # End workaround - Hugo, 06/20/2004 1338 1337 1339 1338 if [ -d "/proc/lvm" ] || [ -d "/dev/mapper" ]; then 1340 1339 echo -en "\rAnalyzing LVM...\r" 1341 1340 all_partitions=`$MINDI_HOME/analyze-my-lvm | fgrep ">>>" | cut -d' ' -f2-32` 1342 1343 1341 fi 1342 all_partitions="$all_partitions `ListAllPartitions 2> /dev/null`" 1344 1343 # echo "all partitions = $all_partitions" > /dev/stderr 1345 1346 1347 1348 1349 1350 1344 for i in $IMAGE_DEVS ; do 1345 mount | fgrep "$i " > /dev/null 2> /dev/null && Die "Sorry, $i is already mounted! CANNOT DO IMAGEDEV on it if it's mounted." 1346 done 1347 [ "$IMAGE_DEVS" != "" ] && all_partitions="`echo "$all_partitions $IMAGE_DEVS" | tr ' ' '\n' | sort | uniq | tr '\n ' ' '`" 1348 printf " %-15s %-15s %-15s %-15s\n" DEVICE MOUNTPOINT FORMAT "SIZE (MB)" 1349 for c_p in $all_partitions ; do 1351 1350 # echo "c_p = $c_p" > /dev/stderr 1352 1351 [ "`echo "/dev/floppy /dev/fd0h1440 /dev/fd0H1440 /dev/cdrom /dev/cdrom/cdrom /dev/cdrom/cdrom1 /dev/cdrom/cdrom2 /dev/cdrom0 /dev/cdrom1 /dev/cdrom2 /dev/cdrom3 /dev/cdrw" | fgrep "$c_p"`" != "" ] || [ "`echo "$c_p" | fgrep "/dev/scd"`" != "" ] || [ "`echo "$c_p" | fgrep "/dev/ram"`" != "" ] || [ "`echo "$c_p" | grep ":"`" != "" ] || [ "`echo "$c_p" | fgrep ":/"`" != "" ] && continue 1353 1352 [ "`echo "/dev/scd0 /dev/scd1 /dev/sr0 /dev/sr1 /dev/cdrom /dev/cdrom1" | fgrep "$c_p"`" ] && continue 1354 1353 [ "`echo "$c_p" | grep -x "/dev/cdroms.*"`" ] && continue 1355 1354 if [ -h "$c_p" ] && [ "`echo "$c_p" | fgrep "/dev/hd"`" = "" ] && [ "`echo "$c_p" | fgrep "/dev/sd"`" = "" ] && [ "`echo "$c_p" | fgrep "/dev/md"`" = "" ] ; then 1356 1357 1358 1359 else 1360 1355 current_partition=`ResolveSoftlink $c_p` 1356 [ "`echo "$current_partition" | fgrep "/dev/mapper"`" != "" ] && current_partition="$c_p" 1357 [ "`echo "/dev/scd0 /dev/scd1 /dev/sr0 /dev/sr1 /dev/cdrom /dev/cdrom1" | fgrep "$current_partition"`" ] && continue 1358 else 1359 current_partition="$c_p" 1361 1360 fi 1362 1361 [ "$c_p" = "none" ] && continue 1363 1362 absolute_partition=`ResolveSoftlink $c_p` 1364 1363 partition_mountpt=`cat $MY_FSTAB | tr -s '\t' ' ' | grep -w "$current_partition" | grep -vx " *#.*" | $AWK '{print $2}' | head -n1` 1365 1364 redhat_label="" 1366 1365 if [ "`echo "$current_partition" | fgrep -i "LABEL="`" != "" ] ; then 1367 1368 1369 1366 str_to_find_fmt_with=$current_partition 1367 redhat_label=`echo "$current_partition" | cut -d'=' -f2` 1368 actual_dev=`mount -l | fgrep " [$redhat_label]" | cut -d' ' -f1` 1370 1369 # partition_mountpt=$redhat_label 1371 1372 else 1373 1370 current_partition=$actual_dev 1371 else 1372 str_to_find_fmt_with=$current_partition 1374 1373 fi 1375 1374 partition_format=`$AWK '$1 == "'"$str_to_find_fmt_with"'" {print $3}' $MY_FSTAB` 1376 1375 if [ -d "/proc/lvm" ] && [ "`lvdisplay $current_partition 2> /dev/null`" ] ; then 1377 1376 partition_size="lvm" 1378 1377 elif [ -d "/dev/mapper" ] && [ "`lvm lvdisplay $current_partition 2> /dev/null`" ] ; then 1379 1380 else 1381 1382 1383 1384 1378 partition_size="lvm" 1379 else 1380 partition_size=`SizeOfPartition $current_partition` 1381 [ "`echo "$current_partition" | grep "[0-9]"`" = "" ] && continue 1382 [ "`echo "$current_partition" | grep -c "^/"`" -ne "1" ] && continue 1383 if [ "$partition_format" = "swap" ] || [ "$partition_mountpt" = "swap" ] ; then 1385 1384 partition_size=`fgrep -v "Priority" /proc/swaps | tr -s '\t' ' ' | fgrep "$current_partition" | $AWK '{print $3}'` 1386 1385 [ "$partition_mountpt" != "swap" ] && partition_mountpt="swap" 1387 1386 [ "$partition_format" != "swap" ] && partition_format="swap" 1388 1387 if [ "$partition_size" = "" ] ; then 1389 1388 totalsize=0 … … 1393 1392 items=$(($items+1)) 1394 1393 done 1395 1394 [ "$items" -gt "0" ] && partition_size=$(($totalsize/$items)) || partition_size=0 1396 1395 [ "$partition_size" -lt "125000" ] && partition_size=125000 1397 1396 echo "I'm guessing $c_p is $(($partition_size/1024))MB" >> $LOGFILE 1398 1397 fi 1399 1398 fi 1400 1399 fi 1401 1400 [ "$partition_mountpt" = "swap" ] && partition_format="swap" 1402 1401 [ "$partition_format" = "swap" ] && partition_mountpt="swap" 1403 1402 if [ "$partition_mountpt" = "" ] ; then 1404 1403 if [ "`pvdisplay $current_partition 2> /dev/null`" != "" ] || [ "`lvm pvdisplay $current_partition 2> /dev/null`" != "" ] ; then 1405 1404 if [ "`fgrep device /etc/raidtab 2> /dev/null | grep -w $current_partition`" ] ; then 1406 1405 partition_mountpt="raid" … … 1411 1410 partition_format="lvm" 1412 1411 fi 1413 1412 fi 1414 1413 fi 1415 1414 psz=$partition_size … … 1417 1416 [ "$psz" != "lvm" ] && psz=$(($psz/1024)) 1418 1417 if [ "`echo " $IMAGE_DEVS " | fgrep " $current_partition "`" != "" ] ; then 1419 1420 1418 partition_mountpt="image" 1419 old_partition_fmt=$partition_format 1421 1420 # partition_format="`$FDISK -l 2>> $LOGFILE | tr -s '\t' ' ' | grep -w "$absolute_partition" | $AWK 'x=$(NF-1}'`" 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 fi 1433 1434 1435 1436 1437 1438 1421 partition_format="`$FDISK -l 2>> $LOGFILE | tr '*' ' ' | tr '+' ' ' | tr -s ' ' '\t' | grep -w "$absolute_partition" | cut -f5`" 1422 echo "------- $FDISK -l log ------------" >> $LOGFILE 1423 cat $FDISKLOG >> $LOGFILE 1424 echo "------- $FDISK log end ------------" >> $LOGFILE 1425 partition_size=$(($partition_size+1)); # just in case 1426 if [ "$partition_format" = "Linux" ] ; then 1427 echo "Are you imaging a mounted swap partition? Silly..." >> $LOGFILE 1428 echo "Reverting format from $old_partition_fmt to $partition_format" >> $LOGFILE 1429 partition_format=$old_partition_fmt 1430 fi 1431 fi 1432 if [ "$EXCLUDE_DEVS" ] && [ "`echo " $EXCLUDE_DEVS " | fgrep " $current_partition "`" ] || [ "`echo " $EXCLUDE_DEVS " | grep " $current_partition "`" ] ; then 1433 echo "Excluding $current_partition from mountlist" >> $LOGFILE 1434 continue 1435 fi 1436 if [ ! "$partition_mountpt" ] ; then 1437 for qq in "" `find /dev/ida/c*d* ! -name '*p*'` ; do 1439 1438 partition_format=`$FDISK -l $qq 2>> $LOGFILE | grep -w "$c_p" | sed 's/12/|/' | tr -s '\t' ' ' | cut -d'|' -f2 | cut -d' ' -f2-9` 1440 1441 1442 1439 echo "------- $FDISK -l log ------------" >> $LOGFILE 1440 cat $FDISKLOG >> $LOGFILE 1441 echo "------- $FDISK log end ------------" >> $LOGFILE 1443 1442 [ "$partition_format" ] && break 1444 1445 1443 done 1444 if [ "$partition_format" = "Compaq diagnostics" ] ; then 1446 1445 partition_format="compaq" 1447 1446 elif [ ! "`fgrep device /etc/raidtab 2> /dev/null | grep -w $current_partition`" ] ; then 1448 1447 LogIt "Unable to find mountpoint of $current_partition - ignoring" 1449 1448 continue 1450 1449 fi 1451 1450 fi 1452 1451 partition_format="`echo "$partition_format" | cut -d',' -f1`"; # in case user has ext3,ext2 or something dumb like that … … 1454 1453 unofficial_outstring=`printf "\t%-15s %-15s %-15s %7s\n" $current_partition $partition_mountpt $partition_format $psz` 1455 1454 if [ "$current_partition" = "" ] ; then 1456 1455 echo "Unknown partition (outstring = $unofficial_outstring)" >> $LOGFILE 1457 1456 elif [ "$partition_mountpt" = "" ] && [ -f "/etc/raidtab" ] ; then 1458 1457 if [ "`cat /etc/raidtab 2> /dev/null | fgrep device | fgrep $current_partition`" ] ; then 1459 1458 partition_mountpt=raid 1460 1459 partition_format=raid 1461 1462 1463 1460 printf "\t%-15s %-15s %-15s %7s %-15s\n" $current_partition $partition_mountpt $partition_format $psz "$redhat_label" 1461 printf "%s %s %s %s %s\n" $current_partition $partition_mountpt $partition_format $partition_size "$redhat_label" >> $mountlist 1462 else 1464 1463 echo "Unknown mountpoint (outstring = $unofficial_outstring)" >> $LOGFILE 1465 1466 1467 1464 fi 1465 elif [ "$partition_format" = "" ] ; then 1466 echo "Unknown format (outstring = $unofficial_outstring)" >> $LOGFILE 1468 1467 elif [ "$partition_size" = "" ] ; then 1469 1468 echo "Unknown partition size (outstring = $unofficial_outstring)" >> $LOGFILE 1470 1469 elif [ "$partition_mountpt" = "/proc" ] || [ "$partition_mountpt" = "/dev/pts" ] ; then 1471 1472 else 1473 1474 1475 1476 1477 1478 1479 fi 1480 1470 continue 1471 else 1472 if [ "$partition_format" = "dos" ] || [ "$partition_format" = "msdos" ] ; then 1473 echo "Stupid bastard..." >> $LOGFILE 1474 partition_format="vfat" 1475 fi 1476 printf "\t%-15s %-15s %-15s %7s %-15s\n" $current_partition $partition_mountpt $partition_format $psz "$redhat_label" 1477 printf "%s %s %s %s %s\n" $current_partition $partition_mountpt $partition_format $partition_size "$redhat_label" >> $mountlist 1478 fi 1479 done 1481 1480 } 1482 1481 … … 1487 1486 1488 1487 MakeSureNumberIsInteger() { 1489 1490 1488 res=`echo "$1" | tr -s '\-[0-9]' ' '` 1489 if [ "$res" != " " ] && [ "$res" != "" ] ; then 1491 1490 echo "result = '$res'" 1492 1493 1491 Die "$1 should be an integer" 1492 fi 1494 1493 } 1495 1494 … … 1499 1498 1500 1499 MakeSyslinuxMessageFile() { 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1500 mkdir -p $1 1501 rmdir $1 1502 echo -en " " > $1 1503 if [ "`cat /etc/issue.net 2> /dev/null | fgrep -i "debian"`" ] ; then 1504 cat $MINDI_HOME/msg-txt | sed s/ZZZZZ/$MINDI_VERSION/ | sed s/YYYYY/"Mondo Rescue"/ | sed s/XXXXX/"a cousin of"/ | sed s%DDDDD%"Debian GNU\/`uname -s` `cat /etc/issue.net | cut -d ' ' -f 3` `hostname`"% | sed s/KKKKK/"Kernel `uname -r` on a `uname -m`"/ | sed s/TTTTT/"`LC_TIME=C date`"/ >> $1.tmp 1505 else 1506 cat $MINDI_HOME/msg-txt | sed s/ZZZZZ/$MINDI_VERSION/ | sed s/YYYYY/"Mondo Rescue"/ | sed s/XXXXX/"a cousin of"/ | sed s/DDDDD/"`cat /etc/issue.net | grep -i "linux" | head -n1 | tr -s ' ' ' '`"/ | sed s/KKKKK/"`cat /etc/issue.net | grep -i "kernel" | head -n1 | tr -s ' ' ' '`"/ | sed s/TTTTT/"`LC_TIME=C date`"/ | sed s/' '\\r' 'on' 'an' '\/' '`uname -r`' 'on' 'an' '`uname -m`/ >> $1.tmp 1507 fi 1508 cat $1.tmp | sed s/%r/"`uname -r`"/ | sed s/%t/"`hostname`"/ > $1 1509 rm -f $1.tmp 1510 if [ "$CDRECOVERY" != "yes" ] ; then 1511 if [ -e "$MONDO_TMP/start-nfs" ] ; then 1512 echo -en "Press <enter> to continue.\n" >> $1 1513 elif [ ! "$MONDO_TMP" ] ; then 1514 echo -en "FYI, this is _not_ a Mondo Rescue CD.\n" >> $1 1515 if [ -e "$MINDI_HOME/memtest.img" ] ; then 1516 echo -en "Type 'memtest' <Enter> to test your PC's memory intensively.\nJust press <Enter> to go to the main test menu.\n" >> $1 1517 fi 1518 else 1519 echo -en "$BOOT_MEDIA_MESSAGE" >> $1 1520 fi 1521 else 1522 echo -en " \ 1524 1523 To restore your disk to factory defaults, type 'RESTORE' <enter>.\n\ 1525 1524 CAUTION: THIS WILL ERASE YOUR WHOLE DISK !!!\n" >> $1 1526 1525 fi 1527 1526 } 1528 1527 … … 1531 1530 1532 1531 MoveHyperlinkSensibly() { 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1532 local filename minidir_root resides_on_diskno noof_disks old_diskno d old_pwd 1533 filename=$1 1534 minidir_root=$2 1535 resides_on_diskno=$3 1536 noof_disks=$4 1537 1538 [ -h "$minidir_root/$resides_on_diskno/$filename" ] || Die "$filename isn't a softlink (or doesn't exist): how can I move it sensibly?" 1539 1540 old_diskno=$resides_on_diskno 1541 d=1 1542 while [ "$d" -le "$noof_disks" ] ; do 1543 if [ "$d" -ne "$old_diskno" ] ; then 1544 old_pwd=`pwd` 1545 cd $minidir_root/$old_diskno 1546 cp --parents -Rdf $filename $minidir_root/$d/ || Die "Can't move $filename (sensibly) from $old_diskno to $d" 1547 rm -f $filename 1548 cd $old_pwd 1549 fi 1551 1550 # when the softlink is resolvable, our work here is done 1552 1553 1554 1555 1556 1551 [ -e "$minidir_root/$d/$filename" ] && return 0 1552 old_diskno=$d 1553 d=$(($d+1)) 1554 done 1555 return 1 1557 1556 } 1558 1557 … … 1560 1559 1561 1560 OfferToCopyImagesToDisks() { 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1561 local imagesdir i imagename dev count boot_dev data_dev 1562 imagesdir=$1 1563 boot_dev=$2 1564 data_dev=$3 1565 echo -en "Would you like to create boot+data floppy disks now (y/n) ?" 1566 read i 1567 [ "$i" != "y" ] && [ "$i" != "Y" ] && return 1568 mount | fgrep /dev/fd > /dev/null && Die "Please unmount your floppies first." 1569 echo "WARNING! THIS WILL ERASE YOUR FLOPPY DISKS." 1570 [ ! -e "$boot_dev" ] && Die "Cannot find $boot_dev - is your Linux distro broken?" 1571 [ ! -e "$data_dev" ] && Die "Cannot find $data_dev - is your Linux distro broken?" 1572 i=`find $imagesdir -type f | fgrep "/mindi-root.1" 2> /dev/null` 1573 j=`find $imagesdir -type f | fgrep "/mindi-boot" | fgrep -v 2880` 1575 1574 # echo "i=$i" 1576 1575 # echo "j=$j" 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1576 if [ "$i" ] ; then 1577 CopyImageToDisk $j $data_dev "boot disk" 1578 CopyImageToDisk $i $data_dev "root disk" 1579 else 1580 CopyImageToDisk $j $boot_dev "boot/root disk" 1581 fi 1582 count=1 1583 for i in `find $imagesdir | fgrep mindi-data` ; do 1584 CopyImageToDisk $i $data_dev "data disk #$count" 1585 count=$(($count+1)) 1586 done 1588 1587 } 1589 1588 … … 1591 1590 1592 1591 OfferToMakeBootableISO() { 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 cp -f $1/*.img $1/*.gz $TMP_ROOT/iso/images || LogIt "[line 857] cannot copy $i to $TMP_ROOT/iso/images\n"1606 1607 1608 1609 1610 1611 1592 local i old_pwd 1593 if [ "$PROMPT_MAKE_CD_IMAGE" = "yes" ] && [ ! "`DidMondoCallMe`" ] ; then 1594 echo -en "Shall I make a bootable CD image? (y/n) " 1595 read i 1596 [ "$i" != "y" ] && [ "$i" != "Y" ] && return 0 1597 fi 1598 if [ ! "$MONDO_TMP" ] ; then 1599 LogIt "NB: Mindi's bootable CD always uses isolinux." 1600 LogIt "For a bootable CD w/LILO, please use Mondo." 1601 fi 1602 rm -Rf $TMP_ROOT/iso 1603 mkdir -p $TMP_ROOT/iso/{images,archives,isolinux} 1604 cp -f $1/*.img $1/*.gz $TMP_ROOT/iso/images || LogIt "OfferToMakeBootableISO: Cannot copy $i to $TMP_ROOT/iso/images\n" 1605 old_pwd=`pwd` 1606 cd $TMP_ROOT/iso 1607 mkdir -p $MONDO_ROOT/iso/isolinux 1608 echo "mindi_home = $MINDI_HOME" >> $LOGFILE 1609 cp $MINDI_HOME/mem{test,disk}* $MONDO_ROOT 2>> $LOGFILE 1610 for i in memdisk memtest.bin memtest.img ; do 1612 1611 j=$MINDI_HOME/$i 1613 1612 k=$TMP_ROOT/iso/isolinux 1614 1613 if [ -e "$j" ] ; then 1615 1616 1617 1618 fi 1619 1620 1621 1622 1623 1624 1625 1626 1627 1614 LogIt "Copying $j to $k" 1615 cp -f $j $k || Die "Failed to copy $j to $k" 1616 cp -f $j $TMP_ROOT || Die "Failed to copy $j to $k" 1617 fi 1618 done 1619 MakeSyslinuxMessageFile $TMP_ROOT/iso/isolinux/message.txt 1620 cp $kernelpath $TMP_ROOT/iso/isolinux/vmlinuz || Die "Cannot copy vmlinuz ($kernelpath) to mondo root ($MONDO_ROOT/isolinux/vmlinuz). Did you run out of disk space?" 1621 cp $TMP_ROOT/mindi.rdz $TMP_ROOT/iso/isolinux/initrd.img 1622 cp $TMP_ROOT/mindi.rdz $imagesdir/initrd.img 1623 [ -e "$iso_cfg_file" ] || Die "FIXME - unable to find $iso_cfg_file - this should never occur" 1624 cd $TMP_ROOT/iso/isolinux 1625 cat $iso_cfg_file | HackSyslinuxFile $ramdisk_size $TMP_ROOT/iso > isolinux.cfg || Die "Cannot copy isolinux.cfg from mindi_home to tmp_root - did you run out of disk space?" 1626 if [ -e "$MONDO_TMP/start-nfs" ] ; then 1628 1627 mv isolinux.cfg isolinux.cfg.old 1629 1628 cat isolinux.cfg.old | sed s/interactive/iso/ > isolinux.cfg 1630 1631 1632 cp $ISOLINUX isolinux.bin || Die "Cannot copy isolinux.bin from /usr/libto tmp_root - did you run out of disk space?"1629 fi 1630 if [ "$ARCH" != "ia64" ] ; then 1631 cp $ISOLINUX isolinux.bin || Die "Cannot copy isolinux.bin ($ISOLINUX) to tmp_root - did you run out of disk space?" 1633 1632 cp $ISOLINUX ../ 1634 1635 1636 1637 1638 1639 1640 1633 fi 1634 cd $TMP_ROOT/iso 1635 if [ "$ARCH" != "ia64" ] ; then 1636 cp -f $TMP_ROOT/iso/isolinux/{isolinux.cfg,initrd.img,vmlinuz,isolinux.bin,message.txt} $MONDO_ROOT || Die "Cannot copy core files to ramdisk for boot disk. Did you run out of disk space?" 1637 fi 1638 [ "$MONDO_HOME" ] && cp -f $MONDO_HOME/autorun . 1639 if [ -d "/home/MondoCD" ] ; then 1641 1640 cp -pRdu /home/MondoCD/* . 1642 1643 1644 1645 1646 1647 1648 1641 fi 1642 if [ "$ARCH" != "ia64" ] ; then 1643 mkisofs -U -J -r -o $imagesdir/mindi.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table . > /dev/null 2> /tmp/$$.mk 1644 else 1645 mkisofs -J -r -o $imagesdir/mindi.iso -b images/mindi-bootroot.$IA64_BOOT_SIZE.img -c isolinux/boot.cat -no-emul-boot . > /dev/null 2> /tmp/$$.mk 1646 fi 1647 if [ "$?" -ne "0" ] ; then 1649 1648 echo "----------- mkisofs's errors --------------" >> $LOGFILE 1650 1649 cat /tmp/$$.mk >> $LOGFILE … … 1652 1651 cat /tmp/$$.mk 1653 1652 LogIt "Failed to create ISO image.\n" 1654 1653 else 1655 1654 echo "Created bootable ISO image at $imagesdir/mindi.iso" >> $LOGFILE 1656 1657 1658 1655 fi 1656 rm -f /tmp/$$.mk 1657 cd $old_pwd 1659 1658 } 1660 1659 … … 1662 1661 1663 1662 PluralOrNot() { 1664 1663 [ "$1" -gt "1" ] && echo -en "s" 1665 1664 } 1666 1665 … … 1669 1668 1670 1669 MakeMessageFile() { 1671 1672 1673 1674 1675 1676 1677 1678 1670 local disksize 1671 disksize=$1 1672 if [ "`cat /etc/issue.net 2> /dev/null | fgrep -i "debian"`" ] ; then 1673 cat $MINDI_HOME/msg-txt | sed s/ZZZZZ/$MINDI_VERSION/ | sed s/YYYYY/"Mondo Rescue"/ | sed s/XXXXX/"a cousin of"/ | sed s%DDDDD%"Debian GNU\/`uname -s` `cat /etc/issue.net | cut -d ' ' -f 3` `hostname`"% | sed s/KKKKK/"Kernel `uname -r` on a `uname -m`"/ | sed s/TTTTT/"`LC_TIME=C date`"/ 1674 else 1675 cat $MINDI_HOME/msg-txt | sed s/ZZZZZ/$MINDI_VERSION/ | sed s/YYYYY/"Mondo Rescue"/ | sed s/XXXXX/"a cousin of"/ | sed s/DDDDD/"`cat /etc/issue.net | grep -i "linux" | head -n1 | tr -s ' ' ' '`"/ | sed s/KKKKK/"`cat /etc/issue.net | grep -i "kernel" | head -n1 | tr -s ' ' ' '`"/ | sed s/TTTTT/"`LC_TIME=C date`"/ | sed s/' 'r' 'on' 'an' 'm/' '`uname -r`' 'on' 'an' '`uname -m`/ 1676 fi 1677 if [ "$disksize" -gt "2880" ] ; then 1679 1678 if [ "`DidMondoCallMe`" ] ; then 1680 1681 1682 1679 if [ "$CDRECOVERY" != "yes" ] ; then 1680 if [ -e "$MONDO_TMP/start-nfs" ] ; then 1681 echo -en "Press <enter> to continue.\n" 1683 1682 elif [ ! "$MONDO_TMP" ] ; then 1684 1683 echo -en "FYI, this is _not_ a Mondo Rescue CD.\n" 1685 1686 1687 1688 1689 fi 1690 1691 1692 1684 else 1685 echo -en "$BOOT_MEDIA_MESSAGE" 1686 fi 1687 fi 1688 fi 1689 fi 1690 if [ "$CDRECOVERY" = "yes" ] ; then 1691 echo -en "\ 1693 1692 To restore your disk to factory defaults, type 'RESTORE' <enter>.\n\ 1694 1693 CAUTION: THIS WILL ERASE YOUR WHOLE DISK !!!\n" 1695 1696 1694 fi 1695 echo -en "\n\n\n" 1697 1696 } 1698 1697 … … 1701 1700 1702 1701 write_full_floppy_of_kernel() { 1703 local mtpt image old_pwd res disksize 1704 1705 res=0 1706 old_pwd=`pwd` 1707 KERN_DISK_MADE=1 1708 disksize=$3 1709 image=/tmp/$RANDOM.$RANDOM.img 1710 mtpt=/tmp/$RANDOM.$RANDOM.mtpt 1711 dd if=/dev/zero of=$image bs=1k count=$disksize 1712 mke2fs -N 26 -F $image > /dev/null 1713 mkdir -p $mtpt 1714 mount -o loop $image $mtpt 1715 cd $mtpt 1716 mkdir -p {dev,tmp,boot} 1717 cp -f $1 vmlinuz 1718 if [ "$?" -ne "0" ] ; then 1719 LogIt "Failed to copy $1 to ramdisk" 1720 return 1 1721 fi 1722 1723 rdev vmlinuz 2,0 1724 rdev -R vmlinuz 0 1725 rdev -r vmlinuz 49152 1726 1727 tar -zxf $MINDI_HOME/dev.tgz || LogIt "Cannot untar dev.tgz\n" 1728 losetup /dev/loop0 > /dev/null 2> /dev/null 1729 [ "$?" -eq "0" ] || losetup /dev/loop0 -d || Die "Please free up /dev/l\oop0 by typing 'losetup /dev/loop0 -d'.\nReboot if necessary.\n" 1730 CopyBootBFile $mtpt/boot.b 1702 local mtpt image old_pwd res disksize 1703 1704 res=0 1705 old_pwd=`pwd` 1706 KERN_DISK_MADE=1 1707 disksize=$3 1708 rand1=$RANDOM 1709 rand2=$RANDOM 1710 image=/tmp/$rand1.$rand2.img 1711 mtpt=/tmp/$rand1.$rand2.mtpt 1712 dd if=/dev/zero of=$image bs=1k count=$disksize 1713 mke2fs -N 26 -F $image > /dev/null 1714 mkdir -p $mtpt 1715 mount -o loop $image $mtpt 1716 cd $mtpt 1717 mkdir -p {dev,tmp,boot} 1718 cp -f $1 vmlinuz 1719 if [ "$?" -ne "0" ] ; then 1720 LogIt "Failed to copy $1 to ramdisk" 1721 cd $old_pwd 1722 umount $mtpt 1723 rmdir $mtpt 1724 rm $image 1725 return 1 1726 fi 1727 1728 rdev vmlinuz 2,0 1729 rdev -R vmlinuz 0 1730 rdev -r vmlinuz 49152 1731 1732 tar -zxf $MINDI_HOME/dev.tgz || LogIt "Cannot untar dev.tgz\n" 1733 losetup /dev/loop0 > /dev/null 2> /dev/null 1734 [ "$?" -eq "0" ] || losetup /dev/loop0 -d || Die "Please free up /dev/loop0 by typing 'losetup /dev/loop0 -d'.\nReboot if necessary.\n" 1735 CopyBootBFile $mtpt/boot.b 1731 1736 1732 1737 # echo "root=/dev/loop0" > bdlilo.conf 1733 1738 MakeLiloConfFile $disksize >> bdlilo.conf 1734 1739 1735 1740 # cat bdlilo.conf > /tmp/bdlilo.conf … … 1737 1742 # cat /home/mondostuff/bdlc > bdlilo.conf 1738 1743 1739 1740 1741 1742 1744 chmod 644 bdlilo.conf 1745 MakeMessageFile $disksize > message 1746 lilo -v -C bdlilo.conf -r $mtpt 1747 res=$? 1743 1748 1744 1749 #echo "lilo -v -C bdlilo.conf -r $mtpt" 1745 1750 #echo -en "Press enter"; read line 1746 1751 1747 1748 1749 1750 1751 1752 1752 cd $old_pwd 1753 umount $mtpt 1754 mv -f $image $2 1755 rmdir $mtpt 1756 1757 return $res 1753 1758 1754 1759 # --- the kernel-only method NO LONGER WORKS. Not since Apr 2002. … … 1776 1781 1777 1782 MakeLiloConfFile() { 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1783 local disksize options i ooo 1784 disksize=$1 1785 options="" 1786 if [ "$ARCH" != "ia64" ] ; then 1787 echo -en "boot=/dev/loop0\ndisk=/dev/loop0\n" 1788 fi 1789 if [ "$disksize" -eq "2880" ] ; then 1790 echo -en "bios=0x00\nsectors=36\nheads=2\ncylinders=80\n" 1791 elif [ "$disksize" -eq "1722" ] ; then 1792 echo -en "bios=0x00\nsectors=21\nheads=2\ncylinders=82\n" 1793 elif [ "$disksize" -gt "2880" ] ; then 1794 /bin/true 1795 else 1796 echo -en "bios=0x00\nsectors=18\nheads=2\ncylinders=80\n" 1797 fi 1798 if [ "$ARCH" != "ia64" ] ; then 1799 echo -en "install=/boot.b\nmap=/boot.map\n" 1800 fi 1801 if [ "$CDRECOVERY" = "yes" ] ; then 1802 echo -en "default=RESTORE\n" 1803 elif [ "$disksize" -gt "2880" ] && [ "`DidMondoCallMe`" ] ; then 1799 1804 if [ -e "$MONDO_TMP/start-nfs" ] ; then 1800 1801 else 1802 1803 fi 1804 1805 echo -en "default=iso\n" 1806 else 1807 echo -en "default=interactive\n" 1808 fi 1809 else 1805 1810 echo -en "default=expert\n" 1806 1807 1808 1809 1810 1811 1811 fi 1812 echo -en "prompt\n" 1813 if [ "$ARCH" != "ia64" ] ; then 1814 echo -en "vga=normal\nbackup=/dev/null\nmessage=/message\n" 1815 fi 1816 if [ "$CDRECOVERY" != "yes" ] ; then 1812 1817 echo -en "timeout=300\n" 1813 1814 1815 1818 fi 1819 echo -en "\n" 1820 if [ "$CDRECOVERY" = "yes" ] ; then 1816 1821 options="RESTORE expert" 1817 1818 1819 1820 1821 1822 1822 elif [ "$disksize" -gt "2880" ] ; then 1823 if [ "`DidMondoCallMe`" ] ; then 1824 if [ -e "$MONDO_TMP/start-nfs" ] ; then 1825 options="iso" 1826 else 1827 options="interactive expert compare iso nuke isonuke" 1823 1828 # hda hdb hdc hdd" 1824 1825 1826 1827 fi 1828 1829 fi 1830 else 1831 options="expert" 1832 fi 1833 else 1829 1834 options="expert" 1830 1831 1835 fi 1836 for i in $options ; do 1832 1837 ooo=$i 1833 1838 [ "$ooo" = "RESTORE" ] && ooo="nuke" 1834 1839 if [ "$ARCH" = "ia64" ] ; then 1835 1840 rootpart="root=/dev/ram0\n\t" 1836 1841 else … … 1842 1847 outstr=$outstr"\"\n" 1843 1848 if [ "$disksize" = "1440" ] ; then 1844 1845 else 1846 1847 fi 1848 1849 echo -en "$outstr" | sed s/initrd=.*// | grep -v root= 1850 else 1851 echo -en "$outstr" 1852 fi 1853 done 1849 1854 } 1850 1855 … … 1862 1867 1863 1868 PrepareBootDiskImage_LILO() { 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1869 local disksize imagesdir dev imagefile mountpoint fname i kernelpath ramdisksize cfg_file testpath options retval outstr old_pwd ooo max_kernel_size liloconf 1870 imagesdir=$1 1871 disksize=$2 1872 kernelpath=$3 1873 ramdisksize=$4 1874 1875 retval=0 1876 [ ! -e "$kernelpath" ] && Die "PBDI - cannot find $kernelpath kernel" 1877 echo -en "Making "$disksize"KB boot disk..." 1878 TurnTgzIntoRdz $MINDI_HOME/rootfs $TMP_ROOT/mindi.rdz $ramdisksize $disksize `du -sk $kernelpath | cut -f1` || Die "Could not turn rootfs into mindi.rdz; are you SURE your kernel supports loopfs?" 1879 if [ "$ARCH" != "ia64" ] ; then 1880 [ "$disksize" != "1722" ] && [ "$disksize" != "2880" ] && [ "$disksize" != "5760" ] && Die "PDBI - disksize is $disksize - bad size" 1881 fi 1882 echo -en "..." 1883 imagefile=$imagesdir/mindi-bootroot.$disksize.img 1884 mountpoint=$TMP_ROOT/mountpoint.$$ 1885 mkdir -p $mountpoint 1886 dd if=/dev/zero of=$imagefile bs=1k count=$disksize &> /dev/null || Die "Cannot dd blank file" 1887 if [ "$ARCH" = "ia64" ] ; then 1888 mkdosfs $imagefile > /tmp/mke2fs.$$ 2>> /tmp/mke2fs.$$ 1884 1889 t=vfat 1885 1886 1890 else 1891 mke2fs -N 26 -m 0 -F $imagefile > /tmp/mke2fs.$$ 2>> /tmp/mke2fs.$$ 1887 1892 t=ext2 1888 1889 1890 1891 1893 fi 1894 [ "$?" -ne "0" ] && cat /tmp/mke2fs.$$ 1895 rm -f /tmp/mke2fs.$$ 1896 mount -t $t -o loop $imagefile $mountpoint || LogIt "Cannot mount (PBDI)\n\n" 1892 1897 # copy Mindi's skeleton fs & lilo/syslinux/whatever stuff into it 1893 1894 1895 1896 1898 mkdir -p $mountpoint/etc 1899 if [ "$ARCH" != "ia64" ] ; then 1900 liloconf=$mountpoint/etc/lilo.conf 1901 else 1897 1902 liloconf=$mountpoint/elilo.conf 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1903 fi 1904 old_pwd=`pwd` 1905 cd $mountpoint 1906 if [ "$ARCH" != "ia64" ] ; then 1907 tar -zxf $MINDI_HOME/dev.tgz || LogIt "Cannot untar dev.tgz\n" 1908 fi 1909 cd $old_pwd 1910 losetup /dev/loop0 > /dev/null 2> /dev/null 1911 [ "$?" -eq "0" ] || losetup /dev/loop0 -d || Die "Please free up /dev/loop0 by typing 'losetup /dev/loop0 -d'.\nReboot if necessary.\n" 1912 CopyBootBFile $mountpoint/boot.b 1913 1914 MakeLiloConfFile $disksize > $liloconf 1915 1916 echo "Copying $TMP_ROOT/mindi.rdz to $mountpoint..." >> $LOGFILE 1917 cp -f $TMP_ROOT/mindi.rdz $mountpoint 2>> $LOGFILE 1918 if [ "$?" -ne "0" ] ; then 1914 1919 LogIt "Failed to copy $TMP_ROOT/mindi.rdz to $mountpoint\n" 1915 1920 cat $TMP_ROOT/mtpt.$$ >> $LOGFILE … … 1917 1922 rm -f $TMP_ROOT/mtpt.$$ 1918 1923 LogIt "Cannot incorporate mindi.rdz in bootdisk (kernel / modules too big?)" 1919 1920 1921 1922 1923 1924 1925 1926 1927 1924 retval=$(($retval+1)) 1925 fi 1926 MakeMessageFile $disksize > $mountpoint/message 1927 1928 mkdir -p $mountpoint/tmp 1929 cp -f $TMP_ROOT/mondo-restore.cfg $mountpoint/tmp &> /dev/null 1930 if [ -e "$MINDI_HOME/memtest.img" ] ; then 1931 echo -en "image=/memtest.bin\nlabel=memtest\nn" >> $liloconf 1932 echo -en "image=/memdisk\nlabel=memtest\nappend=\"initrd=memtest.img\"\n" >> $liloconf 1928 1933 # echo "Yep, this is a multi-function CD" > $mountpoint/MULTIFUNC 1929 1930 1934 fi 1935 if [ -d "/home/MondoCD" ] ; then 1931 1936 cp -pRdu /home/MondoCD/* . || Die "Cannot do kung pow" 1932 1937 fi 1933 1938 1934 1939 # copy the kernel across 1935 1936 1937 1938 1939 1940 rm -Rf $mountpoint/lost+found 1941 dd if=/dev/zero of=$mountpoint/zero bs=1k count=16 &> /dev/null 1942 free_space=`df -k $mountpoint | tail -n1 | tr -s ' ' '\t' | cut -f4` 1943 cp -f $kernelpath $mountpoint/vmlinuz > /dev/null 2> /dev/null 1944 if [ "$?" -ne "0" ] || [ "$FORCE_DUAL_FLOPPIES" = "yes" ] ; then 1940 1945 echo "Files at mountpoint ($mountpoint) :-" >> $LOGFILE 1941 1946 du -sk $mountpoint/* >> $LOGFILE … … 1943 1948 echo -en "Kernel size = `du -sk $kernelpath | cut -f1` K\nRamdisk free = $free_space K\n\ 1944 1949 Sorry, your kernel is too big for a boot/root floppy.\nI'll try the new boot/root two-disk thingy.\n" >> $LOGFILE 1945 1950 rm -f $mountpoint/vmlinuz 1946 1951 cd $old_pwd 1947 1948 1952 umount $mountpoint || Die "Cannot unmount mountpoint ($mountpoint)" 1953 rmdir $mountpoint || LogIt "Cannot rmdir (PBDI)\n" 1949 1954 # losetup /dev/loop0 -d 1950 1955 res=0 1951 1956 write_full_floppy_of_kernel $kernelpath $imagesdir/mindi-boot.1440.img 1440 1952 1957 res=$(($res+$?)) 1953 1958 cp -f $TMP_ROOT/mindi.rdz $imagesdir/mindi-root.1440.img 1954 1959 res=$(($res+$?)) 1955 1960 rm -f $imagefile … … 1957 1962 rm -f $imagesdir/mindi-*.1440.img 1958 1963 return $res 1959 1960 1961 1962 1963 1964 fi 1965 free_space=`df -k $mountpoint | tail -n1 | tr -s ' ' '\t' | cut -f4` 1966 max_kernel_size=$(($free_space+`du -sk $kernelpath | cut -f1`)) 1967 echo "Free space left on floppy = $free_space KB" >> $LOGFILE 1968 echo "Max kernel size on $disksize KB floppy (est'd) = $max_kernel_size K" >> $LOGFILE 1964 1969 # make it bootable 1965 1966 1967 1968 1969 1970 1971 1972 1973 1970 rm -f $mountpoint/zero 1971 [ -e "$MINDI_HOME/memdisk" ] && cp -f $MINDI_HOME/memdisk $mountpoint 1972 if [ "$disksize" -gt "2880" ] && [ ! "$KERN_DISK_MADE" ] ; then 1973 if [ "$ARCH" != "ia64" ] ; then 1974 $LILO_EXE $LILO_OPTIONS -r $mountpoint >> $LOGFILE 2>> $LOGFILE 1975 else 1976 /bin/true 1977 fi 1978 elif [ ! "$KERN_DISK_MADE" ] ; then 1974 1979 # 12/28/2001 - if 1.72MB floppy then don't use LILO's optimizations at all 1975 1980 $LILO_EXE -r $mountpoint >> $LOGFILE 2>> $LOGFILE 1976 1981 else 1977 1982 echo "Not running LILO. It's not that kind of disk." >> $LOGFILE 1978 1979 1983 fi 1984 if [ $? -ne "0" ] ; then 1980 1985 if [ "`cat $LOGFILE | fgrep "/tmp/dev.0"`" ] ; then 1981 1982 1983 1986 LogIt "The '/tmp/dev.0' error is NOT Mindi's fault. It is LILO's.\n" 1987 LogIt "Please reboot your PC as a workaround.\n" 1988 Die "LILO sneezed and Mindi caught a cold. Please read the README / FAQ.\n" 1984 1989 fi 1985 1990 echo "$LILO_EXE -r $mountpoint ...failed." … … 1987 1992 LogIt "Cannot run lilo on $mountpoint\nPlease upgrade/downgrade your version of LILO. It has a bug.\n" 1988 1993 retval=$(($retval+1)) 1989 1990 1991 1992 1993 1994 1995 1996 1997 1994 fi 1995 cp -f $liloconf /tmp/lilo.conf 1996 if [ "$ARCH" = "ia64" ] ; then 1997 cp `dirname $kernelpath`/*.efi $mountpoint 1998 fi 1999 umount $mountpoint || Die "Cannot unmount mountpoint ($mountpoint)" 2000 echo -en "..." 2001 rmdir $mountpoint || LogIt "Cannot rmdir (PBDI)\n" 2002 if [ "$retval" -eq "0" ] ; then 1998 2003 echo -en "...$DONE\r" 1999 2004 if [ "$KERN_DISK_MADE" ] && [ "$disksize" != "2880" ] ; then 2000 2001 else 2002 2003 fi 2004 2005 LogIt "... 1440KB boot+root disks were created OK\r" 2006 else 2007 LogIt "... "$disksize"KB boot disk was created OK\r" 2008 fi 2009 else 2005 2010 echo -en "...failed\r" 2006 2011 LogIt $disksize"KB boot disk was NOT created\r" 2007 2012 rm -f $imagefile 2008 2009 2013 fi 2014 [ "$retval" -ne "0" ] && LogIt "PrepareBootDiskImage() is returning nonzero\n" 2010 2015 #0421#$imagesdir/mindi-boot.1440.img 2011 2016 return $retval 2012 2017 } 2013 2018 … … 2016 2021 2017 2022 PrepareBootDiskImage_SYSLINUX() { 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2023 local disksize imagesdir dev imagefile mountpoint fname i kernelpath ramdisksize cfg_file testpath options retval outstr old_pwd ooo max_kernel_size bootimage 2024 imagesdir=$1 2025 disksize=$2 2026 kernelpath=$3 2027 ramdisksize=$4 2028 do_boot_root_thingy="" 2029 local retval old_pwd 2030 retval=0 2031 [ ! -e "$kernelpath" ] && Die "PBDI - cannot find $kernelpath kernel" 2032 echo -en "Making "$disksize"KB boot disk..." 2033 TurnTgzIntoRdz $MINDI_HOME/rootfs $TMP_ROOT/mindi.rdz $ramdisksize $disksize `du -sk $kernelpath | cut -f1` || Die "Could not turn rootfs into mindi.rdz; are you SURE your kernel supports loopfs?" 2034 [ "$disksize" != "1722" ] && [ "$disksize" != "2880" ] && [ "$disksize" != "5760" ] && Die "PDBI - disksize is $disksize - bad size" 2035 echo -en "..." 2036 imagefile=$imagesdir/mindi-bootroot.$disksize.img 2037 mountpoint=$TMP_ROOT/mountpoint.$$ 2038 mkdir -p $mountpoint 2034 2039 # If I format a 1722KB data file & run syslinux on it, the resultant image 2035 2040 # won't boot. So, I have formatted a floppy, called syslinux on/to it, and … … 2038 2043 # image _is_ bootable. I don't know why syslinux and/or mkfs.vfat won't 2039 2044 # play nicely and I don't care. :) I have worked around the problem. -Hugo, 06/27/2002 2040 2041 2042 2043 2044 2045 2046 2047 2045 if [ "$disksize" = "1722" ] ; then 2046 gzip -dc $MINDI_HOME/sys-disk.raw.gz > $imagefile || Die "Cannot dd blank file" 2047 else 2048 dd if=/dev/zero of=$imagefile bs=1k count=$disksize &> /dev/null || Die "Cannot dd blank file" 2049 mkfs.vfat $imagefile 2050 syslinux $imagefile 2051 fi 2052 mount -t vfat -o loop $imagefile $mountpoint || LogIt "Cannot mount (PBDI)\n\n" 2048 2053 # copy Mindi's skeleton fs & lilo/syslinux/whatever stuff into it 2049 2050 2051 2052 2054 old_pwd=`pwd` 2055 MakeSyslinuxMessageFile $mountpoint/message.txt 2056 cd $mountpoint 2057 [ -e "$sys_cfg_file" ] || Die "Obi Wan, word up?" 2053 2058 # tar -zxf $MINDI_HOME/dev.tgz || LogIt "Cannot untar dev.tgz\n" <--- present for LILO; is it nec. for SYSLINUX too? 2054 2055 2059 cat $sys_cfg_file | HackSyslinuxFile $ramdisk_size $mountpoint > syslinux.cfg || Die "Cannot copy syslinux.cfg from mindi_home to tmp_root" 2060 if [ -e "$MONDO_TMP/start-nfs" ] ; then 2056 2061 mv syslinux.cfg syslinux.cfg.orig 2057 2062 cat syslinux.cfg.orig | sed s/interactive/iso/ > syslinux.cfg 2058 2059 2060 2061 2062 2063 fi 2064 cd $old_pwd 2065 echo "Copying $TMP_ROOT/mindi.rdz to $mountpoint/initrd.img..." >> $LOGFILE 2066 cp -f $TMP_ROOT/mindi.rdz $mountpoint/initrd.img 2>> $LOGFILE 2067 if [ "$?" -ne "0" ] ; then 2063 2068 LogIt "Failed to copy $TMP_ROOT/mindi.rdz to $mountpoint\n" 2064 2069 cat $TMP_ROOT/mtpt.$$ >> $LOGFILE … … 2066 2071 rm -f $TMP_ROOT/mtpt.$$ 2067 2072 LogIt "Cannot incorporate mindi.rdz in bootdisk (kernel / modules too big?)" 2068 2069 2070 2071 2072 2073 retval=$(($retval+1)) 2074 fi 2075 2076 mkdir -p $mountpoint/tmp 2077 cp -f $TMP_ROOT/mondo-restore.cfg $mountpoint/tmp &> /dev/null 2073 2078 2074 2079 # copy the kernel across 2075 2076 2077 2078 2079 2080 rm -Rf $mountpoint/lost+found 2081 dd if=/dev/zero of=$mountpoint/zero bs=1k count=16 &> /dev/null 2082 free_space=`df -k $mountpoint | tail -n1 | tr -s ' ' '\t' | cut -f4` 2083 cp -f $kernelpath $mountpoint/vmlinuz &> /dev/null 2084 if [ "$?" -ne "0" ] || [ "$FORCE_DUAL_FLOPPIES" = "yes" ] ; then 2080 2085 echo "Files at mountpoint ($mountpoint) :-" >> $LOGFILE 2081 2086 du -sk $mountpoint/* >> $LOGFILE … … 2083 2088 echo -en "Kernel size = `du -sk $kernelpath | cut -f1` K\nRamdisk free = $free_space K\n\ 2084 2089 Sorry, your kernel is too big for a boot/root floppy.\nI'll try the new boot/root two-disk thingy.\n" >> $LOGFILE 2085 2090 rm -f $mountpoint/vmlinuz 2086 2091 cd $old_pwd 2087 2088 2092 umount $mountpoint || Die "Cannot unmount mountpoint ($mountpoint)" 2093 rmdir $mountpoint || LogIt "Cannot rmdir (PBDI)\n" 2089 2094 # losetup /dev/loop0 -d 2090 2095 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2096 res=0 2097 write_full_floppy_of_kernel $kernelpath $imagesdir/mindi-boot.1440.img 1440 2098 res=$(($res+$?)) 2099 cp -f $TMP_ROOT/mindi.rdz $imagesdir/mindi-root.1440.img 2100 res=$(($res+$?)) 2101 rm -f $imagefile 2102 [ "$res" -ne "0" ] && LogIt "Warning - failed to create 1.44MB boot/root floppies" 2103 return $res 2104 fi 2105 free_space=`df -k $mountpoint | tail -n1 | tr -s ' ' '\t' | cut -f4` 2106 max_kernel_size=$(($free_space+`du -sk $kernelpath | cut -f1`)) 2107 echo "Free space left on floppy = $free_space KB" >> $LOGFILE 2108 echo "Max kernel size on $disksize KB floppy (est'd) = $max_kernel_size K" >> $LOGFILE 2104 2109 # make it bootable 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2110 rm -f $mountpoint/zero 2111 mkdir -p $mountpoint/etc 2112 [ -e "$MINDI_HOME/memdisk" ] && cp -f $MINDI_HOME/memdisk $mountpoint 2113 umount $mountpoint || Die "Cannot unmount mountpoint ($mountpoint)" 2114 echo -en "..." 2115 rmdir $mountpoint || LogIt "Cannot rmdir (PBDI)\n" 2116 2117 if [ "$retval" -eq "0" ] ; then 2118 echo -en "...$DONE\r" 2119 if [ "$KERN_DISK_MADE" ] ; then 2120 rm -f $imagefile 2121 LogIt "... 1440KB boot+root disks were created OK\r" 2122 else 2123 LogIt "... "$disksize"KB boot disk was created OK\r" 2124 fi 2125 else 2121 2126 echo -en "...failed\r" 2122 2127 LogIt $disksize"KB boot disk was NOT created\r" 2123 2128 rm -f $imagefile 2124 2125 2126 2129 fi 2130 [ "$retval" -ne "0" ] && LogIt "PrepareBootDiskImage() is returning nonzero\n" 2131 return $retval 2127 2132 } 2128 2133 … … 2131 2136 2132 2137 PrepareDataDiskImages() { 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2138 local needlist bigdir minidir_root tardir diskdir imagesdir res i j k old_pwd lines 2139 2140 imagesdir=$1 2141 rm -f $imagesdir/mindi-*.img $imagesdir/[0-9]*.tar.gz $imagesdir/mindi.iso 2142 needlist=$TMP_ROOT/what-we-need.txt 2143 bigdir=$TMP_ROOT/bigdir 2144 minidir_root=$TMP_ROOT/minidir 2145 mkdir -p $minidir_root 2146 mkdir -p $bigdir/usr/bin 2147 tardir=$TMP_ROOT/tardir 2148 2149 lines=`cat $MINDI_CONF/deplist.txt | grep -vx " *#.*" | grep -vx "" |wc -l` 2150 cat $MINDI_CONF/deplist.txt | GenerateGiantDependencyList $needlist $lines 2151 res=$? 2152 if [ "$YOUR_KERNEL_SUCKS" ]; then 2148 2153 pwd=`pwd` 2149 2154 cd $TMP_ROOT 2150 2151 2152 2155 for i in `ListKernelModulePaths | HackPathsToFailsafe` ; do 2156 cp --parents -pRdf ./$i $bigdir || Die "PDDI can't cp $i->$bigdir" 2157 if [ "`du -sk $i | cut -f1`" -lt "$(($CHOPSIZE*2))" ] ; then 2153 2158 cp --parents -pRdf $i $bigdir 2154 2159 else 2155 2160 ChopUpAndCopyFile $i $bigdir $CHOPSIZE $BIGNO 2156 2161 BIGNO=$(($BIGNO+1)) 2157 2162 fi 2158 2163 done 2159 2164 for i in $EXTRA_MODS ; do 2160 2161 2162 2165 j=`find lib/modules/$FAILSAFE_KVER -name $i.*o 2> /dev/null` 2166 [ ! "$j" ] && echo "Warning - cannot find failsafe module $i.o" >> $LOGFILE 2167 for k in $j ; do 2163 2168 if [ "`du -sk $k | cut -f1`" -lt "$CHOPSIZE" ] ; then 2164 2169 cp --parents -pRdf $k $bigdir … … 2168 2173 fi 2169 2174 echo "Added failsafe module $k to ramdisk" >> $LOGFILE 2170 2175 done 2171 2176 done 2172 2177 cd $pwd 2173 2178 else 2174 2179 ListKernelModulePaths >> $needlist 2175 fi 2176 if [ "$res" -ne "0" ] ; then 2177 rm -f /tmp/mindi-needlist.txt 2178 Die "You have $res file`PluralOrNot $res` present in dependency list\nbut absent from filesystem." 2179 fi 2180 FindAndAddUserKeyboardMappingFile 2181 mkdir -p $bigdir/tmp 2182 if [ "`DidMondoCallMe`" ] ; then 2183 MakeMondoConfigFile $TMP_ROOT/mondo-restore.cfg 2184 cp -f $TMP_ROOT/mondo-restore.cfg $bigdir/tmp &> /dev/null 2185 cp -f $TMP_ROOT/mondo-restore.cfg $CACHE_LOC &> /dev/null 2186 fi 2187 [ -d "/mnt/.boot.d" ] && echo "Oh Jebus" > $bigdir/tmp/DUMBASS-GENTOO 2188 DropOptimizedLibraries $needlist $bigdir 2189 echo -en "Assembling dependency files" 2190 CopyDependenciesToDirectory < $needlist $bigdir 2180 fi 2181 if [ "$res" -ne "0" ] ; then 2182 Die "You have $res file`PluralOrNot $res` present in dependency list\nbut absent from filesystem." 2183 fi 2184 FindAndAddUserKeyboardMappingFile 2185 mkdir -p $bigdir/tmp 2186 if [ "`DidMondoCallMe`" ] ; then 2187 MakeMondoConfigFile $TMP_ROOT/mondo-restore.cfg 2188 cp -f $TMP_ROOT/mondo-restore.cfg $bigdir/tmp &> /dev/null 2189 cp -f $TMP_ROOT/mondo-restore.cfg $CACHE_LOC &> /dev/null 2190 fi 2191 [ -d "/mnt/.boot.d" ] && echo "Oh Jebus" > $bigdir/tmp/DUMBASS-GENTOO 2192 DropOptimizedLibraries $needlist $bigdir 2193 echo -en "Assembling dependency files" 2194 CopyDependenciesToDirectory < $needlist $bigdir 2191 2195 2192 2196 # also copy io.sys and msdos.sys, if we can find them 2193 2197 for i in `mount | cut -d' ' -f3` ; do 2194 2198 for j in io.sys msdos.sys ; do 2195 2196 done 2197 2199 [ -e "$i/$j" ] && cp -f $i/$j $bigdir 2200 done 2201 done 2198 2202 2199 2203 # master boot record, too 2200 2201 2204 i=`cat $MONDO_TMP/BOOTLOADER.DEVICE 2> /dev/null` 2205 if [ "$i" ] ; then 2202 2206 LogIt "Backing up $i's MBR" 2203 2207 dd if=$i of=$bigdir/BOOTLOADER.MBR bs=446 count=1 >> $LOGFILE 2>> $LOGFILE … … 2211 2215 mkdir -p $bigdir/dev 2212 2216 cp -pRdf $j $bigdir/dev/boot_device || Die "Unable to create /dev/boot_device on ramdisk" 2213 2217 fi 2214 2218 2215 2219 # more stuff 2216 2220 # cp -f $MINDI_HOME/embleer* $bigdir 2217 2218 2219 2220 2221 2222 2221 old_pwd=`pwd` 2222 cd $bigdir 2223 2224 [ -e "$MINDI_HOME/aux-tools" ] || Die "aux-tools not found in Mindi's home dir. Do you have multiple copies of Mindi lying around? Please delete them. No, don't e-mail me and ask how. ;) Use 'rm'." 2225 cp -Rdf $MINDI_HOME/aux-tools/* . 2>> $LOGFILE || LogIt "Warning - error occurred while unzipping aux-tools\n" 2226 if [ -e "$MINDI_HOME/x11-tools.tgz" ] ; then 2223 2227 tar -zxf $MINDI_HOME/x11-tools.tgz 2>> $LOGFILE || LogIt "Warning - error occurred while unzipping x11-tools.tgz\n" 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2228 fi 2229 if [ -e "$MONDO_HOME/restore-scripts" ] ; then 2230 cp -Rdf $MONDO_HOME/restore-scripts/* . 2>> $LOGFILE 2231 [ "$?" -ne "0" ] && [ "`DidMondoCallMe`" ] && Die "Cannot find/install $MINDI_HOME/restore-scripts" 2232 fi 2233 [ -d "/lib/dev-state" ] && cp --parents -pRdf /lib/dev-state . 2234 cd $old_pwd 2235 echo -e "$DONE" 2236 TOTAL_BIGDIR_SIZE=`du -sk $bigdir | cut -f1` 2237 SplitDirectoryIntoMinidirs $bigdir $minidir_root 2238 noof_disks=$? 2239 [ "$noof_disks" -eq "0" ] && Die "Too much stuff!" 2236 2240 # if [ "$noof_disks" -ge "8" ] ; then 2237 2241 # LogIt "You are putting a ludicrously large amount of data on these disks." … … 2239 2243 # EXTRA_SPACE=$(($EXTRA_SPACE*2)) 2240 2244 # fi 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2245 MakeMountlist $TMP_ROOT/mountlist.txt 2246 mkdir -p $minidir_root/$noof_disks/tmp 2247 cp -f $TMP_ROOT/mountlist.txt $minidir_root/$noof_disks/tmp/mountlist.txt || Die "Cannot copy mountlist.txt from $TMP_ROOT to data disk" 2248 cp -f $TMP_ROOT/mountlist.txt $CACHE_LOC 2249 [ "`DidMondoCallMe`" ] && cp -f $minidir_root/$noof_disks/tmp/mountlist.txt $MONDO_TMP/. 2250 [ -d "/proc/lvm" ] && $MINDI_HOME/analyze-my-lvm > $minidir_root/$noof_disks/tmp/i-want-my-lvm 2251 [ -d "/dev/mapper" ] && $MINDI_HOME/analyze-my-lvm > $minidir_root/$noof_disks/tmp/i-want-my-lvm 2252 cat $minidir_root/$noof_disks/tmp/mountlist.txt >> $LOGFILE 2253 ZipMinidirsIntoTarballs $minidir_root $tardir $noof_disks 2254 CreateDataDiskImagesFromTarballs $tardir $imagesdir $noof_disks 2255 FRIENDLY_OUTSTRING="Boot and data disk images were created." 2252 2256 # One 1.72MB boot disk, one 2.88MB boot disk and $noof_disks data disk images 2253 2254 2255 2257 rmdir $tardir $bigdir 2258 rm -f $needlist 2259 return $noof_disks 2256 2260 } 2257 2261 2258 2262 2259 2263 ProcessLDD() { 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2264 local main_fname incoming j i fname f newf 2265 main_fname=$1 2266 read incoming 2267 while [ "$incoming" != "" ] ; do 2268 incoming=`echo "$incoming" | sed '/[[:blank:]]*.*[[:blank:]]*=>[[:blank:]]*(.*/d ; s/[[:blank:]]*\(.*\)[[:blank:]]*=>[[:blank:]]*\/.*/\1/ ; s/[[:blank:]]*\(\/.*\)[[:blank:]]*(.*/\1/'` 2269 for fname in `echo "$incoming"` ; do 2270 fname=`LocateFile $fname` 2271 for f in $fname ; do 2272 [ -e "$f" ] && echo $f 2273 done 2274 done 2275 read incoming 2276 done 2273 2277 } 2274 2278 … … 2276 2280 2277 2281 Prompt() { 2278 2279 2282 echo -en "$1" 2283 read line 2280 2284 } 2281 2285 … … 2283 2287 2284 2288 ReadLine() { 2285 2286 2287 2288 2289 local i incoming 2290 read incoming 2291 i=0 2292 while [ "$i" -le "32" ] && [ "$incoming" = "" ] ; do 2289 2293 i=$(($i+1)) 2290 2294 read incoming 2291 2292 2295 done 2296 echo "$incoming" 2293 2297 } 2294 2298 … … 2296 2300 2297 2301 RejigHyperlinks() { 2298 2299 2300 2301 2302 2303 2304 2302 local minidir_root noof_disks fname path diskno old_pwd awk_loc gawk_loc dir i 2303 minidir_root=$1 2304 noof_disks=$2 2305 2306 old_pwd=`pwd` 2307 diskno=1 2308 while [ "$diskno" -le "$noof_disks" ] ; do 2305 2309 mkdir -p $minidir_root/$diskno 2306 2307 2308 2309 2310 cd $minidir_root/$diskno 2311 for fname in `find -type d -o -print` ; do 2312 [ -h "$minidir_root/$diskno/$fname" ] && MoveHyperlinkSensibly $fname $minidir_root $diskno $noof_disks 2313 done 2310 2314 diskno=$(($diskno+1)) 2311 2312 2313 2314 2315 2315 done 2316 2317 2318 cd $old_pwd 2319 return 2316 2320 2317 2321 2318 2322 2319 2323 # do some awk/gawk stuff 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2324 cd $minidir_root 2325 awk_loc=`find -name awk` 2326 gawk_loc=`find -name gawk` 2327 if [ "$awk_loc" = "" ] && [ "$gawk_loc" != "" ] ; then 2328 for i in $gawk_loc ; do HackAwk $i gawk ; done 2329 elif [ "$gawk_loc" = "" ] && [ "$awk_loc" != "" ] ; then 2330 for i in $awk_loc ; do HackAwk $i awk ; done 2331 elif [ "$gawk_loc" != "" ] && [ "$awk_loc" != "" ] ; then 2332 echo -en "Gawk/awk found. Good.\r" 2333 else 2334 Die "Look, I don't want to come across as having an attitude, but you need either awk or gawk. Get a distro that doesn't suck, okay? :-)" 2335 fi 2336 cd $old_pwd 2333 2337 } 2334 2338 … … 2337 2341 EliminateRelatives() { 2338 2342 # eliminate /../../..... from path string 2339 2340 2341 2342 2343 local orig i old_i newo 2344 newo=$1 2345 while [ "`echo "$newo" | grep "\.\."`" ] ; do 2346 orig="`echo "$newo" | tr -s '/' '/'`" 2343 2347 # echo "orig=$orig" 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2348 newo="/" 2349 old_i="" 2350 for i in `echo "$orig" | tr '/' ' '` ; do 2351 if [ ! "$old_i" ] ; then 2352 old_i=$i 2353 continue 2354 fi 2355 if [ "$old_i" ] && [ "$i" = ".." ] ; then 2356 if [ "$old_i" = ".." ] ; then 2357 newo="$newo"$old_i/ 2354 2358 # echo "two --- $old_i $i" 2355 2356 2359 old_i="$i" 2360 continue 2357 2361 # else 2358 2362 # echo "swallowing ($old_i $i)" 2359 2360 2361 2362 2363 2364 2365 2366 2367 2363 fi 2364 elif [ "$old_i" != ".." ] ; then 2365 newo="$newo"$old_i/ 2366 fi 2367 old_i=$i 2368 done 2369 newo="$newo"$i 2370 done 2371 echo "$newo" 2368 2372 } 2369 2373 2370 2374 2371 2375 WhatSoftlinkPointsTo() { 2372 2373 2374 2375 2376 2377 2378 2379 2380 2376 local orig new resolved 2377 orig=$1 2378 new=`ls -l $orig | tr -s ' ' '\t' | $AWK '{printf $NF;}'` 2379 if [ "`echo "$new" | cut -d'/' -f1`" ] ; then 2380 resolved=`dirname $orig`/$new 2381 else 2382 resolved=$new 2383 fi 2384 EliminateRelatives $resolved 2381 2385 } 2382 2386 … … 2386 2390 2387 2391 ReplaceIndividualLine() { 2388 2389 2390 2391 2392 2393 2394 2392 local orig_file new_file lino newstring lines_total lines_remaining 2393 orig_file=$1.orig 2394 mv -f $1 $orig_file || Die "Cannot move $1 to $orig_file" 2395 new_file=$1 2396 lino=$2 2397 newstring="$3" 2398 if [ "$lino" = "" ] || [ "$lino" -lt "1" ] ; then 2395 2399 echo "Can't find string" >> $LOGFILE 2396 2400 return 1 2397 2398 2399 2400 2401 2402 2403 2404 2401 fi 2402 lines_total=`wc -l $orig_file | gawk '{print $1;}'` 2403 lines_remaining=$(($lines_total-$lino)) 2404 head -n$(($lino-1)) $orig_file > $new_file 2405 echo "$newstring" >> $new_file 2406 echo "# The above line was added by Mindi, at the user's instruction" >> $new_file 2407 tail -n$lines_remaining $orig_file >> $new_file 2408 echo "Replace line $lino of $new_file with user-specified line, '$newstring'" >> $LOGFILE 2405 2409 # cp -f $new_file /tmp/init.new 2406 2407 2408 2410 [ -x "$orig_file" ] && chmod +x $new_file 2411 rm -f $orig_file 2412 return 0 2409 2413 } 2410 2414 … … 2413 2417 2414 2418 ResolveSoftlink() { 2415 2416 2417 2418 2419 2420 2419 local resolved new 2420 resolved=$1 2421 while [ -h "$resolved" ] ; do 2422 resolved=`WhatSoftlinkPointsTo $resolved` 2423 done 2424 echo "$resolved" 2421 2425 } 2422 2426 … … 2428 2432 2429 2433 for i in /dev/st0 /dev/ht0 /dev/cdrom /dev/cdrom0 /dev/cdrom 1 ; do 2430 2434 dd if=$i of=/dev/null bs=64k count=1 &> /dev/null 2431 2435 done 2432 2436 } … … 2435 2439 2436 2440 SizeOfPartition() { 2437 2438 2439 2441 local devpath drive res stub 2442 device=$1 2443 if [ "`echo "$device" | fgrep "/dev/md"`" != "" ] ; then 2440 2444 res=`SizeOfRaidPartition $device` 2441 2445 [ "$res" = "" ] && Die "Cannot find $device's size - is your /etc/raidtab sane?" 2442 2446 echo "$res" 2443 2447 return 0 2444 2448 fi 2445 2449 # res=`$FDISK -l 2>> $LOGFILE | grep -w "$device" | head -n1 | sort -u | tr '*' ' ' | tr -s '\t' '|' | tr -s ' ' ' ' | cut -d' ' -f4 | sed s/+// | sed s/-//` 2446 2450 # patch from Bill <bill@iwizard.biz> - 2003/08/25 2447 2448 2449 2450 2451 res=`$FDISK -s $device` 2452 echo "------- $FDISK -l log ------------" >> $LOGFILE 2453 cat $FDISKLOG >> $LOGFILE 2454 echo "------- $FDISK log end ------------" >> $LOGFILE 2451 2455 # end patch 2452 2453 2454 2455 2456 [ "$res" = "" ] && res=`df -k -x supermount | tr -s '\t' ' ' | fgrep "$device " | cut -d' ' -f2` 2457 [ "$res" = "" ] && res="-1" 2458 echo $res 2459 return 0 2456 2460 } 2457 2461 2458 2462 2459 2463 SizeOfRaidPartition() { 2460 2461 2462 2463 2464 2465 2464 local real_dev smallest_size silly tmp 2465 2466 silly=999999999 2467 smallest_size=$silly 2468 2469 for real_dev in `GetRaidDevMembers $1` ; do 2466 2470 tmp=`SizeOfPartition $real_dev` 2467 2471 [ "$tmp" -lt "$smallest_size" ] && smallest_size=$tmp 2468 2469 2470 2472 done 2473 2474 if [ "$smallest_size" = "$silly" ] ; then 2471 2475 echo "-1" 2472 2476 return 1 2473 2477 else 2474 2478 echo "$smallest_size" 2475 2479 return 0 2476 2480 fi 2477 2481 } 2478 2482 … … 2484 2488 StripComments() 2485 2489 { 2486 2487 2488 2489 2490 2491 2490 local tempfile 2491 tempfile=$TMP_ROOT/$$.strip.txt 2492 cp -f $1 $tempfile 2493 cat $tempfile | $AWK '{if (substr($0,0,1)!="#" || substr($0,0,3)=="#!/") {print $0;};}' > $1 2494 rm -f $tempfile 2495 echo "Stripped comments from $2" >> $LOGFILE 2492 2496 } 2493 2497 … … 2498 2502 2499 2503 SplitDirectoryIntoMinidirs() { 2500 2501 2502 2503 2504 2505 2506 2507 2504 local bigdir minidir_root i noof_disks old_pwd res 2505 bigdir=$1 2506 minidir_root=$2 2507 rm -Rf $minidir_root/* 2508 2509 TryToFitDataIntoSeveralDirs $bigdir $minidir_root 2510 noof_disks=$? 2511 if [ "$noof_disks" -eq "0" ] ; then 2508 2512 echo "Failed to fit data into several dirs." 2509 2510 2511 2512 2513 return 0 2514 fi 2515 RejigHyperlinks $minidir_root $noof_disks 2516 rm -Rf $bigdir/* 2513 2517 return $noof_disks 2514 2518 } … … 2518 2522 StripExecutable() 2519 2523 { 2520 2521 2522 2523 2524 2525 2524 local tmpfile 2525 tmpfile=$TMP_ROOT/stripped.$$.dat 2526 [ -d "$1" ] || [ -h "$1" ] && return 2527 cp -f $1 $tmpfile 2528 strip $tmpfile 2> /dev/null 2529 if [ "$?" -eq "0" ] ; then 2526 2530 cp -f $tmpfile $1 2527 2531 echo "Stripped binary $2" >> $LOGFILE 2528 2529 2532 fi 2533 rm -f $tmpfile 2530 2534 } 2531 2535 2532 2536 2533 2537 TemporarilyCompressAllFiles() { 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2538 local i orig_fname out_fname out_list 2539 2540 i=0 2541 out_list=$2/compressed/compressed.txt 2542 mkdir -p $2/compressed 2543 > $out_list 2544 for orig_fname in $1 ; do 2545 out_fname=$2/compressed/$orig_fname.gz 2546 mkdir -p $out_fname 2> /dev/null 2547 rmdir $out_fname 2> /dev/null 2548 gzip -c6 $orig_fname > $out_fname 2> /dev/null 2549 i=$(((($i+1))%15)) 2550 [ "$i" -eq "0" ] && echo -en "." 2551 du -sk $out_fname >> $out_list 2552 done 2549 2553 } 2550 2554 … … 2552 2556 2553 2557 TryToFindKernelPath() { 2554 2555 2556 2557 2558 local fname incoming res fkern_ver we_want_version possible_kernels noof_kernels kernelpath kdate duff_kernels 2559 we_want_version=`uname -r` 2560 possible_kernels="" 2561 duff_kernels="" 2558 2562 2559 2560 2561 2562 2563 2564 2563 if [ "$ARCH" = "ia64" ] ; then 2564 root="/boot/efi/efi" 2565 else 2566 root="/" 2567 fi 2568 for fname in `find $root -maxdepth 2 -type f | fgrep lin | fgrep -v /proc/` ; do 2565 2569 [ ! -e "$fname" ] && continue 2566 2570 [ "$fname" = "/boot/vmlinuz.shipped" ] && [ -f "/boot/vmlinuz" ] && continue; # ignore SuSE's extra kernel 2567 2571 file $fname | grep -q gzip 2568 2572 if [ "$?" -eq "0" ] ; then 2569 2570 2571 else 2572 2573 fi 2574 2573 # Used by ia64 2574 fkern_ver=`gzip -cd $fname | strings 2> /dev/null | grep "[2-9]+*[.][0-9]+*[.][0-9]+*[^\@]*@"` 2575 else 2576 fkern_ver=`strings $fname 2> /dev/null | grep "[2-9]+*[.][0-9]+*[.][0-9]+*[^\@]*@"` 2577 fi 2578 [ "$fkern_ver" = "" ] && continue 2575 2579 # echo "$fname --> $fkern_ver (but we want $we_want_version)" >> /dev/stderr 2576 2580 [ "`echo "$fkern_ver" |fgrep "$we_want_version "`" = "" ] && continue 2577 2581 [ -f "$fname" ] || continue 2578 2582 [ -h "$fname" ] && continue … … 2580 2584 file $fname | grep -q gzip 2581 2585 if [ "$?" -eq "0" ] ; then 2582 2583 2584 2585 2586 2587 2588 2589 2590 else 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2586 # Used by ia64 2587 if [ "`gzip -cd $fname | strings 2> /dev/null | fgrep "$kdate"`" = "" ] ; then 2588 LogIt "Have you recompiled your kernel \"$fname\" w/o rebooting? Naughty but I'll allow it...\n" 2589 duff_kernels="$fname $duff_kernels" 2590 else 2591 [ "`echo "$fname" | fgrep "vmlinux"`" ] && continue 2592 possible_kernels="$fname $possible_kernels" 2593 fi 2594 else 2595 if [ "`strings $fname 2> /dev/null | fgrep "$kdate"`" = "" ] ; then 2596 LogIt "Have you recompiled your kernel \"$fname\" w/o rebooting? Naughty but I'll allow it...\n" 2597 duff_kernels="$fname $duff_kernels" 2598 else 2599 [ "`echo "$fname" | fgrep "vmlinux"`" ] && continue 2600 possible_kernels="$fname $possible_kernels" 2601 fi 2602 fi 2603 done 2604 if [ ! "$possible_kernels" ] && uname -a | grep Knoppix > /dev/null ; then 2601 2605 possible_kernels=`find /boot/vmlinuz-2.* | tail -n1` 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2606 fi 2607 if [ ! "$possible_kernels" ] ; then 2608 LogIt "No kernel matches exactly. Are there any duff kernels?" 2609 possible_kernels="$duff_kernels" 2610 if [ ! "$possible_kernels" ] ; then 2611 LogIt "Sorry, no duff kernels either" 2612 else 2613 LogIt "I bet you're running Debian or Gentoo, aren't you?" 2614 LogIt "Your kernel doesn't have a sane builddate. Oh well..." 2615 fi 2616 fi 2617 possible_kernels=`echo "$possible_kernels" | tr -s ' ' '\n' | sort | uniq | tr '\n' ' '` 2618 noof_kernels=`CountItemsIn "$possible_kernels"` 2619 if [ "$noof_kernels" -eq "0" ] ; then 2620 LogIt "Could not find your kernel.\n" 2617 2621 if [ -e "/boot/vmlinuz" ] ; then 2618 2619 2620 2621 2622 fi 2623 2624 2625 2626 2627 2628 2629 2622 LogIt "Using /boot/vmlinuz as a last resort.\n" 2623 output=/boot/vmlinuz 2624 else 2625 output="" 2626 fi 2627 elif [ "$noof_kernels" -eq "1" ] ; then 2628 kernelpath=`echo "$possible_kernels" | sed s/' '//` 2629 echo "Your kernel is $kernelpath (v`uname -r`)" >> $LOGFILE 2630 output="$kernelpath" 2631 else 2632 for i in $possible_kernels ; do 2633 if echo $i | grep "`uname -r`" ; then 2630 2634 LogIt "OK, I used my initiative and found that " 2631 2635 LogIt "$i is probably your kernel. " 2632 2636 output="$i" 2633 2637 return 2634 2635 2638 fi 2639 done 2636 2640 if echo " $possible_kernels " | fgrep "/boot/vmlinuz " &> /dev/null ; then 2637 2638 2639 else 2640 2641 2642 2643 2644 fi 2645 2646 2641 output=/boot/vmlinuz 2642 echo "Schlomo, this one's for you." >> $LOGFILE 2643 else 2644 LogIt "Two or more possible kernels found. You may specify any one of them and the \n" 2645 LogIt "boot disks will still work, probably. If one does not work, try another.\n" 2646 LogIt "$possible_kernels\n" 2647 echo "" 2648 fi 2649 fi 2650 echo "$output" | tr -s ' ' '\n' | sort -u | tr '\n' ' ' 2647 2651 } 2648 2652 … … 2652 2656 2653 2657 TryToFitDataIntoSeveralDirs() { 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2658 local bigdir minidir_root noof_disks diskno list_of_files filename old_pwd progress 2659 local i retval noof_disks total_files list_of_devs 2660 bigdir=$1 2661 minidir_root=$2 2662 BIG_CLUNKY_SIZE_COUNTER=0 2663 retval=0 2664 noof_disks=1 2665 2666 echo -en "\r \rDividing data into several groups..." 2667 old_pwd=`pwd` 2668 cd $bigdir 2669 list_of_files=`GetFileSizeList . | sort -nr | cut -f2 | fgrep -v "/dev/"` 2670 progress=0 2671 total_files=`CountItemsIn "$list_of_files"` 2672 if [ "`echo "$filename" | grep -x "/dev/.*"`" ] ; then 2673 filesize=1 2674 fi 2675 mkdir -p $minidir_root/$noof_disks 2676 if [ -e "dev" ] ; then 2677 echo "Copying dev/* to $minidir_root/$noof_disks" >> $LOGFILE 2678 cp --parents -pRdf dev $minidir_root/$noof_disks 2679 fi 2680 TemporarilyCompressAllFiles "$list_of_files" $minidir_root 2681 for filename in $list_of_files ; do 2682 AddFileToDir $filename $minidir_root $noof_disks 2679 2683 i=$? 2680 2684 if [ "$i" -gt "$noof_disks" ] ; then 2681 2682 2685 noof_disks=$i 2686 echo -en "\r\t\t\t\t\t\t($noof_disks disks)" 2683 2687 fi 2684 2688 if [ "$i" -eq "0" ] ; then 2685 2686 2687 fi 2688 2689 LogIt "Cannot add file $filename to minidir $minidir_root\n" 2690 retval=$(($retval+1)) 2691 fi 2692 progress=$(($progress+1)) 2689 2693 echo -en "\r\t\t\t\t\t\t\t\t$(($progress*100/$total_files))% complete\r" 2690 2691 2692 2693 2694 2694 done 2695 cd $old_pwd 2696 echo -en "\rThe files have been subdivided into $noof_disks directories. \r" 2697 rm -Rf $minidir_root/compressed 2698 if [ "$retval" -gt "0" ] ; then 2695 2699 return 0 2696 2700 else 2697 2701 return $noof_disks 2698 2702 fi 2699 2703 } 2700 2704 … … 2702 2706 2703 2707 TurnTgzIntoRdz() { 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2708 local tgz_dir_fname rdz_fname ramdisksize tempfile mountpoint old_pwd nodes disksize kernelsize maxsize res currsize not_copied j k floppy_modules s w 2709 tgz_dir_fname=$1 2710 rdz_fname=$2 2711 ramdisksize=$3 2712 disksize=$4 2713 kernelsize=$5 2714 maxsize=$(($disksize-$kernelsize)) 2715 maxsize=$(($maxsize*2)); # to allow for compression of 50% 2716 tempfile=$TMP_ROOT/temp.rd 2717 mountpoint=$TMP_ROOT/mnt1 2718 res=0 2719 echo -en "..." 2720 dd if=/dev/zero of=$tempfile bs=1k count=$ramdisk_size &> /dev/null || Die "Not enough room for temporary ramdisk (TurnTgzIntoRdz)" 2721 echo -en "..." 2722 mke2fs -b 1024 -m 1 -i 2048 -F $tempfile >> $LOGFILE 2>> $LOGFILE 2723 2724 [ "$?" -ne "0" ] && cat /tmp/mke2fs.$$ 2725 rm -f /tmp/mke2fs.$$ 2726 echo -en "..." 2727 mkdir -p $mountpoint 2728 mount -t ext2 -o loop $tempfile $mountpoint || Die "Cannot loopmount $tempfile to $mountpoint" 2729 echo -en "..." 2730 old_pwd=`pwd` 2731 cd $mountpoint 2728 2732 # [ -e "$MINDI_HOME/memtest.img" ] && echo "Yep, this is a multi-function CD" > MULTIFUNC 2729 2730 2731 2732 2733 2734 2733 cp -Rdf $tgz_dir_fname/* . 2>> $LOGFILE >> $LOGFILE 2734 tar -zxf symlinks.tgz || Die "Cannot untar symlinks.tgz" 2735 cd dev || Die "Can't cd to dev" 2736 tar -zxf dev-entries.tgz || Die "Cannot untar dev-entries.tgz" 2737 rm -f dev-entries.tgz 2738 cd .. 2735 2739 2736 2740 # add insmod.static and insmod.static.old if (a) they exist and (b) this is a 64-bit distro 2737 2741 # if [ "`uname -a | grep x86`" ] || [ "`uname -a | grep amd64`" ] ; then 2738 2742 2739 2743 for w in insmod.static insmod.static.old ; do 2740 2744 s=`which $w 2> /dev/null` 2741 2745 if [ -e "$s" ] ; then 2742 2746 cp --parents -af $s . 2743 2747 # LogIt "Copying $s to initrd" 2744 2748 fi 2745 2749 done 2746 2750 2747 2751 # fi 2748 2752 2749 2750 2751 2752 2753 2754 2753 mkdir -p tmp 2754 [ -e "/dev/.devfsd" ] && echo "/dev/.devfsd found" > tmp/USE-DEVFS 2755 for w in cdrom floppy groovy-stuff ; do 2756 mkdir -p mnt/$w 2757 done 2758 if [ "$RUN_AFTER_INITIAL_BOOT_PHASE" ] ; then 2755 2759 ReplaceIndividualLine sbin/init `grep -n "#WHOLIVESINAPINEAPPLEUNDERTHESEA#" sbin/init | cut -d':' -f1` "$RUN_AFTER_INITIAL_BOOT_PHASE" 2756 2757 2760 fi 2761 if [ "$RUN_AFTER_BOOT_PHASE_COMPLETE" ] ; then 2758 2762 ReplaceIndividualLine sbin/init `grep -n "#ABSORBENTANDYELLOWANDPOROUSISHE#" sbin/init | cut -d':' -f1` "$RUN_AFTER_BOOT_PHASE_COMPLETE" 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2763 fi 2764 2765 lsmod > tmp/original-lsmod.txt 2766 2767 cp --parents -Rdf /dev/fd0*[1,2][4,7,8]* . 2> /dev/null 2768 cd $old_pwd 2769 echo -en "..." 2770 MakeModuleLoadingScript $TMPMODPROBE_FLAG $mountpoint/sbin/insert-all-my-modules 2771 echo -en "..." 2772 old_pwd=`pwd` 2773 if [ "$YOUR_KERNEL_SUCKS" ] ; then 2770 2774 cd $TMP_ROOT 2771 2775 floppy_modules_path=lib/modules/$FAILSAFE_KVER 2772 2776 else 2773 2777 cd / 2774 2778 ### 2775 2779 ### Sq-Modification... Use kernel name in module path if specified. 2776 2780 ### 2777 2778 2779 2780 2781 2782 2783 2781 #floppy_modules_path=lib/modules/`uname -r` 2782 if [ "${kernelname}" != "" ] 2783 then 2784 floppy_modules_path=lib/modules/${kernelname} 2785 else 2786 floppy_modules_path=lib/modules/`uname -r` 2787 fi 2784 2788 ### 2785 2789 ### Sq-Modification end 2786 2790 ### 2787 2788 2789 2791 fi 2792 floppy_modules="" 2793 if [ "$disksize" -lt "2880" ] ; then 2790 2794 list_of_groovy_mods="$FLOPPY_MODS `WhichOfTheseModulesAreLoaded "$SCSI_MODS"`" 2791 2795 else 2792 2796 list_of_groovy_mods="$CDROM_MODS `WhichOfTheseModulesAreLoaded "$SCSI_MODS"`" 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2797 fi 2798 if [ -e "$MONDO_TMP/start-nfs" ] ; then 2799 cp -a $MONDO_TMP/start-nfs $mountpoint/sbin 2800 # For PXE boot 2801 list_of_groovy_mods="$list_of_groovy_mods $NET_MODS" 2802 # Here we need the net busybox 2803 mv $mountpoint/bin/busybox.net $mountpoint/bin/busybox 2804 else 2805 rm -f $mountpoint/bin/busybox.net 2806 fi 2807 [ -e "$floppy_modules_path" ] || LogIt "path $floppy_modules_path does not exist. If you're not using a modular kernel then you're NUTS." 2808 for i in $list_of_groovy_mods ; do 2805 2809 floppy_modules="$floppy_modules `FindSpecificModuleInPath $floppy_modules_path $i`" 2806 2807 2808 2810 done 2811 for i in $floppy_modules ; do 2812 [ -e "$i" ] && s=`du -sk $i | cut -f1` || s="" 2809 2813 [ "$YOUR_KERNEL_SUCKS" ] && i=$TMP_ROOT/$i 2810 2814 echo "Adding $i ($s KB) to the rootfs" >> $LOGFILE 2811 2815 cp -df $i $mountpoint/ || LogIt "Unable to copy $i to $mountpoint" 2812 2816 [ "`echo "$i" | fgrep ".gz"`" ] && gunzip -f $mountpoint/`basename $i` 2813 2817 done 2814 2818 # if [ -e "/dev/.devfsd" ] ; then 2815 2819 # echo "Copying devfs stuff to ramdisk" >> $LOGFILE … … 2818 2822 # done 2819 2823 # fi 2820 2821 2822 2823 2824 2824 if [ ! -e "/sbin/devfsd" ] || [ "$disksize" -lt "2880" ] || [ "$kernelpath" = "$MINDI_HOME/vmlinuz" ] ; then 2825 echo "Deleting devfsd daemon from ramdisk" >> $LOGFILE 2826 [ ! -e "/sbin/devfsd" ] && echo "...because /sbin/devfsd not found" >> $LOGFILE 2827 [ "$disksize" -lt "2880" ] && echo "...because disksize = $disksize" >> $LOGFILE 2828 [ "$kernelpath" = "$MINDI_HOME/vmlinuz" ] && echo "...because kernel is failsafe" >> $LOGFILE 2825 2829 # ls -l $mountpoint/sbin/devfsd &> /dev/null || Die "Can't find devfsd daemon on ramdisk" 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2830 rm -f $mountpoint/sbin/devfsd 2831 fi 2832 cd $old_pwd 2833 [ "$TAPEDEV" ] && echo -en "$TAPEDEV" > $mountpoint/tmp/TAPEDEV-LIVES-HERE 2834 dd if=/dev/zero of=$mountpoint/zero &> /dev/null 2835 rm -f $mountpoint/zero 2836 if [ "`DidMondoCallMe`" ] ; then 2837 MakeMondoConfigFile $mountpoint/tmp/mondo-restore.cfg 2838 cp -f $mountpoint/tmp/mondo-restore.cfg $MONDO_TMP &> /dev/null 2839 cp -f $TMP_ROOT/mountlist.txt $mountpoint/tmp/ || Die "Cannot copy mountlist to ramdisk" 2840 echo -en "$FILES_IN_FILELIST" > $mountpoint/tmp/FILES-IN-FILELIST 2841 echo -en "$LAST_FILELIST_NUMBER" > $mountpoint/tmp/LAST-FILELIST-NUMBER 2842 [ "$USE_LZO" = "yes" ] && echo -en "Pras 4 Pres 2004" >> $mountpoint/tmp/USING-LZO 2843 [ "$USE_COMP" = "yes" ] && echo -en "Compression, yep" >> $mountpoint/tmp/USING-COMP 2840 2844 [ "$USE_STAR" = "yes" ] && echo =en "Using star. Hooray." >> $mountpoint/tmp/USING-STAR 2841 2842 2843 2844 2845 2846 2847 2845 fi 2846 mkdir -p $mountpoint/tmp 2847 mkdir -p $mountpoint/proc 2848 echo "$disksize" > $mountpoint/tmp/$disksize.siz 2849 find $mountpoint -name CVS -exec rm -rf '{}' \; 2850 umount $mountpoint || Die "Cannot unmount $tempfile" 2851 dd if=$tempfile bs=1k 2> /dev/null | gzip -v9 > $rdz_fname 2> /dev/null 2848 2852 # gzip -9 $tempfile 2849 2853 # mv $tempfile.gz $rdz_fname 2850 2851 2852 2853 2854 2855 2854 if [ "$res" -eq "0" ] ; then 2855 echo -en "..." 2856 else 2857 echo -en "\rMade an rdz WITH ERRORS. \n" 2858 fi 2859 return 0 2856 2860 } 2857 2861 … … 2859 2863 2860 2864 WhichOfTheseModulesAreLoaded() { 2861 2862 2863 2865 local modname loaded_modules 2866 loaded_modules=" `lsmod | tr -s ' ' '\t' | cut -f1 | fgrep -vx "Modules" | tr '\n' ' '` " 2867 for modname in $1 ; do 2864 2868 [ "`echo "$loaded_modules" | fgrep " $modname "`" ] && echo "$modname" 2865 2869 done 2866 2870 } 2867 2871 … … 2870 2874 2871 2875 ZipMinidirsIntoTarballs() { 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 tar -c . -f-2>> $LOGFILE | gzip -9 > $tardir/$diskno.tar.gz || Die "Can't tar/gzip disk#$diskno; please tell Hugo -exactly- what the errors where."2885 2886 2876 local minidir_root tardir noof_disks diskno old_pwd i 2877 minidir_root=$1 2878 tardir=$2 2879 noof_disks=$3 2880 2881 echo -en "Tarring and zipping the group`PluralOrNot $noof_disks`..." 2882 mkdir -p $tardir 2883 mkdir -p $minidir_root/all 2884 old_pwd=`pwd` 2885 diskno=1 2886 while [ "$diskno" -le "$noof_disks" ] ; do 2887 cd $minidir_root/$diskno || LogIt "Warning - cannot cd to $minidir_root/$diskno" 2888 tar -cf - . 2>> $LOGFILE | gzip -9 > $tardir/$diskno.tar.gz || Die "Can't tar/gzip disk#$diskno; please tell Hugo -exactly- what the errors where." 2889 diskno=$(($diskno+1)) 2890 echo -n "..." 2887 2891 cp -pRdf * $minidir_root/all 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 tar -c * -b 4096 -f-2> /dev/null | gzip -9 > $tardir/all.tar.gz2902 2903 2904 2905 2906 2892 done 2893 mkdir -p $minidir_root/all/tmp 2894 cd $minidir_root/all 2895 size_of_all_tools=`du -sk . | cut -f1` 2896 if [ "`DidMondoCallMe`" ] ; then 2897 for q in filelist.full.gz biggielist.txt ; do 2898 [ ! -e "$MONDO_TMP/$q" ] && Die "Cannot find $MONDO_TMP/$q" 2899 cp -pRdf $MONDO_TMP/$q tmp/ 2900 done 2901 mkdir -p $minidir_root/all/tmp 2902 echo -en "$FILES_IN_FILELIST" > $minidir_root/all/tmp/FILES-IN-FILELIST 2> /dev/null 2903 echo -en "$LAST_FILELIST_NUMBER" > $minidir_root/all/tmp/LAST-FILELIST-NUMBER 2> /dev/null 2904 fi 2905 tar -b 4096 -cf - * 2> /dev/null | gzip -9 > $tardir/all.tar.gz 2906 dd if=/dev/zero bs=1k count=64 >> $imagesdir/all.tar.gz 2> /dev/null 2907 [ "`du -sm $imagesdir/all.tar.gz | cut -f1`" -ge "30" ] && Die "You have too many tools in your shed" 2908 cd $old_pwd 2909 rm -Rf $minidir_root 2910 echo -e "$DONE" 2907 2911 } 2908 2912 … … 2911 2915 2912 2916 ListUnsavedKernelModules() { 2913 2914 2915 2916 2917 2918 2919 2920 2917 local fname modules 2918 fname=/tmp/$RANDOM.$$.$RANDOM 2919 ListKernelModules > $fname 2920 lsmod | cut -d' ' -f1 >> $fname 2921 lsmod | cut -d' ' -f1 >> $fname 2922 modules=`cat $fname | sort | uniq -d2 | tr '\n' ' '` 2923 rm -f $fname 2924 [ "$modules" ] && echo "Unsaved kernel modules: $modules" >> $LOGFILE 2921 2925 } 2922 2926 … … 2942 2946 2943 2947 if [ "$1" = "-V" ] || [ "$1" = "-v" ] || [ "$1" = "--version" ] || [ "$1" = "-version" ] ; then 2944 2945 2948 echo "mindi v$MINDI_VERSION" 2949 exit 0 2946 2950 fi 2947 2951 … … 2956 2960 2957 2961 if [ -e "/etc/conf.modules" ] && [ ! -e "/etc/modules.conf" ] ; then 2958 LogIt "Warning.Ancient distro detected." 12959 2962 LogIt "Warning - Ancient distro detected." 1 2963 ln -sf /etc/conf.modules /etc/modules.conf 2960 2964 fi 2961 2965 [ -e "/sbin/mkdosfs" ] && [ ! -e "/sbin/mkfs.vfat" ] && ln -sf /sbin/mkdosfs /sbin/mkfs.vfat … … 2985 2989 ### Fix as it's not mandatory on ia64 2986 2990 if [ "$ARCH" = "ia64" ] ; then 2987 2991 FindELiloBinary 2988 2992 else 2989 2990 2993 FindIsolinuxBinary 2994 FindLiloBinary 2991 2995 fi 2992 2996 cat /proc/mounts | fgrep " $TMP_ROOT " | fgrep tmpfs > /dev/null 2> /dev/null && TMP_ROOT=/home && LogIt "Changing TMP_ROOT to $TMP_ROOT because you're using tmpfs for /tmp" ; # tmpfs doesn't like Mindi and /tmp, for some reason … … 3004 3008 3005 3009 if [ "$#" -ge "2" ] ; then 3006 3007 MAX_COMPRESSED_SIZE=$23008 shift; shift3009 3010 if [ "$1" = "--max-compressed-size" ] ; then 3011 MAX_COMPRESSED_SIZE=$2 3012 shift; shift 3013 fi 3010 3014 fi 3011 3015 3012 3016 FLOPPY_WAS_MOUNTED="" 3013 3017 for mtpt in /media/floppy /mnt/floppy /floppy ; do 3014 3015 FLOPPY_WAS_MOUNTED="$FLOPPY_WAS_MOUNTED $mtpt"3016 umount $mtpt3017 3018 if mount | grep -w $mtpt &> /dev/null ; then 3019 FLOPPY_WAS_MOUNTED="$FLOPPY_WAS_MOUNTED $mtpt" 3020 umount $mtpt 3021 fi 3018 3022 done 3019 3023 3020 3024 if [ "$#" -ne "0" ] ; then 3021 3022 3025 if [ "$1" = "--findkernel" ] ; then 3026 res=`TryToFindKernelPath` 3023 3027 # 2> /dev/null` 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3028 if [ "$res" = "" ] ; then 3029 exit 1 3030 else 3031 echo "$res" 3032 exit 0 3033 fi 3034 elif [ "$1" = "--makemountlist" ] ; then 3035 [ ! "$2" ] && Die "Please specify the output file" 3036 MakeMountlist $2 3037 exit $? 3038 elif [ "$1" = " --version" ] || [ "$1" = "-v" ] ; then 3035 3039 echo "Mindi v$MINDI_VERSION" 3036 3037 3040 exit 0 3041 elif [ "$#" -ge "9" ] && [ "$1" = "--custom" ] ; then 3038 3042 TMP_ROOT=$2 3039 3043 MONDO_TMP=$2 … … 3045 3049 ### if module path is found then use it other wise use uname -r to set it... 3046 3050 ### 3047 3051 kernelname=`echo $kernelpath | cut -d'-' -f2-` 3048 3052 LogIt "kernelname = $kernelname" 3049 3053 LogIt "kernelpath = $kernelpath" 3050 3051 3052 3053 3054 3055 3056 3057 3054 if [ ! -d "/lib/modules/$kernelname" ] && [ "$kernelpath" != "FAILSAFE" ] 3055 then 3056 LogIt "Module path for ${kernelpath} not found...\n" 3057 LogIt "using running kernel\'s modules.\n" 3058 kernelname=`uname -r` 3059 else 3060 LogIt "Using modules for kernel: ${kernelname}\n" 3061 fi 3058 3062 ### 3059 3063 ### end of Sq-Modification … … 3064 3068 USE_LZO=$8 3065 3069 CDRECOVERY=$9 3066 3067 3068 3069 3070 3070 if [ "${10}" = "(null)" ] || [ "${10}" = "" ] ; then 3071 IMAGE_DEVS="" 3072 else 3073 IMAGE_DEVS="`echo "${10}" | tr '|' ' '`" 3074 fi 3071 3075 if [ "${11}" ] ; then 3072 3076 LILO_OPTIONS="" 3073 3077 # LogIt "LILO will use conservative settings, to be compatible with older BIOSes." 3074 3078 fi 3075 3079 LAST_FILELIST_NUMBER=${12} 3076 3077 3078 3079 3080 ESTIMATED_TOTAL_NOOF_SLICES=${13} 3081 EXCLUDE_DEVS="${14}" 3082 USE_COMP="${15}" 3083 USE_LILO="${16}" 3080 3084 USE_STAR="${17}" 3081 3085 INTERNAL_TAPE_BLOCK_SIZE="${18}" 3082 3083 3084 3085 3086 DIFFERENTIAL="${19}" 3087 NOT_BOOT="${20}" 3088 [ "$USE_COMP" = "" ] && USE_COMP=yes 3089 [ "$NOT_BOOT" = "" ] && NOT_BOOT=no 3086 3090 [ "$TAPEDEV" ] && LogIt "This is a tape-based backup. Fine." 3087 3091 [ "$kernelpath" = "" ] && kernelpath=`TryToFindKernelPath` 3088 3089 3090 3091 3092 3093 3094 3095 3096 3092 kernelname=`echo $kernelpath | cut -d'-' -f2-` 3093 if [ ! -d "/lib/modules/$kernelname" ] && [ "$kernelpath" != "FAILSAFE" ] 3094 then 3095 LogIt "Module path for ${kernelpath} not found...\n" 3096 LogIt "using running kernel\'s modules.\n" 3097 kernelname=`uname -r` 3098 else 3099 LogIt "Using modules for kernel: ${kernelname}\n" 3100 fi 3097 3101 [ "$CDRECOVERY" = "yes" ] && [ "$TAPEDEV" != "" ] && Die "Sorry, you can't use --cd-recovery and --write-tapes at the same time" 3098 3102 MONDO_ROOT=`echo $imagesdir | sed 's/\(.*\)\/.*/\1/'` 3099 3103 [ "$MONDO_ROOT" = "" ] && Die "MONDO_ROOT is undefined" 3100 3104 else 3101 3105 echo "Syntax: mindi (--custom ....)" >> /dev/stderr 3102 3106 exit 1 3103 3107 fi 3104 3108 fi 3105 3109 #ScanCDandTape 3106 3110 [ "$CDRECOVERY" = "yes" ] || CDRECOVERY=no 3107 3111 if [ "$CDRECOVERY" = "yes" ] ; then 3108 3109 3112 iso_cfg_file=$MINDI_HOME/isolinux-H.cfg 3113 sys_cfg_file=$MINDI_HOME/syslinux-H.cfg 3110 3114 else 3111 3112 3115 iso_cfg_file=$MINDI_HOME/isolinux.cfg 3116 sys_cfg_file=$MINDI_HOME/syslinux.cfg 3113 3117 fi 3114 3118 … … 3132 3136 mkdir -p $imagesdir 3133 3137 if [ ! "`DidMondoCallMe`" ] ; then 3134 3135 3136 3137 3138 LogIt "Mindi Linux mini-distro generator v$MINDI_VERSION by Hugo Rabson" 3139 LogIt "Latest Mindi is available from http://www.mondorescue.org" 3140 LogIt "BusyBox sources are available from http://www.busybox.net" 3141 LogIt "------------------------------------------------------------------------------" 3138 3142 else 3139 3143 echo "You are using Mindi-Linux v$MINDI_VERSION to make boot+data disks" >> /var/log/mondo-archive.log 3140 3144 fi 3141 3145 … … 3143 3147 insmod /lib/modules/`uname -r`/*/*/misc/aes.*o.gz >> $LOGFILE 2>> $LOGFILE 3144 3148 for i in loop cdrom ide-cd isofs linear raid0 raid1 raid5 ; do 3145 3149 insmod $i >> $LOGFILE 2>> $LOGFILE 3146 3150 done 3147 3151 … … 3153 3157 echo "NOT_BOOT = '$NOT_BOOT'" >> $LOGFILE 3154 3158 if [ "$NOT_BOOT" != "" ] && [ "$NOT_BOOT" != "0" ] && [ "$NOT_BOOT" != "no" ] ; then 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3159 LogIt "Just creating mondo-restore.cfg and a small all.tar.gz for Mondo. Nothing else." 3160 MakeMondoConfigFile $MONDO_TMP/mondo-restore.cfg 3161 MakeMountlist $MONDO_TMP/mountlist.txt 3162 mkdir -p $MONDO_TMP/small-all/tmp 3163 cd $MONDO_TMP/small-all 3164 cp -f $MONDO_TMP/{mountlist.txt,mondo-restore.cfg,filelist.full.gz,biggielist.txt} tmp || Die "Cannot copy small all.tar.gz" 3165 tar -cv tmp | gzip -9 > $MONDO_TMP/all.tar.gz || Die "Cannot make small all.tar.gz" 3166 sleep 2 3167 LogIt "Done. Exiting.\n" 3168 exit 0 3165 3169 fi 3166 3170 3167 3171 if [ "$kernelpath" = "" ] ; then 3168 3169 3170 3171 3172 3173 3174 3175 3176 3172 [ "`DidMondoCallMe`" ] && Die "Please use -k <path> to specify kernel." 3173 if [ $USE_OWN_KERNEL != "yes" ]; then 3174 echo -en "Do you want to use your own kernel to build the boot disk (y/n) ?" 3175 read ch 3176 if [ "$ch" != "n" ] && [ "$ch" != "N" ] ; then 3177 USE_OWN_KERNEL="yes" 3178 fi 3179 fi 3180 if [ "$USE_OWN_KERNEL" = "yes" ]; then 3177 3181 YOUR_KERNEL_SUCKS="" 3178 3182 kernelpath=`TryToFindKernelPath` 3179 3183 if [ "$kernelpath" = "" ] ; then 3180 3181 3182 fi 3183 3184 echo -n "Please enter kernel path : " 3185 read kernelpath 3186 fi 3187 else 3184 3188 YOUR_KERNEL_SUCKS="That's why you're using mine, dude. :-)" 3185 3189 fi 3186 3190 fi 3187 3191 if [ ! "`DidMondoCallMe`" ] ; then 3188 3189 3190 3191 3192 3193 3194 3192 echo -en "Would you like to use LILO (instead of syslinux)\nfor your boot CD/floppies (y/n) ?" 3193 read ch 3194 if [ "$ch" != "n" ] && [ "$ch" != "N" ] ; then 3195 USE_LILO=yes 3196 else 3197 USE_LILO=no 3198 fi 3195 3199 fi 3196 3200 if [ "$YOUR_KERNEL_SUCKS" != "" ] || [ "$kernelpath" = "" ] || [ "$kernelpath" = "SUCKS" ] || [ "$kernelpath" = "FAILSAFE" ] ; then 3197 3198 3199 3200 3201 3202 3203 3204 3205 3201 kernelpath=$MINDI_HOME/vmlinuz 3202 LogIt "I shall include Mindi's failsafe kernel, not your kernel, in the boot disks." 3203 LogIt "However, you are still running your kernel. If Mindi fails to create your" 3204 LogIt "disks then it may still be a result of a problem with your kernel." 3205 pwd=`pwd` 3206 cd $TMP_ROOT 3207 bzip2 -dc $MINDI_HOME/lib.tar.bz2 | tar -x || Die "Cannot unzip lib.tar.bz2" 3208 cd $pwd 3209 YOUR_KERNEL_SUCKS="Your kernel sucks" 3206 3210 fi 3207 3211 echo -e "Mindi's temp dir = $TMP_ROOT \nMindi's output dir=$imagesdir" >> $LOGFILE … … 3221 3225 echo "Ramdisk will be $ramdisk_size KB" >> $LOGFILE 3222 3226 if [ "$USE_LILO" = "yes" ] ; then 3223 3224 3225 3226 3227 LogIt "Warning! Failed to create 1.72MB boot image. Please reduce your kernel's size"3228 LogIt "if you want to make a 1.72MB floppyfloppy disk."3229 3230 3231 3227 if [ "$ARCH" = "ia64" ] ; then 3228 PrepareBootDiskImage_LILO $imagesdir $IA64_BOOT_SIZE $kernelpath $ramdisk_size || Die "Failed to create ia64 floppy disk image." 3229 else 3230 if ! PrepareBootDiskImage_LILO $imagesdir 1722 $kernelpath $ramdisk_size ; then 3231 LogIt "Warning - failed to create 1.72MB boot image. Please reduce your kernel's size" 3232 LogIt "if you want to make a 1.72MB floppy disk." 3233 fi 3234 PrepareBootDiskImage_LILO $imagesdir 2880 $kernelpath $ramdisk_size || Die "Failed to create 2.88MB floppy disk image." 3235 fi 3232 3236 else 3233 3234 LogIt "Warning ! Failed to create 1.72MB boot image. Please reduce your kernel's size"3235 LogIt "if you want to make a 1.72MB floppy floppydisk."3236 3237 3238 LogIt "Warning! Failed to create 2.88MB floppy disk image."3239 3240 LogIt "if you want to make a 2.88MB floppyfloppy disk."3241 3242 3237 if ! PrepareBootDiskImage_SYSLINUX $imagesdir 1722 $kernelpath $ramdisk_size ; then 3238 LogIt "Warning - failed to create 1.72MB boot image. Please reduce your kernel's size" 3239 LogIt "if you want to make a 1.72MB floppy disk." 3240 fi 3241 if ! PrepareBootDiskImage_SYSLINUX $imagesdir 2880 $kernelpath $ramdisk_size ; then 3242 LogIt "Warning - failed to create 2.88MB floppy disk image." 3243 LogIt "Please reduce your kernel's size" 3244 LogIt "if you want to make a 2.88MB floppy disk." 3245 fi 3246 PrepareBootDiskImage_SYSLINUX $imagesdir 5760 $kernelpath $ramdisk_size || Die "Failed to create 5.76MB floppy disk image." 3243 3247 fi 3244 3248 … … 3250 3254 3251 3255 if [ ! "`DidMondoCallMe`" ] ; then 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3256 ListImagesForUser $imagesdir 3257 boot_dev=/dev/fd0u1722 3258 [ ! -e "$boot_dev" ] && mknod $boot_dev b 2 60 3259 [ ! -e "$boot_dev" ] && boot_dev=/dev/fd0H1722 3260 [ ! -e "$boot_dev" ] && Die "Oh Lord, will you PLEASE tell the vendor to create the 1.72MB devices in /dev?" 3261 if [ "$PROMPT_WRITE_BOOT_FLOPPIES" = "yes" ]; then 3262 OfferToCopyImagesToDisks $imagesdir $boot_dev $FDDEVICE 3263 fi 3264 OfferToMakeBootableISO $imagesdir 3265 LogIt "Finished.\n" 3262 3266 elif [ "$TAPEDEV" ] ; then 3263 3264 3265 3266 3267 3268 3267 mkdir -p /root/images/mindi 3268 rm -f /root/images/mindi/{*img,*gz,*iso} 3269 OfferToMakeBootableISO $imagesdir 3270 if [ -e "$imagesdir/all.tar.gz" ] ; then 3271 cp -f $imagesdir/all.tar.gz $MONDO_TMP/ 3272 else 3269 3273 Die "Cannot find all.tar.gz, to be written to tape" 3270 3274 fi 3271 3275 else 3272 3276 OfferToMakeBootableISO $imagesdir 3273 3277 fi 3274 3278 if [ "$imagesdir" != "/root/images/mindi" ] ; then 3275 3279 for i in `find $imagesdir -maxdepth 1 -name "*.iso" -o -name "*.img"` ; do 3276 3280 cp -f $i /root/images/mindi || LogIt "[line 1613] Cannot copy $i to /root/images/mindi" 3277 3281 done 3278 3282 fi 3279 3283 [ "$TMP_ROOT" != "/tmp" ] && rm -Rf $TMP_ROOT 3280 rm -Rf /tmp/mindi-needlist.txt /tmp/mountlist.txt.$$ 3284 # cleanup 3285 rm -f /tmp/mountlist.txt.$$ $FDISKLOG /tmp/mindilinux 3281 3286 LogIt "$FRIENDLY_OUTSTRING" 3282 3287 ListUnsavedKernelModules 3283 3288 for mtpt in $FLOPPY_WAS_MOUNTED ; do 3284 mount $ptpt3289 mount $mtpt 3285 3290 done 3286 3291 echo "Mindi is exiting" >> $LOGFILE
Note:
See TracChangeset
for help on using the changeset viewer.