source: MondoRescue/trunk/mindi/mindi@ 518

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

merge -r 506:516 $SVN_M/branches/stable

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