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

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

Previous patch improved

  • Property svn:keywords set to Rev Id
File size: 107.3 KB
RevLine 
[1]1#!/bin/bash
2
[212]3# $Id: mindi 492 2006-04-19 17:04:19Z 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"
[285]134EXTRA_MODS="$CDROM_MODS vfat fat loop linear raid0 raid1 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"
[488]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
[134]1384 current_partition=`ResolveSoftlink $c_p`
1385 [ "`echo "$current_partition" | fgrep "/dev/mapper"`" != "" ] && current_partition="$c_p"
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
[134]1391 absolute_partition=`ResolveSoftlink $c_p`
[275]1392 partition_mountpt=`tr -s '\t' ' ' < $MY_FSTAB | grep -w "$current_partition" | grep -vx " *#.*" | $AWK '{print $2}' | head -n1`
[1]1393 redhat_label=""
[447]1394 if [ "`echo "$current_partition" | fgrep -i "LABEL=SWAP"`" != "" ] ; then
1395 redhat_label=`echo "$current_partition" | cut -d'=' -f2`
1396 actual_dev="/dev/`echo "$redhat_label" | cut -d '-' -f2`"
1397 current_partition=$actual_dev
1398 elif [ "`echo "$current_partition" | fgrep -i "LABEL="`" != "" ] ; then
[134]1399 str_to_find_fmt_with=$current_partition
1400 redhat_label=`echo "$current_partition" | cut -d'=' -f2`
1401 actual_dev=`mount -l | fgrep " [$redhat_label]" | cut -d' ' -f1`
[1]1402# partition_mountpt=$redhat_label
[134]1403 current_partition=$actual_dev
[1]1404 else
[134]1405 str_to_find_fmt_with=$current_partition
[1]1406 fi
1407 partition_format=`$AWK '$1 == "'"$str_to_find_fmt_with"'" {print $3}' $MY_FSTAB`
1408 if [ -d "/proc/lvm" ] && [ "`lvdisplay $current_partition 2> /dev/null`" ] ; then
[134]1409 partition_size="lvm"
[1]1410 elif [ -d "/dev/mapper" ] && [ "`lvm lvdisplay $current_partition 2> /dev/null`" ] ; then
[134]1411 partition_size="lvm"
[1]1412 else
[134]1413 partition_size=`SizeOfPartition $current_partition`
1414 [ "`echo "$current_partition" | grep "[0-9]"`" = "" ] && continue
1415 [ "`echo "$current_partition" | grep -c "^/"`" -ne "1" ] && continue
1416 if [ "$partition_format" = "swap" ] || [ "$partition_mountpt" = "swap" ] ; then
[1]1417 partition_size=`fgrep -v "Priority" /proc/swaps | tr -s '\t' ' ' | fgrep "$current_partition" | $AWK '{print $3}'`
1418 [ "$partition_mountpt" != "swap" ] && partition_mountpt="swap"
[134]1419 [ "$partition_format" != "swap" ] && partition_format="swap"
[1]1420 if [ "$partition_size" = "" ] ; then
1421 totalsize=0
1422 items=0
[275]1423 for i in `tr -s ' ' '\t' < /proc/swaps | fgrep -v "Filename" | cut -f3` ; do
[1]1424 totalsize=$(($totalsize+$i))
1425 items=$(($items+1))
1426 done
[134]1427 [ "$items" -gt "0" ] && partition_size=$(($totalsize/$items)) || partition_size=0
[1]1428 [ "$partition_size" -lt "125000" ] && partition_size=125000
1429 echo "I'm guessing $c_p is $(($partition_size/1024))MB" >> $LOGFILE
1430 fi
[134]1431 fi
[1]1432 fi
1433 [ "$partition_mountpt" = "swap" ] && partition_format="swap"
1434 [ "$partition_format" = "swap" ] && partition_mountpt="swap"
1435 if [ "$partition_mountpt" = "" ] ; then
[134]1436 if [ "`pvdisplay $current_partition 2> /dev/null`" != "" ] || [ "`lvm pvdisplay $current_partition 2> /dev/null`" != "" ] ; then
[1]1437 if [ "`fgrep device /etc/raidtab 2> /dev/null | grep -w $current_partition`" ] ; then
1438 partition_mountpt="raid"
1439 partition_format="raid"
1440 else
1441# lvm_dev="`pvdisplay $current_partition | grep -i "VG N" | head -n1 | tr -s ' ' ' ' | cut -d' ' -f3`"
1442 partition_mountpt="lvm"
1443 partition_format="lvm"
1444 fi
[134]1445 fi
[1]1446 fi
1447 psz=$partition_size
1448 echo "Examining $current_partition (mount=$partition_mountpt fmt=$partition_format psz=$psz)" >> $LOGFILE
1449 [ "$psz" != "lvm" ] && psz=$(($psz/1024))
1450 if [ "`echo " $IMAGE_DEVS " | fgrep " $current_partition "`" != "" ] ; then
[134]1451 partition_mountpt="image"
1452 old_partition_fmt=$partition_format
[1]1453# partition_format="`$FDISK -l 2>> $LOGFILE | tr -s '\t' ' ' | grep -w "$absolute_partition" | $AWK 'x=$(NF-1}'`"
[134]1454 partition_format="`$FDISK -l 2>> $LOGFILE | tr '*' ' ' | tr '+' ' ' | tr -s ' ' '\t' | grep -w "$absolute_partition" | cut -f5`"
1455 echo "------- $FDISK -l log ------------" >> $LOGFILE
1456 cat $FDISKLOG >> $LOGFILE
1457 echo "------- $FDISK log end ------------" >> $LOGFILE
1458 partition_size=$(($partition_size+1)); # just in case
1459 if [ "$partition_format" = "Linux" ] ; then
1460 echo "Are you imaging a mounted swap partition? Silly..." >> $LOGFILE
1461 echo "Reverting format from $old_partition_fmt to $partition_format" >> $LOGFILE
1462 partition_format=$old_partition_fmt
1463 fi
[1]1464 fi
[134]1465 if [ "$EXCLUDE_DEVS" ] && [ "`echo " $EXCLUDE_DEVS " | fgrep " $current_partition "`" ] || [ "`echo " $EXCLUDE_DEVS " | grep " $current_partition "`" ] ; then
1466 echo "Excluding $current_partition from mountlist" >> $LOGFILE
1467 continue
1468 fi
1469 if [ ! "$partition_mountpt" ] ; then
1470 for qq in "" `find /dev/ida/c*d* ! -name '*p*'` ; do
[1]1471 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]1472 echo "------- $FDISK -l $qq log ------------" >> $LOGFILE
[134]1473 cat $FDISKLOG >> $LOGFILE
1474 echo "------- $FDISK log end ------------" >> $LOGFILE
[1]1475 [ "$partition_format" ] && break
[134]1476 done
1477 if [ "$partition_format" = "Compaq diagnostics" ] ; then
[1]1478 partition_format="compaq"
[134]1479 elif [ ! "`fgrep device /etc/raidtab 2> /dev/null | grep -w $current_partition`" ] ; then
[258]1480 LogIt "Unable to find mountpoint of $current_partition - ignoring\n"
[1]1481 continue
[134]1482 fi
[1]1483 fi
1484 partition_format="`echo "$partition_format" | cut -d',' -f1`"; # in case user has ext3,ext2 or something dumb like that
1485 [ "$partition_format" = "auto" ] && partition_format="`mount | grep -w $current_partition | awk '{print$5;}'`"; # in case user uses 'auto' (dumb!)
1486 unofficial_outstring=`printf "\t%-15s %-15s %-15s %7s\n" $current_partition $partition_mountpt $partition_format $psz`
1487 if [ "$current_partition" = "" ] ; then
[134]1488 echo "Unknown partition (outstring = $unofficial_outstring)" >> $LOGFILE
[1]1489 elif [ "$partition_mountpt" = "" ] && [ -f "/etc/raidtab" ] ; then
[273]1490 if [ "`fgrep device /etc/raidtab 2>/dev/null | fgrep $current_partition`" ] ; then
[1]1491 partition_mountpt=raid
1492 partition_format=raid
[134]1493 printf "\t%-15s %-15s %-15s %7s %-15s\n" $current_partition $partition_mountpt $partition_format $psz "$redhat_label"
1494 printf "%s %s %s %s %s\n" $current_partition $partition_mountpt $partition_format $partition_size "$redhat_label" >> $mountlist
1495 else
[1]1496 echo "Unknown mountpoint (outstring = $unofficial_outstring)" >> $LOGFILE
[134]1497 fi
1498 elif [ "$partition_format" = "" ] ; then
1499 echo "Unknown format (outstring = $unofficial_outstring)" >> $LOGFILE
[1]1500 elif [ "$partition_size" = "" ] ; then
[134]1501 echo "Unknown partition size (outstring = $unofficial_outstring)" >> $LOGFILE
[1]1502 elif [ "$partition_mountpt" = "/proc" ] || [ "$partition_mountpt" = "/dev/pts" ] ; then
[134]1503 continue
[1]1504 else
[134]1505 if [ "$partition_format" = "dos" ] || [ "$partition_format" = "msdos" ] ; then
1506 echo "Stupid bastard..." >> $LOGFILE
1507 partition_format="vfat"
1508 fi
1509 printf "\t%-15s %-15s %-15s %7s %-15s\n" $current_partition $partition_mountpt $partition_format $psz "$redhat_label"
1510 printf "%s %s %s %s %s\n" $current_partition $partition_mountpt $partition_format $partition_size "$redhat_label" >> $mountlist
[1]1511 fi
[134]1512 done
[1]1513}
1514
1515
1516
1517
1518
1519
1520MakeSureNumberIsInteger() {
[134]1521 res=`echo "$1" | tr -s '\-[0-9]' ' '`
1522 if [ "$res" != " " ] && [ "$res" != "" ] ; then
[1]1523 echo "result = '$res'"
[134]1524 Die "$1 should be an integer"
1525 fi
[1]1526}
1527
1528
1529
1530
1531
1532MakeSyslinuxMessageFile() {
[134]1533 mkdir -p $1
1534 rmdir $1
1535 echo -en " " > $1
[273]1536 if [ "`fgrep -i "debian" /etc/issue.net 2> /dev/null`" ] ; then
[275]1537 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]1538 else
[275]1539 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]1540 fi
[275]1541 sed s/%r/"`uname -r`"/ $1.tmp | sed s/%t/"`hostname`"/ > $1
[134]1542 rm -f $1.tmp
1543 if [ "$CDRECOVERY" != "yes" ] ; then
1544 if [ -e "$MONDO_TMP/start-nfs" ] ; then
1545 echo -en "Press <enter> to continue.\n" >> $1
1546 elif [ ! "$MONDO_TMP" ] ; then
1547 echo -en "FYI, this is _not_ a Mondo Rescue CD.\n" >> $1
[179]1548 if [ -e "$MINDI_LIB/memtest.img" ] ; then
[134]1549 echo -en "Type 'memtest' <Enter> to test your PC's memory intensively.\nJust press <Enter> to go to the main test menu.\n" >> $1
1550 fi
1551 else
1552 echo -en "$BOOT_MEDIA_MESSAGE" >> $1
1553 fi
1554 else
1555 echo -en " \
[1]1556To restore your disk to factory defaults, type 'RESTORE' <enter>.\n\
1557CAUTION: THIS WILL ERASE YOUR WHOLE DISK !!!\n" >> $1
[134]1558 fi
[1]1559}
1560
1561
1562
1563
1564MoveHyperlinkSensibly() {
[134]1565 local filename minidir_root resides_on_diskno noof_disks old_diskno d old_pwd
1566 filename=$1
1567 minidir_root=$2
1568 resides_on_diskno=$3
1569 noof_disks=$4
[1]1570
[134]1571 [ -h "$minidir_root/$resides_on_diskno/$filename" ] || Die "$filename isn't a softlink (or doesn't exist): how can I move it sensibly?"
[1]1572
[134]1573 old_diskno=$resides_on_diskno
1574 d=1
1575 while [ "$d" -le "$noof_disks" ] ; do
1576 if [ "$d" -ne "$old_diskno" ] ; then
1577 old_pwd=`pwd`
1578 cd $minidir_root/$old_diskno
1579 cp --parents -Rdf $filename $minidir_root/$d/ || Die "Can't move $filename (sensibly) from $old_diskno to $d"
1580 rm -f $filename
1581 cd $old_pwd
1582 fi
[1]1583# when the softlink is resolvable, our work here is done
[134]1584 [ -e "$minidir_root/$d/$filename" ] && return 0
1585 old_diskno=$d
1586 d=$(($d+1))
1587 done
1588 return 1
[1]1589}
1590
1591
1592
1593OfferToCopyImagesToDisks() {
[134]1594 local imagesdir i imagename dev count boot_dev data_dev
1595 imagesdir=$1
1596 boot_dev=$2
1597 data_dev=$3
1598 echo -en "Would you like to create boot+data floppy disks now (y/n) ?"
1599 read i
1600 [ "$i" != "y" ] && [ "$i" != "Y" ] && return
1601 mount | fgrep /dev/fd > /dev/null && Die "Please unmount your floppies first."
1602 echo "WARNING! THIS WILL ERASE YOUR FLOPPY DISKS."
1603 [ ! -e "$boot_dev" ] && Die "Cannot find $boot_dev - is your Linux distro broken?"
1604 [ ! -e "$data_dev" ] && Die "Cannot find $data_dev - is your Linux distro broken?"
1605 i=`find $imagesdir -type f | fgrep "/mindi-root.1" 2> /dev/null`
[291]1606 j=`find $imagesdir -type f | fgrep "/mindi-boot" | egrep -v '2880|5760'`
[1]1607# echo "i=$i"
1608# echo "j=$j"
[134]1609 if [ "$i" ] ; then
1610 CopyImageToDisk $j $data_dev "boot disk"
1611 CopyImageToDisk $i $data_dev "root disk"
1612 else
1613 CopyImageToDisk $j $boot_dev "boot/root disk"
1614 fi
1615 count=1
1616 for i in `find $imagesdir | fgrep mindi-data` ; do
1617 CopyImageToDisk $i $data_dev "data disk #$count"
1618 count=$(($count+1))
1619 done
[1]1620}
1621
1622
1623
1624OfferToMakeBootableISO() {
[134]1625 local i old_pwd
1626 if [ "$PROMPT_MAKE_CD_IMAGE" = "yes" ] && [ ! "`DidMondoCallMe`" ] ; then
1627 echo -en "Shall I make a bootable CD image? (y/n) "
1628 read i
1629 [ "$i" != "y" ] && [ "$i" != "Y" ] && return 0
1630 fi
1631 if [ ! "$MONDO_TMP" ] ; then
[258]1632 LogIt "NB: Mindi's bootable CD always uses isolinux.\n"
1633 LogIt "For a bootable CD w/LILO, please use Mondo.\n"
[134]1634 fi
1635 rm -Rf $TMP_ROOT/iso
1636 mkdir -p $TMP_ROOT/iso/{images,archives,isolinux}
1637 cp -f $1/*.img $1/*.gz $TMP_ROOT/iso/images || LogIt "OfferToMakeBootableISO: Cannot copy $i to $TMP_ROOT/iso/images\n"
1638 old_pwd=`pwd`
1639 cd $TMP_ROOT/iso
1640 mkdir -p $MONDO_ROOT/iso/isolinux
[179]1641 echo "mindi_lib = $MINDI_LIB" >> $LOGFILE
1642 cp $MINDI_LIB/mem{test,disk}* $MONDO_ROOT 2>> $LOGFILE
[134]1643 for i in memdisk memtest.bin memtest.img ; do
[179]1644 j=$MINDI_LIB/$i
[1]1645 k=$TMP_ROOT/iso/isolinux
1646 if [ -e "$j" ] ; then
[258]1647 LogIt "Copying $j to $k\n"
[134]1648 cp -f $j $k || Die "Failed to copy $j to $k"
1649 cp -f $j $TMP_ROOT || Die "Failed to copy $j to $k"
[1]1650 fi
[134]1651 done
1652 MakeSyslinuxMessageFile $TMP_ROOT/iso/isolinux/message.txt
1653 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?"
1654 cp $TMP_ROOT/mindi.rdz $TMP_ROOT/iso/isolinux/initrd.img
1655 cp $TMP_ROOT/mindi.rdz $imagesdir/initrd.img
1656 [ -e "$iso_cfg_file" ] || Die "FIXME - unable to find $iso_cfg_file - this should never occur"
1657 cd $TMP_ROOT/iso/isolinux
1658 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?"
1659 if [ -e "$MONDO_TMP/start-nfs" ] ; then
[1]1660 mv isolinux.cfg isolinux.cfg.old
[275]1661 sed s/interactive/iso/ isolinux.cfg.old > isolinux.cfg
[134]1662 fi
1663 if [ "$ARCH" != "ia64" ] ; then
1664 cp $ISOLINUX isolinux.bin || Die "Cannot copy isolinux.bin ($ISOLINUX) to tmp_root - did you run out of disk space?"
[1]1665 cp $ISOLINUX ../
[134]1666 fi
1667 cd $TMP_ROOT/iso
1668 if [ "$ARCH" != "ia64" ] ; then
1669 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?"
1670 fi
[424]1671 [ "$MONDO_SHARE" ] && cp -f $MONDO_SHARE/autorun .
[134]1672 if [ -d "/home/MondoCD" ] ; then
[1]1673 cp -pRdu /home/MondoCD/* .
[134]1674 fi
1675 if [ "$ARCH" != "ia64" ] ; then
1676 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
1677 else
1678 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
1679 fi
1680 if [ "$?" -ne "0" ] ; then
[1]1681 echo "----------- mkisofs's errors --------------" >> $LOGFILE
1682 cat /tmp/$$.mk >> $LOGFILE
1683 echo "mkisofs returned the following errors:-"
1684 cat /tmp/$$.mk
1685 LogIt "Failed to create ISO image.\n"
[134]1686 else
[1]1687 echo "Created bootable ISO image at $imagesdir/mindi.iso" >> $LOGFILE
[134]1688 fi
1689 rm -f /tmp/$$.mk
1690 cd $old_pwd
[1]1691}
1692
1693
1694
1695PluralOrNot() {
[134]1696 [ "$1" -gt "1" ] && echo -en "s"
[1]1697}
1698
1699
1700
1701
1702MakeMessageFile() {
[134]1703 local disksize
1704 disksize=$1
[273]1705 if [ "`fgrep -i "debian" /etc/issue.net 2> /dev/null`" ] ; then
[275]1706 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]1707 else
[275]1708 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]1709 fi
1710 if [ "$disksize" -gt "2880" ] ; then
[1]1711 if [ "`DidMondoCallMe`" ] ; then
[134]1712 if [ "$CDRECOVERY" != "yes" ] ; then
[232]1713 if [ -e "$MONDO_TMP/start-nfs" ] ; then
1714 echo -en "Press <enter> to continue.\n"
1715 elif [ ! "$MONDO_TMP" ] ; then
1716 echo -en "FYI, this is _not_ a Mondo Rescue CD.\n"
1717 else
1718 echo -en "$BOOT_MEDIA_MESSAGE"
1719 fi
[134]1720 fi
[1]1721 fi
[134]1722 fi
1723 if [ "$CDRECOVERY" = "yes" ] ; then
1724 echo -en "\
[1]1725To restore your disk to factory defaults, type 'RESTORE' <enter>.\n\
1726CAUTION: THIS WILL ERASE YOUR WHOLE DISK !!!\n"
[134]1727 fi
1728 echo -en "\n\n\n"
[1]1729}
1730
1731
1732
1733
1734write_full_floppy_of_kernel() {
[134]1735 local mtpt image old_pwd res disksize
[1]1736
[134]1737 res=0
1738 old_pwd=`pwd`
1739 KERN_DISK_MADE=1
1740 disksize=$3
1741 rand1=$RANDOM
1742 rand2=$RANDOM
1743 image=/tmp/$rand1.$rand2.img
1744 mtpt=/tmp/$rand1.$rand2.mtpt
1745 dd if=/dev/zero of=$image bs=1k count=$disksize
1746 mke2fs -N 26 -F $image > /dev/null
1747 mkdir -p $mtpt
1748 mount -o loop $image $mtpt
1749 cd $mtpt
1750 mkdir -p {dev,tmp,boot}
1751 cp -f $1 vmlinuz
1752 if [ "$?" -ne "0" ] ; then
[258]1753 LogIt "Failed to copy $1 to ramdisk\n"
[134]1754 cd $old_pwd
1755 umount $mtpt
1756 rmdir $mtpt
1757 rm $image
1758 return 1
1759 fi
[1]1760
[134]1761 rdev vmlinuz 2,0
1762 rdev -R vmlinuz 0
1763 rdev -r vmlinuz 49152
[1]1764
[179]1765 tar -zxf $MINDI_LIB/dev.tgz || LogIt "Cannot untar dev.tgz\n"
[134]1766 losetup /dev/loop0 > /dev/null 2> /dev/null
1767 [ "$?" -eq "0" ] || losetup /dev/loop0 -d || Die "Please free up /dev/loop0 by typing 'losetup /dev/loop0 -d'.\nReboot if necessary.\n"
1768 CopyBootBFile $mtpt/boot.b
[1]1769
1770# echo "root=/dev/loop0" > bdlilo.conf
[134]1771 MakeLiloConfFile $disksize >> bdlilo.conf
[1]1772
1773# cat bdlilo.conf > /tmp/bdlilo.conf
1774
1775# cat /home/mondostuff/bdlc > bdlilo.conf
1776
[134]1777 chmod 644 bdlilo.conf
1778 MakeMessageFile $disksize > message
1779 lilo -v -C bdlilo.conf -r $mtpt
1780 res=$?
[1]1781
1782#echo "lilo -v -C bdlilo.conf -r $mtpt"
1783#echo -en "Press enter"; read line
1784
[134]1785 cd $old_pwd
1786 umount $mtpt
1787 mv -f $image $2
1788 rmdir $mtpt
[1]1789
[134]1790 return $res
[1]1791
1792}
1793
1794
1795
1796
1797
1798
1799MakeLiloConfFile() {
[134]1800 local disksize options i ooo
1801 disksize=$1
1802 options=""
1803 if [ "$ARCH" != "ia64" ] ; then
[291]1804 echo -en "boot=/dev/loop0\ndisk=/dev/loop0\n"
[134]1805 fi
1806 if [ "$disksize" -eq "2880" ] ; then
[291]1807 echo -en "bios=0x00\nsectors=36\nheads=2\ncylinders=80\n"
[134]1808 elif [ "$disksize" -eq "1722" ] ; then
[291]1809 echo -en "bios=0x00\nsectors=21\nheads=2\ncylinders=82\n"
[134]1810 elif [ "$disksize" -gt "2880" ] ; then
1811 /bin/true
1812 else
[291]1813 echo -en "bios=0x00\nsectors=18\nheads=2\ncylinders=80\n"
[134]1814 fi
1815 if [ "$ARCH" != "ia64" ] ; then
1816 echo -en "install=/boot.b\nmap=/boot.map\n"
1817 fi
1818 if [ "$CDRECOVERY" = "yes" ] ; then
1819 echo -en "default=RESTORE\n"
1820 elif [ "$disksize" -gt "2880" ] && [ "`DidMondoCallMe`" ] ; then
[291]1821 if [ -e "$MONDO_TMP/start-nfs" ] ; then
1822 echo -en "default=iso\n"
1823 else
1824 echo -en "default=interactive\n"
1825 fi
[1]1826 else
[291]1827 echo -en "default=expert\n"
[1]1828 fi
[291]1829
1830 echo -en "prompt\n"
[134]1831 if [ "$ARCH" != "ia64" ] ; then
1832 echo -en "vga=normal\nbackup=/dev/null\nmessage=/message\n"
1833 fi
1834 if [ "$CDRECOVERY" != "yes" ] ; then
[1]1835 echo -en "timeout=300\n"
[134]1836 fi
1837 echo -en "\n"
1838 if [ "$CDRECOVERY" = "yes" ] ; then
[1]1839 options="RESTORE expert"
[134]1840 elif [ "$disksize" -gt "2880" ] ; then
1841 if [ "`DidMondoCallMe`" ] ; then
1842 if [ -e "$MONDO_TMP/start-nfs" ] ; then
1843 options="iso"
1844 else
1845 options="interactive expert compare iso nuke isonuke"
[1]1846# hda hdb hdc hdd"
[134]1847 fi
1848 else
1849 options="expert"
[1]1850 fi
[134]1851 else
[291]1852 options="expert"
[134]1853 fi
1854 for i in $options ; do
[1]1855 ooo=$i
1856 [ "$ooo" = "RESTORE" ] && ooo="nuke"
[291]1857 if [ "$ARCH" = "ia64" ] ; then
[1]1858 rootpart="root=/dev/ram0\n\t"
1859 else
1860 rootpart=""
1861 fi
1862 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"
1863
1864 outstr=$outstr" $ooo_mode"
1865 outstr=$outstr"\"\n"
1866 if [ "$disksize" = "1440" ] ; then
[134]1867 echo -en "$outstr" | sed s/initrd=.*// | grep -v root=
[1]1868 else
[134]1869 echo -en "$outstr"
[1]1870 fi
[134]1871 done
[1]1872}
1873
1874
1875
1876
1877PrepareBootDiskImage_LILO() {
[134]1878 local disksize imagesdir dev imagefile mountpoint fname i kernelpath ramdisksize cfg_file testpath options retval outstr old_pwd ooo max_kernel_size liloconf
1879 imagesdir=$1
1880 disksize=$2
1881 kernelpath=$3
1882 ramdisksize=$4
[1]1883
[134]1884 retval=0
1885 [ ! -e "$kernelpath" ] && Die "PBDI - cannot find $kernelpath kernel"
1886 echo -en "Making "$disksize"KB boot disk..."
[179]1887 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]1888 if [ "$ARCH" != "ia64" ] ; then
1889 [ "$disksize" != "1722" ] && [ "$disksize" != "2880" ] && [ "$disksize" != "5760" ] && Die "PDBI - disksize is $disksize - bad size"
1890 fi
1891 echo -en "..."
1892 imagefile=$imagesdir/mindi-bootroot.$disksize.img
1893 mountpoint=$TMP_ROOT/mountpoint.$$
1894 mkdir -p $mountpoint
1895 dd if=/dev/zero of=$imagefile bs=1k count=$disksize &> /dev/null || Die "Cannot dd blank file"
1896 if [ "$ARCH" = "ia64" ] ; then
1897 mkdosfs $imagefile > /tmp/mke2fs.$$ 2>> /tmp/mke2fs.$$
[1]1898 t=vfat
[134]1899 else
1900 mke2fs -N 26 -m 0 -F $imagefile > /tmp/mke2fs.$$ 2>> /tmp/mke2fs.$$
[1]1901 t=ext2
[134]1902 fi
1903 [ "$?" -ne "0" ] && cat /tmp/mke2fs.$$
1904 rm -f /tmp/mke2fs.$$
1905 mount -t $t -o loop $imagefile $mountpoint || LogIt "Cannot mount (PBDI)\n\n"
[1]1906# copy Mindi's skeleton fs & lilo/syslinux/whatever stuff into it
[134]1907 mkdir -p $mountpoint/etc
1908 if [ "$ARCH" != "ia64" ] ; then
1909 liloconf=$mountpoint/etc/lilo.conf
1910 else
[1]1911 liloconf=$mountpoint/elilo.conf
[134]1912 fi
1913 old_pwd=`pwd`
1914 cd $mountpoint
1915 if [ "$ARCH" != "ia64" ] ; then
[179]1916 tar -zxf $MINDI_LIB/dev.tgz || LogIt "Cannot untar dev.tgz\n"
[134]1917 fi
1918 cd $old_pwd
1919 losetup /dev/loop0 > /dev/null 2> /dev/null
1920 [ "$?" -eq "0" ] || losetup /dev/loop0 -d || Die "Please free up /dev/loop0 by typing 'losetup /dev/loop0 -d'.\nReboot if necessary.\n"
1921 CopyBootBFile $mountpoint/boot.b
[1]1922
[134]1923 MakeLiloConfFile $disksize > $liloconf
[1]1924
[134]1925 echo "Copying $TMP_ROOT/mindi.rdz to $mountpoint..." >> $LOGFILE
1926 cp -f $TMP_ROOT/mindi.rdz $mountpoint 2>> $LOGFILE
1927 if [ "$?" -ne "0" ] ; then
[1]1928 LogIt "Failed to copy $TMP_ROOT/mindi.rdz to $mountpoint\n"
1929 cat $TMP_ROOT/mtpt.$$ >> $LOGFILE
1930 LogIt "Please unload some of your modules and try again.\n"
1931 rm -f $TMP_ROOT/mtpt.$$
[258]1932 LogIt "Cannot incorporate mindi.rdz in bootdisk (kernel / modules too big?)\n"
[134]1933 retval=$(($retval+1))
1934 fi
1935 MakeMessageFile $disksize > $mountpoint/message
[1]1936
[134]1937 mkdir -p $mountpoint/tmp
1938 cp -f $TMP_ROOT/mondo-restore.cfg $mountpoint/tmp &> /dev/null
[179]1939 if [ -e "$MINDI_LIB/memtest.img" ] ; then
[134]1940 echo -en "image=/memtest.bin\nlabel=memtest\nn" >> $liloconf
1941 echo -en "image=/memdisk\nlabel=memtest\nappend=\"initrd=memtest.img\"\n" >> $liloconf
[1]1942# echo "Yep, this is a multi-function CD" > $mountpoint/MULTIFUNC
[134]1943 fi
1944 if [ -d "/home/MondoCD" ] ; then
[1]1945 cp -pRdu /home/MondoCD/* . || Die "Cannot do kung pow"
[134]1946 fi
[1]1947
1948# copy the kernel across
[134]1949 rm -Rf $mountpoint/lost+found
1950 dd if=/dev/zero of=$mountpoint/zero bs=1k count=16 &> /dev/null
[305]1951 free_space=`df -k -P $mountpoint | tail -n1 | tr -s ' ' '\t' | cut -f4`
[134]1952 cp -f $kernelpath $mountpoint/vmlinuz > /dev/null 2> /dev/null
1953 if [ "$?" -ne "0" ] || [ "$FORCE_DUAL_FLOPPIES" = "yes" ] ; then
[1]1954 echo "Files at mountpoint ($mountpoint) :-" >> $LOGFILE
1955 du -sk $mountpoint/* >> $LOGFILE
1956 echo "--- end of list of files ---" >> $LOGFILE
1957 echo -en "Kernel size = `du -sk $kernelpath | cut -f1` K\nRamdisk free = $free_space K\n\
1958Sorry, your kernel is too big for a boot/root floppy.\nI'll try the new boot/root two-disk thingy.\n" >> $LOGFILE
[134]1959 rm -f $mountpoint/vmlinuz
[1]1960 cd $old_pwd
[134]1961 umount $mountpoint || Die "Cannot unmount mountpoint ($mountpoint)"
1962 rmdir $mountpoint || LogIt "Cannot rmdir (PBDI)\n"
[1]1963# losetup /dev/loop0 -d
1964 res=0
[134]1965 write_full_floppy_of_kernel $kernelpath $imagesdir/mindi-boot.1440.img 1440
[1]1966 res=$(($res+$?))
[134]1967 cp -f $TMP_ROOT/mindi.rdz $imagesdir/mindi-root.1440.img
[1]1968 res=$(($res+$?))
1969 rm -f $imagefile
[381]1970 if [ "$res" -ne "0" ]; then
1971 LogIt "Warning - failed to create 1.44MB boot/root floppies\n"
1972 rm -f $imagesdir/mindi-*.1440.img
1973 fi
[1]1974 return $res
[134]1975 fi
[305]1976 free_space=`df -k -P $mountpoint | tail -n1 | tr -s ' ' '\t' | cut -f4`
[134]1977 max_kernel_size=$(($free_space+`du -sk $kernelpath | cut -f1`))
1978 echo "Free space left on floppy = $free_space KB" >> $LOGFILE
1979 echo "Max kernel size on $disksize KB floppy (est'd) = $max_kernel_size K" >> $LOGFILE
[1]1980# make it bootable
[134]1981 rm -f $mountpoint/zero
[179]1982 [ -e "$MINDI_LIB/memdisk" ] && cp -f $MINDI_LIB/memdisk $mountpoint
[134]1983 if [ "$disksize" -gt "2880" ] && [ ! "$KERN_DISK_MADE" ] ; then
1984 if [ "$ARCH" != "ia64" ] ; then
1985 $LILO_EXE $LILO_OPTIONS -r $mountpoint >> $LOGFILE 2>> $LOGFILE
1986 else
1987 /bin/true
1988 fi
1989 elif [ ! "$KERN_DISK_MADE" ] ; then
[1]1990# 12/28/2001 - if 1.72MB floppy then don't use LILO's optimizations at all
1991 $LILO_EXE -r $mountpoint >> $LOGFILE 2>> $LOGFILE
[134]1992 else
[1]1993 echo "Not running LILO. It's not that kind of disk." >> $LOGFILE
[134]1994 fi
1995 if [ $? -ne "0" ] ; then
[273]1996 if [ "`fgrep "/tmp/dev.0" $LOGFILE`" ] ; then
[134]1997 LogIt "The '/tmp/dev.0' error is NOT Mindi's fault. It is LILO's.\n"
1998 LogIt "Please reboot your PC as a workaround.\n"
1999 Die "LILO sneezed and Mindi caught a cold. Please read the README / FAQ.\n"
[1]2000 fi
2001 echo "$LILO_EXE -r $mountpoint ...failed."
2002 echo -en "Press ENTER to continue."; read line
2003 LogIt "Cannot run lilo on $mountpoint\nPlease upgrade/downgrade your version of LILO. It has a bug.\n"
2004 retval=$(($retval+1))
[134]2005 fi
2006 cp -f $liloconf /tmp/lilo.conf
2007 if [ "$ARCH" = "ia64" ] ; then
2008 cp `dirname $kernelpath`/*.efi $mountpoint
2009 fi
2010 umount $mountpoint || Die "Cannot unmount mountpoint ($mountpoint)"
2011 echo -en "..."
2012 rmdir $mountpoint || LogIt "Cannot rmdir (PBDI)\n"
2013 if [ "$retval" -eq "0" ] ; then
[148]2014 echo -en "...$DONE\r"
2015 if [ "$KERN_DISK_MADE" ] ; then
2016 LogIt "... $disksize KB boot disks were created OK\r"
2017 fi
[1]2018 else
[148]2019 echo -en "...failed\r"
2020 LogIt $disksize"KB boot disk was NOT created\r"
2021 rm -f $imagefile
[1]2022 fi
[134]2023 [ "$retval" -ne "0" ] && LogIt "PrepareBootDiskImage() is returning nonzero\n"
2024 return $retval
[1]2025}
2026
2027
2028
2029
2030PrepareBootDiskImage_SYSLINUX() {
[134]2031 local disksize imagesdir dev imagefile mountpoint fname i kernelpath ramdisksize cfg_file testpath options retval outstr old_pwd ooo max_kernel_size bootimage
2032 imagesdir=$1
2033 disksize=$2
2034 kernelpath=$3
2035 ramdisksize=$4
2036 do_boot_root_thingy=""
2037 local retval old_pwd
2038 retval=0
2039 [ ! -e "$kernelpath" ] && Die "PBDI - cannot find $kernelpath kernel"
2040 echo -en "Making "$disksize"KB boot disk..."
[179]2041 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]2042 [ "$disksize" != "1722" ] && [ "$disksize" != "2880" ] && [ "$disksize" != "5760" ] && Die "PDBI - disksize is $disksize - bad size"
2043 echo -en "..."
2044 imagefile=$imagesdir/mindi-bootroot.$disksize.img
2045 mountpoint=$TMP_ROOT/mountpoint.$$
2046 mkdir -p $mountpoint
[1]2047# If I format a 1722KB data file & run syslinux on it, the resultant image
2048# won't boot. So, I have formatted a floppy, called syslinux on/to it, and
2049# used 'dd' to copy it to sys-disk.raw (zipped to sys-disk.raw.gz).
2050# If I extract it, mount it, copy my files to it, etc. then the resultant
2051# image _is_ bootable. I don't know why syslinux and/or mkfs.vfat won't
2052# play nicely and I don't care. :) I have worked around the problem. -Hugo, 06/27/2002
[134]2053 if [ "$disksize" = "1722" ] ; then
[179]2054 gzip -dc $MINDI_LIB/sys-disk.raw.gz > $imagefile || Die "Cannot dd blank file"
[134]2055 else
2056 dd if=/dev/zero of=$imagefile bs=1k count=$disksize &> /dev/null || Die "Cannot dd blank file"
2057 mkfs.vfat $imagefile
2058 syslinux $imagefile
2059 fi
2060 mount -t vfat -o loop $imagefile $mountpoint || LogIt "Cannot mount (PBDI)\n\n"
[1]2061# copy Mindi's skeleton fs & lilo/syslinux/whatever stuff into it
[134]2062 old_pwd=`pwd`
2063 MakeSyslinuxMessageFile $mountpoint/message.txt
2064 cd $mountpoint
2065 [ -e "$sys_cfg_file" ] || Die "Obi Wan, word up?"
[179]2066# tar -zxf $MINDI_LIB/dev.tgz || LogIt "Cannot untar dev.tgz\n" <--- present for LILO; is it nec. for SYSLINUX too?
[134]2067 cat $sys_cfg_file | HackSyslinuxFile $ramdisk_size $mountpoint > syslinux.cfg || Die "Cannot copy syslinux.cfg from mindi_home to tmp_root"
2068 if [ -e "$MONDO_TMP/start-nfs" ] ; then
[289]2069 mv syslinux.cfg syslinux.cfg.orig
2070 sed s/interactive/iso/ syslinux.cfg.orig > syslinux.cfg
[134]2071 fi
2072 cd $old_pwd
2073 echo "Copying $TMP_ROOT/mindi.rdz to $mountpoint/initrd.img..." >> $LOGFILE
2074 cp -f $TMP_ROOT/mindi.rdz $mountpoint/initrd.img 2>> $LOGFILE
2075 if [ "$?" -ne "0" ] ; then
[289]2076 LogIt "Failed to copy $TMP_ROOT/mindi.rdz to $mountpoint\n"
2077 cat $TMP_ROOT/mtpt.$$ >> $LOGFILE
2078 LogIt "Please unload some of your modules and try again.\n"
2079 rm -f $TMP_ROOT/mtpt.$$
2080 LogIt "Cannot incorporate mindi.rdz in bootdisk (kernel / modules too big?)\n"
[134]2081 retval=$(($retval+1))
2082 fi
[1]2083
[134]2084 mkdir -p $mountpoint/tmp
2085 cp -f $TMP_ROOT/mondo-restore.cfg $mountpoint/tmp &> /dev/null
[1]2086
2087# copy the kernel across
[134]2088 rm -Rf $mountpoint/lost+found
2089 dd if=/dev/zero of=$mountpoint/zero bs=1k count=16 &> /dev/null
[305]2090 free_space=`df -k -P $mountpoint | tail -n1 | tr -s ' ' '\t' | cut -f4`
[134]2091 cp -f $kernelpath $mountpoint/vmlinuz &> /dev/null
2092 if [ "$?" -ne "0" ] || [ "$FORCE_DUAL_FLOPPIES" = "yes" ] ; then
[289]2093 echo "Files at mountpoint ($mountpoint) :-" >> $LOGFILE
2094 du -sk $mountpoint/* >> $LOGFILE
2095 echo "--- end of list of files ---" >> $LOGFILE
2096 echo -en "Kernel size = `du -sk $kernelpath | cut -f1` K\nRamdisk free = $free_space K\n\
[1]2097Sorry, your kernel is too big for a boot/root floppy.\nI'll try the new boot/root two-disk thingy.\n" >> $LOGFILE
[134]2098 rm -f $mountpoint/vmlinuz
[289]2099 cd $old_pwd
[134]2100 umount $mountpoint || Die "Cannot unmount mountpoint ($mountpoint)"
2101 rmdir $mountpoint || LogIt "Cannot rmdir (PBDI)\n"
[1]2102# losetup /dev/loop0 -d
2103
[134]2104 res=0
2105 write_full_floppy_of_kernel $kernelpath $imagesdir/mindi-boot.1440.img 1440
2106 res=$(($res+$?))
2107 cp -f $TMP_ROOT/mindi.rdz $imagesdir/mindi-root.1440.img
2108 res=$(($res+$?))
2109 rm -f $imagefile
[381]2110 if [ "$res" -ne "0" ]; then
2111 LogIt "Warning - failed to create 1.44MB boot/root floppies\n"
2112 rm -f $imagesdir/mindi-*.1440.img
2113 fi
[134]2114 return $res
2115 fi
[305]2116 free_space=`df -k -P $mountpoint | tail -n1 | tr -s ' ' '\t' | cut -f4`
[134]2117 max_kernel_size=$(($free_space+`du -sk $kernelpath | cut -f1`))
2118 echo "Free space left on floppy = $free_space KB" >> $LOGFILE
2119 echo "Max kernel size on $disksize KB floppy (est'd) = $max_kernel_size K" >> $LOGFILE
[1]2120# make it bootable
[134]2121 rm -f $mountpoint/zero
2122 mkdir -p $mountpoint/etc
[179]2123 [ -e "$MINDI_LIB/memdisk" ] && cp -f $MINDI_LIB/memdisk $mountpoint
[134]2124 umount $mountpoint || Die "Cannot unmount mountpoint ($mountpoint)"
2125 echo -en "..."
2126 rmdir $mountpoint || LogIt "Cannot rmdir (PBDI)\n"
[1]2127
[134]2128 if [ "$retval" -eq "0" ] ; then
2129 echo -en "...$DONE\r"
2130 if [ "$KERN_DISK_MADE" ] ; then
2131 rm -f $imagefile
[148]2132 LogIt "... $disksize KB boot disks were created OK\r"
[134]2133 fi
2134 else
[148]2135 echo -en "...failed\r"
2136 LogIt $disksize"KB boot disk was NOT created\r"
2137 rm -f $imagefile
[134]2138 fi
2139 [ "$retval" -ne "0" ] && LogIt "PrepareBootDiskImage() is returning nonzero\n"
2140 return $retval
[1]2141}
2142
2143
2144
2145
2146PrepareDataDiskImages() {
[134]2147 local needlist bigdir minidir_root tardir diskdir imagesdir res i j k old_pwd lines
[1]2148
[134]2149 imagesdir=$1
2150 rm -f $imagesdir/mindi-*.img $imagesdir/[0-9]*.tar.gz $imagesdir/mindi.iso
2151 needlist=$TMP_ROOT/what-we-need.txt
2152 bigdir=$TMP_ROOT/bigdir
2153 minidir_root=$TMP_ROOT/minidir
2154 mkdir -p $minidir_root
2155 mkdir -p $bigdir/usr/bin
2156 tardir=$TMP_ROOT/tardir
[1]2157
[454]2158 lines=`grep -vx " *#.*" $MINDI_CONF/deplist.txt $DEPLIST_DIR/* | grep -vx "" | wc -l`
2159 cat $MINDI_CONF/deplist.txt $DEPLIST_DIR/* | GenerateGiantDependencyList $needlist $lines
[134]2160 res=$?
2161 if [ "$YOUR_KERNEL_SUCKS" ]; then
[1]2162 pwd=`pwd`
2163 cd $TMP_ROOT
[134]2164 for i in `ListKernelModulePaths | HackPathsToFailsafe` ; do
2165 cp --parents -pRdf ./$i $bigdir || Die "PDDI can't cp $i->$bigdir"
2166 if [ "`du -sk $i | cut -f1`" -lt "$(($CHOPSIZE*2))" ] ; then
[1]2167 cp --parents -pRdf $i $bigdir
[134]2168 else
[1]2169 ChopUpAndCopyFile $i $bigdir $CHOPSIZE $BIGNO
2170 BIGNO=$(($BIGNO+1))
[134]2171 fi
[1]2172 done
2173 for i in $EXTRA_MODS ; do
[134]2174 j=`find lib/modules/$FAILSAFE_KVER -name $i.*o 2> /dev/null`
2175 [ ! "$j" ] && echo "Warning - cannot find failsafe module $i.o" >> $LOGFILE
2176 for k in $j ; do
[1]2177 if [ "`du -sk $k | cut -f1`" -lt "$CHOPSIZE" ] ; then
2178 cp --parents -pRdf $k $bigdir
2179 else
2180 ChopUpAndCopyFile $k $bigdir $CHOPSIZE $BIGNO
2181 BIGNO=$(($BIGNO+1))
2182 fi
2183 echo "Added failsafe module $k to ramdisk" >> $LOGFILE
[134]2184 done
[1]2185 done
2186 cd $pwd
[134]2187 else
[1]2188 ListKernelModulePaths >> $needlist
[134]2189 fi
2190 if [ "$res" -ne "0" ] ; then
2191 Die "You have $res file`PluralOrNot $res` present in dependency list\nbut absent from filesystem."
2192 fi
2193 FindAndAddUserKeyboardMappingFile
2194 mkdir -p $bigdir/tmp
2195 if [ "`DidMondoCallMe`" ] ; then
2196 MakeMondoConfigFile $TMP_ROOT/mondo-restore.cfg
2197 cp -f $TMP_ROOT/mondo-restore.cfg $bigdir/tmp &> /dev/null
2198 cp -f $TMP_ROOT/mondo-restore.cfg $CACHE_LOC &> /dev/null
2199 fi
2200 [ -d "/mnt/.boot.d" ] && echo "Oh Jebus" > $bigdir/tmp/DUMBASS-GENTOO
2201 DropOptimizedLibraries $needlist $bigdir
2202 echo -en "Assembling dependency files"
2203 CopyDependenciesToDirectory < $needlist $bigdir
[1]2204
2205# also copy io.sys and msdos.sys, if we can find them
[134]2206 for i in `mount | cut -d' ' -f3` ; do
[1]2207 for j in io.sys msdos.sys ; do
[134]2208 [ -e "$i/$j" ] && cp -f $i/$j $bigdir
[1]2209 done
[134]2210 done
[1]2211
2212# master boot record, too
[134]2213 i=`cat $MONDO_TMP/BOOTLOADER.DEVICE 2> /dev/null`
2214 if [ "$i" ] ; then
[258]2215 LogIt "Backing up $i's MBR\n"
[1]2216 dd if=$i of=$bigdir/BOOTLOADER.MBR bs=446 count=1 >> $LOGFILE 2>> $LOGFILE
2217# < < E O F
2218 sleep 1
2219 sync
2220# [ "$?" -ne "0" ] && echo "Failed to save $i's MBR to bigdir" >> $LOGFILE
2221 j=$i
2222 [ -h "$j" ] && j=`ResolveSoftlink $j`
[258]2223 LogIt "Creating /dev/boot_device ($j)\n"
[1]2224 mkdir -p $bigdir/dev
2225 cp -pRdf $j $bigdir/dev/boot_device || Die "Unable to create /dev/boot_device on ramdisk"
[134]2226 fi
[1]2227
2228# more stuff
[179]2229# cp -f $MINDI_LIB/embleer* $bigdir
[134]2230 old_pwd=`pwd`
2231 cd $bigdir
[1]2232
[179]2233 [ -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'."
2234 cp -Rdf $MINDI_LIB/aux-tools/* . 2>> $LOGFILE || LogIt "Warning - error occurred while unzipping aux-tools\n"
2235 if [ -e "$MINDI_LIB/x11-tools.tgz" ] ; then
2236 tar -zxf $MINDI_LIB/x11-tools.tgz 2>> $LOGFILE || LogIt "Warning - error occurred while unzipping x11-tools.tgz\n"
[134]2237 fi
[424]2238 if [ -e "$MONDO_SHARE/restore-scripts" ] ; then
2239 cp -Rdf $MONDO_SHARE/restore-scripts/* . 2>> $LOGFILE
2240 [ "$?" -ne "0" ] && [ "`DidMondoCallMe`" ] && Die "Cannot find/install $MONDO_SHARE/restore-scripts"
[134]2241 fi
2242 [ -d "/lib/dev-state" ] && cp --parents -pRdf /lib/dev-state .
2243 cd $old_pwd
2244 echo -e "$DONE"
2245 TOTAL_BIGDIR_SIZE=`du -sk $bigdir | cut -f1`
2246 SplitDirectoryIntoMinidirs $bigdir $minidir_root
2247 noof_disks=$?
2248 [ "$noof_disks" -eq "0" ] && Die "Too much stuff!"
2249 MakeMountlist $TMP_ROOT/mountlist.txt
2250 mkdir -p $minidir_root/$noof_disks/tmp
2251 cp -f $TMP_ROOT/mountlist.txt $minidir_root/$noof_disks/tmp/mountlist.txt || Die "Cannot copy mountlist.txt from $TMP_ROOT to data disk"
2252 cp -f $TMP_ROOT/mountlist.txt $CACHE_LOC
2253 [ "`DidMondoCallMe`" ] && cp -f $minidir_root/$noof_disks/tmp/mountlist.txt $MONDO_TMP/.
[488]2254 [ -d "/proc/lvm" ] && $MINDI_LIB/analyze-my-lvm > $minidir_root/$noof_disks/tmp/i-want-my-lvm
2255 [ -d "/dev/mapper" ] && $MINDI_LIB/analyze-my-lvm > $minidir_root/$noof_disks/tmp/i-want-my-lvm
[134]2256 cat $minidir_root/$noof_disks/tmp/mountlist.txt >> $LOGFILE
2257 ZipMinidirsIntoTarballs $minidir_root $tardir $noof_disks
2258 CreateDataDiskImagesFromTarballs $tardir $imagesdir $noof_disks
2259 FRIENDLY_OUTSTRING="Boot and data disk images were created."
[1]2260# One 1.72MB boot disk, one 2.88MB boot disk and $noof_disks data disk images
[134]2261 rmdir $tardir $bigdir
2262 rm -f $needlist
2263 return $noof_disks
[1]2264}
2265
2266
2267ProcessLDD() {
[134]2268 local main_fname incoming j i fname f newf
2269 main_fname=$1
2270 read incoming
2271 while [ "$incoming" != "" ] ; do
2272 incoming=`echo "$incoming" | sed '/[[:blank:]]*.*[[:blank:]]*=>[[:blank:]]*(.*/d ; s/[[:blank:]]*\(.*\)[[:blank:]]*=>[[:blank:]]*\/.*/\1/ ; s/[[:blank:]]*\(\/.*\)[[:blank:]]*(.*/\1/'`
2273 for fname in `echo "$incoming"` ; do
2274 fname=`LocateFile $fname`
2275 for f in $fname ; do
2276 [ -e "$f" ] && echo $f
2277 done
2278 done
2279 read incoming
2280 done
[1]2281}
2282
2283
2284
2285Prompt() {
[134]2286 echo -en "$1"
2287 read line
[1]2288}
2289
2290
2291
2292ReadLine() {
[134]2293 local i incoming
2294 read incoming
2295 i=0
2296 while [ "$i" -le "32" ] && [ "$incoming" = "" ] ; do
[1]2297 i=$(($i+1))
2298 read incoming
[134]2299 done
2300 echo "$incoming"
[1]2301}
2302
2303
2304
2305RejigHyperlinks() {
[134]2306 local minidir_root noof_disks fname path diskno old_pwd awk_loc gawk_loc dir i
2307 minidir_root=$1
2308 noof_disks=$2
[1]2309
[134]2310 old_pwd=`pwd`
2311 diskno=1
2312 while [ "$diskno" -le "$noof_disks" ] ; do
[1]2313 mkdir -p $minidir_root/$diskno
[134]2314 cd $minidir_root/$diskno
2315 for fname in `find -type d -o -print` ; do
2316 [ -h "$minidir_root/$diskno/$fname" ] && MoveHyperlinkSensibly $fname $minidir_root $diskno $noof_disks
2317 done
[1]2318 diskno=$(($diskno+1))
[134]2319 done
[1]2320
2321
[134]2322 cd $old_pwd
2323 return
[1]2324
2325
2326
2327# do some awk/gawk stuff
[134]2328 cd $minidir_root
2329 awk_loc=`find -name awk`
2330 gawk_loc=`find -name gawk`
2331 if [ "$awk_loc" = "" ] && [ "$gawk_loc" != "" ] ; then
2332 for i in $gawk_loc ; do HackAwk $i gawk ; done
2333 elif [ "$gawk_loc" = "" ] && [ "$awk_loc" != "" ] ; then
2334 for i in $awk_loc ; do HackAwk $i awk ; done
2335 elif [ "$gawk_loc" != "" ] && [ "$awk_loc" != "" ] ; then
2336 echo -en "Gawk/awk found. Good.\r"
2337 else
2338 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? :-)"
2339 fi
2340 cd $old_pwd
[1]2341}
2342
2343
2344
2345EliminateRelatives() {
2346# eliminate /../../..... from path string
[134]2347 local orig i old_i newo
2348 newo=$1
2349 while [ "`echo "$newo" | grep "\.\."`" ] ; do
2350 orig="`echo "$newo" | tr -s '/' '/'`"
[1]2351# echo "orig=$orig"
[134]2352 newo="/"
2353 old_i=""
2354 for i in `echo "$orig" | tr '/' ' '` ; do
2355 if [ ! "$old_i" ] ; then
2356 old_i=$i
2357 continue
2358 fi
2359 if [ "$old_i" ] && [ "$i" = ".." ] ; then
2360 if [ "$old_i" = ".." ] ; then
2361 newo="$newo"$old_i/
[1]2362# echo "two --- $old_i $i"
[134]2363 old_i="$i"
2364 continue
[1]2365# else
2366# echo "swallowing ($old_i $i)"
[134]2367 fi
2368 elif [ "$old_i" != ".." ] ; then
2369 newo="$newo"$old_i/
2370 fi
2371 old_i=$i
2372 done
2373 newo="$newo"$i
2374 done
2375 echo "$newo"
[1]2376}
2377
2378
2379WhatSoftlinkPointsTo() {
[134]2380 local orig new resolved
2381 orig=$1
2382 new=`ls -l $orig | tr -s ' ' '\t' | $AWK '{printf $NF;}'`
2383 if [ "`echo "$new" | cut -d'/' -f1`" ] ; then
2384 resolved=`dirname $orig`/$new
2385 else
2386 resolved=$new
2387 fi
2388 EliminateRelatives $resolved
[1]2389}
2390
2391
2392
2393
2394
2395ReplaceIndividualLine() {
[134]2396 local orig_file new_file lino newstring lines_total lines_remaining
2397 orig_file=$1.orig
2398 mv -f $1 $orig_file || Die "Cannot move $1 to $orig_file"
2399 new_file=$1
2400 lino=$2
2401 newstring="$3"
2402 if [ "$lino" = "" ] || [ "$lino" -lt "1" ] ; then
[1]2403 echo "Can't find string" >> $LOGFILE
2404 return 1
[134]2405 fi
2406 lines_total=`wc -l $orig_file | gawk '{print $1;}'`
2407 lines_remaining=$(($lines_total-$lino))
2408 head -n$(($lino-1)) $orig_file > $new_file
2409 echo "$newstring" >> $new_file
2410 echo "# The above line was added by Mindi, at the user's instruction" >> $new_file
2411 tail -n$lines_remaining $orig_file >> $new_file
2412 echo "Replace line $lino of $new_file with user-specified line, '$newstring'" >> $LOGFILE
[1]2413# cp -f $new_file /tmp/init.new
[134]2414 [ -x "$orig_file" ] && chmod +x $new_file
2415 rm -f $orig_file
2416 return 0
[1]2417}
2418
2419
2420
2421
2422ResolveSoftlink() {
[134]2423 local resolved new
2424 resolved=$1
2425 while [ -h "$resolved" ] ; do
2426 resolved=`WhatSoftlinkPointsTo $resolved`
2427 done
2428 echo "$resolved"
[1]2429}
2430
2431
2432
2433
2434ScanCDandTape() {
2435 local i
2436
2437 for i in /dev/st0 /dev/ht0 /dev/cdrom /dev/cdrom0 /dev/cdrom 1 ; do
[134]2438 dd if=$i of=/dev/null bs=64k count=1 &> /dev/null
[1]2439 done
2440}
2441
2442
2443
2444SizeOfPartition() {
[134]2445 local devpath drive res stub
2446 device=$1
2447 if [ "`echo "$device" | fgrep "/dev/md"`" != "" ] ; then
[1]2448 res=`SizeOfRaidPartition $device`
2449 [ "$res" = "" ] && Die "Cannot find $device's size - is your /etc/raidtab sane?"
2450 echo "$res"
2451 return 0
[134]2452 fi
[1]2453# 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/-//`
2454# patch from Bill <bill@iwizard.biz> - 2003/08/25
[134]2455 res=`$FDISK -s $device`
[138]2456 echo "------- $FDISK -l $device log ------------" >> $LOGFILE
[134]2457 cat $FDISKLOG >> $LOGFILE
2458 echo "------- $FDISK log end ------------" >> $LOGFILE
[1]2459# end patch
[305]2460 [ "$res" = "" ] && res=`df -k -P -x supermount | tr -s '\t' ' ' | fgrep "$device " | cut -d' ' -f2`
[134]2461 [ "$res" = "" ] && res="-1"
2462 echo $res
2463 return 0
[1]2464}
2465
2466
2467SizeOfRaidPartition() {
[134]2468 local real_dev smallest_size silly tmp
[1]2469
[134]2470 silly=999999999
2471 smallest_size=$silly
[1]2472
[134]2473 for real_dev in `GetRaidDevMembers $1` ; do
[1]2474 tmp=`SizeOfPartition $real_dev`
2475 [ "$tmp" -lt "$smallest_size" ] && smallest_size=$tmp
[134]2476 done
[1]2477
[134]2478 if [ "$smallest_size" = "$silly" ] ; then
[1]2479 echo "-1"
2480 return 1
[134]2481 else
[1]2482 echo "$smallest_size"
2483 return 0
[134]2484 fi
[1]2485}
2486
2487
2488
2489
2490
2491
2492StripComments()
2493{
[134]2494 local tempfile
2495 tempfile=$TMP_ROOT/$$.strip.txt
2496 cp -f $1 $tempfile
[275]2497 $AWK '{if (substr($0,0,1)!="#" || substr($0,0,3)=="#!/") {print $0;};}' $tempfile > $1
[134]2498 rm -f $tempfile
2499 echo "Stripped comments from $2" >> $LOGFILE
[1]2500}
2501
2502
2503
2504
2505
2506
2507SplitDirectoryIntoMinidirs() {
[134]2508 local bigdir minidir_root i noof_disks old_pwd res
2509 bigdir=$1
2510 minidir_root=$2
2511 rm -Rf $minidir_root/*
[1]2512
[134]2513 TryToFitDataIntoSeveralDirs $bigdir $minidir_root
2514 noof_disks=$?
2515 if [ "$noof_disks" -eq "0" ] ; then
[1]2516 echo "Failed to fit data into several dirs."
[134]2517 return 0
2518 fi
2519 RejigHyperlinks $minidir_root $noof_disks
2520 rm -Rf $bigdir/*
[1]2521 return $noof_disks
2522}
2523
2524
2525
2526StripExecutable()
2527{
[134]2528 local tmpfile
2529 tmpfile=$TMP_ROOT/stripped.$$.dat
2530 [ -d "$1" ] || [ -h "$1" ] && return
2531 cp -f $1 $tmpfile
2532 strip $tmpfile 2> /dev/null
2533 if [ "$?" -eq "0" ] ; then
[1]2534 cp -f $tmpfile $1
2535 echo "Stripped binary $2" >> $LOGFILE
[134]2536 fi
2537 rm -f $tmpfile
[1]2538}
2539
2540
2541TemporarilyCompressAllFiles() {
[134]2542 local i orig_fname out_fname out_list
[1]2543
[134]2544 i=0
2545 out_list=$2/compressed/compressed.txt
2546 mkdir -p $2/compressed
2547 > $out_list
2548 for orig_fname in $1 ; do
2549 out_fname=$2/compressed/$orig_fname.gz
2550 mkdir -p $out_fname 2> /dev/null
2551 rmdir $out_fname 2> /dev/null
2552 gzip -c6 $orig_fname > $out_fname 2> /dev/null
2553 i=$(((($i+1))%15))
2554 [ "$i" -eq "0" ] && echo -en "."
2555 du -sk $out_fname >> $out_list
2556 done
[1]2557}
2558
2559
2560
2561TryToFindKernelPath() {
[134]2562 local fname incoming res fkern_ver we_want_version possible_kernels noof_kernels kernelpath kdate duff_kernels
2563 we_want_version=`uname -r`
2564 possible_kernels=""
2565 duff_kernels=""
[1]2566
[134]2567 if [ "$ARCH" = "ia64" ] ; then
2568 root="/boot/efi/efi"
2569 else
2570 root="/"
2571 fi
[479]2572 for fname in `find $root -maxdepth 2 -type f | fgrep lin | egrep -v '^/proc/|^/net/'` ; do
[1]2573 [ ! -e "$fname" ] && continue
[134]2574 [ "$fname" = "/boot/vmlinuz.shipped" ] && [ -f "/boot/vmlinuz" ] && continue; # ignore SuSE's extra kernel
[1]2575 file $fname | grep -q gzip
2576 if [ "$?" -eq "0" ] ; then
[134]2577 # Used by ia64
2578 fkern_ver=`gzip -cd $fname | strings 2> /dev/null | grep "[2-9]+*[.][0-9]+*[.][0-9]+*[^\@]*@"`
[1]2579 else
[134]2580 fkern_ver=`strings $fname 2> /dev/null | grep "[2-9]+*[.][0-9]+*[.][0-9]+*[^\@]*@"`
[1]2581 fi
[134]2582 [ "$fkern_ver" = "" ] && continue
[1]2583# echo "$fname --> $fkern_ver (but we want $we_want_version)" >> /dev/stderr
[134]2584 [ "`echo "$fkern_ver" |fgrep "$we_want_version "`" = "" ] && continue
[1]2585 [ -f "$fname" ] || continue
2586 [ -h "$fname" ] && continue
2587 kdate=`uname -v | $AWK '{for(i=1;i<NF;i++){if(index($i,":")){print $i;};};}' | $AWK '{print $NF;}'`
2588 file $fname | grep -q gzip
2589 if [ "$?" -eq "0" ] ; then
[134]2590 # Used by ia64
2591 if [ "`gzip -cd $fname | strings 2> /dev/null | fgrep "$kdate"`" = "" ] ; then
2592 LogIt "Have you recompiled your kernel \"$fname\" w/o rebooting? Naughty but I'll allow it...\n"
2593 duff_kernels="$fname $duff_kernels"
2594 else
2595 [ "`echo "$fname" | fgrep "vmlinux"`" ] && continue
2596 possible_kernels="$fname $possible_kernels"
2597 fi
[1]2598 else
[134]2599 if [ "`strings $fname 2> /dev/null | fgrep "$kdate"`" = "" ] ; then
[258]2600 LogIt "Have you recompiled your kernel \"$fname\" w/o rebooting?\n Naughty but I'll allow it...\n"
[134]2601 duff_kernels="$fname $duff_kernels"
2602 else
2603 [ "`echo "$fname" | fgrep "vmlinux"`" ] && continue
2604 possible_kernels="$fname $possible_kernels"
2605 fi
2606 fi
2607 done
2608 if [ ! "$possible_kernels" ] && uname -a | grep Knoppix > /dev/null ; then
[1]2609 possible_kernels=`find /boot/vmlinuz-2.* | tail -n1`
[134]2610 fi
2611 if [ ! "$possible_kernels" ] ; then
[258]2612 LogIt "No kernel matches exactly. Are there any duff kernels?\n"
[134]2613 possible_kernels="$duff_kernels"
2614 if [ ! "$possible_kernels" ] ; then
[258]2615 LogIt "Sorry, no duff kernels either\n"
[134]2616 else
[258]2617 LogIt "I bet you're running Debian or Gentoo, aren't you?\n"
2618 LogIt "Your kernel doesn't have a sane builddate. Oh well...\n"
[134]2619 fi
2620 fi
[277]2621 possible_kernels=`echo "$possible_kernels" | tr -s ' ' '\n' | sort -u | tr '\n' ' '`
[134]2622 noof_kernels=`CountItemsIn "$possible_kernels"`
2623 if [ "$noof_kernels" -eq "0" ] ; then
2624 LogIt "Could not find your kernel.\n"
[1]2625 if [ -e "/boot/vmlinuz" ] ; then
[134]2626 LogIt "Using /boot/vmlinuz as a last resort.\n"
2627 output=/boot/vmlinuz
2628 else
2629 output=""
[1]2630 fi
[134]2631 elif [ "$noof_kernels" -eq "1" ] ; then
2632 kernelpath=`echo "$possible_kernels" | sed s/' '//`
2633 echo "Your kernel is $kernelpath (v`uname -r`)" >> $LOGFILE
2634 output="$kernelpath"
2635 else
2636 for i in $possible_kernels ; do
2637 if echo $i | grep "`uname -r`" ; then
[1]2638 LogIt "OK, I used my initiative and found that "
[258]2639 LogIt "$i is probably your kernel.\n "
[1]2640 output="$i"
2641 return
[134]2642 fi
2643 done
[1]2644 if echo " $possible_kernels " | fgrep "/boot/vmlinuz " &> /dev/null ; then
[134]2645 output=/boot/vmlinuz
2646 echo "Schlomo, this one's for you." >> $LOGFILE
[1]2647 else
[134]2648 LogIt "Two or more possible kernels found. You may specify any one of them and the \n"
2649 LogIt "boot disks will still work, probably. If one does not work, try another.\n"
2650 LogIt "$possible_kernels\n"
2651 echo ""
[1]2652 fi
[134]2653 fi
2654 echo "$output" | tr -s ' ' '\n' | sort -u | tr '\n' ' '
[1]2655}
2656
2657
2658
2659
2660
2661TryToFitDataIntoSeveralDirs() {
[134]2662 local bigdir minidir_root noof_disks diskno list_of_files filename old_pwd progress
2663 local i retval noof_disks total_files list_of_devs
2664 bigdir=$1
2665 minidir_root=$2
2666 BIG_CLUNKY_SIZE_COUNTER=0
2667 retval=0
2668 noof_disks=1
[1]2669
[134]2670 echo -en "\r \rDividing data into several groups..."
2671 old_pwd=`pwd`
2672 cd $bigdir
2673 list_of_files=`GetFileSizeList . | sort -nr | cut -f2 | fgrep -v "/dev/"`
2674 progress=0
2675 total_files=`CountItemsIn "$list_of_files"`
2676 if [ "`echo "$filename" | grep -x "/dev/.*"`" ] ; then
2677 filesize=1
2678 fi
2679 mkdir -p $minidir_root/$noof_disks
2680 if [ -e "dev" ] ; then
2681 echo "Copying dev/* to $minidir_root/$noof_disks" >> $LOGFILE
2682 cp --parents -pRdf dev $minidir_root/$noof_disks
2683 fi
2684 TemporarilyCompressAllFiles "$list_of_files" $minidir_root
2685 for filename in $list_of_files ; do
2686 AddFileToDir $filename $minidir_root $noof_disks
[1]2687 i=$?
2688 if [ "$i" -gt "$noof_disks" ] ; then
[134]2689 noof_disks=$i
2690 echo -en "\r\t\t\t\t\t\t($noof_disks disks)"
[1]2691 fi
2692 if [ "$i" -eq "0" ] ; then
[134]2693 LogIt "Cannot add file $filename to minidir $minidir_root\n"
2694 retval=$(($retval+1))
[1]2695 fi
[134]2696 progress=$(($progress+1))
[1]2697 echo -en "\r\t\t\t\t\t\t\t\t$(($progress*100/$total_files))% complete\r"
[134]2698 done
2699 cd $old_pwd
2700 echo -en "\rThe files have been subdivided into $noof_disks directories. \r"
2701 rm -Rf $minidir_root/compressed
2702 if [ "$retval" -gt "0" ] ; then
[1]2703 return 0
[134]2704 else
[1]2705 return $noof_disks
[134]2706 fi
[1]2707}
2708
2709
2710
2711TurnTgzIntoRdz() {
[134]2712 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
2713 tgz_dir_fname=$1
2714 rdz_fname=$2
2715 ramdisksize=$3
2716 disksize=$4
2717 kernelsize=$5
2718 maxsize=$(($disksize-$kernelsize))
2719 maxsize=$(($maxsize*2)); # to allow for compression of 50%
2720 tempfile=$TMP_ROOT/temp.rd
2721 mountpoint=$TMP_ROOT/mnt1
2722 res=0
2723 echo -en "..."
2724 dd if=/dev/zero of=$tempfile bs=1k count=$ramdisk_size &> /dev/null || Die "Not enough room for temporary ramdisk (TurnTgzIntoRdz)"
2725 echo -en "..."
2726 mke2fs -b 1024 -m 1 -i 2048 -F $tempfile >> $LOGFILE 2>> $LOGFILE
[1]2727
[134]2728 [ "$?" -ne "0" ] && cat /tmp/mke2fs.$$
2729 rm -f /tmp/mke2fs.$$
2730 echo -en "..."
2731 mkdir -p $mountpoint
[462]2732 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]2733 echo -en "..."
2734 old_pwd=`pwd`
2735 cd $mountpoint
[179]2736# [ -e "$MINDI_LIB/memtest.img" ] && echo "Yep, this is a multi-function CD" > MULTIFUNC
[134]2737 cp -Rdf $tgz_dir_fname/* . 2>> $LOGFILE >> $LOGFILE
2738 tar -zxf symlinks.tgz || Die "Cannot untar symlinks.tgz"
2739 cd dev || Die "Can't cd to dev"
2740 tar -zxf dev-entries.tgz || Die "Cannot untar dev-entries.tgz"
2741 rm -f dev-entries.tgz
2742 cd ..
[1]2743
2744# add insmod.static and insmod.static.old if (a) they exist and (b) this is a 64-bit distro
2745# if [ "`uname -a | grep x86`" ] || [ "`uname -a | grep amd64`" ] ; then
2746
[134]2747 for w in insmod.static insmod.static.old ; do
[1]2748 s=`which $w 2> /dev/null`
2749 if [ -e "$s" ] ; then
[134]2750 cp --parents -af $s .
[1]2751# LogIt "Copying $s to initrd"
2752 fi
[134]2753 done
[1]2754
2755# fi
2756
[134]2757 mkdir -p tmp
2758 [ -e "/dev/.devfsd" ] && echo "/dev/.devfsd found" > tmp/USE-DEVFS
2759 for w in cdrom floppy groovy-stuff ; do
2760 mkdir -p mnt/$w
2761 done
2762 if [ "$RUN_AFTER_INITIAL_BOOT_PHASE" ] ; then
[1]2763 ReplaceIndividualLine sbin/init `grep -n "#WHOLIVESINAPINEAPPLEUNDERTHESEA#" sbin/init | cut -d':' -f1` "$RUN_AFTER_INITIAL_BOOT_PHASE"
[134]2764 fi
2765 if [ "$RUN_AFTER_BOOT_PHASE_COMPLETE" ] ; then
[1]2766 ReplaceIndividualLine sbin/init `grep -n "#ABSORBENTANDYELLOWANDPOROUSISHE#" sbin/init | cut -d':' -f1` "$RUN_AFTER_BOOT_PHASE_COMPLETE"
[134]2767 fi
[1]2768
[134]2769 lsmod > tmp/original-lsmod.txt
2770
2771 cp --parents -Rdf /dev/fd0*[1,2][4,7,8]* . 2> /dev/null
2772 cd $old_pwd
2773 echo -en "..."
2774 MakeModuleLoadingScript $TMPMODPROBE_FLAG $mountpoint/sbin/insert-all-my-modules
2775 echo -en "..."
2776 old_pwd=`pwd`
2777 if [ "$YOUR_KERNEL_SUCKS" ] ; then
[1]2778 cd $TMP_ROOT
2779 floppy_modules_path=lib/modules/$FAILSAFE_KVER
[134]2780 else
[1]2781 cd /
2782###
2783### Sq-Modification... Use kernel name in module path if specified.
2784###
[134]2785 #floppy_modules_path=lib/modules/`uname -r`
2786 if [ "${kernelname}" != "" ]
2787 then
2788 floppy_modules_path=lib/modules/${kernelname}
2789 else
2790 floppy_modules_path=lib/modules/`uname -r`
2791 fi
[1]2792###
2793### Sq-Modification end
2794###
[134]2795 fi
2796 floppy_modules=""
2797 if [ "$disksize" -lt "2880" ] ; then
[291]2798 list_of_groovy_mods="$FLOPPY_MODS `WhichOfTheseModulesAreLoaded "$SCSI_MODS"`"
[134]2799 else
[291]2800 list_of_groovy_mods="$CDROM_MODS `WhichOfTheseModulesAreLoaded "$SCSI_MODS"`"
[134]2801 fi
2802 if [ -e "$MONDO_TMP/start-nfs" ] ; then
2803 cp -a $MONDO_TMP/start-nfs $mountpoint/sbin
2804 # For PXE boot
2805 list_of_groovy_mods="$list_of_groovy_mods $NET_MODS"
[136]2806 # Here we need the net busybox
2807 mv $mountpoint/bin/busybox.net $mountpoint/bin/busybox
[134]2808 else
[136]2809 rm -f $mountpoint/bin/busybox.net
[134]2810 fi
[258]2811 [ -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]2812 for i in $list_of_groovy_mods ; do
[1]2813 floppy_modules="$floppy_modules `FindSpecificModuleInPath $floppy_modules_path $i`"
[134]2814 done
2815 for i in $floppy_modules ; do
2816 [ -e "$i" ] && s=`du -sk $i | cut -f1` || s=""
[1]2817 [ "$YOUR_KERNEL_SUCKS" ] && i=$TMP_ROOT/$i
2818 echo "Adding $i ($s KB) to the rootfs" >> $LOGFILE
[258]2819 cp -df $i $mountpoint/ || LogIt "Unable to copy $i to $mountpoint\n"
[1]2820 [ "`echo "$i" | fgrep ".gz"`" ] && gunzip -f $mountpoint/`basename $i`
[134]2821 done
[1]2822# if [ -e "/dev/.devfsd" ] ; then
2823# echo "Copying devfs stuff to ramdisk" >> $LOGFILE
2824# for i in /dev /etc/devfsd.conf /etc/modules.devfs /lib/dev-state ; do
2825# cp --parents -pRdf $i $mountpoint/ 2>> $LOGFILE
2826# done
2827# fi
[179]2828 if [ ! -e "/sbin/devfsd" ] || [ "$disksize" -lt "2880" ] || [ "$kernelpath" = "$MINDI_LIB/vmlinuz" ] ; then
[134]2829 echo "Deleting devfsd daemon from ramdisk" >> $LOGFILE
2830 [ ! -e "/sbin/devfsd" ] && echo "...because /sbin/devfsd not found" >> $LOGFILE
2831 [ "$disksize" -lt "2880" ] && echo "...because disksize = $disksize" >> $LOGFILE
[179]2832 [ "$kernelpath" = "$MINDI_LIB/vmlinuz" ] && echo "...because kernel is failsafe" >> $LOGFILE
[1]2833# ls -l $mountpoint/sbin/devfsd &> /dev/null || Die "Can't find devfsd daemon on ramdisk"
[134]2834 rm -f $mountpoint/sbin/devfsd
2835 fi
2836 cd $old_pwd
2837 [ "$TAPEDEV" ] && echo -en "$TAPEDEV" > $mountpoint/tmp/TAPEDEV-LIVES-HERE
2838 dd if=/dev/zero of=$mountpoint/zero &> /dev/null
2839 rm -f $mountpoint/zero
2840 if [ "`DidMondoCallMe`" ] ; then
2841 MakeMondoConfigFile $mountpoint/tmp/mondo-restore.cfg
2842 cp -f $mountpoint/tmp/mondo-restore.cfg $MONDO_TMP &> /dev/null
2843 cp -f $TMP_ROOT/mountlist.txt $mountpoint/tmp/ || Die "Cannot copy mountlist to ramdisk"
2844 echo -en "$FILES_IN_FILELIST" > $mountpoint/tmp/FILES-IN-FILELIST
2845 echo -en "$LAST_FILELIST_NUMBER" > $mountpoint/tmp/LAST-FILELIST-NUMBER
2846 [ "$USE_LZO" = "yes" ] && echo -en "Pras 4 Pres 2004" >> $mountpoint/tmp/USING-LZO
2847 [ "$USE_COMP" = "yes" ] && echo -en "Compression, yep" >> $mountpoint/tmp/USING-COMP
[423]2848 [ "$USE_STAR" = "yes" ] && echo -en "Using star. Hooray." >> $mountpoint/tmp/USING-STAR
[134]2849 fi
2850 mkdir -p $mountpoint/tmp
2851 mkdir -p $mountpoint/proc
2852 echo "$disksize" > $mountpoint/tmp/$disksize.siz
2853 find $mountpoint -name CVS -exec rm -rf '{}' \;
2854 umount $mountpoint || Die "Cannot unmount $tempfile"
2855 dd if=$tempfile bs=1k 2> /dev/null | gzip -v9 > $rdz_fname 2> /dev/null
[1]2856# gzip -9 $tempfile
2857# mv $tempfile.gz $rdz_fname
[134]2858 if [ "$res" -eq "0" ] ; then
2859 echo -en "..."
2860 else
2861 echo -en "\rMade an rdz WITH ERRORS. \n"
2862 fi
2863 return 0
[1]2864}
2865
2866
2867
2868WhichOfTheseModulesAreLoaded() {
[134]2869 local modname loaded_modules
2870 loaded_modules=" `lsmod | tr -s ' ' '\t' | cut -f1 | fgrep -vx "Modules" | tr '\n' ' '` "
2871 for modname in $1 ; do
[1]2872 [ "`echo "$loaded_modules" | fgrep " $modname "`" ] && echo "$modname"
[134]2873 done
[1]2874}
2875
2876
2877
2878
2879ZipMinidirsIntoTarballs() {
[134]2880 local minidir_root tardir noof_disks diskno old_pwd i
2881 minidir_root=$1
2882 tardir=$2
2883 noof_disks=$3
[1]2884
[134]2885 echo -en "Tarring and zipping the group`PluralOrNot $noof_disks`..."
2886 mkdir -p $tardir
2887 mkdir -p $minidir_root/all
2888 old_pwd=`pwd`
2889 diskno=1
2890 while [ "$diskno" -le "$noof_disks" ] ; do
[258]2891 cd $minidir_root/$diskno || LogIt "Warning - cannot cd to $minidir_root/$diskno\n"
[134]2892 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."
2893 diskno=$(($diskno+1))
2894 echo -n "..."
[1]2895 cp -pRdf * $minidir_root/all
[134]2896 done
2897 mkdir -p $minidir_root/all/tmp
2898 cd $minidir_root/all
2899 size_of_all_tools=`du -sk . | cut -f1`
2900 if [ "`DidMondoCallMe`" ] ; then
2901 for q in filelist.full.gz biggielist.txt ; do
2902 [ ! -e "$MONDO_TMP/$q" ] && Die "Cannot find $MONDO_TMP/$q"
2903 cp -pRdf $MONDO_TMP/$q tmp/
2904 done
2905 mkdir -p $minidir_root/all/tmp
2906 echo -en "$FILES_IN_FILELIST" > $minidir_root/all/tmp/FILES-IN-FILELIST 2> /dev/null
2907 echo -en "$LAST_FILELIST_NUMBER" > $minidir_root/all/tmp/LAST-FILELIST-NUMBER 2> /dev/null
2908 fi
2909 tar -b 4096 -cf - * 2> /dev/null | gzip -9 > $tardir/all.tar.gz
2910 dd if=/dev/zero bs=1k count=64 >> $imagesdir/all.tar.gz 2> /dev/null
2911 [ "`du -sm $imagesdir/all.tar.gz | cut -f1`" -ge "30" ] && Die "You have too many tools in your shed"
2912 cd $old_pwd
2913 rm -Rf $minidir_root
2914 echo -e "$DONE"
[1]2915}
2916
2917
2918
[297]2919# BERLIOS: This function is wrong
2920# Should be recoded. Desactivated in between
[1]2921
[297]2922#ListUnsavedKernelModules() {
2923 #local fname modules
2924 #fname=/tmp/$RANDOM.$$.$RANDOM
2925 #lsmod | sed -n '2,$s/ .*//p' > $fname
2926 #modules=`sort $fname | uniq -d2 | tr '\n' ' '`
2927 #rm -f $fname
2928 #[ "$modules" ] && echo "Unsaved kernel modules: $modules" >> $LOGFILE
2929#}
[1]2930
2931
2932
2933
2934
2935##############################################################################
2936#----------------------------------- main -----------------------------------#
2937##############################################################################
2938
2939
2940if [ "$1" = "-V" ] || [ "$1" = "-v" ] || [ "$1" = "--version" ] || [ "$1" = "-version" ] ; then
[134]2941 echo "mindi v$MINDI_VERSION"
2942 exit 0
[1]2943fi
2944
2945> $LOGFILE
2946echo "mindi v$MINDI_VERSION" >> $LOGFILE
2947echo "$ARCH architecture detected" >> $LOGFILE
2948echo "mindi called with the following arguments:" >> $LOGFILE
2949echo "$@" >> $LOGFILE
2950
2951if [ -e "/etc/conf.modules" ] && [ ! -e "/etc/modules.conf" ] ; then
[258]2952 LogIt "Warning - Ancient distro detected.\n" 1
[134]2953 ln -sf /etc/conf.modules /etc/modules.conf
[1]2954fi
2955[ -e "/sbin/mkdosfs" ] && [ ! -e "/sbin/mkfs.vfat" ] && ln -sf /sbin/mkdosfs /sbin/mkfs.vfat
2956
2957FindHomeOfMindiAndMondo
2958trap AbortHere SIGTERM SIGHUP SIGQUIT SIGKILL SIGABRT SIGINT
2959AbortIfYourDistroIsAPieceOfStercus
2960[ "`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"
2961# If we have a 2.6 kernel, the system uses module-init-tools which means that we
2962# may have the modprobe configuration spread out across multiple files in
2963# directory /etc/modprobe.d. If this is the case we concatenate these files into
2964# a temporary file for further processing. Otherwise we continue in the standard
2965# way. Note further that in case /etc/modprobe.d exists, we use it and ignore
2966# /etc/modprobe.conf which is exactly what module-init-tools does. The temporary
2967# modprobe.conf file is created in MakeModuleLoadingScript. AL041128.
2968if [ -d "/etc/modprobe.d" ] && [ `uname -r | cut -c1-3` == "2.6" ] ; then
2969 TMPMODPROBE_FLAG="Y"
2970else
2971 TMPMODPROBE_FLAG="N"
2972 [ -e "/etc/modprobe.conf" ] && [ ! -e "/etc/modules.conf" ] && ln -sf /etc/modprobe.conf /etc/modules.conf
2973 [ ! -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..."
2974fi
2975FixPathIfBroken
[349]2976[ -f "$MINDI_LIB/vmlinuz" ] && FAILSAFE_KVER=`strings $MINDI_LIB/vmlinuz 2> /dev/null | egrep "2\.[46]" | cut -d' ' -f1`
[1]2977AbortIfMkfsVfatMissing
2978### BCO
2979### Fix as it's not mandatory on ia64
2980if [ "$ARCH" = "ia64" ] ; then
[134]2981 FindELiloBinary
[1]2982else
[134]2983 FindIsolinuxBinary
2984 FindLiloBinary
[1]2985fi
[273]2986fgrep " $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]2987rm -f /tmp/mindi_lo
2988trap "Aborted" SIGTERM
2989DONE="\r\t\t\t\t\t\t\t\tDone. "
2990CHOPSIZE=240
2991BIGNO=0
2992MAX_COMPRESSED_SIZE=1300
2993imagesdir=/root/images/mindi
2994mkdir -p $imagesdir
2995kernelpath=""
2996MONDO_ROOT=/tmp/mindilinux/mondo-root
2997mkdir -p $MONDO_ROOT
2998
2999if [ "$#" -ge "2" ] ; then
[134]3000 if [ "$1" = "--max-compressed-size" ] ; then
3001 MAX_COMPRESSED_SIZE=$2
3002 shift; shift
3003 fi
[1]3004fi
3005
3006FLOPPY_WAS_MOUNTED=""
3007for mtpt in /media/floppy /mnt/floppy /floppy ; do
[134]3008 if mount | grep -w $mtpt &> /dev/null ; then
3009 FLOPPY_WAS_MOUNTED="$FLOPPY_WAS_MOUNTED $mtpt"
3010 umount $mtpt
3011 fi
[1]3012done
3013
3014if [ "$#" -ne "0" ] ; then
[134]3015 if [ "$1" = "--findkernel" ] ; then
3016 res=`TryToFindKernelPath`
[1]3017# 2> /dev/null`
[134]3018 if [ "$res" = "" ] ; then
3019 exit 1
3020 else
3021 echo "$res"
3022 exit 0
3023 fi
3024 elif [ "$1" = "--makemountlist" ] ; then
3025 [ ! "$2" ] && Die "Please specify the output file"
3026 MakeMountlist $2
3027 exit $?
3028 elif [ "$1" = " --version" ] || [ "$1" = "-v" ] ; then
[1]3029 echo "Mindi v$MINDI_VERSION"
[134]3030 exit 0
3031 elif [ "$#" -ge "9" ] && [ "$1" = "--custom" ] ; then
[1]3032 TMP_ROOT=$2
3033 MONDO_TMP=$2
3034 imagesdir=$3
3035 kernelpath=$4; [ "$kernelpath" = "(null)" ] && kernelpath=""
3036###
3037### Sq-Modification...
3038### Attempt to locate kernel specific module path
3039### if module path is found then use it other wise use uname -r to set it...
3040###
[134]3041 kernelname=`echo $kernelpath | cut -d'-' -f2-`
[258]3042 LogIt "kernelname = $kernelname\n"
3043 LogIt "kernelpath = $kernelpath\n"
[134]3044 if [ ! -d "/lib/modules/$kernelname" ] && [ "$kernelpath" != "FAILSAFE" ]
3045 then
3046 LogIt "Module path for ${kernelpath} not found...\n"
3047 LogIt "using running kernel\'s modules.\n"
3048 kernelname=`uname -r`
3049 else
3050 LogIt "Using modules for kernel: ${kernelname}\n"
3051 fi
[1]3052###
3053### end of Sq-Modification
3054###
3055 TAPEDEV=$5
3056 TAPESIZE=$6
3057 FILES_IN_FILELIST=$7
3058 USE_LZO=$8
3059 CDRECOVERY=$9
[134]3060 if [ "${10}" = "(null)" ] || [ "${10}" = "" ] ; then
3061 IMAGE_DEVS=""
3062 else
3063 IMAGE_DEVS="`echo "${10}" | tr '|' ' '`"
3064 fi
[1]3065 if [ "${11}" ] ; then
[134]3066 LILO_OPTIONS=""
[1]3067# LogIt "LILO will use conservative settings, to be compatible with older BIOSes."
3068 fi
3069 LAST_FILELIST_NUMBER=${12}
[134]3070 ESTIMATED_TOTAL_NOOF_SLICES=${13}
3071 EXCLUDE_DEVS="${14}"
3072 USE_COMP="${15}"
3073 USE_LILO="${16}"
[1]3074 USE_STAR="${17}"
3075 INTERNAL_TAPE_BLOCK_SIZE="${18}"
[134]3076 DIFFERENTIAL="${19}"
3077 NOT_BOOT="${20}"
3078 [ "$USE_COMP" = "" ] && USE_COMP=yes
3079 [ "$NOT_BOOT" = "" ] && NOT_BOOT=no
[258]3080 [ "$TAPEDEV" ] && LogIt "This is a tape-based backup. Fine.\n"
[1]3081 [ "$kernelpath" = "" ] && kernelpath=`TryToFindKernelPath`
[134]3082 kernelname=`echo $kernelpath | cut -d'-' -f2-`
3083 if [ ! -d "/lib/modules/$kernelname" ] && [ "$kernelpath" != "FAILSAFE" ]
3084 then
3085 LogIt "Module path for ${kernelpath} not found...\n"
3086 LogIt "using running kernel\'s modules.\n"
3087 kernelname=`uname -r`
3088 else
3089 LogIt "Using modules for kernel: ${kernelname}\n"
3090 fi
[1]3091 [ "$CDRECOVERY" = "yes" ] && [ "$TAPEDEV" != "" ] && Die "Sorry, you can't use --cd-recovery and --write-tapes at the same time"
[134]3092 MONDO_ROOT=`echo $imagesdir | sed 's/\(.*\)\/.*/\1/'`
[1]3093 [ "$MONDO_ROOT" = "" ] && Die "MONDO_ROOT is undefined"
[134]3094 else
[1]3095 echo "Syntax: mindi (--custom ....)" >> /dev/stderr
3096 exit 1
[134]3097 fi
[1]3098fi
3099#ScanCDandTape
3100[ "$CDRECOVERY" = "yes" ] || CDRECOVERY=no
3101if [ "$CDRECOVERY" = "yes" ] ; then
[179]3102 iso_cfg_file=$MINDI_LIB/isolinux-H.cfg
3103 sys_cfg_file=$MINDI_LIB/syslinux-H.cfg
[1]3104else
[179]3105 iso_cfg_file=$MINDI_LIB/isolinux.cfg
3106 sys_cfg_file=$MINDI_LIB/syslinux.cfg
[1]3107fi
3108
3109
3110
3111
3112#ReplaceIndividualLine /tmp/init `grep -n "#WHOLIVESINAPINEAPPLEUNDERTHESEA#" /tmp/init | cut -d':' -f1` "$RUN_AFTER_INITIAL_BOOT_PHASE"
3113#exit 0
3114
3115
3116#ListKernelModules
3117#exit 0
3118
3119
3120
3121
3122[ -e "$iso_cfg_file" ] || Die "Cannot find $iso_cfg_file"
3123rm -Rf $TMP_ROOT/mindilinux/*
3124TMP_ROOT=$TMP_ROOT/mindilinux/$$
3125mkdir -p $TMP_ROOT
3126mkdir -p $imagesdir
3127if [ ! "`DidMondoCallMe`" ] ; then
[258]3128 LogIt "Mindi Linux mini-distro generator v$MINDI_VERSION\n"
3129 LogIt "Latest Mindi is available from http://mondorescue.berlios.de\n"
3130 LogIt "BusyBox sources are available from http://www.busybox.net\n"
[134]3131 LogIt "------------------------------------------------------------------------------"
[1]3132else
[134]3133 echo "You are using Mindi-Linux v$MINDI_VERSION to make boot+data disks" >> /var/log/mondo-archive.log
[1]3134fi
3135
3136# for Mandrake 9.2, which comes with two aes.o.gz modules :-/
3137insmod /lib/modules/`uname -r`/*/*/misc/aes.*o.gz >> $LOGFILE 2>> $LOGFILE
3138for i in loop cdrom ide-cd isofs linear raid0 raid1 raid5 ; do
[134]3139 insmod $i >> $LOGFILE 2>> $LOGFILE
[1]3140done
3141
3142FILE_CACHE=$TMP_ROOT/mindi-file-loc-cache
3143KERN_DISK_MADE=""
3144
3145echo "DIFFERENTIAL = $DIFFERENTIAL" >> $LOGFILE
3146echo "INTERNAL TAPE BLOCK SIZE = $INTERNAL_TAPE_BLOCK_SIZE" >> $LOGFILE
3147echo "NOT_BOOT = '$NOT_BOOT'" >> $LOGFILE
3148if [ "$NOT_BOOT" != "" ] && [ "$NOT_BOOT" != "0" ] && [ "$NOT_BOOT" != "no" ] ; then
[258]3149 LogIt "Just creating mondo-restore.cfg and a small all.tar.gz for Mondo. Nothing else.\n"
[134]3150 MakeMondoConfigFile $MONDO_TMP/mondo-restore.cfg
3151 MakeMountlist $MONDO_TMP/mountlist.txt
3152 mkdir -p $MONDO_TMP/small-all/tmp
3153 cd $MONDO_TMP/small-all
3154 cp -f $MONDO_TMP/{mountlist.txt,mondo-restore.cfg,filelist.full.gz,biggielist.txt} tmp || Die "Cannot copy small all.tar.gz"
3155 tar -cv tmp | gzip -9 > $MONDO_TMP/all.tar.gz || Die "Cannot make small all.tar.gz"
3156 sleep 2
3157 LogIt "Done. Exiting.\n"
3158 exit 0
[1]3159fi
3160
3161if [ "$kernelpath" = "" ] ; then
[134]3162 [ "`DidMondoCallMe`" ] && Die "Please use -k <path> to specify kernel."
3163 if [ $USE_OWN_KERNEL != "yes" ]; then
3164 echo -en "Do you want to use your own kernel to build the boot disk (y/n) ?"
3165 read ch
3166 if [ "$ch" != "n" ] && [ "$ch" != "N" ] ; then
3167 USE_OWN_KERNEL="yes"
3168 fi
3169 fi
3170 if [ "$USE_OWN_KERNEL" = "yes" ]; then
[1]3171 YOUR_KERNEL_SUCKS=""
3172 kernelpath=`TryToFindKernelPath`
3173 if [ "$kernelpath" = "" ] ; then
[134]3174 echo -n "Please enter kernel path : "
3175 read kernelpath
[1]3176 fi
[134]3177 else
[1]3178 YOUR_KERNEL_SUCKS="That's why you're using mine, dude. :-)"
[134]3179 fi
[1]3180fi
3181if [ ! "`DidMondoCallMe`" ] ; then
[134]3182 echo -en "Would you like to use LILO (instead of syslinux)\nfor your boot CD/floppies (y/n) ?"
3183 read ch
3184 if [ "$ch" != "n" ] && [ "$ch" != "N" ] ; then
3185 USE_LILO=yes
3186 else
3187 USE_LILO=no
3188 fi
[1]3189fi
3190if [ "$YOUR_KERNEL_SUCKS" != "" ] || [ "$kernelpath" = "" ] || [ "$kernelpath" = "SUCKS" ] || [ "$kernelpath" = "FAILSAFE" ] ; then
[179]3191 kernelpath=$MINDI_LIB/vmlinuz
[258]3192 LogIt "I shall include Mindi's failsafe kernel, not your kernel, in the boot disks.\n"
3193 LogIt "However, you are still running your kernel. If Mindi fails to create your\n"
3194 LogIt "disks then it may still be a result of a problem with your kernel.\n"
[134]3195 pwd=`pwd`
3196 cd $TMP_ROOT
[179]3197 bzip2 -dc $MINDI_LIB/lib.tar.bz2 | tar -x || Die "Cannot unzip lib.tar.bz2"
[134]3198 cd $pwd
3199 YOUR_KERNEL_SUCKS="Your kernel sucks"
[1]3200fi
3201echo -e "Mindi's temp dir = $TMP_ROOT \nMindi's output dir=$imagesdir" >> $LOGFILE
[258]3202[ "$(($RANDOM%64))" -eq "0" ] && LogIt "Dude, I've looked inside your computer and it's really dusty...\n"
[1]3203rm -f /tmp/mindi.err.*.tgz
3204
3205[ "$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."
3206
3207rm -f /root/images/mindi/{*img,*gz,*iso}
3208
3209PrepareDataDiskImages $imagesdir
3210noof_disks=$?
3211ramdisk_size=$(($size_of_all_tools+$EXTRA_SPACE))
3212rds=$(($ramdisk_size-$((ramdisk_size%4096))))
3213ramdisk_size=$rds
3214
3215echo "Ramdisk will be $ramdisk_size KB" >> $LOGFILE
3216if [ "$USE_LILO" = "yes" ] ; then
[134]3217 if [ "$ARCH" = "ia64" ] ; then
3218 PrepareBootDiskImage_LILO $imagesdir $IA64_BOOT_SIZE $kernelpath $ramdisk_size || Die "Failed to create ia64 floppy disk image."
3219 else
3220 if ! PrepareBootDiskImage_LILO $imagesdir 1722 $kernelpath $ramdisk_size ; then
[475]3221 LogIt "Warning - failed to create 1.72MB boot image. Please reduce your kernel's size\n"
3222 LogIt "if you want to make a 1.72MB floppy disk.\n"
[134]3223 fi
[475]3224 if ! PrepareBootDiskImage_LILO $imagesdir 2880 $kernelpath $ramdisk_size ; then
3225 LogIt "Warning - failed to create 2.88MB floppy disk image.\n"
3226 LogIt "Please reduce your kernel's size\n"
3227 LogIt "if you want to make a 2.88MB floppy disk.\n"
3228 PrepareBootDiskImage_LILO $imagesdir 5760 $kernelpath $ramdisk_size || Die "Failed to create 2.88MB floppy disk image."
3229 fi
[134]3230 fi
[1]3231else
[134]3232 if ! PrepareBootDiskImage_SYSLINUX $imagesdir 1722 $kernelpath $ramdisk_size ; then
[289]3233 LogIt "Warning - failed to create 1.72MB boot image. Please reduce your kernel's size\n"
3234 LogIt "if you want to make a 1.72MB floppy disk.\n"
[290]3235 if ! PrepareBootDiskImage_SYSLINUX $imagesdir 2880 $kernelpath $ramdisk_size ; then
3236 LogIt "Warning - failed to create 2.88MB floppy disk image.\n"
3237 LogIt "Please reduce your kernel's size\n"
3238 LogIt "if you want to make a 2.88MB floppy disk.\n"
3239 PrepareBootDiskImage_SYSLINUX $imagesdir 5760 $kernelpath $ramdisk_size || Die "Failed to create 5.76MB floppy disk image."
3240 fi
[134]3241 fi
[1]3242fi
3243
3244
3245
[179]3246[ -e "$MINDI_LIB/memtest.img" ] && BOOT_MEDIA_MESSAGE="$BOOT_MEDIA_MESSAGE\n\
[1]3247...Or type 'memtest' to test your PC's RAM thoroughly.\n"
3248
3249
3250if [ ! "`DidMondoCallMe`" ] ; then
[134]3251 ListImagesForUser $imagesdir
3252 boot_dev=/dev/fd0u1722
3253 [ ! -e "$boot_dev" ] && mknod $boot_dev b 2 60
3254 [ ! -e "$boot_dev" ] && boot_dev=/dev/fd0H1722
3255 [ ! -e "$boot_dev" ] && Die "Oh Lord, will you PLEASE tell the vendor to create the 1.72MB devices in /dev?"
3256 if [ "$PROMPT_WRITE_BOOT_FLOPPIES" = "yes" ]; then
3257 OfferToCopyImagesToDisks $imagesdir $boot_dev $FDDEVICE
3258 fi
3259 OfferToMakeBootableISO $imagesdir
3260 LogIt "Finished.\n"
[1]3261elif [ "$TAPEDEV" ] ; then
[134]3262 mkdir -p /root/images/mindi
3263 rm -f /root/images/mindi/{*img,*gz,*iso}
3264 OfferToMakeBootableISO $imagesdir
3265 if [ -e "$imagesdir/all.tar.gz" ] ; then
3266 cp -f $imagesdir/all.tar.gz $MONDO_TMP/
3267 else
[1]3268 Die "Cannot find all.tar.gz, to be written to tape"
[134]3269 fi
[1]3270else
[134]3271 OfferToMakeBootableISO $imagesdir
[1]3272fi
3273if [ "$imagesdir" != "/root/images/mindi" ] ; then
[134]3274 for i in `find $imagesdir -maxdepth 1 -name "*.iso" -o -name "*.img"` ; do
[258]3275 cp -f $i /root/images/mindi || LogIt "[line 3260] Cannot copy $i to /root/images/mindi\n"
[134]3276 done
[1]3277fi
3278[ "$TMP_ROOT" != "/tmp" ] && rm -Rf $TMP_ROOT
[134]3279# cleanup
[177]3280rm -fR /tmp/mountlist.txt.$$ $FDISKLOG /tmp/mindilinux
[258]3281LogIt "$FRIENDLY_OUTSTRING\n"
[297]3282#ListUnsavedKernelModules
[1]3283for mtpt in $FLOPPY_WAS_MOUNTED ; do
[134]3284 mount $mtpt
[1]3285done
3286echo "Mindi is exiting" >> $LOGFILE
3287exit 0
Note: See TracBrowser for help on using the repository browser.