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

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

Improvement of the LABEL + swap patch by Michel Loiseleur (<mloiseleur_at_linagora.com>)

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