source: MondoRescue/branches/stable/mindi/mindi@ 718

Last change on this file since 718 was 718, checked in by Bruno Cornec, 18 years ago

Some tabs for mindi (also test for new SVN repository on mondorescue.org)

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