source: MondoRescue/branches/2.0.8/mindi/mindi@ 519

Last change on this file since 519 was 519, checked in by bcornec, 18 years ago

merge -r 437:447 $SVN_M/branches/stable
merge -r 461:464 $SVN_M/branches/stable
merge -r 465:472 $SVN_M/branches/stable
merge -r 473:479 $SVN_M/branches/stable
merge -r 480:488 $SVN_M/branches/stable
merge -r 491:494 $SVN_M/branches/stable
merge -r 508:516 $SVN_M/branches/stable

  • Property svn:keywords set to Rev Id
File size: 108.6 KB
RevLine 
[1]1#!/bin/bash
2
[212]3# $Id: mindi 519 2006-04-30 23:54:31Z bcornec $
[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
[401]18ADDITIONAL_BOOT_PARAMS="acpi=off apm=off devfs=nomount exec-shield=0 noresume selinux=0 barrier=off"
[1]19
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
[312]38
39if [ "$ARCH" = "x86_64" ] ; then
40 MINDI_LIB=${MINDI_PREFIX}/lib64/mindi
41else
42 MINDI_LIB=${MINDI_PREFIX}/lib/mindi
43fi
44
[1]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
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.
[179]62MINDI_CONFIG="$MINDI_CONF/mindi.conf"
[1]63if [ -f $MINDI_CONFIG ]; then
[134]64 . $MINDI_CONFIG
[1]65fi
66MY_FSTAB=/etc/fstab
67FLOPPY_MODS="ide-floppy floppy"
68TAPE_MODS="ht st osst ide-tape ide_tape"
[519]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 ide-scsi ieee1394 imm in2000 initio ips iscsi isp megaraid mptbase mptscsih NCR53c406a ncr53c8xx nsp32 pas16 pci2000 pci2220i pcmcia ppa psi240i qla1280 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"
[519]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
79FDDEVICE=/dev/fd0 ; # 1.44MB floppy #0
80CACHE_LOC=/var/cache/mondo-archive
81FORCE_DUAL_FLOPPIES=no
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() {
154 #if fgrep "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
167 [ "$imagesdir" != "" ] && rm -f $imagesdir/mindi*img $imagesdir/*gz $imagesdir/mindi.iso
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"
[134]251 if [ "`echo $mappath | fgrep ".gz"`" ] ; then
252 included_list=`gzip -dc $mappath | fgrep -i include | sed s/'"'// | sed s/'"'// | cut -d' ' -f2`
253 else
[273]254 included_list=`fgrep -i 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
[134]258 sss=`find $KEYDIR/keymaps | fgrep "${included_item}.inc"`
259 [ "$sss" = "" ] && sss=`find $KEYDIR/keymaps | fgrep "$included_item"`
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
[134]282 [ -d "$filename" ] && Die "Cannot chop up $filename: it's a directory. Please amend deplist.txt accordingly."
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?"
288 [ "`head $scratchfile -n1 | fgrep "bin/sh"`" != "" ] && StripComments $scratchfile "-$filename-"
289 [ "`echo "$filename" | fgrep "etc/termcap"`" != "" ] && StripComments $scratchfile "-$filename-"
290 if [ "`echo "$filename" | fgrep "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.$$
[519]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
458 Die "Tarball $tarball is too big for disk! (CODI)\nTell Hugo 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
471 [ "`ps ax | fgrep "mondoarchive" | grep -v "grep"`" ] && res=$(($res+1))
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
[134]490 my_partitions=`mount | fgrep $$ | cut -f1 -d' '`
491 [ "$my_partitions" != "" ] && umount $my_partitions
492 [ "$TMP_ROOT" != "/tmp" ] && rm -Rf $TMP_ROOT
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
[273]536 fgrep -vx "$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
[273]594 locale=`fgrep KEYTABLE "$keyfile" | tr -d '"' |cut -d'=' -f2`
595 [ ! "$locale" ] && locale=`grep '.map$' "$keyfile" | sed 's/^.* //'` # Slackware
[134]596 echo "locale=$locale" >> $LOGFILE
597 mp=`find $KEYDIR/keymaps | grep "i[3-8]86" | fgrep "${locale}." | grep -vx " *#.*"`
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
[1]631 mkdir -p $CACHE_LOC
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
658 $LILO_EXE -V | fgrep "21.6" > /dev/null && Die "Please upgrade LILO. Your verison has a serious bug. If you're not _using_ LILO, fine, uninstall it. :)"
[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
[1]704 cd $TMP_ROOT
[134]705 else
[1]706 cd /
[134]707 fi
708 if [ ! -e "$1" ] ; then
[258]709 LogIt "Warning - cannot search specific path '$1'\n"
[1]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
[1]768 incoming=`ReadLine`
769 lvmversion=""
770 while [ "$incoming" != "" ] ; do
[134]771 if echo "$incoming" | grep -x " *#.*" &> /dev/null ; then
[1]772# echo "Skipping '$incoming'"
773 incoming=`ReadLine`
774 continue
[134]775 fi
776 filelist=`GenerateListForFile "$incoming"`
777 for tool in $filelist ; do
778 lvmresolved=`ResolveSoftlink $tool`
779 if echo "$lvmresolved" | grep "lvmiopversion" &> /dev/null ; then
[1]780 if [ "$lvmversion" = "" ] ; then
781 lvmversion=`$lvmresolved`
782 echo "$lvmresolved" >> $tempfile
783 fi
784 toolstripped=`echo $tool | $AWK -F / '{print $NF;}'`
785 toolpath="/sbin/lvm-"$lvmversion"/"$toolstripped
786 if [ -e "$toolpath" ] ; then
787 echo "$toolpath" >> $tempfile
788 echo "$tool" >> $tempfile
789 else
790 toolpath="/lib/lvm-"$lvmversion"/"$toolstripped
791 fi
792 if [ -e "$toolpath" ] ; then
793 echo "$toolpath" >> $tempfile
794 echo "$tool" >> $tempfile
795 else
796 echo "Where are your LVM-Tools? Couldn't find $tool"
797 fi
798 else
799 echo "$tool" >> $tempfile
800 fi
[134]801 done
802 progress=$(($progress+1))
803 echo -en "\r\t\t\t\t\t\t\t\t"
804 i=$(($progress*100))
805 i=$(($i/$noof_lines))
806 echo -en "$i"
807 echo -en "%"
808 modres=$(($progress%4))
809 [ "$modres" -eq "0" ] && echo -en "\t/"
810 [ "$modres" -eq "1" ] && echo -en "\t-"
811 [ "$modres" -eq "2" ] && echo -en "\t\\"
812 [ "$modres" -eq "3" ] && echo -en "\t|"
813 incoming=`ReadLine`
[1]814 done
[134]815 fi
816 echo -en "$DONE\nMaking complete dependency list"
[1]817
[277]818 tr -s '/' '/' < $tempfile | sort -u > $tempfile.new
[134]819 mv -f $tempfile.new $tempfile
820 > $outfile.pre
821 progress=0
822 noof_lines=`cat $tempfile | wc -l`
823 for fname in `cat $tempfile` ; do
824 tempdepfile=`mktemp /tmp/mindilinux/tempdepfile.XXXXXX`
825 LocateDeps $fname > $tempdepfile
[1]826 echo "$fname" >> $outfile.pre
[134]827 cat $tempdepfile >> $outfile.pre
[1]828# echo "$fname ----> dependencies:-" >> $LOGFILE
[277]829# cat $tempdepfile | tr -s '/' '/' | sort -u >> $LOGFILE
[1]830# echo -en "(end of deplist of $fname)\n\n" >> $LOGFILE
[134]831 rm -f $tempdepfile
[1]832 progress=$(($progress+1))
[134]833 echo -en "\r\t\t\t\t\t\t\t\t"
834 i=$(($progress*100))
835 i=$(($i/$noof_lines))
836 echo -en "$i"
837 echo -en "%"
[1]838 modres=$(($progress%4))
[134]839 [ "$modres" -eq "0" ] && echo -en "\t/"
840 [ "$modres" -eq "1" ] && echo -en "\t-"
841 [ "$modres" -eq "2" ] && echo -en "\t\\"
842 [ "$modres" -eq "3" ] && echo -en "\t|"
843 done
844 if [ "`DidMondoCallMe`" ] ; then
[1]845 mkdir -p $bigdir/tmp
846 mkdir -p $bigdir/sbin
847 mkdir -p $bigdir/bin
848 if [ -e "$MONDO_TMP/post-nuke.tgz" ] ; then
[258]849 LogIt "\nIncorporating post-nuke tarball\n"
[134]850 old_pwd=`pwd`
851 cd $bigdir
[258]852 tar -zxf $MONDO_TMP/post-nuke.tgz || LogIt "Error occurred when untarring post-nuke tarball\n"
[134]853 cd $old_pwd
[1]854 fi
855 if cp -f $MONDO_TMP/mondo*restore $bigdir/usr/bin ; then
[134]856 LocateDeps $bigdir/usr/bin/mondo*restore >> $outfile.pre
[1]857 else
[258]858 LogIt "Cannot find mondo*restore in mondo's tempdir, $MONDO_TMP\n"
859 LogIt "I bet you've got a spare copy of Mondo or Mindi floating around on your system.\n"
860 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]861 Die "Odd."
862 fi
[258]863 cp -f $MONDO_TMP/BOOTLOADER.* $bigdir 2> /dev/null || LogIt "\nMondo v1.2x defaults to LILO as the bootloader, BTW.\n"
[1]864 if [ -e "$MONDO_TMP/start-nfs" ] ; then
[258]865 LogIt "Incorporating NFS-related settings\n"
[134]866 cp -f $MONDO_TMP/start-nfs $bigdir/sbin || Die "Cannot find start-nfs"
867 for r in NFS-SERVER-MOUNT NFS-SERVER-PATH NFS-DEV NFS-CLIENT-IPADDR NFS-SERVER-IPADDR ; do
[1]868 cp -f $MONDO_TMP/$r $bigdir/tmp || Die "Cannot copy $r - did you run out of disk space?"
[134]869 echo "Copying $r to ramdisk" >> $LOGFILE
870 done
[1]871 fi
[134]872 fi
[275]873 tr ' ' '\n' < $outfile.pre | tr -s '/' '/' | fgrep -vx "" | sort -u | egrep -v "/libX11|/libXext|/libXi|/libgtk|/libgdk" > $outfile
[134]874 rm -f $tempfile $outfile.pre
875 [ "$res" -eq "0" ] && echo -e "\r\t\t\t\t\t\t\t\t$DONE" || echo "\nFailed."
876 return $res
[1]877}
878
879
880
881
882
883GenerateListForFile() {
[134]884 local files_found loc fname incoming i res
885 incoming="$1"
886 files_found=""
887 res=0
[1]888
[134]889 for fname in $incoming ; do
890 files_found="$files_found `LocateFile $fname`"
891 done
[1]892
[134]893 echo "$files_found" | tr ' ' '\n' | sort -u | tr '\n' ' '
[1]894}
895
896
897
898# Returns all disk devices which are part of a raid array
899
900GetAllRaidMembers() {
[134]901 $AWK "/^[[:space:]]*#/ {next} /^[[:space:]]*device/ if(\$2) {print \$2}" < /etc/raidtab
[1]902}
903
904
905GetFileSizeList() {
[134]906 local i
907 for i in `find $1 -type d -o -print` ; do
908 du -sk $i
909 done
[1]910}
911
912
913
914GetHomeDir() {
[134]915 local res loc
916 loc=`which $1 2>/dev/null`
917 res=`file $loc | $AWK '{print $NF;}'`
918 dirname $res
[1]919}
920
921
922
923
924
925# Searches parent raid device of given disk device
926# $1: disk device (i.e. /dev/hda1)
927
928GetParentRaidDev() {
[134]929 $AWK "/^[[:space:]]*#/ {next} /^[[:space:]]*raiddev/ {dev=\$2} /^[[:space:]]*device/ {if(\$2==\"$1\") {print dev; exit}}" < /etc/raidtab
[1]930}
931
932
933
934# Searches members of raid device
935# $1: raid device (/dev/md...)
936
937GetRaidDevMembers() {
[134]938 $AWK "/^[[:space:]]*#/ {next} /^[[:space:]]*raiddev/ {if(dev) exit; if(\$2 == \"$1\") dev=\$2} /^[[:space:]]*device/ {if(dev) {print \$2}}" < /etc/raidtab
[1]939}
940
941
942HackAwk() {
[134]943 local pathname filename dir old_pwd new_fname
944 pathname=$1
945 filename=$2
946 dir=`echo "$pathname" | sed s/$filename//`
947 old_pwd=`pwd`
948 cd $dir
949 [ -f "$filename" ] || Die "Can't find $filename at $dir"
950 new_fname="an.icky.icky.spider.ewww"
951 [ "$filename" = "gawk" ] && new_fname="awk"
952 [ "$filename" = "awk" ] && new_fname="gawk"
953 ln -s $filename $new_fname
954 cd $old_pwd
[1]955}
956
957
958
959
960HackMountlist() {
[134]961 local scratchdir outfile partlist pst partstr \
[1]962res partition swapsize
[134]963 scratchdir=$TMP_ROOT
964 outfile=$1
[1]965
[134]966 mkdir -p $outfile
967 rm -Rf $outfile
968 > $outfile
969 partlist=$(mount | cut -d' ' -f1,3,5 \
[1]970 | egrep -v "((none|/tmp|/ISOs|/proc|/dev/root) )|/mnt/" \
971 | tr ' ' '|')
972
[134]973 echo -n "Modifying mountlist..."
[1]974
[134]975 if [ ! -f "/mountlist.hacked" ] ; then
976 Die "Can't find modified mountlist.hacked!"
977 else
978 cp /mountlist.hacked "$outfile"
979 LogIt "Done. (Created by auto-archive, I assume?)\n"
980 fi
[1]981}
982
983
984
985
986HackPathsToFailsafe() {
[134]987 local incoming newpath kver stub i pwd
988 kver=`uname -r`
989 incoming=`ReadLine`
990 pwd=`pwd`
991 cd $TMP_ROOT
992 while [ "$incoming" != "" ] ; do
[1]993 stub=`basename $incoming`
994 newpath=`FindSpecificModuleInPath lib/modules/$FAILSAFE_KVER $stub`
995 for i in $newpath ; do
[134]996 echo "$i"
[1]997 done
998 read incoming
[134]999 done
1000 cd $pwd
[1]1001}
1002
1003
1004
1005ListAllPartitions() {
[134]1006 local res currline partition all_partitions ap_orig remaining i j
[1]1007
[273]1008 grep -vx " *#.*" $MY_FSTAB | grep -vx " *none.*" | $AWK '/^\/dev\/[imhs]d||LABEL\=\// && !/fdd|cdr|zip|floppy/ {print $1}'
[1]1009# for partition in `$FDISK -l | tr -s ' ' '\n' | grep /dev` ; do
1010# [ -e "$i" ] && all_partitions=echo "$i"
1011# done
[134]1012 [ -e "/etc/raidtab" ] && $AWK '/^ *device/ {print $2}' /etc/raidtab
1013 return
[1]1014}
1015
1016
1017
1018
1019
1020ListImagesForUser() {
[134]1021 local path fname
1022 path=$1
1023 echo -en "In the directory '$path' you will find the images:-\n"
1024 for fname in `ls $path | fgrep mindi-` ; do
1025 printf "%19s " $fname
1026 done
1027 echo " "
[1]1028}
1029
1030
1031
1032ListKernelModulePaths() {
[134]1033 local module_list module fname oss r kern
1034 oss="/root/oss/modules"
[297]1035 module_list="`lsmod | sed -n '2,$s/ .*//p'`"
[1]1036###
1037### Sq-Modification ... Use kernelname for module search path if specified
1038###
[134]1039 # kern="`uname -r`"
1040 if [ "${kernelname}" != "" -a "${kernelname}" != "FAILSAFE" ]
1041 then
[297]1042 kern=${kernelname}
[134]1043 else
[297]1044 kern="`uname -r`"
[134]1045 fi
[1]1046###
1047### Sq-Mod End
1048###
[134]1049 for module in $module_list $EXTRA_MODS ; do
1050 r=`find /lib/modules/$kern -type f | grep "/${module}\..*o" | tail -n1`
[297]1051 echo "module $module --> $r" >> $LOGFILE
1052 [ "$r" ] && echo "$r"
1053 [ -f "$oss" ] && find $oss | fgrep $module
[134]1054 done
1055 find /lib/modules/$kern/modules.* -type f 2> /dev/null
1056 [ -f "$oss" ] && find $oss.* 2> /dev/null
[1]1057}
1058
1059
1060
[297]1061#ListKernelModules() {
1062 #local output q
1063 #output=""
1064 #for q in `lsmod | sed -n '2,$s/ .*//p'` ; do
1065 #output="$q $output"
1066 #done
1067 #echo "`lsmod | sed -n '2,$s/ .*//p'`"
1068#}
[1]1069
1070
1071
1072LocateDeps() {
[134]1073 local incoming fname deps
1074 incoming="$1"
1075 for fname in $incoming ; do
1076 if [ ! -e "$fname" ] ; then
1077 echo "Warning - $fname does not exist; cannot be LDD'd." >> $LOGFILE
1078 if echo $fname | grep lvm &> /dev/null ; then
[1]1079 echo "This warning only affects you if you are using LVM." >> $LOGFILE
1080 if lsmod | grep lvm &> /dev/null ; then
1081 echo "I think you are, so please take heed!" >> $LOGFILE
1082# LogIt "Where is liblvm? You need it."
1083 else
1084 echo "I don't think you are, so don't worry about it." >> $LOGFILE
1085 fi
[134]1086 fi
1087 elif [ -h "$fname" ] && [ -x "$fname" ] ; then
1088 echo "$fname is softlink" >> $LOGFILE
[1]1089# echo "$fname will not be LDD'd. It is a softlink to `WhatSoftlinkPointsTo $fname`, which should already be in queue to be analyzed." >> $LOGFILE
1090# echo "$fname"
[134]1091 else
1092 ldd $fname 2> /dev/null | ProcessLDD $fname
1093 fi
1094 done
[1]1095}
1096
1097
1098
1099LocateFile() {
[134]1100 local i path fname_to_find location output resolved tmp stub cache_id loclist
1101 fname_to_find="$1"
1102 if [ "$FILE_CACHE" ] ; then
1103 touch $FILE_CACHE
1104 output=""; cache_id=`echo $fname_to_find | md5sum`
1105 output=`sed -n -e "s/^$cache_id //p" $FILE_CACHE`
1106 if [ ! "$output" = "" ] ; then
1107 echo "$output"
1108 return 0
1109 fi
1110 fi
1111 if echo "$fname_to_find" | grep -x "/.*" ; then
[1]1112 output="$fname_to_find"
1113 location="$fname_to_find"
1114 while [ -h "$location" ] ; do
[134]1115 resolved=`WhatSoftlinkPointsTo $location`
1116 location=$resolved
1117 output="$location $output"
[1]1118 done
1119 echo "$output"
1120 return 0
[134]1121 fi
1122 output=""
1123 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]1124 [ ! -d "$path" ] && continue
1125 location=`echo "$path/$fname_to_find" | tr -s '/' '/'`
1126 if echo "$location" | grep "lib/lib" 2> /dev/null ; then
[134]1127 loclist=`find $path -maxdepth 1 | fgrep "$fname_to_find"`
[1]1128 else
[134]1129 loclist=$location
[1]1130 fi
1131 for location in $loclist ; do
[134]1132 [ ! -e "$location" ] && continue
1133 output="$location $output"
1134 copies_found=$(($copies_found+1))
1135 while [ -h "$location" ] ; do
1136 resolved=`WhatSoftlinkPointsTo $location`
1137 location=$resolved
1138 output="$location $output"
1139 done
[1]1140# resolved=`file $location | $AWK '{print $NF;}'`
1141# if [ "`echo "$resolved" | fgrep "/"`" = "" ] ; then
1142# stub=`dirname $location`
1143# output="/$stub/$resolved $output"
1144# fi
1145# fi
1146 done
[134]1147 done
1148 if [ "$output" = "" ] ; then
[1]1149# echo "$fname_to_find not found" >> /dev/stderr
1150 return 1
[134]1151 fi
1152 echo "$output"
1153 [ "$FILE_CACHE" ] && echo -ne "$cache_id $output\n" >> $FILE_CACHE
1154 return 0
[1]1155}
1156
1157
1158
1159LogIt() {
[134]1160 if [ -e /dev/stderr ] ; then
[1]1161 echo -e "$1" >> /dev/stderr
[134]1162 elif [ -e /usr/bin/logger ] ; then
[1]1163 /usr/bin/logger -s $1
[134]1164 fi
1165 echo -en "$1" >> $LOGFILE
[1]1166}
1167
1168
1169
1170
1171
1172
1173
1174# Called by TurnTgzIntoRdz, to make /tmp/mondo-restore.cfg
1175
1176MakeMondoConfigFile() {
[134]1177 local outfile use_lzo use_comp use_star
1178 outfile=$1
1179 > $outfile
1180 [ "$TAPESIZE" ] && echo "media-size $TAPESIZE" >> $outfile
1181 [ "$TAPEDEV" ] && echo "media-dev $TAPEDEV" >> $outfile
1182 [ "$FILES_IN_FILELIST" ] && echo "files-in-filelist $FILES_IN_FILELIST" >> $outfile
1183 [ "$LAST_FILELIST_NUMBER" ] && echo "last-filelist-number $LAST_FILELIST_NUMBER" >> $outfile
1184 [ "$INTERNAL_TAPE_BLOCK_SIZE" ] && echo "internal-tape-block-size $INTERNAL_TAPE_BLOCK_SIZE" >> $outfile
1185 use_lzo=$USE_LZO; [ "$use_lzo" = "" ] && use_lzo="no"
1186 use_comp=$USE_COMP; [ "$use_comp" = "" ] && use_comp="yes"
1187 use_star=$USE_STAR; [ "$use_star" = "" ] && use_star="no"
1188 echo "use-lzo $use_lzo" >> $outfile
1189 echo "use-star $use_star" >> $outfile
1190 echo "use-comp $use_comp" >> $outfile
1191 echo "datestamp `date`" >> $outfile
1192 [ "$ESTIMATED_TOTAL_NOOF_SLICES" ] && echo "total-slices $ESTIMATED_TOTAL_NOOF_SLICES" >> $outfile
[1]1193 AddFileToCfgIfExists $MONDO_TMP/NFS-CLIENT-IPADDR nfs-client-ipaddr $outfile
[148]1194 AddFileToCfgIfExists $MONDO_TMP/NFS-CLIENT-NETMASK nfs-client-netmask $outfile
[196]1195 AddFileToCfgIfExists $MONDO_TMP/NFS-CLIENT-BROADCAST nfs-client-broadcast $outfile
[148]1196 AddFileToCfgIfExists $MONDO_TMP/NFS-CLIENT-DEFGW nfs-client-defgw $outfile
[1]1197 AddFileToCfgIfExists $MONDO_TMP/NFS-SERVER-MOUNT nfs-server-mount $outfile
1198 AddFileToCfgIfExists $MONDO_TMP/NFS-SERVER-PATH nfs-server-path $outfile
1199 AddFileToCfgIfExists $MONDO_TMP/NFS-DEV nfs-dev $outfile
1200 AddFileToCfgIfExists $MONDO_TMP/NFS-SERVER-IPADDR nfs-server-ipaddr $outfile
1201 AddFileToCfgIfExists $MONDO_TMP/ISO-DEV iso-dev $outfile
1202 AddFileToCfgIfExists $MONDO_TMP/ISO-MNT iso-mnt $outfile
[148]1203 AddFileToCfgIfExists $MONDO_TMP/ISO-PREFIX iso-prefix $outfile
[1]1204 AddFileToCfgIfExists $MONDO_TMP/ISODIR isodir $outfile
1205 AddFileToCfgIfExists $MONDO_TMP/BOOTLOADER.DEVICE bootloader.device $outfile
1206 AddFileToCfgIfExists $MONDO_TMP/BOOTLOADER.NAME bootloader.name $outfile
1207 AddFileToCfgIfExists $MONDO_TMP/KEYMAP-LIVES-HERE keymap-lives-here $outfile
1208 AddFileToCfgIfExists $MONDO_TMP/TAPEDEV-HAS-DATA-DISKS tapedev-has-data-disks $outfile
1209 AddFileToCfgIfExists $MONDO_TMP/BACKUP-MEDIA-TYPE backup-media-type $outfile
1210 AddFileToCfgIfExists $MONDO_TMP/DIFFERENTIAL differential $outfile
1211}
1212
1213
1214
1215
1216MakeModuleLoadingScript() {
[134]1217 local module fname params modpath kver outerloop i modpaths kver searchpath list_to_echo j
1218 tmpmodprobe_flag=$1
1219 outfile=$2
1220 > $outfile || Die "Cannot create empty $outfile"
1221 echo -en "#\041/bin/sh\n\n" >> $outfile
1222 echo "echo -en \"Loading your modules...\"" >> $outfile
1223 if [ "$YOUR_KERNEL_SUCKS" ] ; then
[1]1224 kver=$FAILSAFE_KVER
1225 cd $TMP_ROOT
1226 searchpath=lib/modules/$kver
[134]1227 else
[1]1228###
1229### Sq-Modification ... Use kernelname for module search path if specified
1230###
[134]1231 #kver=`uname -r`
1232 if [ "${kernelname}" != "" ]
1233 then
1234 kver=${kernelname}
1235 else
1236 kver=`uname -r`
1237 fi
[1]1238###
1239### Sq-Modification end
1240###
1241 searchpath=/lib/modules/$kver
[134]1242 fi
1243
1244 echo -en "for outerloop in 1 2 3 4 5 ; do\necho -en \".\"\n" >> $outfile
[297]1245 list_to_echo="`lsmod | sed -n '2,$s/ .*//p'`"
[1]1246# LTE=`echo "$list_to_echo" | tr ' ' '\n' | grep -n "" | cut -d':' -f2,3,4 | tr '\n' ' '`
1247# lte_old="$LTE"
1248# LTE=""
1249# for q in $lte_old ; do
1250# LTE="$q $LTE"
1251# done
1252#echo "LTE = '$LTE'" >> $LOGFILE
[134]1253 # Make temporary modprobe.conf file if we are told so
1254 if [ $tmpmodprobe_flag == "Y" ] ; then
[297]1255 infile="/tmp/modprobe.conf.mindi.$$"
[495]1256 find /etc/modprobe.d -maxdepth 1 -name "*" -xtype f -print0 | xargs -0 cat > $infile
[134]1257 else
[297]1258 infile="/etc/modules.conf"
[134]1259 fi
1260 for module in $list_to_echo $EXTRA_MODS ; do
[297]1261 params=`sed -n "s/^options \\+$module \\+//p" $infile`
1262 modpaths=`FindSpecificModuleInPath $searchpath $module`
1263 for i in $modpaths ; do
1264 echo "MyInsmod $i $params > /dev/null 2> /dev/null" \
1265 | tr '.' '#' \
1266 | sed s/#o#gz/#o/ \
1267 | sed s/#o#gz/#o/ \
1268 | sed s/#ko#gz/#ko/ \
1269 | sed s/#ko#gz/#ko/ \
[134]1270 | tr '#' '.' >> $outfile
[297]1271 echo -en "$i added to module list.\n" >> $LOGFILE
1272 done
[1]1273 done
[134]1274 echo -en "done\n" >> $outfile
1275 echo "echo \"Done.\"" >> $outfile
1276 chmod +x $outfile
[1]1277# cp $outfile /tmp/out.txt
[134]1278 cd /
1279 # Remove temporary modprobe.conf file if we have created one
1280 if [ $tmpmodprobe_flag == "Y" ] ; then
[297]1281 rm -f $infile
[134]1282 fi
[1]1283}
1284
1285
1286
1287
1288
1289MakeMountlist() {
[134]1290 local scratchdir mountlist all_partitions current_partition \
[1]1291partition_size partition_format outstring partition_number \
1292partition_mountpt c_p lwm_info psz lvm_dev unofficial_outstring \
1293absolute_partition old_partition_fmt
1294
[134]1295 echo "Your raw fstab file looks like this:-" >> $LOGFILE
1296 cat $MY_FSTAB >> $LOGFILE
1297 echo "Your mountlist will look like this:-"
[1]1298
1299# scratchdir, mountlist(OUT)
[134]1300 scratchdir=$TMP_ROOT
1301 mountlist=$1
[1]1302
1303# NB: partition = device
1304# NB: mountpt = where the device is mounted
1305
[134]1306 [ -e "$MY_FSTAB" ] || Die "Cannot find your fstab file ($MY_FSTAB)"
[1]1307
[134]1308 rm -f $mountlist
1309 mkdir -p $mountlist
1310 rm -Rf $mountlist
1311 > $mountlist
1312 echo -en "\rHang on...\r"
1313 all_partitions=""
1314
1315 if [ -d "/proc/lvm" ] || [ -d "/dev/mapper" ]; then
[1]1316 echo -en "\rAnalyzing LVM...\r"
[519]1317 all_partitions=`$MINDI_LIB/analyze-my-lvm | fgrep ">>>" | cut -d' ' -f2-32`
[134]1318 fi
1319 all_partitions="$all_partitions `ListAllPartitions 2> /dev/null`"
[1]1320# echo "all partitions = $all_partitions" > /dev/stderr
[134]1321 for i in $IMAGE_DEVS ; do
1322 mount | fgrep "$i " > /dev/null 2> /dev/null && Die "Sorry, $i is already mounted! CANNOT DO IMAGEDEV on it if it's mounted."
1323 done
[277]1324 [ "$IMAGE_DEVS" != "" ] && all_partitions="`echo "$all_partitions $IMAGE_DEVS" | tr ' ' '\n' | sort -u | tr '\n ' ' '`"
[134]1325 printf " %-15s %-15s %-15s %-15s\n" DEVICE MOUNTPOINT FORMAT "SIZE (MB)"
1326 for c_p in $all_partitions ; do
[1]1327# echo "c_p = $c_p" > /dev/stderr
1328 [ "`echo "/dev/floppy /dev/fd0h1440 /dev/fd0H1440 /dev/cdrom /dev/cdrom/cdrom /dev/cdrom/cdrom1 /dev/cdrom/cdrom2 /dev/cdrom0 /dev/cdrom1 /dev/cdrom2 /dev/cdrom3 /dev/cdrw" | fgrep "$c_p"`" != "" ] || [ "`echo "$c_p" | fgrep "/dev/scd"`" != "" ] || [ "`echo "$c_p" | fgrep "/dev/ram"`" != "" ] || [ "`echo "$c_p" | grep ":"`" != "" ] || [ "`echo "$c_p" | fgrep ":/"`" != "" ] && continue
[134]1329 [ "`echo "/dev/scd0 /dev/scd1 /dev/sr0 /dev/sr1 /dev/cdrom /dev/cdrom1" | fgrep "$c_p"`" ] && continue
[1]1330 [ "`echo "$c_p" | grep -x "/dev/cdroms.*"`" ] && continue
1331 if [ -h "$c_p" ] && [ "`echo "$c_p" | fgrep "/dev/hd"`" = "" ] && [ "`echo "$c_p" | fgrep "/dev/sd"`" = "" ] && [ "`echo "$c_p" | fgrep "/dev/md"`" = "" ] ; then
[519]1332 current_partition=`ResolveSoftlink $c_p`
[134]1333 [ "`echo "$current_partition" | fgrep "/dev/mapper"`" != "" ] && current_partition="$c_p"
[519]1334 [ "`echo "/dev/scd0 /dev/scd1 /dev/sr0 /dev/sr1 /dev/cdrom /dev/cdrom1" | fgrep "$current_partition"`" ] && continue
[1]1335 else
[134]1336 current_partition="$c_p"
[1]1337 fi
1338 [ "$c_p" = "none" ] && continue
[519]1339 absolute_partition=`ResolveSoftlink $c_p`
[275]1340 partition_mountpt=`tr -s '\t' ' ' < $MY_FSTAB | grep -w "$current_partition" | grep -vx " *#.*" | $AWK '{print $2}' | head -n1`
[519]1341
1342 # This part tries to retrieve the correct device from a LABEL line in /etc/fstab
1343 # current_partition contains only first column of /etc/fstab
[1]1344 redhat_label=""
[519]1345 if [ "`echo "$current_partition" | /bin/grep -f -i "LABEL="`" != "" ] ; then
[134]1346 str_to_find_fmt_with=$current_partition
[519]1347 redhat_label=`echo "$current_partition" | /bin/cut -d'=' -f2`
1348 actual_dev=""
1349
1350 # 1st try : blkid, the good way
1351 if [ -x "/sbin/blkid" ] ; then
1352 actual_dev=`/sbin/blkid | grep "$current_partition" | /bin/cut -d':' -f1`
1353 fi
1354 # 2nd try, which works on a standard partition (ext2/3), but not on swap
1355 if [ $actual_dev="" ] ; then
1356 actual_dev=`/bin/mount -l | /bin/grep " [$redhat_label]" | /bin/cut -d' ' -f1`
1357 fi
1358 # 3rd try, with vol_id (which works with swap)
1359 if [ $actual_dev="" -a -x "/sbin/vol_id" ] ; then
1360 list_swaps=`cat /proc/swaps | /bin/grep "/dev/" | /bin/awk '{ print $1 }' `
1361 for dev_swap in $list_swaps ; do
1362 dev_exists=`/sbin/vol_id $dev_swap | /bin/grep -f "$redhat_label"`
1363 if [ -n "$dev_exists" ] ; then
1364 actual_dev=$dev_swap
1365 break;
1366 fi
1367 done
1368 fi
1369 # 4th try : pre-formated LABEL. Format is : LABEL=SWAP-mydevice. e.g. : LABEL=SWAP-hda5
1370 if [ $actual_dev="" -a "`echo "$current_partition" | /bin/grep -f -i "LABEL=SWAP"`" != ""] ; then
1371 actual_dev="/dev/`echo "$redhat_label" | /bin/cut -d '-' -f2`"
1372 fi
1373 # Check if one of all those tries has known success
1374 if [ $actual_dev != "" ] ; then
1375 current_partition=$actual_dev
1376 else
1377 Die "Your system uses a labelled swap partition, but you lack the tool to su
1378pport it.\nPlease replace swap labels with their correct devices in /etc/fstab\n"
1379 fi
[1]1380 else
[134]1381 str_to_find_fmt_with=$current_partition
[1]1382 fi
[519]1383
[1]1384 partition_format=`$AWK '$1 == "'"$str_to_find_fmt_with"'" {print $3}' $MY_FSTAB`
1385 if [ -d "/proc/lvm" ] && [ "`lvdisplay $current_partition 2> /dev/null`" ] ; then
[134]1386 partition_size="lvm"
[1]1387 elif [ -d "/dev/mapper" ] && [ "`lvm lvdisplay $current_partition 2> /dev/null`" ] ; then
[134]1388 partition_size="lvm"
[1]1389 else
[134]1390 partition_size=`SizeOfPartition $current_partition`
1391 [ "`echo "$current_partition" | grep "[0-9]"`" = "" ] && continue
1392 [ "`echo "$current_partition" | grep -c "^/"`" -ne "1" ] && continue
1393 if [ "$partition_format" = "swap" ] || [ "$partition_mountpt" = "swap" ] ; then
[1]1394 partition_size=`fgrep -v "Priority" /proc/swaps | tr -s '\t' ' ' | fgrep "$current_partition" | $AWK '{print $3}'`
1395 [ "$partition_mountpt" != "swap" ] && partition_mountpt="swap"
[134]1396 [ "$partition_format" != "swap" ] && partition_format="swap"
[1]1397 if [ "$partition_size" = "" ] ; then
1398 totalsize=0
1399 items=0
[275]1400 for i in `tr -s ' ' '\t' < /proc/swaps | fgrep -v "Filename" | cut -f3` ; do
[1]1401 totalsize=$(($totalsize+$i))
1402 items=$(($items+1))
1403 done
[134]1404 [ "$items" -gt "0" ] && partition_size=$(($totalsize/$items)) || partition_size=0
[1]1405 [ "$partition_size" -lt "125000" ] && partition_size=125000
1406 echo "I'm guessing $c_p is $(($partition_size/1024))MB" >> $LOGFILE
1407 fi
[134]1408 fi
[1]1409 fi
1410 [ "$partition_mountpt" = "swap" ] && partition_format="swap"
1411 [ "$partition_format" = "swap" ] && partition_mountpt="swap"
1412 if [ "$partition_mountpt" = "" ] ; then
[134]1413 if [ "`pvdisplay $current_partition 2> /dev/null`" != "" ] || [ "`lvm pvdisplay $current_partition 2> /dev/null`" != "" ] ; then
[1]1414 if [ "`fgrep device /etc/raidtab 2> /dev/null | grep -w $current_partition`" ] ; then
1415 partition_mountpt="raid"
1416 partition_format="raid"
1417 else
1418# lvm_dev="`pvdisplay $current_partition | grep -i "VG N" | head -n1 | tr -s ' ' ' ' | cut -d' ' -f3`"
1419 partition_mountpt="lvm"
1420 partition_format="lvm"
1421 fi
[134]1422 fi
[1]1423 fi
1424 psz=$partition_size
1425 echo "Examining $current_partition (mount=$partition_mountpt fmt=$partition_format psz=$psz)" >> $LOGFILE
1426 [ "$psz" != "lvm" ] && psz=$(($psz/1024))
1427 if [ "`echo " $IMAGE_DEVS " | fgrep " $current_partition "`" != "" ] ; then
[134]1428 partition_mountpt="image"
1429 old_partition_fmt=$partition_format
[1]1430# partition_format="`$FDISK -l 2>> $LOGFILE | tr -s '\t' ' ' | grep -w "$absolute_partition" | $AWK 'x=$(NF-1}'`"
[134]1431 partition_format="`$FDISK -l 2>> $LOGFILE | tr '*' ' ' | tr '+' ' ' | tr -s ' ' '\t' | grep -w "$absolute_partition" | cut -f5`"
1432 echo "------- $FDISK -l log ------------" >> $LOGFILE
1433 cat $FDISKLOG >> $LOGFILE
1434 echo "------- $FDISK log end ------------" >> $LOGFILE
1435 partition_size=$(($partition_size+1)); # just in case
1436 if [ "$partition_format" = "Linux" ] ; then
1437 echo "Are you imaging a mounted swap partition? Silly..." >> $LOGFILE
1438 echo "Reverting format from $old_partition_fmt to $partition_format" >> $LOGFILE
1439 partition_format=$old_partition_fmt
1440 fi
[1]1441 fi
[134]1442 if [ "$EXCLUDE_DEVS" ] && [ "`echo " $EXCLUDE_DEVS " | fgrep " $current_partition "`" ] || [ "`echo " $EXCLUDE_DEVS " | grep " $current_partition "`" ] ; then
1443 echo "Excluding $current_partition from mountlist" >> $LOGFILE
1444 continue
1445 fi
1446 if [ ! "$partition_mountpt" ] ; then
1447 for qq in "" `find /dev/ida/c*d* ! -name '*p*'` ; do
[1]1448 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]1449 echo "------- $FDISK -l $qq log ------------" >> $LOGFILE
[134]1450 cat $FDISKLOG >> $LOGFILE
1451 echo "------- $FDISK log end ------------" >> $LOGFILE
[1]1452 [ "$partition_format" ] && break
[134]1453 done
1454 if [ "$partition_format" = "Compaq diagnostics" ] ; then
[1]1455 partition_format="compaq"
[134]1456 elif [ ! "`fgrep device /etc/raidtab 2> /dev/null | grep -w $current_partition`" ] ; then
[258]1457 LogIt "Unable to find mountpoint of $current_partition - ignoring\n"
[1]1458 continue
[134]1459 fi
[1]1460 fi
1461 partition_format="`echo "$partition_format" | cut -d',' -f1`"; # in case user has ext3,ext2 or something dumb like that
1462 [ "$partition_format" = "auto" ] && partition_format="`mount | grep -w $current_partition | awk '{print$5;}'`"; # in case user uses 'auto' (dumb!)
1463 unofficial_outstring=`printf "\t%-15s %-15s %-15s %7s\n" $current_partition $partition_mountpt $partition_format $psz`
1464 if [ "$current_partition" = "" ] ; then
[134]1465 echo "Unknown partition (outstring = $unofficial_outstring)" >> $LOGFILE
[1]1466 elif [ "$partition_mountpt" = "" ] && [ -f "/etc/raidtab" ] ; then
[273]1467 if [ "`fgrep device /etc/raidtab 2>/dev/null | fgrep $current_partition`" ] ; then
[1]1468 partition_mountpt=raid
1469 partition_format=raid
[134]1470 printf "\t%-15s %-15s %-15s %7s %-15s\n" $current_partition $partition_mountpt $partition_format $psz "$redhat_label"
1471 printf "%s %s %s %s %s\n" $current_partition $partition_mountpt $partition_format $partition_size "$redhat_label" >> $mountlist
1472 else
[1]1473 echo "Unknown mountpoint (outstring = $unofficial_outstring)" >> $LOGFILE
[134]1474 fi
1475 elif [ "$partition_format" = "" ] ; then
1476 echo "Unknown format (outstring = $unofficial_outstring)" >> $LOGFILE
[1]1477 elif [ "$partition_size" = "" ] ; then
[134]1478 echo "Unknown partition size (outstring = $unofficial_outstring)" >> $LOGFILE
[1]1479 elif [ "$partition_mountpt" = "/proc" ] || [ "$partition_mountpt" = "/dev/pts" ] ; then
[134]1480 continue
[1]1481 else
[134]1482 if [ "$partition_format" = "dos" ] || [ "$partition_format" = "msdos" ] ; then
1483 echo "Stupid bastard..." >> $LOGFILE
1484 partition_format="vfat"
1485 fi
1486 printf "\t%-15s %-15s %-15s %7s %-15s\n" $current_partition $partition_mountpt $partition_format $psz "$redhat_label"
1487 printf "%s %s %s %s %s\n" $current_partition $partition_mountpt $partition_format $partition_size "$redhat_label" >> $mountlist
[1]1488 fi
[134]1489 done
[1]1490}
1491
1492
1493
1494
1495
1496
1497MakeSureNumberIsInteger() {
[134]1498 res=`echo "$1" | tr -s '\-[0-9]' ' '`
1499 if [ "$res" != " " ] && [ "$res" != "" ] ; then
[1]1500 echo "result = '$res'"
[134]1501 Die "$1 should be an integer"
1502 fi
[1]1503}
1504
1505
1506
1507
1508
1509MakeSyslinuxMessageFile() {
[134]1510 mkdir -p $1
1511 rmdir $1
1512 echo -en " " > $1
[273]1513 if [ "`fgrep -i "debian" /etc/issue.net 2> /dev/null`" ] ; then
[275]1514 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]1515 else
[275]1516 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]1517 fi
[275]1518 sed s/%r/"`uname -r`"/ $1.tmp | sed s/%t/"`hostname`"/ > $1
[134]1519 rm -f $1.tmp
1520 if [ "$CDRECOVERY" != "yes" ] ; then
1521 if [ -e "$MONDO_TMP/start-nfs" ] ; then
1522 echo -en "Press <enter> to continue.\n" >> $1
1523 elif [ ! "$MONDO_TMP" ] ; then
1524 echo -en "FYI, this is _not_ a Mondo Rescue CD.\n" >> $1
[179]1525 if [ -e "$MINDI_LIB/memtest.img" ] ; then
[134]1526 echo -en "Type 'memtest' <Enter> to test your PC's memory intensively.\nJust press <Enter> to go to the main test menu.\n" >> $1
1527 fi
1528 else
1529 echo -en "$BOOT_MEDIA_MESSAGE" >> $1
1530 fi
1531 else
1532 echo -en " \
[1]1533To restore your disk to factory defaults, type 'RESTORE' <enter>.\n\
1534CAUTION: THIS WILL ERASE YOUR WHOLE DISK !!!\n" >> $1
[134]1535 fi
[1]1536}
1537
1538
1539
1540
1541MoveHyperlinkSensibly() {
[134]1542 local filename minidir_root resides_on_diskno noof_disks old_diskno d old_pwd
1543 filename=$1
1544 minidir_root=$2
1545 resides_on_diskno=$3
1546 noof_disks=$4
[1]1547
[134]1548 [ -h "$minidir_root/$resides_on_diskno/$filename" ] || Die "$filename isn't a softlink (or doesn't exist): how can I move it sensibly?"
[1]1549
[134]1550 old_diskno=$resides_on_diskno
1551 d=1
1552 while [ "$d" -le "$noof_disks" ] ; do
1553 if [ "$d" -ne "$old_diskno" ] ; then
1554 old_pwd=`pwd`
1555 cd $minidir_root/$old_diskno
1556 cp --parents -Rdf $filename $minidir_root/$d/ || Die "Can't move $filename (sensibly) from $old_diskno to $d"
1557 rm -f $filename
1558 cd $old_pwd
1559 fi
[1]1560# when the softlink is resolvable, our work here is done
[134]1561 [ -e "$minidir_root/$d/$filename" ] && return 0
1562 old_diskno=$d
1563 d=$(($d+1))
1564 done
1565 return 1
[1]1566}
1567
1568
1569
1570OfferToCopyImagesToDisks() {
[134]1571 local imagesdir i imagename dev count boot_dev data_dev
1572 imagesdir=$1
1573 boot_dev=$2
1574 data_dev=$3
1575 echo -en "Would you like to create boot+data floppy disks now (y/n) ?"
1576 read i
1577 [ "$i" != "y" ] && [ "$i" != "Y" ] && return
1578 mount | fgrep /dev/fd > /dev/null && Die "Please unmount your floppies first."
1579 echo "WARNING! THIS WILL ERASE YOUR FLOPPY DISKS."
1580 [ ! -e "$boot_dev" ] && Die "Cannot find $boot_dev - is your Linux distro broken?"
1581 [ ! -e "$data_dev" ] && Die "Cannot find $data_dev - is your Linux distro broken?"
1582 i=`find $imagesdir -type f | fgrep "/mindi-root.1" 2> /dev/null`
[291]1583 j=`find $imagesdir -type f | fgrep "/mindi-boot" | egrep -v '2880|5760'`
[1]1584# echo "i=$i"
1585# echo "j=$j"
[134]1586 if [ "$i" ] ; then
1587 CopyImageToDisk $j $data_dev "boot disk"
1588 CopyImageToDisk $i $data_dev "root disk"
1589 else
1590 CopyImageToDisk $j $boot_dev "boot/root disk"
1591 fi
1592 count=1
1593 for i in `find $imagesdir | fgrep mindi-data` ; do
1594 CopyImageToDisk $i $data_dev "data disk #$count"
1595 count=$(($count+1))
1596 done
[1]1597}
1598
1599
1600
1601OfferToMakeBootableISO() {
[134]1602 local i old_pwd
1603 if [ "$PROMPT_MAKE_CD_IMAGE" = "yes" ] && [ ! "`DidMondoCallMe`" ] ; then
1604 echo -en "Shall I make a bootable CD image? (y/n) "
1605 read i
1606 [ "$i" != "y" ] && [ "$i" != "Y" ] && return 0
1607 fi
1608 if [ ! "$MONDO_TMP" ] ; then
[258]1609 LogIt "NB: Mindi's bootable CD always uses isolinux.\n"
1610 LogIt "For a bootable CD w/LILO, please use Mondo.\n"
[134]1611 fi
1612 rm -Rf $TMP_ROOT/iso
1613 mkdir -p $TMP_ROOT/iso/{images,archives,isolinux}
1614 cp -f $1/*.img $1/*.gz $TMP_ROOT/iso/images || LogIt "OfferToMakeBootableISO: Cannot copy $i to $TMP_ROOT/iso/images\n"
1615 old_pwd=`pwd`
1616 cd $TMP_ROOT/iso
1617 mkdir -p $MONDO_ROOT/iso/isolinux
[179]1618 echo "mindi_lib = $MINDI_LIB" >> $LOGFILE
1619 cp $MINDI_LIB/mem{test,disk}* $MONDO_ROOT 2>> $LOGFILE
[134]1620 for i in memdisk memtest.bin memtest.img ; do
[179]1621 j=$MINDI_LIB/$i
[1]1622 k=$TMP_ROOT/iso/isolinux
1623 if [ -e "$j" ] ; then
[258]1624 LogIt "Copying $j to $k\n"
[134]1625 cp -f $j $k || Die "Failed to copy $j to $k"
1626 cp -f $j $TMP_ROOT || Die "Failed to copy $j to $k"
[1]1627 fi
[134]1628 done
1629 MakeSyslinuxMessageFile $TMP_ROOT/iso/isolinux/message.txt
1630 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?"
1631 cp $TMP_ROOT/mindi.rdz $TMP_ROOT/iso/isolinux/initrd.img
1632 cp $TMP_ROOT/mindi.rdz $imagesdir/initrd.img
1633 [ -e "$iso_cfg_file" ] || Die "FIXME - unable to find $iso_cfg_file - this should never occur"
1634 cd $TMP_ROOT/iso/isolinux
1635 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?"
1636 if [ -e "$MONDO_TMP/start-nfs" ] ; then
[1]1637 mv isolinux.cfg isolinux.cfg.old
[275]1638 sed s/interactive/iso/ isolinux.cfg.old > isolinux.cfg
[134]1639 fi
1640 if [ "$ARCH" != "ia64" ] ; then
1641 cp $ISOLINUX isolinux.bin || Die "Cannot copy isolinux.bin ($ISOLINUX) to tmp_root - did you run out of disk space?"
[1]1642 cp $ISOLINUX ../
[134]1643 fi
1644 cd $TMP_ROOT/iso
1645 if [ "$ARCH" != "ia64" ] ; then
1646 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?"
1647 fi
[424]1648 [ "$MONDO_SHARE" ] && cp -f $MONDO_SHARE/autorun .
[134]1649 if [ -d "/home/MondoCD" ] ; then
[1]1650 cp -pRdu /home/MondoCD/* .
[134]1651 fi
1652 if [ "$ARCH" != "ia64" ] ; then
1653 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
1654 else
1655 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
1656 fi
1657 if [ "$?" -ne "0" ] ; then
[1]1658 echo "----------- mkisofs's errors --------------" >> $LOGFILE
1659 cat /tmp/$$.mk >> $LOGFILE
1660 echo "mkisofs returned the following errors:-"
1661 cat /tmp/$$.mk
1662 LogIt "Failed to create ISO image.\n"
[134]1663 else
[1]1664 echo "Created bootable ISO image at $imagesdir/mindi.iso" >> $LOGFILE
[134]1665 fi
1666 rm -f /tmp/$$.mk
1667 cd $old_pwd
[1]1668}
1669
1670
1671
1672PluralOrNot() {
[134]1673 [ "$1" -gt "1" ] && echo -en "s"
[1]1674}
1675
1676
1677
1678
1679MakeMessageFile() {
[134]1680 local disksize
1681 disksize=$1
[273]1682 if [ "`fgrep -i "debian" /etc/issue.net 2> /dev/null`" ] ; then
[275]1683 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]1684 else
[275]1685 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]1686 fi
1687 if [ "$disksize" -gt "2880" ] ; then
[1]1688 if [ "`DidMondoCallMe`" ] ; then
[134]1689 if [ "$CDRECOVERY" != "yes" ] ; then
[232]1690 if [ -e "$MONDO_TMP/start-nfs" ] ; then
1691 echo -en "Press <enter> to continue.\n"
1692 elif [ ! "$MONDO_TMP" ] ; then
1693 echo -en "FYI, this is _not_ a Mondo Rescue CD.\n"
1694 else
1695 echo -en "$BOOT_MEDIA_MESSAGE"
1696 fi
[134]1697 fi
[1]1698 fi
[134]1699 fi
1700 if [ "$CDRECOVERY" = "yes" ] ; then
1701 echo -en "\
[1]1702To restore your disk to factory defaults, type 'RESTORE' <enter>.\n\
1703CAUTION: THIS WILL ERASE YOUR WHOLE DISK !!!\n"
[134]1704 fi
1705 echo -en "\n\n\n"
[1]1706}
1707
1708
1709
1710
1711write_full_floppy_of_kernel() {
[134]1712 local mtpt image old_pwd res disksize
[1]1713
[134]1714 res=0
1715 old_pwd=`pwd`
1716 KERN_DISK_MADE=1
1717 disksize=$3
1718 rand1=$RANDOM
1719 rand2=$RANDOM
1720 image=/tmp/$rand1.$rand2.img
1721 mtpt=/tmp/$rand1.$rand2.mtpt
1722 dd if=/dev/zero of=$image bs=1k count=$disksize
1723 mke2fs -N 26 -F $image > /dev/null
1724 mkdir -p $mtpt
1725 mount -o loop $image $mtpt
1726 cd $mtpt
1727 mkdir -p {dev,tmp,boot}
1728 cp -f $1 vmlinuz
1729 if [ "$?" -ne "0" ] ; then
[258]1730 LogIt "Failed to copy $1 to ramdisk\n"
[134]1731 cd $old_pwd
1732 umount $mtpt
1733 rmdir $mtpt
1734 rm $image
1735 return 1
1736 fi
[1]1737
[134]1738 rdev vmlinuz 2,0
1739 rdev -R vmlinuz 0
1740 rdev -r vmlinuz 49152
[1]1741
[179]1742 tar -zxf $MINDI_LIB/dev.tgz || LogIt "Cannot untar dev.tgz\n"
[134]1743 losetup /dev/loop0 > /dev/null 2> /dev/null
1744 [ "$?" -eq "0" ] || losetup /dev/loop0 -d || Die "Please free up /dev/loop0 by typing 'losetup /dev/loop0 -d'.\nReboot if necessary.\n"
1745 CopyBootBFile $mtpt/boot.b
[1]1746
1747# echo "root=/dev/loop0" > bdlilo.conf
[134]1748 MakeLiloConfFile $disksize >> bdlilo.conf
[1]1749
1750# cat bdlilo.conf > /tmp/bdlilo.conf
1751
1752# cat /home/mondostuff/bdlc > bdlilo.conf
1753
[134]1754 chmod 644 bdlilo.conf
1755 MakeMessageFile $disksize > message
1756 lilo -v -C bdlilo.conf -r $mtpt
1757 res=$?
[1]1758
1759#echo "lilo -v -C bdlilo.conf -r $mtpt"
1760#echo -en "Press enter"; read line
1761
[134]1762 cd $old_pwd
1763 umount $mtpt
1764 mv -f $image $2
1765 rmdir $mtpt
[1]1766
[134]1767 return $res
[1]1768
1769# --- the kernel-only method NO LONGER WORKS. Not since Apr 2002.
1770# It should work, according to the Boot Disk HOWTO, but it doesn't.
1771# It works for my failsafe kernel & for RH7.2 but not RH7.3, 8.0, etc.
1772# -Hugo, Apr 19th 2004
1773# dd if=$1 of=$2 bs=1k &> /dev/null || Die "Cannot dd blank file"
1774# dd if=/dev/zero bs=1k count=$3 >> $2 2> /dev/null || Die "Cannot dd blank file"
1775# mv -f $2 $2.old
1776# dd if=$2.old bs=1k count=$3 of=$2 &> /dev/null || Die "Cannot dd blank file"
1777# rm -f $2.old
1778# if [ "$3" = "1440" ] ; then
1779# rdev $2 "/dev/fd0H"$3
1780# else
1781# rdev $2 "/dev/fd0u"$3
1782# fi
1783# rdev -R $2 0
1784# rdev -r $2 49152
1785}
1786
1787
1788
1789
1790
1791
1792MakeLiloConfFile() {
[134]1793 local disksize options i ooo
1794 disksize=$1
1795 options=""
1796 if [ "$ARCH" != "ia64" ] ; then
[291]1797 echo -en "boot=/dev/loop0\ndisk=/dev/loop0\n"
[134]1798 fi
1799 if [ "$disksize" -eq "2880" ] ; then
[291]1800 echo -en "bios=0x00\nsectors=36\nheads=2\ncylinders=80\n"
[134]1801 elif [ "$disksize" -eq "1722" ] ; then
[291]1802 echo -en "bios=0x00\nsectors=21\nheads=2\ncylinders=82\n"
[134]1803 elif [ "$disksize" -gt "2880" ] ; then
1804 /bin/true
1805 else
[291]1806 echo -en "bios=0x00\nsectors=18\nheads=2\ncylinders=80\n"
[134]1807 fi
1808 if [ "$ARCH" != "ia64" ] ; then
1809 echo -en "install=/boot.b\nmap=/boot.map\n"
1810 fi
1811 if [ "$CDRECOVERY" = "yes" ] ; then
1812 echo -en "default=RESTORE\n"
1813 elif [ "$disksize" -gt "2880" ] && [ "`DidMondoCallMe`" ] ; then
[291]1814 if [ -e "$MONDO_TMP/start-nfs" ] ; then
1815 echo -en "default=iso\n"
1816 else
1817 echo -en "default=interactive\n"
1818 fi
[1]1819 else
[291]1820 echo -en "default=expert\n"
[1]1821 fi
[291]1822
1823 echo -en "prompt\n"
[134]1824 if [ "$ARCH" != "ia64" ] ; then
1825 echo -en "vga=normal\nbackup=/dev/null\nmessage=/message\n"
1826 fi
1827 if [ "$CDRECOVERY" != "yes" ] ; then
[1]1828 echo -en "timeout=300\n"
[134]1829 fi
1830 echo -en "\n"
1831 if [ "$CDRECOVERY" = "yes" ] ; then
[1]1832 options="RESTORE expert"
[134]1833 elif [ "$disksize" -gt "2880" ] ; then
1834 if [ "`DidMondoCallMe`" ] ; then
1835 if [ -e "$MONDO_TMP/start-nfs" ] ; then
1836 options="iso"
1837 else
1838 options="interactive expert compare iso nuke isonuke"
[1]1839# hda hdb hdc hdd"
[134]1840 fi
1841 else
1842 options="expert"
[1]1843 fi
[134]1844 else
[291]1845 options="expert"
[134]1846 fi
1847 for i in $options ; do
[1]1848 ooo=$i
1849 [ "$ooo" = "RESTORE" ] && ooo="nuke"
[291]1850 if [ "$ARCH" = "ia64" ] ; then
[1]1851 rootpart="root=/dev/ram0\n\t"
1852 else
1853 rootpart=""
1854 fi
1855 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"
1856
1857 outstr=$outstr" $ooo_mode"
1858 outstr=$outstr"\"\n"
1859 if [ "$disksize" = "1440" ] ; then
[134]1860 echo -en "$outstr" | sed s/initrd=.*// | grep -v root=
[1]1861 else
[134]1862 echo -en "$outstr"
[1]1863 fi
[134]1864 done
[1]1865}
1866
1867
1868
1869
1870PrepareBootDiskImage_LILO() {
[134]1871 local disksize imagesdir dev imagefile mountpoint fname i kernelpath ramdisksize cfg_file testpath options retval outstr old_pwd ooo max_kernel_size liloconf
1872 imagesdir=$1
1873 disksize=$2
1874 kernelpath=$3
1875 ramdisksize=$4
[1]1876
[134]1877 retval=0
1878 [ ! -e "$kernelpath" ] && Die "PBDI - cannot find $kernelpath kernel"
1879 echo -en "Making "$disksize"KB boot disk..."
[179]1880 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]1881 if [ "$ARCH" != "ia64" ] ; then
1882 [ "$disksize" != "1722" ] && [ "$disksize" != "2880" ] && [ "$disksize" != "5760" ] && Die "PDBI - disksize is $disksize - bad size"
1883 fi
1884 echo -en "..."
1885 imagefile=$imagesdir/mindi-bootroot.$disksize.img
1886 mountpoint=$TMP_ROOT/mountpoint.$$
1887 mkdir -p $mountpoint
1888 dd if=/dev/zero of=$imagefile bs=1k count=$disksize &> /dev/null || Die "Cannot dd blank file"
1889 if [ "$ARCH" = "ia64" ] ; then
1890 mkdosfs $imagefile > /tmp/mke2fs.$$ 2>> /tmp/mke2fs.$$
[1]1891 t=vfat
[134]1892 else
1893 mke2fs -N 26 -m 0 -F $imagefile > /tmp/mke2fs.$$ 2>> /tmp/mke2fs.$$
[1]1894 t=ext2
[134]1895 fi
1896 [ "$?" -ne "0" ] && cat /tmp/mke2fs.$$
1897 rm -f /tmp/mke2fs.$$
1898 mount -t $t -o loop $imagefile $mountpoint || LogIt "Cannot mount (PBDI)\n\n"
[1]1899# copy Mindi's skeleton fs & lilo/syslinux/whatever stuff into it
[134]1900 mkdir -p $mountpoint/etc
1901 if [ "$ARCH" != "ia64" ] ; then
1902 liloconf=$mountpoint/etc/lilo.conf
1903 else
[1]1904 liloconf=$mountpoint/elilo.conf
[134]1905 fi
1906 old_pwd=`pwd`
1907 cd $mountpoint
1908 if [ "$ARCH" != "ia64" ] ; then
[179]1909 tar -zxf $MINDI_LIB/dev.tgz || LogIt "Cannot untar dev.tgz\n"
[134]1910 fi
1911 cd $old_pwd
1912 losetup /dev/loop0 > /dev/null 2> /dev/null
1913 [ "$?" -eq "0" ] || losetup /dev/loop0 -d || Die "Please free up /dev/loop0 by typing 'losetup /dev/loop0 -d'.\nReboot if necessary.\n"
1914 CopyBootBFile $mountpoint/boot.b
[1]1915
[134]1916 MakeLiloConfFile $disksize > $liloconf
[1]1917
[134]1918 echo "Copying $TMP_ROOT/mindi.rdz to $mountpoint..." >> $LOGFILE
1919 cp -f $TMP_ROOT/mindi.rdz $mountpoint 2>> $LOGFILE
1920 if [ "$?" -ne "0" ] ; then
[1]1921 LogIt "Failed to copy $TMP_ROOT/mindi.rdz to $mountpoint\n"
1922 cat $TMP_ROOT/mtpt.$$ >> $LOGFILE
1923 LogIt "Please unload some of your modules and try again.\n"
1924 rm -f $TMP_ROOT/mtpt.$$
[258]1925 LogIt "Cannot incorporate mindi.rdz in bootdisk (kernel / modules too big?)\n"
[134]1926 retval=$(($retval+1))
1927 fi
1928 MakeMessageFile $disksize > $mountpoint/message
[1]1929
[134]1930 mkdir -p $mountpoint/tmp
1931 cp -f $TMP_ROOT/mondo-restore.cfg $mountpoint/tmp &> /dev/null
[179]1932 if [ -e "$MINDI_LIB/memtest.img" ] ; then
[134]1933 echo -en "image=/memtest.bin\nlabel=memtest\nn" >> $liloconf
1934 echo -en "image=/memdisk\nlabel=memtest\nappend=\"initrd=memtest.img\"\n" >> $liloconf
[1]1935# echo "Yep, this is a multi-function CD" > $mountpoint/MULTIFUNC
[134]1936 fi
1937 if [ -d "/home/MondoCD" ] ; then
[1]1938 cp -pRdu /home/MondoCD/* . || Die "Cannot do kung pow"
[134]1939 fi
[1]1940
1941# copy the kernel across
[134]1942 rm -Rf $mountpoint/lost+found
1943 dd if=/dev/zero of=$mountpoint/zero bs=1k count=16 &> /dev/null
[305]1944 free_space=`df -k -P $mountpoint | tail -n1 | tr -s ' ' '\t' | cut -f4`
[134]1945 cp -f $kernelpath $mountpoint/vmlinuz > /dev/null 2> /dev/null
1946 if [ "$?" -ne "0" ] || [ "$FORCE_DUAL_FLOPPIES" = "yes" ] ; then
[1]1947 echo "Files at mountpoint ($mountpoint) :-" >> $LOGFILE
1948 du -sk $mountpoint/* >> $LOGFILE
1949 echo "--- end of list of files ---" >> $LOGFILE
1950 echo -en "Kernel size = `du -sk $kernelpath | cut -f1` K\nRamdisk free = $free_space K\n\
1951Sorry, your kernel is too big for a boot/root floppy.\nI'll try the new boot/root two-disk thingy.\n" >> $LOGFILE
[134]1952 rm -f $mountpoint/vmlinuz
[1]1953 cd $old_pwd
[134]1954 umount $mountpoint || Die "Cannot unmount mountpoint ($mountpoint)"
1955 rmdir $mountpoint || LogIt "Cannot rmdir (PBDI)\n"
[1]1956# losetup /dev/loop0 -d
1957 res=0
[134]1958 write_full_floppy_of_kernel $kernelpath $imagesdir/mindi-boot.1440.img 1440
[1]1959 res=$(($res+$?))
[134]1960 cp -f $TMP_ROOT/mindi.rdz $imagesdir/mindi-root.1440.img
[1]1961 res=$(($res+$?))
1962 rm -f $imagefile
[381]1963 if [ "$res" -ne "0" ]; then
1964 LogIt "Warning - failed to create 1.44MB boot/root floppies\n"
1965 rm -f $imagesdir/mindi-*.1440.img
1966 fi
[1]1967 return $res
[134]1968 fi
[305]1969 free_space=`df -k -P $mountpoint | tail -n1 | tr -s ' ' '\t' | cut -f4`
[134]1970 max_kernel_size=$(($free_space+`du -sk $kernelpath | cut -f1`))
1971 echo "Free space left on floppy = $free_space KB" >> $LOGFILE
1972 echo "Max kernel size on $disksize KB floppy (est'd) = $max_kernel_size K" >> $LOGFILE
[1]1973# make it bootable
[134]1974 rm -f $mountpoint/zero
[179]1975 [ -e "$MINDI_LIB/memdisk" ] && cp -f $MINDI_LIB/memdisk $mountpoint
[134]1976 if [ "$disksize" -gt "2880" ] && [ ! "$KERN_DISK_MADE" ] ; then
1977 if [ "$ARCH" != "ia64" ] ; then
1978 $LILO_EXE $LILO_OPTIONS -r $mountpoint >> $LOGFILE 2>> $LOGFILE
1979 else
1980 /bin/true
1981 fi
1982 elif [ ! "$KERN_DISK_MADE" ] ; then
[1]1983# 12/28/2001 - if 1.72MB floppy then don't use LILO's optimizations at all
1984 $LILO_EXE -r $mountpoint >> $LOGFILE 2>> $LOGFILE
[134]1985 else
[1]1986 echo "Not running LILO. It's not that kind of disk." >> $LOGFILE
[134]1987 fi
1988 if [ $? -ne "0" ] ; then
[273]1989 if [ "`fgrep "/tmp/dev.0" $LOGFILE`" ] ; then
[134]1990 LogIt "The '/tmp/dev.0' error is NOT Mindi's fault. It is LILO's.\n"
1991 LogIt "Please reboot your PC as a workaround.\n"
1992 Die "LILO sneezed and Mindi caught a cold. Please read the README / FAQ.\n"
[1]1993 fi
1994 echo "$LILO_EXE -r $mountpoint ...failed."
1995 echo -en "Press ENTER to continue."; read line
1996 LogIt "Cannot run lilo on $mountpoint\nPlease upgrade/downgrade your version of LILO. It has a bug.\n"
1997 retval=$(($retval+1))
[134]1998 fi
1999 cp -f $liloconf /tmp/lilo.conf
2000 if [ "$ARCH" = "ia64" ] ; then
2001 cp `dirname $kernelpath`/*.efi $mountpoint
2002 fi
2003 umount $mountpoint || Die "Cannot unmount mountpoint ($mountpoint)"
2004 echo -en "..."
2005 rmdir $mountpoint || LogIt "Cannot rmdir (PBDI)\n"
2006 if [ "$retval" -eq "0" ] ; then
[148]2007 echo -en "...$DONE\r"
2008 if [ "$KERN_DISK_MADE" ] ; then
2009 LogIt "... $disksize KB boot disks were created OK\r"
2010 fi
[1]2011 else
[148]2012 echo -en "...failed\r"
2013 LogIt $disksize"KB boot disk was NOT created\r"
2014 rm -f $imagefile
[1]2015 fi
[134]2016 [ "$retval" -ne "0" ] && LogIt "PrepareBootDiskImage() is returning nonzero\n"
2017 return $retval
[1]2018}
2019
2020
2021
2022
2023PrepareBootDiskImage_SYSLINUX() {
[134]2024 local disksize imagesdir dev imagefile mountpoint fname i kernelpath ramdisksize cfg_file testpath options retval outstr old_pwd ooo max_kernel_size bootimage
2025 imagesdir=$1
2026 disksize=$2
2027 kernelpath=$3
2028 ramdisksize=$4
2029 do_boot_root_thingy=""
2030 local retval old_pwd
2031 retval=0
2032 [ ! -e "$kernelpath" ] && Die "PBDI - cannot find $kernelpath kernel"
2033 echo -en "Making "$disksize"KB boot disk..."
[179]2034 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]2035 [ "$disksize" != "1722" ] && [ "$disksize" != "2880" ] && [ "$disksize" != "5760" ] && Die "PDBI - disksize is $disksize - bad size"
2036 echo -en "..."
2037 imagefile=$imagesdir/mindi-bootroot.$disksize.img
2038 mountpoint=$TMP_ROOT/mountpoint.$$
2039 mkdir -p $mountpoint
[1]2040# If I format a 1722KB data file & run syslinux on it, the resultant image
2041# won't boot. So, I have formatted a floppy, called syslinux on/to it, and
2042# used 'dd' to copy it to sys-disk.raw (zipped to sys-disk.raw.gz).
2043# If I extract it, mount it, copy my files to it, etc. then the resultant
2044# image _is_ bootable. I don't know why syslinux and/or mkfs.vfat won't
2045# play nicely and I don't care. :) I have worked around the problem. -Hugo, 06/27/2002
[134]2046 if [ "$disksize" = "1722" ] ; then
[179]2047 gzip -dc $MINDI_LIB/sys-disk.raw.gz > $imagefile || Die "Cannot dd blank file"
[134]2048 else
2049 dd if=/dev/zero of=$imagefile bs=1k count=$disksize &> /dev/null || Die "Cannot dd blank file"
2050 mkfs.vfat $imagefile
2051 syslinux $imagefile
2052 fi
2053 mount -t vfat -o loop $imagefile $mountpoint || LogIt "Cannot mount (PBDI)\n\n"
[1]2054# copy Mindi's skeleton fs & lilo/syslinux/whatever stuff into it
[134]2055 old_pwd=`pwd`
2056 MakeSyslinuxMessageFile $mountpoint/message.txt
2057 cd $mountpoint
2058 [ -e "$sys_cfg_file" ] || Die "Obi Wan, word up?"
[179]2059# tar -zxf $MINDI_LIB/dev.tgz || LogIt "Cannot untar dev.tgz\n" <--- present for LILO; is it nec. for SYSLINUX too?
[134]2060 cat $sys_cfg_file | HackSyslinuxFile $ramdisk_size $mountpoint > syslinux.cfg || Die "Cannot copy syslinux.cfg from mindi_home to tmp_root"
2061 if [ -e "$MONDO_TMP/start-nfs" ] ; then
[289]2062 mv syslinux.cfg syslinux.cfg.orig
2063 sed s/interactive/iso/ syslinux.cfg.orig > syslinux.cfg
[134]2064 fi
2065 cd $old_pwd
2066 echo "Copying $TMP_ROOT/mindi.rdz to $mountpoint/initrd.img..." >> $LOGFILE
2067 cp -f $TMP_ROOT/mindi.rdz $mountpoint/initrd.img 2>> $LOGFILE
2068 if [ "$?" -ne "0" ] ; then
[289]2069 LogIt "Failed to copy $TMP_ROOT/mindi.rdz to $mountpoint\n"
2070 cat $TMP_ROOT/mtpt.$$ >> $LOGFILE
2071 LogIt "Please unload some of your modules and try again.\n"
2072 rm -f $TMP_ROOT/mtpt.$$
2073 LogIt "Cannot incorporate mindi.rdz in bootdisk (kernel / modules too big?)\n"
[134]2074 retval=$(($retval+1))
2075 fi
[1]2076
[134]2077 mkdir -p $mountpoint/tmp
2078 cp -f $TMP_ROOT/mondo-restore.cfg $mountpoint/tmp &> /dev/null
[1]2079
2080# copy the kernel across
[134]2081 rm -Rf $mountpoint/lost+found
2082 dd if=/dev/zero of=$mountpoint/zero bs=1k count=16 &> /dev/null
[305]2083 free_space=`df -k -P $mountpoint | tail -n1 | tr -s ' ' '\t' | cut -f4`
[134]2084 cp -f $kernelpath $mountpoint/vmlinuz &> /dev/null
2085 if [ "$?" -ne "0" ] || [ "$FORCE_DUAL_FLOPPIES" = "yes" ] ; then
[289]2086 echo "Files at mountpoint ($mountpoint) :-" >> $LOGFILE
2087 du -sk $mountpoint/* >> $LOGFILE
2088 echo "--- end of list of files ---" >> $LOGFILE
2089 echo -en "Kernel size = `du -sk $kernelpath | cut -f1` K\nRamdisk free = $free_space K\n\
[1]2090Sorry, your kernel is too big for a boot/root floppy.\nI'll try the new boot/root two-disk thingy.\n" >> $LOGFILE
[134]2091 rm -f $mountpoint/vmlinuz
[289]2092 cd $old_pwd
[134]2093 umount $mountpoint || Die "Cannot unmount mountpoint ($mountpoint)"
2094 rmdir $mountpoint || LogIt "Cannot rmdir (PBDI)\n"
[1]2095# losetup /dev/loop0 -d
2096
[134]2097 res=0
2098 write_full_floppy_of_kernel $kernelpath $imagesdir/mindi-boot.1440.img 1440
2099 res=$(($res+$?))
2100 cp -f $TMP_ROOT/mindi.rdz $imagesdir/mindi-root.1440.img
2101 res=$(($res+$?))
2102 rm -f $imagefile
[381]2103 if [ "$res" -ne "0" ]; then
2104 LogIt "Warning - failed to create 1.44MB boot/root floppies\n"
2105 rm -f $imagesdir/mindi-*.1440.img
2106 fi
[134]2107 return $res
2108 fi
[305]2109 free_space=`df -k -P $mountpoint | tail -n1 | tr -s ' ' '\t' | cut -f4`
[134]2110 max_kernel_size=$(($free_space+`du -sk $kernelpath | cut -f1`))
2111 echo "Free space left on floppy = $free_space KB" >> $LOGFILE
2112 echo "Max kernel size on $disksize KB floppy (est'd) = $max_kernel_size K" >> $LOGFILE
[1]2113# make it bootable
[134]2114 rm -f $mountpoint/zero
2115 mkdir -p $mountpoint/etc
[179]2116 [ -e "$MINDI_LIB/memdisk" ] && cp -f $MINDI_LIB/memdisk $mountpoint
[134]2117 umount $mountpoint || Die "Cannot unmount mountpoint ($mountpoint)"
2118 echo -en "..."
2119 rmdir $mountpoint || LogIt "Cannot rmdir (PBDI)\n"
[1]2120
[134]2121 if [ "$retval" -eq "0" ] ; then
2122 echo -en "...$DONE\r"
2123 if [ "$KERN_DISK_MADE" ] ; then
2124 rm -f $imagefile
[148]2125 LogIt "... $disksize KB boot disks were created OK\r"
[134]2126 fi
2127 else
[148]2128 echo -en "...failed\r"
2129 LogIt $disksize"KB boot disk was NOT created\r"
2130 rm -f $imagefile
[134]2131 fi
2132 [ "$retval" -ne "0" ] && LogIt "PrepareBootDiskImage() is returning nonzero\n"
2133 return $retval
[1]2134}
2135
2136
2137
2138
2139PrepareDataDiskImages() {
[134]2140 local needlist bigdir minidir_root tardir diskdir imagesdir res i j k old_pwd lines
[1]2141
[134]2142 imagesdir=$1
2143 rm -f $imagesdir/mindi-*.img $imagesdir/[0-9]*.tar.gz $imagesdir/mindi.iso
2144 needlist=$TMP_ROOT/what-we-need.txt
2145 bigdir=$TMP_ROOT/bigdir
2146 minidir_root=$TMP_ROOT/minidir
2147 mkdir -p $minidir_root
2148 mkdir -p $bigdir/usr/bin
2149 tardir=$TMP_ROOT/tardir
[1]2150
[273]2151 lines=`grep -vx " *#.*" $MINDI_CONF/deplist.txt | grep -vx "" | wc -l`
[134]2152 cat $MINDI_CONF/deplist.txt | GenerateGiantDependencyList $needlist $lines
2153 res=$?
2154 if [ "$YOUR_KERNEL_SUCKS" ]; then
[1]2155 pwd=`pwd`
2156 cd $TMP_ROOT
[134]2157 for i in `ListKernelModulePaths | HackPathsToFailsafe` ; do
2158 cp --parents -pRdf ./$i $bigdir || Die "PDDI can't cp $i->$bigdir"
2159 if [ "`du -sk $i | cut -f1`" -lt "$(($CHOPSIZE*2))" ] ; then
[1]2160 cp --parents -pRdf $i $bigdir
[134]2161 else
[1]2162 ChopUpAndCopyFile $i $bigdir $CHOPSIZE $BIGNO
2163 BIGNO=$(($BIGNO+1))
[134]2164 fi
[1]2165 done
2166 for i in $EXTRA_MODS ; do
[134]2167 j=`find lib/modules/$FAILSAFE_KVER -name $i.*o 2> /dev/null`
2168 [ ! "$j" ] && echo "Warning - cannot find failsafe module $i.o" >> $LOGFILE
2169 for k in $j ; do
[1]2170 if [ "`du -sk $k | cut -f1`" -lt "$CHOPSIZE" ] ; then
2171 cp --parents -pRdf $k $bigdir
2172 else
2173 ChopUpAndCopyFile $k $bigdir $CHOPSIZE $BIGNO
2174 BIGNO=$(($BIGNO+1))
2175 fi
2176 echo "Added failsafe module $k to ramdisk" >> $LOGFILE
[134]2177 done
[1]2178 done
2179 cd $pwd
[134]2180 else
[1]2181 ListKernelModulePaths >> $needlist
[134]2182 fi
2183 if [ "$res" -ne "0" ] ; then
2184 Die "You have $res file`PluralOrNot $res` present in dependency list\nbut absent from filesystem."
2185 fi
2186 FindAndAddUserKeyboardMappingFile
2187 mkdir -p $bigdir/tmp
2188 if [ "`DidMondoCallMe`" ] ; then
2189 MakeMondoConfigFile $TMP_ROOT/mondo-restore.cfg
2190 cp -f $TMP_ROOT/mondo-restore.cfg $bigdir/tmp &> /dev/null
2191 cp -f $TMP_ROOT/mondo-restore.cfg $CACHE_LOC &> /dev/null
2192 fi
2193 [ -d "/mnt/.boot.d" ] && echo "Oh Jebus" > $bigdir/tmp/DUMBASS-GENTOO
2194 DropOptimizedLibraries $needlist $bigdir
2195 echo -en "Assembling dependency files"
2196 CopyDependenciesToDirectory < $needlist $bigdir
[1]2197
2198# also copy io.sys and msdos.sys, if we can find them
[134]2199 for i in `mount | cut -d' ' -f3` ; do
[1]2200 for j in io.sys msdos.sys ; do
[134]2201 [ -e "$i/$j" ] && cp -f $i/$j $bigdir
[1]2202 done
[134]2203 done
[1]2204
2205# master boot record, too
[134]2206 i=`cat $MONDO_TMP/BOOTLOADER.DEVICE 2> /dev/null`
2207 if [ "$i" ] ; then
[258]2208 LogIt "Backing up $i's MBR\n"
[1]2209 dd if=$i of=$bigdir/BOOTLOADER.MBR bs=446 count=1 >> $LOGFILE 2>> $LOGFILE
2210# < < E O F
2211 sleep 1
2212 sync
2213# [ "$?" -ne "0" ] && echo "Failed to save $i's MBR to bigdir" >> $LOGFILE
2214 j=$i
2215 [ -h "$j" ] && j=`ResolveSoftlink $j`
[258]2216 LogIt "Creating /dev/boot_device ($j)\n"
[1]2217 mkdir -p $bigdir/dev
2218 cp -pRdf $j $bigdir/dev/boot_device || Die "Unable to create /dev/boot_device on ramdisk"
[134]2219 fi
[1]2220
2221# more stuff
[179]2222# cp -f $MINDI_LIB/embleer* $bigdir
[134]2223 old_pwd=`pwd`
2224 cd $bigdir
[1]2225
[179]2226 [ -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'."
2227 cp -Rdf $MINDI_LIB/aux-tools/* . 2>> $LOGFILE || LogIt "Warning - error occurred while unzipping aux-tools\n"
2228 if [ -e "$MINDI_LIB/x11-tools.tgz" ] ; then
2229 tar -zxf $MINDI_LIB/x11-tools.tgz 2>> $LOGFILE || LogIt "Warning - error occurred while unzipping x11-tools.tgz\n"
[134]2230 fi
[424]2231 if [ -e "$MONDO_SHARE/restore-scripts" ] ; then
2232 cp -Rdf $MONDO_SHARE/restore-scripts/* . 2>> $LOGFILE
2233 [ "$?" -ne "0" ] && [ "`DidMondoCallMe`" ] && Die "Cannot find/install $MONDO_SHARE/restore-scripts"
[134]2234 fi
2235 [ -d "/lib/dev-state" ] && cp --parents -pRdf /lib/dev-state .
2236 cd $old_pwd
2237 echo -e "$DONE"
2238 TOTAL_BIGDIR_SIZE=`du -sk $bigdir | cut -f1`
2239 SplitDirectoryIntoMinidirs $bigdir $minidir_root
2240 noof_disks=$?
2241 [ "$noof_disks" -eq "0" ] && Die "Too much stuff!"
[1]2242# if [ "$noof_disks" -ge "8" ] ; then
2243# LogIt "You are putting a ludicrously large amount of data on these disks."
2244# LogIt "I shall therefore double EXTRA_SPACE, just in case your ramdisk is too small."
2245# EXTRA_SPACE=$(($EXTRA_SPACE*2))
2246# fi
[134]2247 MakeMountlist $TMP_ROOT/mountlist.txt
2248 mkdir -p $minidir_root/$noof_disks/tmp
2249 cp -f $TMP_ROOT/mountlist.txt $minidir_root/$noof_disks/tmp/mountlist.txt || Die "Cannot copy mountlist.txt from $TMP_ROOT to data disk"
2250 cp -f $TMP_ROOT/mountlist.txt $CACHE_LOC
2251 [ "`DidMondoCallMe`" ] && cp -f $minidir_root/$noof_disks/tmp/mountlist.txt $MONDO_TMP/.
[519]2252 [ -d "/proc/lvm" ] && $MINDI_LIB/analyze-my-lvm > $minidir_root/$noof_disks/tmp/i-want-my-lvm
2253 [ -d "/dev/mapper" ] && $MINDI_LIB/analyze-my-lvm > $minidir_root/$noof_disks/tmp/i-want-my-lvm
[134]2254 cat $minidir_root/$noof_disks/tmp/mountlist.txt >> $LOGFILE
2255 ZipMinidirsIntoTarballs $minidir_root $tardir $noof_disks
2256 CreateDataDiskImagesFromTarballs $tardir $imagesdir $noof_disks
2257 FRIENDLY_OUTSTRING="Boot and data disk images were created."
[1]2258# One 1.72MB boot disk, one 2.88MB boot disk and $noof_disks data disk images
[134]2259 rmdir $tardir $bigdir
2260 rm -f $needlist
2261 return $noof_disks
[1]2262}
2263
2264
2265ProcessLDD() {
[134]2266 local main_fname incoming j i fname f newf
2267 main_fname=$1
2268 read incoming
2269 while [ "$incoming" != "" ] ; do
2270 incoming=`echo "$incoming" | sed '/[[:blank:]]*.*[[:blank:]]*=>[[:blank:]]*(.*/d ; s/[[:blank:]]*\(.*\)[[:blank:]]*=>[[:blank:]]*\/.*/\1/ ; s/[[:blank:]]*\(\/.*\)[[:blank:]]*(.*/\1/'`
2271 for fname in `echo "$incoming"` ; do
2272 fname=`LocateFile $fname`
2273 for f in $fname ; do
2274 [ -e "$f" ] && echo $f
2275 done
2276 done
2277 read incoming
2278 done
[1]2279}
2280
2281
2282
2283Prompt() {
[134]2284 echo -en "$1"
2285 read line
[1]2286}
2287
2288
2289
2290ReadLine() {
[134]2291 local i incoming
2292 read incoming
2293 i=0
2294 while [ "$i" -le "32" ] && [ "$incoming" = "" ] ; do
[1]2295 i=$(($i+1))
2296 read incoming
[134]2297 done
2298 echo "$incoming"
[1]2299}
2300
2301
2302
2303RejigHyperlinks() {
[134]2304 local minidir_root noof_disks fname path diskno old_pwd awk_loc gawk_loc dir i
2305 minidir_root=$1
2306 noof_disks=$2
[1]2307
[134]2308 old_pwd=`pwd`
2309 diskno=1
2310 while [ "$diskno" -le "$noof_disks" ] ; do
[1]2311 mkdir -p $minidir_root/$diskno
[134]2312 cd $minidir_root/$diskno
2313 for fname in `find -type d -o -print` ; do
2314 [ -h "$minidir_root/$diskno/$fname" ] && MoveHyperlinkSensibly $fname $minidir_root $diskno $noof_disks
2315 done
[1]2316 diskno=$(($diskno+1))
[134]2317 done
[1]2318
2319
[134]2320 cd $old_pwd
2321 return
[1]2322
2323
2324
2325# do some awk/gawk stuff
[134]2326 cd $minidir_root
2327 awk_loc=`find -name awk`
2328 gawk_loc=`find -name gawk`
2329 if [ "$awk_loc" = "" ] && [ "$gawk_loc" != "" ] ; then
2330 for i in $gawk_loc ; do HackAwk $i gawk ; done
2331 elif [ "$gawk_loc" = "" ] && [ "$awk_loc" != "" ] ; then
2332 for i in $awk_loc ; do HackAwk $i awk ; done
2333 elif [ "$gawk_loc" != "" ] && [ "$awk_loc" != "" ] ; then
2334 echo -en "Gawk/awk found. Good.\r"
2335 else
2336 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? :-)"
2337 fi
2338 cd $old_pwd
[1]2339}
2340
2341
2342
2343EliminateRelatives() {
2344# eliminate /../../..... from path string
[134]2345 local orig i old_i newo
2346 newo=$1
2347 while [ "`echo "$newo" | grep "\.\."`" ] ; do
2348 orig="`echo "$newo" | tr -s '/' '/'`"
[1]2349# echo "orig=$orig"
[134]2350 newo="/"
2351 old_i=""
2352 for i in `echo "$orig" | tr '/' ' '` ; do
2353 if [ ! "$old_i" ] ; then
2354 old_i=$i
2355 continue
2356 fi
2357 if [ "$old_i" ] && [ "$i" = ".." ] ; then
2358 if [ "$old_i" = ".." ] ; then
2359 newo="$newo"$old_i/
[1]2360# echo "two --- $old_i $i"
[134]2361 old_i="$i"
2362 continue
[1]2363# else
2364# echo "swallowing ($old_i $i)"
[134]2365 fi
2366 elif [ "$old_i" != ".." ] ; then
2367 newo="$newo"$old_i/
2368 fi
2369 old_i=$i
2370 done
2371 newo="$newo"$i
2372 done
2373 echo "$newo"
[1]2374}
2375
2376
2377WhatSoftlinkPointsTo() {
[134]2378 local orig new resolved
2379 orig=$1
2380 new=`ls -l $orig | tr -s ' ' '\t' | $AWK '{printf $NF;}'`
2381 if [ "`echo "$new" | cut -d'/' -f1`" ] ; then
2382 resolved=`dirname $orig`/$new
2383 else
2384 resolved=$new
2385 fi
2386 EliminateRelatives $resolved
[1]2387}
2388
2389
2390
2391
2392
2393ReplaceIndividualLine() {
[134]2394 local orig_file new_file lino newstring lines_total lines_remaining
2395 orig_file=$1.orig
2396 mv -f $1 $orig_file || Die "Cannot move $1 to $orig_file"
2397 new_file=$1
2398 lino=$2
2399 newstring="$3"
2400 if [ "$lino" = "" ] || [ "$lino" -lt "1" ] ; then
[1]2401 echo "Can't find string" >> $LOGFILE
2402 return 1
[134]2403 fi
2404 lines_total=`wc -l $orig_file | gawk '{print $1;}'`
2405 lines_remaining=$(($lines_total-$lino))
2406 head -n$(($lino-1)) $orig_file > $new_file
2407 echo "$newstring" >> $new_file
2408 echo "# The above line was added by Mindi, at the user's instruction" >> $new_file
2409 tail -n$lines_remaining $orig_file >> $new_file
2410 echo "Replace line $lino of $new_file with user-specified line, '$newstring'" >> $LOGFILE
[1]2411# cp -f $new_file /tmp/init.new
[134]2412 [ -x "$orig_file" ] && chmod +x $new_file
2413 rm -f $orig_file
2414 return 0
[1]2415}
2416
2417
2418
2419
2420ResolveSoftlink() {
[134]2421 local resolved new
2422 resolved=$1
2423 while [ -h "$resolved" ] ; do
2424 resolved=`WhatSoftlinkPointsTo $resolved`
2425 done
2426 echo "$resolved"
[1]2427}
2428
2429
2430
2431
2432ScanCDandTape() {
2433 local i
2434
2435 for i in /dev/st0 /dev/ht0 /dev/cdrom /dev/cdrom0 /dev/cdrom 1 ; do
[134]2436 dd if=$i of=/dev/null bs=64k count=1 &> /dev/null
[1]2437 done
2438}
2439
2440
2441
2442SizeOfPartition() {
[134]2443 local devpath drive res stub
2444 device=$1
2445 if [ "`echo "$device" | fgrep "/dev/md"`" != "" ] ; then
[1]2446 res=`SizeOfRaidPartition $device`
2447 [ "$res" = "" ] && Die "Cannot find $device's size - is your /etc/raidtab sane?"
2448 echo "$res"
2449 return 0
[134]2450 fi
[1]2451# 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/-//`
2452# patch from Bill <bill@iwizard.biz> - 2003/08/25
[134]2453 res=`$FDISK -s $device`
[138]2454 echo "------- $FDISK -l $device log ------------" >> $LOGFILE
[134]2455 cat $FDISKLOG >> $LOGFILE
2456 echo "------- $FDISK log end ------------" >> $LOGFILE
[1]2457# end patch
[305]2458 [ "$res" = "" ] && res=`df -k -P -x supermount | tr -s '\t' ' ' | fgrep "$device " | cut -d' ' -f2`
[134]2459 [ "$res" = "" ] && res="-1"
2460 echo $res
2461 return 0
[1]2462}
2463
2464
2465SizeOfRaidPartition() {
[134]2466 local real_dev smallest_size silly tmp
[1]2467
[134]2468 silly=999999999
2469 smallest_size=$silly
[1]2470
[134]2471 for real_dev in `GetRaidDevMembers $1` ; do
[1]2472 tmp=`SizeOfPartition $real_dev`
2473 [ "$tmp" -lt "$smallest_size" ] && smallest_size=$tmp
[134]2474 done
[1]2475
[134]2476 if [ "$smallest_size" = "$silly" ] ; then
[1]2477 echo "-1"
2478 return 1
[134]2479 else
[1]2480 echo "$smallest_size"
2481 return 0
[134]2482 fi
[1]2483}
2484
2485
2486
2487
2488
2489
2490StripComments()
2491{
[134]2492 local tempfile
2493 tempfile=$TMP_ROOT/$$.strip.txt
2494 cp -f $1 $tempfile
[275]2495 $AWK '{if (substr($0,0,1)!="#" || substr($0,0,3)=="#!/") {print $0;};}' $tempfile > $1
[134]2496 rm -f $tempfile
2497 echo "Stripped comments from $2" >> $LOGFILE
[1]2498}
2499
2500
2501
2502
2503
2504
2505SplitDirectoryIntoMinidirs() {
[134]2506 local bigdir minidir_root i noof_disks old_pwd res
2507 bigdir=$1
2508 minidir_root=$2
2509 rm -Rf $minidir_root/*
[1]2510
[134]2511 TryToFitDataIntoSeveralDirs $bigdir $minidir_root
2512 noof_disks=$?
2513 if [ "$noof_disks" -eq "0" ] ; then
[1]2514 echo "Failed to fit data into several dirs."
[134]2515 return 0
2516 fi
2517 RejigHyperlinks $minidir_root $noof_disks
2518 rm -Rf $bigdir/*
[1]2519 return $noof_disks
2520}
2521
2522
2523
2524StripExecutable()
2525{
[134]2526 local tmpfile
2527 tmpfile=$TMP_ROOT/stripped.$$.dat
2528 [ -d "$1" ] || [ -h "$1" ] && return
2529 cp -f $1 $tmpfile
2530 strip $tmpfile 2> /dev/null
2531 if [ "$?" -eq "0" ] ; then
[1]2532 cp -f $tmpfile $1
2533 echo "Stripped binary $2" >> $LOGFILE
[134]2534 fi
2535 rm -f $tmpfile
[1]2536}
2537
2538
2539TemporarilyCompressAllFiles() {
[134]2540 local i orig_fname out_fname out_list
[1]2541
[134]2542 i=0
2543 out_list=$2/compressed/compressed.txt
2544 mkdir -p $2/compressed
2545 > $out_list
2546 for orig_fname in $1 ; do
2547 out_fname=$2/compressed/$orig_fname.gz
2548 mkdir -p $out_fname 2> /dev/null
2549 rmdir $out_fname 2> /dev/null
2550 gzip -c6 $orig_fname > $out_fname 2> /dev/null
2551 i=$(((($i+1))%15))
2552 [ "$i" -eq "0" ] && echo -en "."
2553 du -sk $out_fname >> $out_list
2554 done
[1]2555}
2556
2557
2558
2559TryToFindKernelPath() {
[134]2560 local fname incoming res fkern_ver we_want_version possible_kernels noof_kernels kernelpath kdate duff_kernels
2561 we_want_version=`uname -r`
2562 possible_kernels=""
2563 duff_kernels=""
[1]2564
[134]2565 if [ "$ARCH" = "ia64" ] ; then
2566 root="/boot/efi/efi"
2567 else
2568 root="/"
2569 fi
[519]2570 for fname in `find $root -maxdepth 2 -type f | fgrep lin | egrep -v '^/proc/|^/net/'` ; do
[1]2571 [ ! -e "$fname" ] && continue
[134]2572 [ "$fname" = "/boot/vmlinuz.shipped" ] && [ -f "/boot/vmlinuz" ] && continue; # ignore SuSE's extra kernel
[1]2573 file $fname | grep -q gzip
2574 if [ "$?" -eq "0" ] ; then
[134]2575 # Used by ia64
2576 fkern_ver=`gzip -cd $fname | strings 2> /dev/null | grep "[2-9]+*[.][0-9]+*[.][0-9]+*[^\@]*@"`
[1]2577 else
[134]2578 fkern_ver=`strings $fname 2> /dev/null | grep "[2-9]+*[.][0-9]+*[.][0-9]+*[^\@]*@"`
[1]2579 fi
[134]2580 [ "$fkern_ver" = "" ] && continue
[1]2581# echo "$fname --> $fkern_ver (but we want $we_want_version)" >> /dev/stderr
[134]2582 [ "`echo "$fkern_ver" |fgrep "$we_want_version "`" = "" ] && continue
[1]2583 [ -f "$fname" ] || continue
2584 [ -h "$fname" ] && continue
2585 kdate=`uname -v | $AWK '{for(i=1;i<NF;i++){if(index($i,":")){print $i;};};}' | $AWK '{print $NF;}'`
2586 file $fname | grep -q gzip
2587 if [ "$?" -eq "0" ] ; then
[134]2588 # Used by ia64
2589 if [ "`gzip -cd $fname | strings 2> /dev/null | fgrep "$kdate"`" = "" ] ; then
2590 LogIt "Have you recompiled your kernel \"$fname\" w/o rebooting? Naughty but I'll allow it...\n"
2591 duff_kernels="$fname $duff_kernels"
2592 else
2593 [ "`echo "$fname" | fgrep "vmlinux"`" ] && continue
2594 possible_kernels="$fname $possible_kernels"
2595 fi
[1]2596 else
[134]2597 if [ "`strings $fname 2> /dev/null | fgrep "$kdate"`" = "" ] ; then
[258]2598 LogIt "Have you recompiled your kernel \"$fname\" w/o rebooting?\n Naughty but I'll allow it...\n"
[134]2599 duff_kernels="$fname $duff_kernels"
2600 else
2601 [ "`echo "$fname" | fgrep "vmlinux"`" ] && continue
2602 possible_kernels="$fname $possible_kernels"
2603 fi
2604 fi
2605 done
2606 if [ ! "$possible_kernels" ] && uname -a | grep Knoppix > /dev/null ; then
[1]2607 possible_kernels=`find /boot/vmlinuz-2.* | tail -n1`
[134]2608 fi
2609 if [ ! "$possible_kernels" ] ; then
[258]2610 LogIt "No kernel matches exactly. Are there any duff kernels?\n"
[134]2611 possible_kernels="$duff_kernels"
2612 if [ ! "$possible_kernels" ] ; then
[258]2613 LogIt "Sorry, no duff kernels either\n"
[134]2614 else
[258]2615 LogIt "I bet you're running Debian or Gentoo, aren't you?\n"
2616 LogIt "Your kernel doesn't have a sane builddate. Oh well...\n"
[134]2617 fi
2618 fi
[277]2619 possible_kernels=`echo "$possible_kernels" | tr -s ' ' '\n' | sort -u | tr '\n' ' '`
[134]2620 noof_kernels=`CountItemsIn "$possible_kernels"`
2621 if [ "$noof_kernels" -eq "0" ] ; then
2622 LogIt "Could not find your kernel.\n"
[1]2623 if [ -e "/boot/vmlinuz" ] ; then
[134]2624 LogIt "Using /boot/vmlinuz as a last resort.\n"
2625 output=/boot/vmlinuz
2626 else
2627 output=""
[1]2628 fi
[134]2629 elif [ "$noof_kernels" -eq "1" ] ; then
2630 kernelpath=`echo "$possible_kernels" | sed s/' '//`
2631 echo "Your kernel is $kernelpath (v`uname -r`)" >> $LOGFILE
2632 output="$kernelpath"
2633 else
2634 for i in $possible_kernels ; do
2635 if echo $i | grep "`uname -r`" ; then
[1]2636 LogIt "OK, I used my initiative and found that "
[258]2637 LogIt "$i is probably your kernel.\n "
[1]2638 output="$i"
2639 return
[134]2640 fi
2641 done
[1]2642 if echo " $possible_kernels " | fgrep "/boot/vmlinuz " &> /dev/null ; then
[134]2643 output=/boot/vmlinuz
2644 echo "Schlomo, this one's for you." >> $LOGFILE
[1]2645 else
[134]2646 LogIt "Two or more possible kernels found. You may specify any one of them and the \n"
2647 LogIt "boot disks will still work, probably. If one does not work, try another.\n"
2648 LogIt "$possible_kernels\n"
2649 echo ""
[1]2650 fi
[134]2651 fi
2652 echo "$output" | tr -s ' ' '\n' | sort -u | tr '\n' ' '
[1]2653}
2654
2655
2656
2657
2658
2659TryToFitDataIntoSeveralDirs() {
[134]2660 local bigdir minidir_root noof_disks diskno list_of_files filename old_pwd progress
2661 local i retval noof_disks total_files list_of_devs
2662 bigdir=$1
2663 minidir_root=$2
2664 BIG_CLUNKY_SIZE_COUNTER=0
2665 retval=0
2666 noof_disks=1
[1]2667
[134]2668 echo -en "\r \rDividing data into several groups..."
2669 old_pwd=`pwd`
2670 cd $bigdir
2671 list_of_files=`GetFileSizeList . | sort -nr | cut -f2 | fgrep -v "/dev/"`
2672 progress=0
2673 total_files=`CountItemsIn "$list_of_files"`
2674 if [ "`echo "$filename" | grep -x "/dev/.*"`" ] ; then
2675 filesize=1
2676 fi
2677 mkdir -p $minidir_root/$noof_disks
2678 if [ -e "dev" ] ; then
2679 echo "Copying dev/* to $minidir_root/$noof_disks" >> $LOGFILE
2680 cp --parents -pRdf dev $minidir_root/$noof_disks
2681 fi
2682 TemporarilyCompressAllFiles "$list_of_files" $minidir_root
2683 for filename in $list_of_files ; do
2684 AddFileToDir $filename $minidir_root $noof_disks
[1]2685 i=$?
2686 if [ "$i" -gt "$noof_disks" ] ; then
[134]2687 noof_disks=$i
2688 echo -en "\r\t\t\t\t\t\t($noof_disks disks)"
[1]2689 fi
2690 if [ "$i" -eq "0" ] ; then
[134]2691 LogIt "Cannot add file $filename to minidir $minidir_root\n"
2692 retval=$(($retval+1))
[1]2693 fi
[134]2694 progress=$(($progress+1))
[1]2695 echo -en "\r\t\t\t\t\t\t\t\t$(($progress*100/$total_files))% complete\r"
[134]2696 done
2697 cd $old_pwd
2698 echo -en "\rThe files have been subdivided into $noof_disks directories. \r"
2699 rm -Rf $minidir_root/compressed
2700 if [ "$retval" -gt "0" ] ; then
[1]2701 return 0
[134]2702 else
[1]2703 return $noof_disks
[134]2704 fi
[1]2705}
2706
2707
2708
2709TurnTgzIntoRdz() {
[134]2710 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
2711 tgz_dir_fname=$1
2712 rdz_fname=$2
2713 ramdisksize=$3
2714 disksize=$4
2715 kernelsize=$5
2716 maxsize=$(($disksize-$kernelsize))
2717 maxsize=$(($maxsize*2)); # to allow for compression of 50%
2718 tempfile=$TMP_ROOT/temp.rd
2719 mountpoint=$TMP_ROOT/mnt1
2720 res=0
2721 echo -en "..."
2722 dd if=/dev/zero of=$tempfile bs=1k count=$ramdisk_size &> /dev/null || Die "Not enough room for temporary ramdisk (TurnTgzIntoRdz)"
2723 echo -en "..."
2724 mke2fs -b 1024 -m 1 -i 2048 -F $tempfile >> $LOGFILE 2>> $LOGFILE
[1]2725
[134]2726 [ "$?" -ne "0" ] && cat /tmp/mke2fs.$$
2727 rm -f /tmp/mke2fs.$$
2728 echo -en "..."
2729 mkdir -p $mountpoint
[519]2730 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]2731 echo -en "..."
2732 old_pwd=`pwd`
2733 cd $mountpoint
[179]2734# [ -e "$MINDI_LIB/memtest.img" ] && echo "Yep, this is a multi-function CD" > MULTIFUNC
[134]2735 cp -Rdf $tgz_dir_fname/* . 2>> $LOGFILE >> $LOGFILE
2736 tar -zxf symlinks.tgz || Die "Cannot untar symlinks.tgz"
2737 cd dev || Die "Can't cd to dev"
2738 tar -zxf dev-entries.tgz || Die "Cannot untar dev-entries.tgz"
2739 rm -f dev-entries.tgz
2740 cd ..
[1]2741
2742# add insmod.static and insmod.static.old if (a) they exist and (b) this is a 64-bit distro
2743# if [ "`uname -a | grep x86`" ] || [ "`uname -a | grep amd64`" ] ; then
2744
[134]2745 for w in insmod.static insmod.static.old ; do
[1]2746 s=`which $w 2> /dev/null`
2747 if [ -e "$s" ] ; then
[134]2748 cp --parents -af $s .
[1]2749# LogIt "Copying $s to initrd"
2750 fi
[134]2751 done
[1]2752
2753# fi
2754
[134]2755 mkdir -p tmp
2756 [ -e "/dev/.devfsd" ] && echo "/dev/.devfsd found" > tmp/USE-DEVFS
2757 for w in cdrom floppy groovy-stuff ; do
2758 mkdir -p mnt/$w
2759 done
2760 if [ "$RUN_AFTER_INITIAL_BOOT_PHASE" ] ; then
[1]2761 ReplaceIndividualLine sbin/init `grep -n "#WHOLIVESINAPINEAPPLEUNDERTHESEA#" sbin/init | cut -d':' -f1` "$RUN_AFTER_INITIAL_BOOT_PHASE"
[134]2762 fi
2763 if [ "$RUN_AFTER_BOOT_PHASE_COMPLETE" ] ; then
[1]2764 ReplaceIndividualLine sbin/init `grep -n "#ABSORBENTANDYELLOWANDPOROUSISHE#" sbin/init | cut -d':' -f1` "$RUN_AFTER_BOOT_PHASE_COMPLETE"
[134]2765 fi
[1]2766
[134]2767 lsmod > tmp/original-lsmod.txt
2768
2769 cp --parents -Rdf /dev/fd0*[1,2][4,7,8]* . 2> /dev/null
2770 cd $old_pwd
2771 echo -en "..."
2772 MakeModuleLoadingScript $TMPMODPROBE_FLAG $mountpoint/sbin/insert-all-my-modules
2773 echo -en "..."
2774 old_pwd=`pwd`
2775 if [ "$YOUR_KERNEL_SUCKS" ] ; then
[1]2776 cd $TMP_ROOT
2777 floppy_modules_path=lib/modules/$FAILSAFE_KVER
[134]2778 else
[1]2779 cd /
2780###
2781### Sq-Modification... Use kernel name in module path if specified.
2782###
[134]2783 #floppy_modules_path=lib/modules/`uname -r`
2784 if [ "${kernelname}" != "" ]
2785 then
2786 floppy_modules_path=lib/modules/${kernelname}
2787 else
2788 floppy_modules_path=lib/modules/`uname -r`
2789 fi
[1]2790###
2791### Sq-Modification end
2792###
[134]2793 fi
2794 floppy_modules=""
2795 if [ "$disksize" -lt "2880" ] ; then
[291]2796 list_of_groovy_mods="$FLOPPY_MODS `WhichOfTheseModulesAreLoaded "$SCSI_MODS"`"
[134]2797 else
[291]2798 list_of_groovy_mods="$CDROM_MODS `WhichOfTheseModulesAreLoaded "$SCSI_MODS"`"
[134]2799 fi
2800 if [ -e "$MONDO_TMP/start-nfs" ] ; then
2801 cp -a $MONDO_TMP/start-nfs $mountpoint/sbin
2802 # For PXE boot
2803 list_of_groovy_mods="$list_of_groovy_mods $NET_MODS"
[136]2804 # Here we need the net busybox
2805 mv $mountpoint/bin/busybox.net $mountpoint/bin/busybox
[134]2806 else
[136]2807 rm -f $mountpoint/bin/busybox.net
[134]2808 fi
[258]2809 [ -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]2810 for i in $list_of_groovy_mods ; do
[1]2811 floppy_modules="$floppy_modules `FindSpecificModuleInPath $floppy_modules_path $i`"
[134]2812 done
2813 for i in $floppy_modules ; do
2814 [ -e "$i" ] && s=`du -sk $i | cut -f1` || s=""
[1]2815 [ "$YOUR_KERNEL_SUCKS" ] && i=$TMP_ROOT/$i
2816 echo "Adding $i ($s KB) to the rootfs" >> $LOGFILE
[258]2817 cp -df $i $mountpoint/ || LogIt "Unable to copy $i to $mountpoint\n"
[1]2818 [ "`echo "$i" | fgrep ".gz"`" ] && gunzip -f $mountpoint/`basename $i`
[134]2819 done
[1]2820# if [ -e "/dev/.devfsd" ] ; then
2821# echo "Copying devfs stuff to ramdisk" >> $LOGFILE
2822# for i in /dev /etc/devfsd.conf /etc/modules.devfs /lib/dev-state ; do
2823# cp --parents -pRdf $i $mountpoint/ 2>> $LOGFILE
2824# done
2825# fi
[179]2826 if [ ! -e "/sbin/devfsd" ] || [ "$disksize" -lt "2880" ] || [ "$kernelpath" = "$MINDI_LIB/vmlinuz" ] ; then
[134]2827 echo "Deleting devfsd daemon from ramdisk" >> $LOGFILE
2828 [ ! -e "/sbin/devfsd" ] && echo "...because /sbin/devfsd not found" >> $LOGFILE
2829 [ "$disksize" -lt "2880" ] && echo "...because disksize = $disksize" >> $LOGFILE
[179]2830 [ "$kernelpath" = "$MINDI_LIB/vmlinuz" ] && echo "...because kernel is failsafe" >> $LOGFILE
[1]2831# ls -l $mountpoint/sbin/devfsd &> /dev/null || Die "Can't find devfsd daemon on ramdisk"
[134]2832 rm -f $mountpoint/sbin/devfsd
2833 fi
2834 cd $old_pwd
2835 [ "$TAPEDEV" ] && echo -en "$TAPEDEV" > $mountpoint/tmp/TAPEDEV-LIVES-HERE
2836 dd if=/dev/zero of=$mountpoint/zero &> /dev/null
2837 rm -f $mountpoint/zero
2838 if [ "`DidMondoCallMe`" ] ; then
2839 MakeMondoConfigFile $mountpoint/tmp/mondo-restore.cfg
2840 cp -f $mountpoint/tmp/mondo-restore.cfg $MONDO_TMP &> /dev/null
2841 cp -f $TMP_ROOT/mountlist.txt $mountpoint/tmp/ || Die "Cannot copy mountlist to ramdisk"
2842 echo -en "$FILES_IN_FILELIST" > $mountpoint/tmp/FILES-IN-FILELIST
2843 echo -en "$LAST_FILELIST_NUMBER" > $mountpoint/tmp/LAST-FILELIST-NUMBER
2844 [ "$USE_LZO" = "yes" ] && echo -en "Pras 4 Pres 2004" >> $mountpoint/tmp/USING-LZO
2845 [ "$USE_COMP" = "yes" ] && echo -en "Compression, yep" >> $mountpoint/tmp/USING-COMP
[423]2846 [ "$USE_STAR" = "yes" ] && echo -en "Using star. Hooray." >> $mountpoint/tmp/USING-STAR
[134]2847 fi
2848 mkdir -p $mountpoint/tmp
2849 mkdir -p $mountpoint/proc
2850 echo "$disksize" > $mountpoint/tmp/$disksize.siz
2851 find $mountpoint -name CVS -exec rm -rf '{}' \;
2852 umount $mountpoint || Die "Cannot unmount $tempfile"
2853 dd if=$tempfile bs=1k 2> /dev/null | gzip -v9 > $rdz_fname 2> /dev/null
[1]2854# gzip -9 $tempfile
2855# mv $tempfile.gz $rdz_fname
[134]2856 if [ "$res" -eq "0" ] ; then
2857 echo -en "..."
2858 else
2859 echo -en "\rMade an rdz WITH ERRORS. \n"
2860 fi
2861 return 0
[1]2862}
2863
2864
2865
2866WhichOfTheseModulesAreLoaded() {
[134]2867 local modname loaded_modules
2868 loaded_modules=" `lsmod | tr -s ' ' '\t' | cut -f1 | fgrep -vx "Modules" | tr '\n' ' '` "
2869 for modname in $1 ; do
[1]2870 [ "`echo "$loaded_modules" | fgrep " $modname "`" ] && echo "$modname"
[134]2871 done
[1]2872}
2873
2874
2875
2876
2877ZipMinidirsIntoTarballs() {
[134]2878 local minidir_root tardir noof_disks diskno old_pwd i
2879 minidir_root=$1
2880 tardir=$2
2881 noof_disks=$3
[1]2882
[134]2883 echo -en "Tarring and zipping the group`PluralOrNot $noof_disks`..."
2884 mkdir -p $tardir
2885 mkdir -p $minidir_root/all
2886 old_pwd=`pwd`
2887 diskno=1
2888 while [ "$diskno" -le "$noof_disks" ] ; do
[258]2889 cd $minidir_root/$diskno || LogIt "Warning - cannot cd to $minidir_root/$diskno\n"
[134]2890 tar -cf - . 2>> $LOGFILE | gzip -9 > $tardir/$diskno.tar.gz || Die "Can't tar/gzip disk#$diskno; please tell Hugo -exactly- what the errors where."
2891 diskno=$(($diskno+1))
2892 echo -n "..."
[1]2893 cp -pRdf * $minidir_root/all
[134]2894 done
2895 mkdir -p $minidir_root/all/tmp
2896 cd $minidir_root/all
2897 size_of_all_tools=`du -sk . | cut -f1`
2898 if [ "`DidMondoCallMe`" ] ; then
2899 for q in filelist.full.gz biggielist.txt ; do
2900 [ ! -e "$MONDO_TMP/$q" ] && Die "Cannot find $MONDO_TMP/$q"
2901 cp -pRdf $MONDO_TMP/$q tmp/
2902 done
2903 mkdir -p $minidir_root/all/tmp
2904 echo -en "$FILES_IN_FILELIST" > $minidir_root/all/tmp/FILES-IN-FILELIST 2> /dev/null
2905 echo -en "$LAST_FILELIST_NUMBER" > $minidir_root/all/tmp/LAST-FILELIST-NUMBER 2> /dev/null
2906 fi
2907 tar -b 4096 -cf - * 2> /dev/null | gzip -9 > $tardir/all.tar.gz
2908 dd if=/dev/zero bs=1k count=64 >> $imagesdir/all.tar.gz 2> /dev/null
2909 [ "`du -sm $imagesdir/all.tar.gz | cut -f1`" -ge "30" ] && Die "You have too many tools in your shed"
2910 cd $old_pwd
2911 rm -Rf $minidir_root
2912 echo -e "$DONE"
[1]2913}
2914
2915
2916
[297]2917# BERLIOS: This function is wrong
2918# Should be recoded. Desactivated in between
[1]2919
[297]2920#ListUnsavedKernelModules() {
2921 #local fname modules
2922 #fname=/tmp/$RANDOM.$$.$RANDOM
2923 #lsmod | sed -n '2,$s/ .*//p' > $fname
2924 #modules=`sort $fname | uniq -d2 | tr '\n' ' '`
2925 #rm -f $fname
2926 #[ "$modules" ] && echo "Unsaved kernel modules: $modules" >> $LOGFILE
2927#}
[1]2928
2929
2930
2931
2932
2933##############################################################################
2934#----------------------------------- main -----------------------------------#
2935##############################################################################
2936
2937
2938#AWK=`which gawk`
2939#LocateDeps $1
2940#MakeModuleLoadingScript /tmp/load-modules.sh
2941#exit 0
2942
2943
2944#cat /etc/mindi/deplist.txt | GenerateGiantDependencyList /tmp/deplist.old 200
2945#exit 0
2946
2947
2948
2949if [ "$1" = "-V" ] || [ "$1" = "-v" ] || [ "$1" = "--version" ] || [ "$1" = "-version" ] ; then
[134]2950 echo "mindi v$MINDI_VERSION"
2951 exit 0
[1]2952fi
2953
2954> $LOGFILE
2955echo "mindi v$MINDI_VERSION" >> $LOGFILE
2956echo "$ARCH architecture detected" >> $LOGFILE
2957echo "mindi called with the following arguments:" >> $LOGFILE
2958echo "$@" >> $LOGFILE
2959
2960if [ -e "/etc/conf.modules" ] && [ ! -e "/etc/modules.conf" ] ; then
[258]2961 LogIt "Warning - Ancient distro detected.\n" 1
[134]2962 ln -sf /etc/conf.modules /etc/modules.conf
[1]2963fi
2964[ -e "/sbin/mkdosfs" ] && [ ! -e "/sbin/mkfs.vfat" ] && ln -sf /sbin/mkdosfs /sbin/mkfs.vfat
2965
2966FindHomeOfMindiAndMondo
2967trap AbortHere SIGTERM SIGHUP SIGQUIT SIGKILL SIGABRT SIGINT
2968AbortIfYourDistroIsAPieceOfStercus
2969[ "`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"
2970# If we have a 2.6 kernel, the system uses module-init-tools which means that we
2971# may have the modprobe configuration spread out across multiple files in
2972# directory /etc/modprobe.d. If this is the case we concatenate these files into
2973# a temporary file for further processing. Otherwise we continue in the standard
2974# way. Note further that in case /etc/modprobe.d exists, we use it and ignore
2975# /etc/modprobe.conf which is exactly what module-init-tools does. The temporary
2976# modprobe.conf file is created in MakeModuleLoadingScript. AL041128.
2977if [ -d "/etc/modprobe.d" ] && [ `uname -r | cut -c1-3` == "2.6" ] ; then
2978 TMPMODPROBE_FLAG="Y"
2979else
2980 TMPMODPROBE_FLAG="N"
2981 [ -e "/etc/modprobe.conf" ] && [ ! -e "/etc/modules.conf" ] && ln -sf /etc/modprobe.conf /etc/modules.conf
2982 [ ! -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..."
2983fi
2984FixPathIfBroken
[349]2985[ -f "$MINDI_LIB/vmlinuz" ] && FAILSAFE_KVER=`strings $MINDI_LIB/vmlinuz 2> /dev/null | egrep "2\.[46]" | cut -d' ' -f1`
[1]2986AbortIfMkfsVfatMissing
2987### BCO
2988### Fix as it's not mandatory on ia64
2989if [ "$ARCH" = "ia64" ] ; then
[134]2990 FindELiloBinary
[1]2991else
[134]2992 FindIsolinuxBinary
2993 FindLiloBinary
[1]2994fi
[273]2995fgrep " $TMP_ROOT " /proc/mounts | fgrep 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]2996rm -f /tmp/mindi_lo
2997trap "Aborted" SIGTERM
2998DONE="\r\t\t\t\t\t\t\t\tDone. "
2999CHOPSIZE=240
3000BIGNO=0
3001MAX_COMPRESSED_SIZE=1300
3002imagesdir=/root/images/mindi
3003mkdir -p $imagesdir
3004kernelpath=""
3005MONDO_ROOT=/tmp/mindilinux/mondo-root
3006mkdir -p $MONDO_ROOT
3007
3008if [ "$#" -ge "2" ] ; then
[134]3009 if [ "$1" = "--max-compressed-size" ] ; then
3010 MAX_COMPRESSED_SIZE=$2
3011 shift; shift
3012 fi
[1]3013fi
3014
3015FLOPPY_WAS_MOUNTED=""
3016for mtpt in /media/floppy /mnt/floppy /floppy ; do
[134]3017 if mount | grep -w $mtpt &> /dev/null ; then
3018 FLOPPY_WAS_MOUNTED="$FLOPPY_WAS_MOUNTED $mtpt"
3019 umount $mtpt
3020 fi
[1]3021done
3022
3023if [ "$#" -ne "0" ] ; then
[134]3024 if [ "$1" = "--findkernel" ] ; then
3025 res=`TryToFindKernelPath`
[1]3026# 2> /dev/null`
[134]3027 if [ "$res" = "" ] ; then
3028 exit 1
3029 else
3030 echo "$res"
3031 exit 0
3032 fi
3033 elif [ "$1" = "--makemountlist" ] ; then
3034 [ ! "$2" ] && Die "Please specify the output file"
3035 MakeMountlist $2
3036 exit $?
3037 elif [ "$1" = " --version" ] || [ "$1" = "-v" ] ; then
[1]3038 echo "Mindi v$MINDI_VERSION"
[134]3039 exit 0
3040 elif [ "$#" -ge "9" ] && [ "$1" = "--custom" ] ; then
[1]3041 TMP_ROOT=$2
3042 MONDO_TMP=$2
3043 imagesdir=$3
3044 kernelpath=$4; [ "$kernelpath" = "(null)" ] && kernelpath=""
3045###
3046### Sq-Modification...
3047### Attempt to locate kernel specific module path
3048### if module path is found then use it other wise use uname -r to set it...
3049###
[134]3050 kernelname=`echo $kernelpath | cut -d'-' -f2-`
[258]3051 LogIt "kernelname = $kernelname\n"
3052 LogIt "kernelpath = $kernelpath\n"
[134]3053 if [ ! -d "/lib/modules/$kernelname" ] && [ "$kernelpath" != "FAILSAFE" ]
3054 then
3055 LogIt "Module path for ${kernelpath} not found...\n"
3056 LogIt "using running kernel\'s modules.\n"
3057 kernelname=`uname -r`
3058 else
3059 LogIt "Using modules for kernel: ${kernelname}\n"
3060 fi
[1]3061###
3062### end of Sq-Modification
3063###
3064 TAPEDEV=$5
3065 TAPESIZE=$6
3066 FILES_IN_FILELIST=$7
3067 USE_LZO=$8
3068 CDRECOVERY=$9
[134]3069 if [ "${10}" = "(null)" ] || [ "${10}" = "" ] ; then
3070 IMAGE_DEVS=""
3071 else
3072 IMAGE_DEVS="`echo "${10}" | tr '|' ' '`"
3073 fi
[1]3074 if [ "${11}" ] ; then
[134]3075 LILO_OPTIONS=""
[1]3076# LogIt "LILO will use conservative settings, to be compatible with older BIOSes."
3077 fi
3078 LAST_FILELIST_NUMBER=${12}
[134]3079 ESTIMATED_TOTAL_NOOF_SLICES=${13}
3080 EXCLUDE_DEVS="${14}"
3081 USE_COMP="${15}"
3082 USE_LILO="${16}"
[1]3083 USE_STAR="${17}"
3084 INTERNAL_TAPE_BLOCK_SIZE="${18}"
[134]3085 DIFFERENTIAL="${19}"
3086 NOT_BOOT="${20}"
3087 [ "$USE_COMP" = "" ] && USE_COMP=yes
3088 [ "$NOT_BOOT" = "" ] && NOT_BOOT=no
[258]3089 [ "$TAPEDEV" ] && LogIt "This is a tape-based backup. Fine.\n"
[1]3090 [ "$kernelpath" = "" ] && kernelpath=`TryToFindKernelPath`
[134]3091 kernelname=`echo $kernelpath | cut -d'-' -f2-`
3092 if [ ! -d "/lib/modules/$kernelname" ] && [ "$kernelpath" != "FAILSAFE" ]
3093 then
3094 LogIt "Module path for ${kernelpath} not found...\n"
3095 LogIt "using running kernel\'s modules.\n"
3096 kernelname=`uname -r`
3097 else
3098 LogIt "Using modules for kernel: ${kernelname}\n"
3099 fi
[1]3100 [ "$CDRECOVERY" = "yes" ] && [ "$TAPEDEV" != "" ] && Die "Sorry, you can't use --cd-recovery and --write-tapes at the same time"
[134]3101 MONDO_ROOT=`echo $imagesdir | sed 's/\(.*\)\/.*/\1/'`
[1]3102 [ "$MONDO_ROOT" = "" ] && Die "MONDO_ROOT is undefined"
[134]3103 else
[1]3104 echo "Syntax: mindi (--custom ....)" >> /dev/stderr
3105 exit 1
[134]3106 fi
[1]3107fi
3108#ScanCDandTape
3109[ "$CDRECOVERY" = "yes" ] || CDRECOVERY=no
3110if [ "$CDRECOVERY" = "yes" ] ; then
[179]3111 iso_cfg_file=$MINDI_LIB/isolinux-H.cfg
3112 sys_cfg_file=$MINDI_LIB/syslinux-H.cfg
[1]3113else
[179]3114 iso_cfg_file=$MINDI_LIB/isolinux.cfg
3115 sys_cfg_file=$MINDI_LIB/syslinux.cfg
[1]3116fi
3117
3118
3119
3120
3121#ReplaceIndividualLine /tmp/init `grep -n "#WHOLIVESINAPINEAPPLEUNDERTHESEA#" /tmp/init | cut -d':' -f1` "$RUN_AFTER_INITIAL_BOOT_PHASE"
3122#exit 0
3123
3124
3125#ListKernelModules
3126#exit 0
3127
3128
3129
3130
3131[ -e "$iso_cfg_file" ] || Die "Cannot find $iso_cfg_file"
3132rm -Rf $TMP_ROOT/mindilinux/*
3133TMP_ROOT=$TMP_ROOT/mindilinux/$$
3134mkdir -p $TMP_ROOT
3135mkdir -p $imagesdir
3136if [ ! "`DidMondoCallMe`" ] ; then
[258]3137 LogIt "Mindi Linux mini-distro generator v$MINDI_VERSION\n"
3138 LogIt "Latest Mindi is available from http://mondorescue.berlios.de\n"
3139 LogIt "BusyBox sources are available from http://www.busybox.net\n"
[134]3140 LogIt "------------------------------------------------------------------------------"
[1]3141else
[134]3142 echo "You are using Mindi-Linux v$MINDI_VERSION to make boot+data disks" >> /var/log/mondo-archive.log
[1]3143fi
3144
3145# for Mandrake 9.2, which comes with two aes.o.gz modules :-/
3146insmod /lib/modules/`uname -r`/*/*/misc/aes.*o.gz >> $LOGFILE 2>> $LOGFILE
3147for i in loop cdrom ide-cd isofs linear raid0 raid1 raid5 ; do
[134]3148 insmod $i >> $LOGFILE 2>> $LOGFILE
[1]3149done
3150
3151FILE_CACHE=$TMP_ROOT/mindi-file-loc-cache
3152KERN_DISK_MADE=""
3153
3154echo "DIFFERENTIAL = $DIFFERENTIAL" >> $LOGFILE
3155echo "INTERNAL TAPE BLOCK SIZE = $INTERNAL_TAPE_BLOCK_SIZE" >> $LOGFILE
3156echo "NOT_BOOT = '$NOT_BOOT'" >> $LOGFILE
3157if [ "$NOT_BOOT" != "" ] && [ "$NOT_BOOT" != "0" ] && [ "$NOT_BOOT" != "no" ] ; then
[258]3158 LogIt "Just creating mondo-restore.cfg and a small all.tar.gz for Mondo. Nothing else.\n"
[134]3159 MakeMondoConfigFile $MONDO_TMP/mondo-restore.cfg
3160 MakeMountlist $MONDO_TMP/mountlist.txt
3161 mkdir -p $MONDO_TMP/small-all/tmp
3162 cd $MONDO_TMP/small-all
3163 cp -f $MONDO_TMP/{mountlist.txt,mondo-restore.cfg,filelist.full.gz,biggielist.txt} tmp || Die "Cannot copy small all.tar.gz"
3164 tar -cv tmp | gzip -9 > $MONDO_TMP/all.tar.gz || Die "Cannot make small all.tar.gz"
3165 sleep 2
3166 LogIt "Done. Exiting.\n"
3167 exit 0
[1]3168fi
3169
3170if [ "$kernelpath" = "" ] ; then
[134]3171 [ "`DidMondoCallMe`" ] && Die "Please use -k <path> to specify kernel."
3172 if [ $USE_OWN_KERNEL != "yes" ]; then
3173 echo -en "Do you want to use your own kernel to build the boot disk (y/n) ?"
3174 read ch
3175 if [ "$ch" != "n" ] && [ "$ch" != "N" ] ; then
3176 USE_OWN_KERNEL="yes"
3177 fi
3178 fi
3179 if [ "$USE_OWN_KERNEL" = "yes" ]; then
[1]3180 YOUR_KERNEL_SUCKS=""
3181 kernelpath=`TryToFindKernelPath`
3182 if [ "$kernelpath" = "" ] ; then
[134]3183 echo -n "Please enter kernel path : "
3184 read kernelpath
[1]3185 fi
[134]3186 else
[1]3187 YOUR_KERNEL_SUCKS="That's why you're using mine, dude. :-)"
[134]3188 fi
[1]3189fi
3190if [ ! "`DidMondoCallMe`" ] ; then
[134]3191 echo -en "Would you like to use LILO (instead of syslinux)\nfor your boot CD/floppies (y/n) ?"
3192 read ch
3193 if [ "$ch" != "n" ] && [ "$ch" != "N" ] ; then
3194 USE_LILO=yes
3195 else
3196 USE_LILO=no
3197 fi
[1]3198fi
3199if [ "$YOUR_KERNEL_SUCKS" != "" ] || [ "$kernelpath" = "" ] || [ "$kernelpath" = "SUCKS" ] || [ "$kernelpath" = "FAILSAFE" ] ; then
[179]3200 kernelpath=$MINDI_LIB/vmlinuz
[258]3201 LogIt "I shall include Mindi's failsafe kernel, not your kernel, in the boot disks.\n"
3202 LogIt "However, you are still running your kernel. If Mindi fails to create your\n"
3203 LogIt "disks then it may still be a result of a problem with your kernel.\n"
[134]3204 pwd=`pwd`
3205 cd $TMP_ROOT
[179]3206 bzip2 -dc $MINDI_LIB/lib.tar.bz2 | tar -x || Die "Cannot unzip lib.tar.bz2"
[134]3207 cd $pwd
3208 YOUR_KERNEL_SUCKS="Your kernel sucks"
[1]3209fi
3210echo -e "Mindi's temp dir = $TMP_ROOT \nMindi's output dir=$imagesdir" >> $LOGFILE
[258]3211[ "$(($RANDOM%64))" -eq "0" ] && LogIt "Dude, I've looked inside your computer and it's really dusty...\n"
[1]3212rm -f /tmp/mindi.err.*.tgz
3213
3214[ "$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."
3215
3216rm -f /root/images/mindi/{*img,*gz,*iso}
3217
3218PrepareDataDiskImages $imagesdir
3219noof_disks=$?
3220ramdisk_size=$(($size_of_all_tools+$EXTRA_SPACE))
3221rds=$(($ramdisk_size-$((ramdisk_size%4096))))
3222ramdisk_size=$rds
3223
3224echo "Ramdisk will be $ramdisk_size KB" >> $LOGFILE
3225if [ "$USE_LILO" = "yes" ] ; then
[134]3226 if [ "$ARCH" = "ia64" ] ; then
3227 PrepareBootDiskImage_LILO $imagesdir $IA64_BOOT_SIZE $kernelpath $ramdisk_size || Die "Failed to create ia64 floppy disk image."
3228 else
3229 if ! PrepareBootDiskImage_LILO $imagesdir 1722 $kernelpath $ramdisk_size ; then
[519]3230 LogIt "Warning - failed to create 1.72MB boot image. Please reduce your kernel's size\n"
3231 LogIt "if you want to make a 1.72MB floppy disk.\n"
[134]3232 fi
[519]3233 if ! PrepareBootDiskImage_LILO $imagesdir 2880 $kernelpath $ramdisk_size ; then
3234 LogIt "Warning - failed to create 2.88MB floppy disk image.\n"
3235 LogIt "Please reduce your kernel's size\n"
3236 LogIt "if you want to make a 2.88MB floppy disk.\n"
3237 PrepareBootDiskImage_LILO $imagesdir 5760 $kernelpath $ramdisk_size || Die "Failed to create 2.88MB floppy disk image."
3238 fi
[134]3239 fi
[1]3240else
[134]3241 if ! PrepareBootDiskImage_SYSLINUX $imagesdir 1722 $kernelpath $ramdisk_size ; then
[289]3242 LogIt "Warning - failed to create 1.72MB boot image. Please reduce your kernel's size\n"
3243 LogIt "if you want to make a 1.72MB floppy disk.\n"
[290]3244 if ! PrepareBootDiskImage_SYSLINUX $imagesdir 2880 $kernelpath $ramdisk_size ; then
3245 LogIt "Warning - failed to create 2.88MB floppy disk image.\n"
3246 LogIt "Please reduce your kernel's size\n"
3247 LogIt "if you want to make a 2.88MB floppy disk.\n"
3248 PrepareBootDiskImage_SYSLINUX $imagesdir 5760 $kernelpath $ramdisk_size || Die "Failed to create 5.76MB floppy disk image."
3249 fi
[134]3250 fi
[1]3251fi
3252
3253
3254
[179]3255[ -e "$MINDI_LIB/memtest.img" ] && BOOT_MEDIA_MESSAGE="$BOOT_MEDIA_MESSAGE\n\
[1]3256...Or type 'memtest' to test your PC's RAM thoroughly.\n"
3257
3258
3259if [ ! "`DidMondoCallMe`" ] ; then
[134]3260 ListImagesForUser $imagesdir
3261 boot_dev=/dev/fd0u1722
3262 [ ! -e "$boot_dev" ] && mknod $boot_dev b 2 60
3263 [ ! -e "$boot_dev" ] && boot_dev=/dev/fd0H1722
3264 [ ! -e "$boot_dev" ] && Die "Oh Lord, will you PLEASE tell the vendor to create the 1.72MB devices in /dev?"
3265 if [ "$PROMPT_WRITE_BOOT_FLOPPIES" = "yes" ]; then
3266 OfferToCopyImagesToDisks $imagesdir $boot_dev $FDDEVICE
3267 fi
3268 OfferToMakeBootableISO $imagesdir
3269 LogIt "Finished.\n"
[1]3270elif [ "$TAPEDEV" ] ; then
[134]3271 mkdir -p /root/images/mindi
3272 rm -f /root/images/mindi/{*img,*gz,*iso}
3273 OfferToMakeBootableISO $imagesdir
3274 if [ -e "$imagesdir/all.tar.gz" ] ; then
3275 cp -f $imagesdir/all.tar.gz $MONDO_TMP/
3276 else
[1]3277 Die "Cannot find all.tar.gz, to be written to tape"
[134]3278 fi
[1]3279else
[134]3280 OfferToMakeBootableISO $imagesdir
[1]3281fi
3282if [ "$imagesdir" != "/root/images/mindi" ] ; then
[134]3283 for i in `find $imagesdir -maxdepth 1 -name "*.iso" -o -name "*.img"` ; do
[258]3284 cp -f $i /root/images/mindi || LogIt "[line 3260] Cannot copy $i to /root/images/mindi\n"
[134]3285 done
[1]3286fi
3287[ "$TMP_ROOT" != "/tmp" ] && rm -Rf $TMP_ROOT
[134]3288# cleanup
[177]3289rm -fR /tmp/mountlist.txt.$$ $FDISKLOG /tmp/mindilinux
[258]3290LogIt "$FRIENDLY_OUTSTRING\n"
[297]3291#ListUnsavedKernelModules
[1]3292for mtpt in $FLOPPY_WAS_MOUNTED ; do
[134]3293 mount $mtpt
[1]3294done
3295echo "Mindi is exiting" >> $LOGFILE
3296exit 0
Note: See TracBrowser for help on using the repository browser.