| 1 |
#!/bin/bash |
|---|
| 2 |
|
|---|
| 3 |
# $Id$ |
|---|
| 4 |
# |
|---|
| 5 |
#----------------------------------------------------------------------------- |
|---|
| 6 |
# mindi - mini-Linux distro based on the user's filesystem & distribution |
|---|
| 7 |
# |
|---|
| 8 |
# Mindi can create a multi-image boot/root kit. The first image 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 |
|
|---|
| 15 |
### Which arch are we on (useful for ia64 port) |
|---|
| 16 |
ARCH=`/bin/uname -m` |
|---|
| 17 |
KERVERRUN=`/bin/uname -r` |
|---|
| 18 |
# By default we use the running kernel as a reference |
|---|
| 19 |
KERVER=$KERVERRUN |
|---|
| 20 |
|
|---|
| 21 |
# In case of problem with udev you can try to add udevdebug |
|---|
| 22 |
MINDI_ADDITIONAL_BOOT_PARAMS="devfs=nomount noresume selinux=0 barrier=off udevtimeout=10" |
|---|
| 23 |
|
|---|
| 24 |
MINDI_REV=PBREV |
|---|
| 25 |
MINDI_VER=PBVER |
|---|
| 26 |
|
|---|
| 27 |
MINDI_VERSION=${MINDI_VER}-r$MINDI_REV |
|---|
| 28 |
MINDI_PREFIX=XXX |
|---|
| 29 |
MINDI_CONF=YYY |
|---|
| 30 |
MINDI_SBIN=${MINDI_PREFIX}/sbin |
|---|
| 31 |
MINDI_DATA=LLL |
|---|
| 32 |
MINDI_CACHE=CCC |
|---|
| 33 |
|
|---|
| 34 |
# Temporary directory for mindi |
|---|
| 35 |
TMPDIR=/tmp |
|---|
| 36 |
|
|---|
| 37 |
EXTRA_SPACE=50000 # increase if you run out of ramdisk space |
|---|
| 38 |
BOOT_SIZE=24576 # size of the boot disk |
|---|
| 39 |
|
|---|
| 40 |
PROMPT_MAKE_CD_IMAGE="yes" |
|---|
| 41 |
# Ask if you want to make a CD Image to be written? |
|---|
| 42 |
# if this is set to 'no', then the image will be created automatically |
|---|
| 43 |
|
|---|
| 44 |
PROMPT_MAKE_USB_IMAGE="yes" |
|---|
| 45 |
# Ask if you want to make a USB Image to be written? |
|---|
| 46 |
# if this is set to 'no', then the image will be created automatically |
|---|
| 47 |
|
|---|
| 48 |
USE_OWN_KERNEL="yes" |
|---|
| 49 |
# If set to "no", you will be prompted for whether or not |
|---|
| 50 |
# you want to use your own kernel, or the supplied default. |
|---|
| 51 |
# If "yes" mindi will automatically use your own kernel. |
|---|
| 52 |
|
|---|
| 53 |
MY_FSTAB=/etc/fstab |
|---|
| 54 |
TAPE_MODS="ht st osst ide-tape ide_tape" |
|---|
| 55 |
SCSI_MODS="3w-xxxx 3w_xxxx 3w_9xxx 3w-9xxx 53c7,8xx a100u2w a320raid aacraid adpahci advansys aha152x aha1542 aha1740 aic79xx aic79xx_mod aic7xxx aic7xxx_mod aic7xxx_old AM53C974 atp870u BusLogic cciss cpqfc dmx3191d dpt_i2o dtc eata eata_dma eata_pio fdomain gdth g_NCR5380 i2o_block i2o_core ide-scsi ieee1394 imm in2000 initio ips iscsi iscsi_tcp libiscsi scsi_transport_iscsi libiscsi_tcp isp megaraid megaraid_mm megaraid_mbox megaraid_sas mptbase mptscsih mptsas mptspi mptfc mptscsi mptctl NCR53c406a ncr53c8xx nsp32 pas16 pci2000 pci2220i pcmcia ppa psi240i qla1280 qla2200 qla2300 qla2400 qla2xxx qla2xxx_conf qlogicfas qlogicfc qlogicisp qlogicfas qlogicfas408 raw1394 scsi_mod scsi_transport_sas scsi_transport_spi scsi_transport_fc sd_mod crc_t10dif crc-t10dif seagate sg sim710 sr_mod sym53c416 sym53c8xx sym53c8xx_2 t128 tmscsim u14-34f ultrastor wd7000 vmhgfs intermodule scsi_dh scsi_tgt emcpdm emcpgpx emcpmpx emcp dc395x diskdumplib scsi_dump_register" |
|---|
| 56 |
|
|---|
| 57 |
# ide-probe-mod |
|---|
| 58 |
IDE_MODS="ide ide-floppy floppy ide-generic ide-detect ide-mod ide-disk ide_disk ide-cd ide_cd ide_cd_mod ide-cd_mod ide-cs ide-core ide_core ide-gd_mod edd paride ata_generic ata_piix libata dock via82cxxx generic nvidia ahci sata_nv cmd64x pata_amd pata_marvell pata_serverworks pata_sis amd74xx sis5513 jmicron sata_promise sata_via serverworks sata_svw blkbk" |
|---|
| 59 |
PCMCIA_MODS="pcmcia_core ds yenta_socket" |
|---|
| 60 |
USB_MODS="usb-storage usb-ohci usb-uhci usbcore usb_storage input hid uhci_hcd ehci_hcd uhci-hcd ehci-hcd ohci-hcd ohci_hcd usbkbd usbhid keybdev mousedev libusual scsi_mod ff-memless ums_cypress ums-cypress" |
|---|
| 61 |
NET_MODS="auth_rpcgss sunrpc nfs nfs_acl lockd fscache loop mii 3c59x e100 bcm5700 bnx2 bnx2x e1000 e1000e igb eepro100 ne2k-pci tg3 libphy pcnet32 8139cp 8139too 8390 forcedeth vmxnet vmxnet3 vmnet exportfs fuse libcrc32c crc32c netbk xenblktap" |
|---|
| 62 |
CDROM_MODS="$TAPE_MODS $IDE_MODS $USB_MODS $PCMCIA_MODS $SCSI_MODS $NET_MODS af_packet cdrom isocd isofs inflate_fs nls_iso8859-1 nls_base nls_cp437 nls_utf8 sg sr_mod zlib_inflate iso9660" |
|---|
| 63 |
# Those modules will only go on the backup media, not the boot media. |
|---|
| 64 |
EXTRA_MODS="$CDROM_MODS vfat fat loop md-mod linear raid0 raid1 xor raid10 raid5 raid456 lvm-mod dm-mod dm_mod dm-snapshot dm_snapshot dm-zero dm_zero dm-mirror dm_mirror dm-multipath dm-round-robin dm-emc dm-hp-sw dm-rdac multipath jfs xfs xfs_support pagebuf reiserfs ext2 ext3 minix nfs nfs_acl nfsd lockd sunrpc jbd mbcache ext4 jbd2 crc16 ocfs2 ocfs2_dlm ocfs2_nodemanager configfs" |
|---|
| 65 |
# Replace with that line for HP OCMP e.g. |
|---|
| 66 |
#DENY_MODS="MPS_Driver_Mapper mps octtldrv tscttl streams kqemu fdomain" |
|---|
| 67 |
DENY_MODS="kqemu" |
|---|
| 68 |
# Force some modules to be included |
|---|
| 69 |
FORCE_MODS="" |
|---|
| 70 |
|
|---|
| 71 |
LOGFILE=/var/log/mindi.log |
|---|
| 72 |
BOOT_MEDIA_MESSAGE="\ |
|---|
| 73 |
To format and restore all files automatically, type 'nuke' <enter>.\n\ |
|---|
| 74 |
To restore some/all files interactively, type 'interactive' <enter>.\n\ |
|---|
| 75 |
To compare the archives with your filesystem, type 'compare' <enter>.\n\ |
|---|
| 76 |
To boot to a command-line prompt (expert mode), type 'expert' <enter>.\n\ |
|---|
| 77 |
You may add one or more of the following parameters as well:-\n\n\ |
|---|
| 78 |
donteject - mondorestore will not eject the CD; this is useful if, for\n\ |
|---|
| 79 |
instance, your PC's case has a concealed CD-ROM drive\n\ |
|---|
| 80 |
noresize - your mountlist will not be adjusted to use your unallocated\n\ |
|---|
| 81 |
hard disk space\n\ |
|---|
| 82 |
textonly - do not call any Newt library routines; this is unattractive\n\ |
|---|
| 83 |
but valuable if you find your Newt library has bugs in it\n\n\ |
|---|
| 84 |
e.g. Type 'nuke donteject textonly' if you have an unstable Newt library and \n\ |
|---|
| 85 |
a PC whose CD-ROM drive tray would be damaged if it unexpectedly ejected.\n\ |
|---|
| 86 |
" |
|---|
| 87 |
FDISK=$MINDI_SBIN/parted2fdisk |
|---|
| 88 |
|
|---|
| 89 |
# Using a config file allow to overwrite some values |
|---|
| 90 |
MINDI_CONFIG="$MINDI_CONF/mindi.conf" |
|---|
| 91 |
if [ -f $MINDI_CONFIG ]; then |
|---|
| 92 |
. $MINDI_CONFIG |
|---|
| 93 |
fi |
|---|
| 94 |
DEPLIST_FILE="$MINDI_CONF/deplist.conf" |
|---|
| 95 |
DEPLIST_FILE_MIN="$MINDI_CONF/deplist-minimal.conf" |
|---|
| 96 |
DEPLIST_DIR="$MINDI_CONF/deplist.d" |
|---|
| 97 |
|
|---|
| 98 |
ISO_CMD="/usr/bin/mkisofs" |
|---|
| 99 |
ISO_OPT="-J -r -v -p Mindi -publisher http://www.mondorescue.org -A Mindi" |
|---|
| 100 |
|
|---|
| 101 |
# Mandriva system e.g. use cdrkit, which uses genisoimage instead of mkisofs. |
|---|
| 102 |
# However, they use exactly the same command line parameters, so just |
|---|
| 103 |
# use genisoimage if it's available. |
|---|
| 104 |
if [ ! -x $ISO_CMD ]; then |
|---|
| 105 |
ISO_CMD=/usr/bin/genisoimage |
|---|
| 106 |
fi |
|---|
| 107 |
|
|---|
| 108 |
# Now we can create what we need |
|---|
| 109 |
MINDI_TMP=`mktemp -d $TMPDIR/mindi.XXXXXXXXXX` |
|---|
| 110 |
if [ $? -ne 0 ]; then |
|---|
| 111 |
df $TMPDIR |
|---|
| 112 |
Die "Unable to create a temporary directory ! Check space on $TMPDIR" |
|---|
| 113 |
fi |
|---|
| 114 |
if [ _"$MINDI_TMP" = _"" ]; then |
|---|
| 115 |
Die "MINDI_TMP is empty, aborting" |
|---|
| 116 |
fi |
|---|
| 117 |
if [ _"$MINDI_TMP" = _"/" ]; then |
|---|
| 118 |
Die "MINDI_TMP is /, aborting" |
|---|
| 119 |
fi |
|---|
| 120 |
export MINDI_TMP |
|---|
| 121 |
|
|---|
| 122 |
# ---------------------------------------------------------------------------- |
|---|
| 123 |
|
|---|
| 124 |
|
|---|
| 125 |
AbortHere() { |
|---|
| 126 |
[ "$mountpoint" ] && umount $mountpoint 2>> $LOGFILE |
|---|
| 127 |
Die "Program is terminating in response to signal received from OS/user" |
|---|
| 128 |
} |
|---|
| 129 |
|
|---|
| 130 |
|
|---|
| 131 |
Aborted() { |
|---|
| 132 |
trap SIGHUP SIGTERM SIGTRAP SIGINT |
|---|
| 133 |
[ "$MINDI_CACHE" != "" ] && rm -f $MINDI_CACHE/mindi*img $MINDI_CACHE/*gz $MINDI_CACHE/mindi.iso |
|---|
| 134 |
[ "$minidir_root" != "" ] && rm -Rf $minidir_root/* |
|---|
| 135 |
Die "User abort." |
|---|
| 136 |
} |
|---|
| 137 |
|
|---|
| 138 |
|
|---|
| 139 |
AddFileToCfgIfExists() { |
|---|
| 140 |
[ -e "$1" ] && echo -en "$2 `cat $1`\n" >> $3 |
|---|
| 141 |
} |
|---|
| 142 |
|
|---|
| 143 |
|
|---|
| 144 |
AddKeyboardMappingFile() { |
|---|
| 145 |
local mappath r included_list included_item i res ii sss |
|---|
| 146 |
mappath=$1 |
|---|
| 147 |
KBDEPTH=$(($KBDEPTH+1)) |
|---|
| 148 |
[ "$KBDEPTH" -gt "128" ] && Die "Edit $MINDI_SBIN/mindi and disable FindAndAddUserKeyboardMappingFile (line 2160, approx.)" |
|---|
| 149 |
if [ -e "$bigdir/$mappath" ] ; then |
|---|
| 150 |
LogFile "$mappath already added" |
|---|
| 151 |
return |
|---|
| 152 |
elif [ -d "$bigdir/$mappath" ] ; then |
|---|
| 153 |
echo "Cannot add $mappath: it's a directory. Sorry." |
|---|
| 154 |
return |
|---|
| 155 |
fi |
|---|
| 156 |
LogFile "Added kbd map $mappath" |
|---|
| 157 |
if [ ! -e "$mappath" ] ; then |
|---|
| 158 |
mappath=`grep "i[3-8]86" $MINDI_TMP/keymaps.find | grep "$locale[^r][^/]" | grep -vx " *#.*"` |
|---|
| 159 |
if [ ! -e "$mappath" ] ; then |
|---|
| 160 |
LogAll "Cannot add $mappath: kbd map file not found" |
|---|
| 161 |
return |
|---|
| 162 |
fi |
|---|
| 163 |
fi |
|---|
| 164 |
|
|---|
| 165 |
mkdir -p $bigdir/etc |
|---|
| 166 |
tar cf - -C / $mappath 2>> $MINDI_TMP/$$.log | (cd $bigdir ; tar xf -) || LogAll "AKMF -- Could not copy $mappath to $bigdir" $MINDI_TMP/$$.log |
|---|
| 167 |
if [ "`echo $mappath | grep -F ".gz"`" ] ; then |
|---|
| 168 |
included_list=`gzip -dc $mappath | grep -Fi include | sed s/'"'// | sed s/'"'// | cut -d' ' -f2` |
|---|
| 169 |
else |
|---|
| 170 |
included_list=`grep -Fi include $mappath | sed s/'"'// | sed s/'"'// | cut -d' ' -f2` |
|---|
| 171 |
fi |
|---|
| 172 |
for included_item in $included_list ; do |
|---|
| 173 |
if [ ! -e "$included_item" ] ; then |
|---|
| 174 |
sss=`grep -F "${included_item}.inc" $MINDI_TMP/keymaps.find` |
|---|
| 175 |
[ "$sss" = "" ] && sss=`grep -F "$included_item" $MINDI_TMP/keymaps.find` |
|---|
| 176 |
for ii in $sss ; do |
|---|
| 177 |
[ -e "$ii" ] && AddKeyboardMappingFile $ii |
|---|
| 178 |
done |
|---|
| 179 |
else |
|---|
| 180 |
AddKeyboardMappingFile $included_item |
|---|
| 181 |
fi |
|---|
| 182 |
done |
|---|
| 183 |
} |
|---|
| 184 |
|
|---|
| 185 |
|
|---|
| 186 |
CopyDependenciesToDirectory() { |
|---|
| 187 |
local outdir incoming fname counter d found |
|---|
| 188 |
outdir=$1 |
|---|
| 189 |
noof_lines=$2 |
|---|
| 190 |
mkdir -p $outdir |
|---|
| 191 |
incoming=`ReadLine` |
|---|
| 192 |
progress=0 |
|---|
| 193 |
while [ "$incoming" != "" ] ; do |
|---|
| 194 |
# Non absolute file names should not arrive till here => skipped |
|---|
| 195 |
if [ `echo "$incoming" | cut -c1` != '/' ]; then |
|---|
| 196 |
LogAll "Unable to handle $incoming" |
|---|
| 197 |
incoming=`ReadLine` |
|---|
| 198 |
continue |
|---|
| 199 |
fi |
|---|
| 200 |
# no parent directory of incoming should be a link, copy is not possible in that case |
|---|
| 201 |
d=`dirname "$incoming"` |
|---|
| 202 |
found="false" |
|---|
| 203 |
while [ $d != "/" -a $found = "false" ]; do |
|---|
| 204 |
[ -h "$d" ] && found="true" |
|---|
| 205 |
d=`dirname "$d"` |
|---|
| 206 |
done |
|---|
| 207 |
if [ -d "$incoming" ] && [ ! -h "$incoming" ]; then |
|---|
| 208 |
find $incoming/* -maxdepth 0 2> /dev/null | CopyDependenciesToDirectory $outdir 0 |
|---|
| 209 |
elif [ -e "$incoming" ] && [ $found = "false" ]; then |
|---|
| 210 |
tar cf - -C / $incoming 2>> $MINDI_TMP/$$.log | (cd $outdir ; tar xf -) || Die "Cannot copy $incoming to $outdir - did you run out of disk space?" $MINDI_TMP/$$.log |
|---|
| 211 |
|
|---|
| 212 |
# Only uncompress modules if not using udevd |
|---|
| 213 |
if [ "`echo "$incoming" | grep "lib/modules/.*\..*o\.gz"`" != "" ] && [ "`ps auxww | grep -v grep | grep -qw udevd`" != "" ]; then |
|---|
| 214 |
gunzip -f $outdir/$incoming || LogAll "Cannot gunzip $outdir/$incoming" |
|---|
| 215 |
fi |
|---|
| 216 |
[ -x "$outdir" ] && StripExecutable $outdir "-$filename-" |
|---|
| 217 |
progress=$(($progress+1)) |
|---|
| 218 |
LogProgress $progress $noof_lines |
|---|
| 219 |
fi |
|---|
| 220 |
incoming=`ReadLine` |
|---|
| 221 |
done |
|---|
| 222 |
} |
|---|
| 223 |
|
|---|
| 224 |
|
|---|
| 225 |
CountItemsIn() { |
|---|
| 226 |
local r |
|---|
| 227 |
r=0 |
|---|
| 228 |
for q in $1 ; do |
|---|
| 229 |
r=$(($r+1)) |
|---|
| 230 |
done |
|---|
| 231 |
echo $r |
|---|
| 232 |
} |
|---|
| 233 |
|
|---|
| 234 |
|
|---|
| 235 |
# Last function called before exiting |
|---|
| 236 |
# Parameter is exit code value |
|---|
| 237 |
MindiExit() { |
|---|
| 238 |
local my_partitions |
|---|
| 239 |
|
|---|
| 240 |
LogFile "Mindi $MINDI_VERSION is exiting" |
|---|
| 241 |
LogFile "End date : `date`" |
|---|
| 242 |
if [ _"$MONDO_SHARE" != _"" ] ; then |
|---|
| 243 |
echo "------------- mindi logfile included -------------------------" >> /var/log/mondoarchive.log |
|---|
| 244 |
cat $LOGFILE >> /var/log/mondoarchive.log |
|---|
| 245 |
echo "--------------------------------------------------------------">> /var/log/mondoarchive.log |
|---|
| 246 |
fi |
|---|
| 247 |
|
|---|
| 248 |
cd / |
|---|
| 249 |
sync& |
|---|
| 250 |
|
|---|
| 251 |
# Unmount what could remain mounted |
|---|
| 252 |
my_partitions=`mount | grep -F $MINDI_TMP | cut -f1 -d' '` |
|---|
| 253 |
[ "$my_partitions" != "" ] && umount $my_partitions |
|---|
| 254 |
# Clean temporary files only when standalone mindi |
|---|
| 255 |
if [ _"$MINDI_TMP" != _"$MONDO_TMP" ]; then |
|---|
| 256 |
rm -Rf $MINDI_TMP |
|---|
| 257 |
fi |
|---|
| 258 |
exit $1 |
|---|
| 259 |
} |
|---|
| 260 |
|
|---|
| 261 |
Die() { |
|---|
| 262 |
local i |
|---|
| 263 |
if [ "$1" = "" ] ; then |
|---|
| 264 |
LogAll "FATAL ERROR" |
|---|
| 265 |
else |
|---|
| 266 |
LogAll "FATAL ERROR. $1" |
|---|
| 267 |
fi |
|---|
| 268 |
if [ _"$2" != _"" ]; then |
|---|
| 269 |
grep -Ev "tar: Removing \`/\'" "$2" >> $LOGFILE |
|---|
| 270 |
fi |
|---|
| 271 |
rm -f "$2" |
|---|
| 272 |
|
|---|
| 273 |
LogAll "Please e-mail a copy of $LOGFILE to the mailing list." |
|---|
| 274 |
LogAll "See http://www.mondorescue.org for more information." |
|---|
| 275 |
LogAll "WE CANNOT HELP unless you enclose that file.\n" |
|---|
| 276 |
MindiExit -1 |
|---|
| 277 |
} |
|---|
| 278 |
|
|---|
| 279 |
|
|---|
| 280 |
DropOptimizedLibraries() { |
|---|
| 281 |
local outdir filelist list_of_optimized_libraries optimized_lib_name vanilla_lib_name reason msg resolved res progress |
|---|
| 282 |
filelist=$1 |
|---|
| 283 |
outdir=$2 |
|---|
| 284 |
|
|---|
| 285 |
progress=0 |
|---|
| 286 |
list_of_optimized_libraries=`grep "lib/i[5-7]86/" $filelist` |
|---|
| 287 |
if [ "$list_of_optimized_libraries" = "" ] ; then |
|---|
| 288 |
return 0 |
|---|
| 289 |
else |
|---|
| 290 |
noof_lines=`echo $list_of_optimized_libraries | tr ' ' '\n' | wc -l` |
|---|
| 291 |
fi |
|---|
| 292 |
echo -en "Dropping i686-optimized libraries if appropriate" |
|---|
| 293 |
for optimized_lib_name in $list_of_optimized_libraries ; do |
|---|
| 294 |
reason="" |
|---|
| 295 |
vanilla_lib_name=`echo "$optimized_lib_name" | sed -e 's/i[5-7]86//' -e 's/cmov//' -e 's/nosegneg//' | tr -s '/' '/'` |
|---|
| 296 |
echo "$vanilla_lib_name" >> $filelist |
|---|
| 297 |
LogFile "Adding $vanilla_lib_name to filelist" |
|---|
| 298 |
mkdir -p $outdir$optimized_lib_name > /dev/null 2> /dev/null |
|---|
| 299 |
rmdir $outdir$optimized_lib_name > /dev/null 2> /dev/null |
|---|
| 300 |
|
|---|
| 301 |
# This may return multiple files |
|---|
| 302 |
for resolved in `ReadAllLink $vanilla_lib_name`; do |
|---|
| 303 |
LogFile "Adding as deps $resolved to filelist" |
|---|
| 304 |
vanilla_resolved_name=`echo "$resolved" | sed -e 's/i[5-7]86//' -e 's/cmov//' -e 's/nosegneg//' | tr -s '/' '/'` |
|---|
| 305 |
mkdir -p $outdir$resolved> /dev/null 2> /dev/null |
|---|
| 306 |
rmdir $outdir$resolved > /dev/null 2> /dev/null |
|---|
| 307 |
ln -sf $vanilla_resolved_name $outdir$resolved |
|---|
| 308 |
LogFile "Excluding deps $resolved" |
|---|
| 309 |
grep -Fvx "$resolved" "$filelist" > $filelist.tmp |
|---|
| 310 |
LogFile "Replacing it with $vanilla_resolved_name" |
|---|
| 311 |
echo "$vanilla_resolved_name" >> $filelist.tmp |
|---|
| 312 |
mv -f $filelist.tmp $filelist |
|---|
| 313 |
done |
|---|
| 314 |
progress=$(($progress+1)) |
|---|
| 315 |
LogProgress $progress $noof_lines |
|---|
| 316 |
done |
|---|
| 317 |
$AWK '{ print $1; }' $filelist | sort -u > $filelist.tmp |
|---|
| 318 |
mv -f $filelist.tmp $filelist |
|---|
| 319 |
echo -e "$DONE" |
|---|
| 320 |
} |
|---|
| 321 |
|
|---|
| 322 |
|
|---|
| 323 |
FindAndAddUserKeyboardMappingFile() { |
|---|
| 324 |
local r res mapfile mappath included_item included_list keyfile mp locale |
|---|
| 325 |
LogFile "Analyzing your keyboard's configuration." |
|---|
| 326 |
KEYDIR=/lib/kbd |
|---|
| 327 |
[ ! -e "$KEYDIR" ] && KEYDIR=/usr/share/kbd # Slackware |
|---|
| 328 |
[ ! -e "$KEYDIR" ] && KEYDIR=/usr/lib/kbd |
|---|
| 329 |
[ ! -e "$KEYDIR" ] && KEYDIR=/usr/share |
|---|
| 330 |
[ ! -e "$KEYDIR" ] && KEYDIR=/etc/condole |
|---|
| 331 |
[ ! -e "$KEYDIR" ] && KEYDIR=/etc/condole-setup |
|---|
| 332 |
if [ ! -e "$KEYDIR" ] ; then |
|---|
| 333 |
LogAll "Keyboard mapping directory not found. I shall use default map at boot-time." |
|---|
| 334 |
return 0 |
|---|
| 335 |
fi |
|---|
| 336 |
LogFile "Adding the following keyboard mapping tables: " |
|---|
| 337 |
if [ -e "/etc/sysconfig/keyboard" ] ; then |
|---|
| 338 |
LogFile "Red Hat-style config detected." |
|---|
| 339 |
keyfile=/etc/sysconfig/keyboard |
|---|
| 340 |
elif [ -e "/etc/rc.d/rc.keymap" ] ; then |
|---|
| 341 |
LogFile "Slackware-style config detected." |
|---|
| 342 |
keyfile=/etc/rc.d/rc.keymap |
|---|
| 343 |
elif [ -e "/etc/rc.config" ] ; then |
|---|
| 344 |
LogFile "Debian-style config detected." |
|---|
| 345 |
keyfile=/etc/rc.config |
|---|
| 346 |
elif [ -e "/etc/console/boottime.kmap.gz" ] ; then |
|---|
| 347 |
LogFile "Debian-style config detected." |
|---|
| 348 |
mkdir -p $bigdir/tmp |
|---|
| 349 |
echo "/etc/console/boottime.kmap.gz" > $MINDI_CACHE/KEYMAP-LIVES-HERE |
|---|
| 350 |
KBDEPTH=0 |
|---|
| 351 |
mkdir -p $bigdir/etc/console |
|---|
| 352 |
cp /etc/console/boottime.kmap.gz $bigdir/etc/console 2>> $LOGFILE |
|---|
| 353 |
echo -e "$DONE" |
|---|
| 354 |
return 0 |
|---|
| 355 |
elif [ -e "/etc/console-setup/boottime.kmap.gz" ] ; then |
|---|
| 356 |
LogFile "Ubuntu-style config detected." |
|---|
| 357 |
mkdir -p $bigdir/tmp |
|---|
| 358 |
echo "/etc/console-setup/boottime.kmap.gz" > $MINDI_CACHE/KEYMAP-LIVES-HERE |
|---|
| 359 |
KBDEPTH=0 |
|---|
| 360 |
mkdir -p $bigdir/etc/console-setup |
|---|
| 361 |
cp /etc/console-setup/boottime.kmap.gz $bigdir/etc/console-setup 2>> $LOGFILE |
|---|
| 362 |
echo -e "$DONE" |
|---|
| 363 |
return 0 |
|---|
| 364 |
elif [ -e "/etc/conf.d/keymaps" ] ; then |
|---|
| 365 |
LogFile "Gentoo-style config detected." |
|---|
| 366 |
keyfile=/etc/conf.d/keymaps |
|---|
| 367 |
else |
|---|
| 368 |
LogAll "Searching for rc.config ..." |
|---|
| 369 |
keyfile=`find /etc -name rc.config | head -n1` |
|---|
| 370 |
if [ "$keyfile" = "" ] || [ ! -e "$keyfile" ] ; then |
|---|
| 371 |
LogAll "Unknown config detected. Default keyboard map will be used." |
|---|
| 372 |
return |
|---|
| 373 |
else |
|---|
| 374 |
LogFile "Found $keyfile" |
|---|
| 375 |
fi |
|---|
| 376 |
fi |
|---|
| 377 |
if [ ! -e "$KEYDIR/keymaps" ] ; then |
|---|
| 378 |
LogAll "Keyboard mapping directory not found. Default keyboard map will be used." |
|---|
| 379 |
return |
|---|
| 380 |
fi |
|---|
| 381 |
LogFile "keyfile=$keyfile" |
|---|
| 382 |
locale=`grep -F KEYTABLE "$keyfile" | tr -d '"' |cut -d'=' -f2` |
|---|
| 383 |
[ ! "$locale" ] && locale=`grep '.map$' "$keyfile" | sed 's/^.* //'` # Slackware |
|---|
| 384 |
[ ! "$locale" ] && locale=`grep -E '^KEYMAP=' "$keyfile" | tr -d '"' |cut -d'=' -f2` # Gentoo |
|---|
| 385 |
LogFile "locale=$locale" |
|---|
| 386 |
# |
|---|
| 387 |
# Process the keymaps dir once for all |
|---|
| 388 |
# AddKeyboardMappingFile will use it recursively |
|---|
| 389 |
# |
|---|
| 390 |
find $KEYDIR/keymaps > $MINDI_TMP/keymaps.find |
|---|
| 391 |
mp=`grep "i[3-8]86" $MINDI_TMP/keymaps.find | grep -F "/${locale}." | grep -vx " *#.*"` |
|---|
| 392 |
[ ! "$mp" ] && mp=`grep "i[3-8]86" $MINDI_TMP/keymaps.find | grep "$locale[^r][^/]" | grep -vx " *#.*"` |
|---|
| 393 |
# If we have multiple keymaps then log it !! |
|---|
| 394 |
echo "$mp" | grep -q " " >> $LOGFILE |
|---|
| 395 |
if [ $? -eq 0 ]; then |
|---|
| 396 |
LogAll "WARNING: Multiple keymaps found: $mp" |
|---|
| 397 |
LogFile "The following one will be used" |
|---|
| 398 |
fi |
|---|
| 399 |
for i in $mp ; do |
|---|
| 400 |
mappath=$i |
|---|
| 401 |
[ -e "$i" ] && [ ! -d "$i" ] && break |
|---|
| 402 |
done |
|---|
| 403 |
if [ ! -e "$mappath" ] || [ -d "$mappath" ] ; then |
|---|
| 404 |
mappath=$(find / -name "*/kbd/keymaps/*/$locale") |
|---|
| 405 |
fi |
|---|
| 406 |
LogFile "mappath = $mappath" |
|---|
| 407 |
if [ ! -e "$mappath" ] || [ -d "$mappath" ] ; then |
|---|
| 408 |
LogAll "Keyboard mapping file not found. Default keyboard map will be used." |
|---|
| 409 |
return |
|---|
| 410 |
fi |
|---|
| 411 |
mkdir -p $bigdir/tmp |
|---|
| 412 |
echo "$mappath" > $MINDI_CACHE/KEYMAP-LIVES-HERE |
|---|
| 413 |
KBDEPTH=0 |
|---|
| 414 |
AddKeyboardMappingFile $mappath |
|---|
| 415 |
echo -e "$DONE" |
|---|
| 416 |
rm -f $MINDI_TMP/keymaps.find |
|---|
| 417 |
return 0 |
|---|
| 418 |
} |
|---|
| 419 |
|
|---|
| 420 |
|
|---|
| 421 |
FindIsolinuxBinary() { |
|---|
| 422 |
ISOLINUX=/usr/lib/isolinux.bin |
|---|
| 423 |
[ ! -e "$ISOLINUX" ] && ISOLINUX=/usr/lib/syslinux/isolinux.bin |
|---|
| 424 |
[ ! -e "$ISOLINUX" ] && ISOLINUX=/usr/lib64/syslinux/isolinux.bin |
|---|
| 425 |
[ ! -e "$ISOLINUX" ] && ISOLINUX=/usr/share/syslinux/isolinux.bin |
|---|
| 426 |
[ ! -e "$ISOLINUX" ] && ISOLINUX=/usr/share/lib/syslinux/isolinux.bin |
|---|
| 427 |
[ ! -e "$ISOLINUX" ] && ISOLINUX=/usr/share/lib64/syslinux/isolinux.bin |
|---|
| 428 |
[ ! -e "$ISOLINUX" ] && ISOLINUX=`find / -name isolinux.bin | grep -x "/.*/isolinux.bin"` |
|---|
| 429 |
[ ! -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'" |
|---|
| 430 |
LogFile "Found isolinux.bin at $ISOLINUX" |
|---|
| 431 |
} |
|---|
| 432 |
|
|---|
| 433 |
|
|---|
| 434 |
FindSpecificModuleInPath() { |
|---|
| 435 |
local modpaths line |
|---|
| 436 |
|
|---|
| 437 |
if [ ! -e "$1" ] ; then |
|---|
| 438 |
LogAll "WARNING - cannot search specific path '$1'" |
|---|
| 439 |
return 1 |
|---|
| 440 |
fi |
|---|
| 441 |
# Find all files and links (required for some VMWare VMs) |
|---|
| 442 |
modpaths=`find $1 -name $2.*o -type f -o -type l` |
|---|
| 443 |
[ "$modpaths" = "" ] && modpaths=`find $1 -name $2.o.gz -type f -o -type l` |
|---|
| 444 |
[ "$modpaths" = "" ] && modpaths=`find $1 -name $2.ko.gz -type f -o -type l` |
|---|
| 445 |
[ "$modpaths" = "" ] && modpaths=`find $1 -name $2 -type f -o -type l` |
|---|
| 446 |
echo "$modpaths" |
|---|
| 447 |
} |
|---|
| 448 |
|
|---|
| 449 |
|
|---|
| 450 |
GenerateGiantDependencyList() { |
|---|
| 451 |
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 |
|---|
| 452 |
|
|---|
| 453 |
echo -en "Analyzing dependency requirements" |
|---|
| 454 |
outfile=$1 |
|---|
| 455 |
tempfile=$MINDI_TMP/$$.txt |
|---|
| 456 |
incoming=`ReadLine` |
|---|
| 457 |
|
|---|
| 458 |
> $tempfile |
|---|
| 459 |
progress=0 |
|---|
| 460 |
res=0 |
|---|
| 461 |
noof_lines=$2 |
|---|
| 462 |
while [ "$incoming" != "" ] ; do |
|---|
| 463 |
if echo "$incoming" | grep -x " *#.*" &> /dev/null ; then |
|---|
| 464 |
incoming=`ReadLine` |
|---|
| 465 |
continue |
|---|
| 466 |
fi |
|---|
| 467 |
if [ "$incoming" = "LVMFILES:" ] ; then |
|---|
| 468 |
break |
|---|
| 469 |
fi |
|---|
| 470 |
filelist=`GenerateListForFile "$incoming"` |
|---|
| 471 |
r=$? |
|---|
| 472 |
[ "$r" -ne "0" ] && LogAll "$incoming not found" |
|---|
| 473 |
res=$(($res+$r)) |
|---|
| 474 |
# LogFile "'$incoming' generates filelist '$filelist'" |
|---|
| 475 |
for fname in $filelist ; do |
|---|
| 476 |
[ "$fname" != "" ] && echo "$fname" >> $tempfile |
|---|
| 477 |
done |
|---|
| 478 |
progress=$(($progress+1)) |
|---|
| 479 |
LogProgress $progress $noof_lines |
|---|
| 480 |
incoming=`ReadLine` |
|---|
| 481 |
done |
|---|
| 482 |
if [ "$incoming" = "LVMFILES:" ] ; then |
|---|
| 483 |
incoming=`ReadLine` |
|---|
| 484 |
lvmversion="" |
|---|
| 485 |
while [ "$incoming" != "" ] ; do |
|---|
| 486 |
if echo "$incoming" | grep -x " *#.*" &> /dev/null ; then |
|---|
| 487 |
incoming=`ReadLine` |
|---|
| 488 |
continue |
|---|
| 489 |
fi |
|---|
| 490 |
filelist=`GenerateListForFile "$incoming"` |
|---|
| 491 |
for tool in $filelist ; do |
|---|
| 492 |
lvmresolved=`readlink -f $tool` |
|---|
| 493 |
if [ "$tool" = "$lvmresolved" ]; then |
|---|
| 494 |
echo "$tool" >> $tempfile |
|---|
| 495 |
elif echo "$lvmresolved" | grep "lvmiopversion" &> /dev/null ; then |
|---|
| 496 |
if [ "$lvmversion" = "" ] ; then |
|---|
| 497 |
lvmversion=`$lvmresolved` |
|---|
| 498 |
echo "$lvmresolved" >> $tempfile |
|---|
| 499 |
fi |
|---|
| 500 |
toolstripped=`echo $tool | $AWK -F / '{print $NF;}'` |
|---|
| 501 |
if [ "$lvmversion" = "200" ]; then |
|---|
| 502 |
# pvdata and lvmcreate_initrd don't exist in LVM2 |
|---|
| 503 |
case "$toolstripped" in |
|---|
| 504 |
"pvdata") |
|---|
| 505 |
continue |
|---|
| 506 |
;; |
|---|
| 507 |
"lvmcreate_initrd") |
|---|
| 508 |
continue |
|---|
| 509 |
;; |
|---|
| 510 |
esac |
|---|
| 511 |
fi |
|---|
| 512 |
toolpath="/sbin/lvm-"$lvmversion"/"$toolstripped |
|---|
| 513 |
if [ -e "$toolpath" ] ; then |
|---|
| 514 |
echo "$toolpath" >> $tempfile |
|---|
| 515 |
echo "$tool" >> $tempfile |
|---|
| 516 |
else |
|---|
| 517 |
toolpath="/lib/lvm-"$lvmversion"/"$toolstripped |
|---|
| 518 |
fi |
|---|
| 519 |
if [ -e "$toolpath" ] ; then |
|---|
| 520 |
echo "$toolpath" >> $tempfile |
|---|
| 521 |
echo "$tool" >> $tempfile |
|---|
| 522 |
else |
|---|
| 523 |
echo "Where are your LVM-Tools? Couldn't find $tool" |
|---|
| 524 |
fi |
|---|
| 525 |
else |
|---|
| 526 |
echo "$tool" >> $tempfile |
|---|
| 527 |
fi |
|---|
| 528 |
done |
|---|
| 529 |
progress=$(($progress+1)) |
|---|
| 530 |
LogProgress $progress $noof_lines |
|---|
| 531 |
incoming=`ReadLine` |
|---|
| 532 |
done |
|---|
| 533 |
fi |
|---|
| 534 |
echo -en "$DONE\nMaking complete dependency list" |
|---|
| 535 |
|
|---|
| 536 |
tr -s '/' '/' < $tempfile | sort -u > $tempfile.new |
|---|
| 537 |
mv -f $tempfile.new $tempfile |
|---|
| 538 |
> $outfile.pre |
|---|
| 539 |
progress=0 |
|---|
| 540 |
noof_lines=`cat $tempfile | wc -l` |
|---|
| 541 |
LogFile "---------------------------------" |
|---|
| 542 |
LogFile "List of dependencies: " |
|---|
| 543 |
LogFile "---------------------------------" |
|---|
| 544 |
for fname in `cat $tempfile` ; do |
|---|
| 545 |
echo "$fname" | tee -a $LOGFILE >> $outfile.pre |
|---|
| 546 |
LocateDeps $fname | tee -a $LOGFILE >> $outfile.pre |
|---|
| 547 |
progress=$(($progress+1)) |
|---|
| 548 |
LogProgress $progress $noof_lines |
|---|
| 549 |
done |
|---|
| 550 |
if [ _"$MONDO_SHARE" != _"" ]; then |
|---|
| 551 |
mkdir -p $bigdir/tmp |
|---|
| 552 |
mkdir -p $bigdir/sbin |
|---|
| 553 |
mkdir -p $bigdir/bin |
|---|
| 554 |
if [ -e "$MINDI_TMP/post-nuke.tgz" ] ; then |
|---|
| 555 |
LogAll "\nIncorporating post-nuke tarball" |
|---|
| 556 |
old_pwd=`pwd` |
|---|
| 557 |
cd $bigdir |
|---|
| 558 |
tar -zxf $MINDI_TMP/post-nuke.tgz 2>> $MINDI_TMP/$$.log || LogAll "Error occurred when untarring post-nuke tarball" $MINDI_TMP/$$.log |
|---|
| 559 |
cd $old_pwd |
|---|
| 560 |
fi |
|---|
| 561 |
cp -f $MINDI_TMP/BOOTLOADER.* $bigdir 2>> $LOGFILE || LogAll "\nMondo v1.2x defaults to LILO as the bootloader, BTW." |
|---|
| 562 |
if [ -e "$MINDI_TMP/NETFS-DEV" ] ; then |
|---|
| 563 |
LogAll "\nIncorporating NFS-related settings" |
|---|
| 564 |
for r in NETFS-* ; do |
|---|
| 565 |
cp -f $MINDI_TMP/$r $bigdir/tmp 2>> $LOGFILE || Die "Cannot copy $r - did you run out of disk space?" |
|---|
| 566 |
LogFile "Copying $r to ramdisk" |
|---|
| 567 |
done |
|---|
| 568 |
fi |
|---|
| 569 |
fi |
|---|
| 570 |
tr ' ' '\n' < $outfile.pre | tr -s '/' '/' | grep -Fvx "" | sort -u | grep -Ev "/libX11|/libXext|/libXi|/libgtk|/libgdk" > $outfile |
|---|
| 571 |
rm -f $tempfile $outfile.pre |
|---|
| 572 |
[ "$res" -eq "0" ] && echo -e "\r\t\t\t\t\t\t\t\t$DONE" || echo "\nFailed." |
|---|
| 573 |
return $res |
|---|
| 574 |
} |
|---|
| 575 |
|
|---|
| 576 |
|
|---|
| 577 |
GenerateListForFile() { |
|---|
| 578 |
local files_found loc fname incoming i res |
|---|
| 579 |
incoming="$1" |
|---|
| 580 |
files_found="" |
|---|
| 581 |
res=0 |
|---|
| 582 |
|
|---|
| 583 |
for fname in $incoming ; do |
|---|
| 584 |
files_found="$files_found `LocateFile $fname`" |
|---|
| 585 |
done |
|---|
| 586 |
|
|---|
| 587 |
echo "$files_found" | tr ' ' '\n' | sort -u | tr '\n' ' ' |
|---|
| 588 |
} |
|---|
| 589 |
|
|---|
| 590 |
|
|---|
| 591 |
# Returns all disk devices which are part of a raid array |
|---|
| 592 |
GetAllRaidMembers() { |
|---|
| 593 |
$AWK "/^[[:space:]]*#/ {next} /^[[:space:]]*device/ if(\$2) {print \$2}" < /etc/raidtab |
|---|
| 594 |
} |
|---|
| 595 |
|
|---|
| 596 |
|
|---|
| 597 |
GetFileSizeList() { |
|---|
| 598 |
local i |
|---|
| 599 |
for i in `find $1 -type d -o -print` ; do |
|---|
| 600 |
du -sk $i |
|---|
| 601 |
done |
|---|
| 602 |
} |
|---|
| 603 |
|
|---|
| 604 |
|
|---|
| 605 |
GetHomeDir() { |
|---|
| 606 |
local res loc |
|---|
| 607 |
loc=`which $1 2>/dev/null` |
|---|
| 608 |
res=`file $loc | $AWK '{print $NF;}'` |
|---|
| 609 |
dirname $res |
|---|
| 610 |
} |
|---|
| 611 |
|
|---|
| 612 |
|
|---|
| 613 |
# Check kernel filesystem capabilites for accessing initrd image |
|---|
| 614 |
# Could be ext2 FS (old mode) or initramfs (new mode) |
|---|
| 615 |
# |
|---|
| 616 |
# Interface definition: |
|---|
| 617 |
# param #1: absolute path to kernel image |
|---|
| 618 |
GetInitrdFilesystemToUse() { |
|---|
| 619 |
|
|---|
| 620 |
# interface test: make sure we have one parameter |
|---|
| 621 |
if [ $# -ne 1 ]; then |
|---|
| 622 |
Die "GetInitrdFilesystemToUse(): Expected 1 parameter, got $#." |
|---|
| 623 |
fi |
|---|
| 624 |
|
|---|
| 625 |
# interface parameters |
|---|
| 626 |
local lvKernelImage=$1 |
|---|
| 627 |
|
|---|
| 628 |
# local constants (filesystem magic strings) |
|---|
| 629 |
local lcMagicCramfs="<3>cramfs: wrong magic" |
|---|
| 630 |
local lcMagicExt2fs="EXT2-fs: blocksize too small for device." |
|---|
| 631 |
local lcMagicExt3fs="<3>EXT3-fs: blocksize too small for journal device." |
|---|
| 632 |
local lcMagicInitfs="<6>checking if image is initramfs...|<6>Unpacking initramfs...|<6>Trying to unpack rootfs image as |
|---|
| 633 |
initramfs" |
|---|
| 634 |
|
|---|
| 635 |
# local variables |
|---|
| 636 |
local lvOffset |
|---|
| 637 |
local lvScanRes |
|---|
| 638 |
local lvUseFilesystem |
|---|
| 639 |
|
|---|
| 640 |
# say where we are. |
|---|
| 641 |
LogFile " GetInitrdFilesystemToUse(): called with parameter: $lvKernelImage" |
|---|
| 642 |
|
|---|
| 643 |
# verify that file exists |
|---|
| 644 |
[ ! -f $lvKernelImage ] && Die "File $lvKernelImage not found. Terminating." |
|---|
| 645 |
|
|---|
| 646 |
# Kernel may be gzip compressed |
|---|
| 647 |
file $lvKernelImage 2>&1 | grep -q gzip |
|---|
| 648 |
if [ $? -eq 0 ]; then |
|---|
| 649 |
lvScanRes=`gzip -cd $lvKernelImage | strings | grep -E "$lcMagicCramfs|$lcMagicExt2fs|$lcMagicExt3fs|$lcMagicInitfs"` |
|---|
| 650 |
|
|---|
| 651 |
# determine which filesystem to use for initrd image: ext2|3fs, gzip'ed cpio (initramfs) or cramfs |
|---|
| 652 |
if [ `echo $lvScanRes | grep -Ec "$lcMagicExt2fs"` -eq 1 ]; then |
|---|
| 653 |
lvUseFilesystem="ext2fs" |
|---|
| 654 |
elif [ `echo $lvScanRes | grep -Ec "$lcMagicExt3fs"` -eq 1 ]; then |
|---|
| 655 |
lvUseFilesystem="ext3fs" |
|---|
| 656 |
elif [ `echo $lvScanRes | grep -Ec "$lcMagicInitfs"` -eq 1 ]; then |
|---|
| 657 |
lvUseFilesystem="initramfs" |
|---|
| 658 |
elif [ `echo $lvScanRes | grep -Ec "$lcMagicCramfs"` -eq 1 ]; then |
|---|
| 659 |
lvUseFilesystem="cramfs" |
|---|
| 660 |
else |
|---|
| 661 |
lvUseFilesystem="UNSUPPORTED" |
|---|
| 662 |
fi |
|---|
| 663 |
|
|---|
| 664 |
else |
|---|
| 665 |
# In that case, we are after 2.6.30 and use the supported initramfs |
|---|
| 666 |
lvUseFilesystem="initramfs" |
|---|
| 667 |
fi |
|---|
| 668 |
# say what we are using |
|---|
| 669 |
LogFile " GetInitrdFilesystemToUse(): Filesytem to use for initial ramdisk is $lvUseFilesystem." |
|---|
| 670 |
|
|---|
| 671 |
# return file system to use |
|---|
| 672 |
echo "$lvUseFilesystem" |
|---|
| 673 |
|
|---|
| 674 |
} |
|---|
| 675 |
|
|---|
| 676 |
# Searches parent raid device of given disk device |
|---|
| 677 |
# $1: disk device (i.e. /dev/hda1) |
|---|
| 678 |
GetParentRaidDev() { |
|---|
| 679 |
$AWK "/^[[:space:]]*#/ {next} /^[[:space:]]*raiddev/ {dev=\$2} /^[[:space:]]*device/ {if(\$2==\"$1\") {print dev; exit}}" < /etc/raidtab |
|---|
| 680 |
} |
|---|
| 681 |
|
|---|
| 682 |
|
|---|
| 683 |
# Searches members of raid device |
|---|
| 684 |
# $1: raid device (/dev/md...) |
|---|
| 685 |
GetRaidDevMembers() { |
|---|
| 686 |
$AWK "/^[[:space:]]*#/ {next} /^[[:space:]]*raiddev/ {if(dev) exit; if(\$2 == \"$1\") dev=\$2} /^[[:space:]]*device/ {if(dev) {print \$2}}" < /etc/raidtab |
|---|
| 687 |
} |
|---|
| 688 |
|
|---|
| 689 |
|
|---|
| 690 |
ListAllPartitions() { |
|---|
| 691 |
local res currline partition all_partitions ap_orig remaining i j |
|---|
| 692 |
|
|---|
| 693 |
grep -Evx " *#.*| *none.*" $MY_FSTAB | $AWK '/^\/dev\/[imhs]d||^LABEL=\/|^UUID=/ && !/\/fdd|\/cdr|\/zip|\/floppy/ {print $1}' |
|---|
| 694 |
[ -e "/etc/raidtab" ] && $AWK '/^ *device/ {print $2}' /etc/raidtab |
|---|
| 695 |
if [ -e "/vmfs/volumes" ]; then |
|---|
| 696 |
# For VMWare ESX 3 get the device names of these volumes |
|---|
| 697 |
vdf -P | grep -E '/vmfs/volumes' | $AWK '{print $1}' |
|---|
| 698 |
fi |
|---|
| 699 |
return |
|---|
| 700 |
} |
|---|
| 701 |
|
|---|
| 702 |
|
|---|
| 703 |
ListImagesForUser() { |
|---|
| 704 |
local path fname |
|---|
| 705 |
path=$MINDI_CACHE |
|---|
| 706 |
echo -en "In the directory '$path' you will find the images:-\n" |
|---|
| 707 |
for fname in `ls $path | grep -F mindi-` ; do |
|---|
| 708 |
printf "%19s " $fname |
|---|
| 709 |
done |
|---|
| 710 |
echo " " |
|---|
| 711 |
} |
|---|
| 712 |
|
|---|
| 713 |
|
|---|
| 714 |
ListKernelModulePaths() { |
|---|
| 715 |
local module_list module fname r kern |
|---|
| 716 |
outfile=$1 |
|---|
| 717 |
echo -en "Analyzing modules requirements" |
|---|
| 718 |
module_list="$MODULES" |
|---|
| 719 |
# Remove unwanted modules from list |
|---|
| 720 |
for i in $DENY_MODS; do |
|---|
| 721 |
module_list=`echo ${module_list} | tr ' ' '\n' | grep -Ev "^${i}$" | tr '\n' ' '` |
|---|
| 722 |
EXTRA_MODS=`echo ${EXTRA_MODS} | tr ' ' '\n' | grep -Ev "^${i}$" | tr '\n' ' '` |
|---|
| 723 |
done |
|---|
| 724 |
### |
|---|
| 725 |
### Sq-Modification ... Use kernelname for module search path if specified |
|---|
| 726 |
### |
|---|
| 727 |
if [ "${kernelname}" != "" ] |
|---|
| 728 |
then |
|---|
| 729 |
kern=${kernelname} |
|---|
| 730 |
else |
|---|
| 731 |
kern="$KERVERRUN" |
|---|
| 732 |
fi |
|---|
| 733 |
export KERVER=$kern |
|---|
| 734 |
### |
|---|
| 735 |
### Sq-Mod End |
|---|
| 736 |
### |
|---|
| 737 |
noof_lines=0 |
|---|
| 738 |
# Get rid of duplicates, so that if a live kernel module also appears |
|---|
| 739 |
# in $EXTRA_MODS that it won't get reported as "live module file not found" twice. |
|---|
| 740 |
for module in `echo $module_list $EXTRA_MODS | tr ' ' '\n' | sort -u` ; do |
|---|
| 741 |
noof_lines=$(($noof_lines+1)) |
|---|
| 742 |
done |
|---|
| 743 |
progress=0 |
|---|
| 744 |
for module in `echo $module_list $EXTRA_MODS | tr ' ' '\n' | sort -u` ; do |
|---|
| 745 |
r=`find /lib/modules/$kern -type f | grep "/${module}\..*o" | tail -n1` |
|---|
| 746 |
if [ -z "$r" ]; then |
|---|
| 747 |
if [ "`echo "$MODULES" | grep -w $module`" ]; then |
|---|
| 748 |
r="[live module file not found]" |
|---|
| 749 |
else |
|---|
| 750 |
r="[extra module file not found]" |
|---|
| 751 |
fi |
|---|
| 752 |
else |
|---|
| 753 |
[ -f "$r" ] && echo "$r" |
|---|
| 754 |
fi |
|---|
| 755 |
LogFile "module $module --> $r" |
|---|
| 756 |
[ -f "$r" ] && echo "$r" >> $outfile |
|---|
| 757 |
progress=$(($progress+1)) |
|---|
| 758 |
LogProgress $progress $noof_lines |
|---|
| 759 |
done |
|---|
| 760 |
find /lib/modules/$kern/modules.* -type f 2> /dev/null >> $outfile |
|---|
| 761 |
} |
|---|
| 762 |
|
|---|
| 763 |
# |
|---|
| 764 |
# Critical function which computes all dependencies (dyn. lib.) |
|---|
| 765 |
# for a list of binaries |
|---|
| 766 |
# |
|---|
| 767 |
LocateDeps() { |
|---|
| 768 |
local incoming fname deps |
|---|
| 769 |
incoming="$*" |
|---|
| 770 |
for fname in $incoming ; do |
|---|
| 771 |
if [ ! -e "$fname" ] ; then |
|---|
| 772 |
LogFile "WARNING - $fname does not exist; cannot be LDD'd." |
|---|
| 773 |
if echo $fname | grep lvm &> /dev/null ; then |
|---|
| 774 |
LogFile "This warning only affects you if you are using LVM." |
|---|
| 775 |
if echo "$MODULES" | grep lvm &> /dev/null ; then |
|---|
| 776 |
LogFile "I think you are, so please take heed!" |
|---|
| 777 |
else |
|---|
| 778 |
LogFile "I don't think you are, so don't worry about it." |
|---|
| 779 |
fi |
|---|
| 780 |
fi |
|---|
| 781 |
elif [ -h "$fname" ] && [ -x "$fname" ] ; then |
|---|
| 782 |
LogFile "$fname is softlink" |
|---|
| 783 |
else |
|---|
| 784 |
ldd $fname 2> /dev/null | ProcessLDD |
|---|
| 785 |
fi |
|---|
| 786 |
done |
|---|
| 787 |
} |
|---|
| 788 |
|
|---|
| 789 |
|
|---|
| 790 |
# Give all symlinks recursively of a full path name |
|---|
| 791 |
ReadAllLink() { |
|---|
| 792 |
|
|---|
| 793 |
incoming="$*" |
|---|
| 794 |
|
|---|
| 795 |
for file in $incoming ; do |
|---|
| 796 |
if [ ! -f $file ]; then |
|---|
| 797 |
continue |
|---|
| 798 |
fi |
|---|
| 799 |
echo "$file" |
|---|
| 800 |
if [ ! -h $file ]; then |
|---|
| 801 |
continue |
|---|
| 802 |
fi |
|---|
| 803 |
|
|---|
| 804 |
link=`readlink -e $file` |
|---|
| 805 |
d=`dirname $file` |
|---|
| 806 |
fchar=`echo $link | cut -c1` |
|---|
| 807 |
# If mother dir is a link print it |
|---|
| 808 |
if [ -h "$d" ]; then |
|---|
| 809 |
echo "$d" |
|---|
| 810 |
d=`readlink -e $d` |
|---|
| 811 |
fi |
|---|
| 812 |
if [ "$fchar" != "/" ]; then |
|---|
| 813 |
# Relative or local link |
|---|
| 814 |
ReadAllLink "$d/$link" |
|---|
| 815 |
else |
|---|
| 816 |
# Absolute path |
|---|
| 817 |
ReadAllLink $link |
|---|
| 818 |
fi |
|---|
| 819 |
done |
|---|
| 820 |
} |
|---|
| 821 |
|
|---|
| 822 |
|
|---|
| 823 |
LocateFile() { |
|---|
| 824 |
local i path fname_to_find location output resolved tmp stub cache_id loclist |
|---|
| 825 |
fname_to_find="$1" |
|---|
| 826 |
# It's an absolute path |
|---|
| 827 |
if echo "$fname_to_find" | grep -x "/.*" ; then |
|---|
| 828 |
output="$fname_to_find" |
|---|
| 829 |
if [ -h "$output" ] ; then |
|---|
| 830 |
output="`ReadAllLink $output` $output" |
|---|
| 831 |
fi |
|---|
| 832 |
echo "$output" |
|---|
| 833 |
return 0 |
|---|
| 834 |
fi |
|---|
| 835 |
# It's not an absolute path |
|---|
| 836 |
output="" |
|---|
| 837 |
for path in /etc /usr /usr/bin /usr/sbin /bin /usr/X11R6/bin /sbin /usr/local/bin /usr/local/sbin `find /usr/lib /lib /usr/local/lib /usr/X11R6/lib /usr/lib64 /lib64 /usr/local/lib64 /usr/X11R6/lib64 -type d -maxdepth 1 2> /dev/null` ; do |
|---|
| 838 |
#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 |
|---|
| 839 |
[ -h "$path" ] && continue |
|---|
| 840 |
[ ! -e "$path/$fname_to_find" ] && continue |
|---|
| 841 |
output="$path/$fname_to_find $output" |
|---|
| 842 |
if [ -h "$path/$fname_to_find" ] ; then |
|---|
| 843 |
output="`ReadAllLink $path/$fname_to_find` $output" |
|---|
| 844 |
fi |
|---|
| 845 |
done |
|---|
| 846 |
if [ "$output" = "" ] ; then |
|---|
| 847 |
return 1 |
|---|
| 848 |
fi |
|---|
| 849 |
echo "$output" |
|---|
| 850 |
return 0 |
|---|
| 851 |
} |
|---|
| 852 |
|
|---|
| 853 |
LogProgress() { |
|---|
| 854 |
local i progress modres noof_lines |
|---|
| 855 |
|
|---|
| 856 |
progress=$1 |
|---|
| 857 |
noof_lines=$2 |
|---|
| 858 |
|
|---|
| 859 |
echo -en "\r\t\t\t\t\t\t\t\t" |
|---|
| 860 |
i=$(($progress*100)) |
|---|
| 861 |
i=$(($i/$noof_lines)) |
|---|
| 862 |
echo -en "$i" |
|---|
| 863 |
echo -en "%" |
|---|
| 864 |
modres=$(($progress%4)) |
|---|
| 865 |
[ "$modres" -eq "0" ] && echo -en "\t/" |
|---|
| 866 |
[ "$modres" -eq "1" ] && echo -en "\t-" |
|---|
| 867 |
[ "$modres" -eq "2" ] && echo -en "\t\\" |
|---|
| 868 |
[ "$modres" -eq "3" ] && echo -en "\t|" |
|---|
| 869 |
} |
|---|
| 870 |
|
|---|
| 871 |
# Function to log on screen only |
|---|
| 872 |
LogScreen() { |
|---|
| 873 |
if [ -e /dev/stderr ] ; then |
|---|
| 874 |
echo -e "$1" >> /dev/stderr |
|---|
| 875 |
elif [ -e /usr/bin/logger ] ; then |
|---|
| 876 |
/usr/bin/logger -s $1 |
|---|
| 877 |
fi |
|---|
| 878 |
} |
|---|
| 879 |
|
|---|
| 880 |
# Function to log in log file only |
|---|
| 881 |
LogFile() { |
|---|
| 882 |
|
|---|
| 883 |
echo -e "$1" >> $LOGFILE |
|---|
| 884 |
if [ _"$2" != _"" ]; then |
|---|
| 885 |
grep -Ev "tar: Removing \`/\'" "$2" >> $LOGFILE |
|---|
| 886 |
fi |
|---|
| 887 |
rm -f "$2" |
|---|
| 888 |
} |
|---|
| 889 |
|
|---|
| 890 |
# Function to log in both screen and logfile |
|---|
| 891 |
LogAll() { |
|---|
| 892 |
LogScreen "$1" |
|---|
| 893 |
LogFile "$1" "$2" |
|---|
| 894 |
} |
|---|
| 895 |
|
|---|
| 896 |
|
|---|
| 897 |
# Called by TurnTgzIntoRdz, to make mondorestore.cfg |
|---|
| 898 |
MakeMondoConfigFile() { |
|---|
| 899 |
local outfile use_lzo use_comp use_star |
|---|
| 900 |
outfile=$1 |
|---|
| 901 |
> $outfile |
|---|
| 902 |
[ "$TAPESIZE" ] && echo "media-size $TAPESIZE" >> $outfile |
|---|
| 903 |
[ "$TAPEDEV" ] && echo "media-dev $TAPEDEV" >> $outfile |
|---|
| 904 |
[ "$USBDEVICE" ] && echo "usb-dev $USBDEVICE" >> $outfile |
|---|
| 905 |
[ "$FILES_IN_FILELIST" ] && echo "files-in-filelist $FILES_IN_FILELIST" >> $outfile |
|---|
| 906 |
[ "$LAST_FILELIST_NUMBER" ] && echo "last-filelist-number $LAST_FILELIST_NUMBER" >> $outfile |
|---|
| 907 |
[ "$INTERNAL_TAPE_BLOCK_SIZE" ] && echo "internal-tape-block-size $INTERNAL_TAPE_BLOCK_SIZE" >> $outfile |
|---|
| 908 |
use_lzo=$USE_LZO; [ "$use_lzo" = "" ] && use_lzo="no" |
|---|
| 909 |
use_gzip=$USE_GZIP; [ "$use_gzip" = "" ] && use_gzip="no" |
|---|
| 910 |
use_lzma=$USE_LZMA; [ "$use_lzma" = "" ] && use_lzma="no" |
|---|
| 911 |
use_comp=$USE_COMP; [ "$use_comp" = "" ] && use_comp="yes" |
|---|
| 912 |
use_star=$USE_STAR; [ "$use_star" = "" ] && use_star="no" |
|---|
| 913 |
echo "use-lzo $use_lzo" >> $outfile |
|---|
| 914 |
echo "use-lzma $use_lzma" >> $outfile |
|---|
| 915 |
echo "use-star $use_star" >> $outfile |
|---|
| 916 |
echo "use-comp $use_comp" >> $outfile |
|---|
| 917 |
echo "datestamp `date`" >> $outfile |
|---|
| 918 |
[ "$ESTIMATED_TOTAL_NOOF_SLICES" ] && echo "total-slices $ESTIMATED_TOTAL_NOOF_SLICES" >> $outfile |
|---|
| 919 |
AddFileToCfgIfExists $MINDI_TMP/NETFS-SERVER-MOUNT netfs-server-mount $outfile |
|---|
| 920 |
AddFileToCfgIfExists $MINDI_TMP/NETFS-SERVER-PATH netfs-server-path $outfile |
|---|
| 921 |
AddFileToCfgIfExists $MINDI_TMP/NETFS-DEV netfs-dev $outfile |
|---|
| 922 |
AddFileToCfgIfExists $MINDI_TMP/BOOTLOADER.DEVICE bootloader.device $outfile |
|---|
| 923 |
AddFileToCfgIfExists $MINDI_TMP/BOOTLOADER.NAME bootloader.name $outfile |
|---|
| 924 |
AddFileToCfgIfExists $MINDI_TMP/TAPEDEV-HAS-DATA-DISKS tapedev-has-data-disks $outfile |
|---|
| 925 |
} |
|---|
| 926 |
|
|---|
| 927 |
|
|---|
| 928 |
MakeMountlist() { |
|---|
| 929 |
local scratchdir mountlist all_partitions current_partition \ |
|---|
| 930 |
partition_size partition_format outstring partition_number \ |
|---|
| 931 |
partition_mountpt c_p lwm_info psz lvm_dev unofficial_outstring \ |
|---|
| 932 |
absolute_partition old_partition_fmt current_lvolume uname skip |
|---|
| 933 |
|
|---|
| 934 |
LogFile "------------------------------------" |
|---|
| 935 |
LogFile "Your raw fstab file looks like this:" |
|---|
| 936 |
LogFile "------------------------------------" |
|---|
| 937 |
cat $MY_FSTAB >> $LOGFILE |
|---|
| 938 |
LogAll "-----------------------------------" |
|---|
| 939 |
LogAll "Your mountlist will look like this:" |
|---|
| 940 |
LogAll "-----------------------------------" |
|---|
| 941 |
|
|---|
| 942 |
# scratchdir, mountlist(OUT) |
|---|
| 943 |
scratchdir=$MINDI_TMP |
|---|
| 944 |
mountlist=$1 |
|---|
| 945 |
|
|---|
| 946 |
# NB: partition = device |
|---|
| 947 |
# NB: mountpt = where the device is mounted |
|---|
| 948 |
|
|---|
| 949 |
[ -e "$MY_FSTAB" ] || Die "Cannot find your fstab file ($MY_FSTAB)" |
|---|
| 950 |
|
|---|
| 951 |
[ "$mountlist" != "" ] && rm -Rf $mountlist |
|---|
| 952 |
> $mountlist |
|---|
| 953 |
all_partitions="" |
|---|
| 954 |
|
|---|
| 955 |
if [ $LVM != "false" ]; then |
|---|
| 956 |
LogFile "Analyzing LVM..." |
|---|
| 957 |
$MINDI_DATA/analyze-my-lvm > $MINDI_TMP/lvm.res |
|---|
| 958 |
if [ $? -ne 0 ]; then |
|---|
| 959 |
LVM="false" |
|---|
| 960 |
fi |
|---|
| 961 |
# Excluded LVs and GVs are not reported here |
|---|
| 962 |
all_partitions=`cat $MINDI_TMP/lvm.res | grep -F ">>>" | cut -d' ' -f2-` |
|---|
| 963 |
fi |
|---|
| 964 |
all_partitions="$all_partitions `ListAllPartitions 2> /dev/null`" |
|---|
| 965 |
for i in $IMAGE_DEVS ; do |
|---|
| 966 |
mount | grep -F "$i " > /dev/null 2> /dev/null && Die "Sorry, $i is already mounted! CANNOT DO IMAGEDEV on it if it's mounted." |
|---|
| 967 |
done |
|---|
| 968 |
[ "$IMAGE_DEVS" != "" ] && all_partitions="`echo "$all_partitions $IMAGE_DEVS" | tr ' ' '\n' | sort -u | tr '\n ' ' '`" |
|---|
| 969 |
printf "%-15s %-15s %-15s %-15s %s\n" DEVICE MOUNTPOINT FORMAT "SIZE MB" LABEL/UUID | tee -a $LOGFILE |
|---|
| 970 |
printf "%-15s %-15s %-15s %-15s %s\n" ------ ---------- ------ ------- ---------- | tee -a $LOGFILE |
|---|
| 971 |
useless_dev="/dev/floppy /dev/fd0h1440 /dev/fd0H1440 /dev/cdrom /dev/cdrom/cdrom /dev/cdrom/cdrom1 /dev/cdrom/cdrom2 /dev/cdrom0 /dev/cdrom1 /dev/cdrom2 /dev/cdrom3 /dev/cdrw /dev/scd /dev/ram :/ /dev/sr0 /dev/sr1 /dev/cdrom1" |
|---|
| 972 |
for c_p in $all_partitions ; do |
|---|
| 973 |
# Skip evices, network FS, cisf |
|---|
| 974 |
[ "`echo "$useless_dev" | grep -F "$c_p"`" != "" ] || [ "`echo "$c_p" | grep ":"`" != "" ] || [ "`echo "$c_p" | grep -E "^//"`" != "" ]&& continue |
|---|
| 975 |
[ "`echo "$c_p" | grep -x "/dev/cdroms.*"`" ] && continue |
|---|
| 976 |
if [ -h "$c_p" ] && [ "`echo "$c_p" | grep -F "/dev/hd"`" = "" ] && [ "`echo "$c_p" | grep -F "/dev/sd"`" = "" ] && [ "`echo "$c_p" | grep -F "/dev/md"`" = "" ] ; then |
|---|
| 977 |
current_partition=`readlink -f $c_p` |
|---|
| 978 |
[ "`echo "$current_partition" | grep -F "/dev/mapper"`" != "" ] && current_partition="$c_p" |
|---|
| 979 |
[ "`echo "$useless_dev" | grep -F "$current_partition"`" ] && continue |
|---|
| 980 |
else |
|---|
| 981 |
current_partition="$c_p" |
|---|
| 982 |
fi |
|---|
| 983 |
[ "$c_p" = "none" ] && continue |
|---|
| 984 |
# Debian 5 does that |
|---|
| 985 |
[ "$c_p" = "proc" ] && continue |
|---|
| 986 |
redhat_label="" |
|---|
| 987 |
label="" |
|---|
| 988 |
uuid="" |
|---|
| 989 |
absolute_partition=`readlink -f $c_p` |
|---|
| 990 |
partition_mountpt=`tr -s '\t' ' ' < $MY_FSTAB | /bin/grep -w "$current_partition" | /bin/grep -vx " *#.*" | $AWK '{print $2}' | head -n1` |
|---|
| 991 |
|
|---|
| 992 |
# Detects noauto partitions not mounted and exclude them |
|---|
| 993 |
partition_option=`tr -s '\t' ' ' < $MY_FSTAB | /bin/grep -w "$current_partition" | /bin/grep -vx " *#.*" | $AWK '{print $4}' | head -n1` |
|---|
| 994 |
if [ "`echo "$partition_option" | grep -i noauto`" != "" ] && [ "`mount | grep -w "$partition_mountpt"`" = "" ] ; then |
|---|
| 995 |
continue |
|---|
| 996 |
fi |
|---|
| 997 |
|
|---|
| 998 |
# set default in case we dont't find it |
|---|
| 999 |
str_to_find_fmt_with=$current_partition |
|---|
| 1000 |
|
|---|
| 1001 |
# This part tries to retrieve the correct device from a LABEL line in /etc/fstab |
|---|
| 1002 |
# current_partition contains only first column of /etc/fstab |
|---|
| 1003 |
if [ "`echo "$current_partition" | /bin/grep -i "LABEL="`" != "" ]; then |
|---|
| 1004 |
redhat_label=`echo "$current_partition" | cut -d'=' -f2` |
|---|
| 1005 |
actual_dev="" |
|---|
| 1006 |
|
|---|
| 1007 |
# 1st try, findfs - the RHEL way of finding labels and their partitions |
|---|
| 1008 |
if [ -x "/sbin/findfs" ]; then |
|---|
| 1009 |
actual_dev=`/sbin/findfs LABEL=${redhat_label} 2> /dev/null` |
|---|
| 1010 |
fi |
|---|
| 1011 |
|
|---|
| 1012 |
# 2nd try : blkid, the good way for all LABEL except swap |
|---|
| 1013 |
if [ "x$actual_dev" = "x" -a -x "/sbin/blkid" ]; then |
|---|
| 1014 |
actual_dev=`/sbin/blkid | /bin/grep "$redhat_label" | grep LABEL= | cut -d':' -f1` |
|---|
| 1015 |
# For LVM FS it will give a /dev/dm-# which should then be converted |
|---|
| 1016 |
if [ $LVM = "v2" ] && [ "`echo $actual_dev | grep '/dev/dm'`" ]; then |
|---|
| 1017 |
major=`/bin/ls -l $actual_dev | $AWK '{print $5}'` |
|---|
| 1018 |
minor=`/bin/ls -l $actual_dev | $AWK '{print $6}'` |
|---|
| 1019 |
for dev in `ls /dev/mapper/*`; do |
|---|
| 1020 |
major1=`/bin/ls -l $dev | $AWK '{print $5}'` |
|---|
| 1021 |
minor1=`/bin/ls -l $dev | $AWK '{print $6}'` |
|---|
| 1022 |
if [ $major1 = $major ] && [ $minor1 = $minor ]; then |
|---|
| 1023 |
actual_dev=`/bin/ls -l $dev | $AWK '{print $10}'` |
|---|
| 1024 |
break |
|---|
| 1025 |
fi |
|---|
| 1026 |
done |
|---|
| 1027 |
fi |
|---|
| 1028 |
fi |
|---|
| 1029 |
|
|---|
| 1030 |
# 3rd try, which works on a standard partition (ext2/3), but not on swap |
|---|
| 1031 |
# For LVM gives a /dev/mapper entry |
|---|
| 1032 |
if [ "x$actual_dev" = "x" ]; then |
|---|
| 1033 |
actual_dev=`/bin/mount -l | /bin/grep "\[$redhat_label\]" | cut -d' ' -f1` |
|---|
| 1034 |
fi |
|---|
| 1035 |
|
|---|
| 1036 |
# 4th try, with vol_id |
|---|
| 1037 |
# SWAP only |
|---|
| 1038 |
if [ "x$actual_dev" = "x" -a -x "/sbin/vol_id" ]; then |
|---|
| 1039 |
list_swaps=`cat /proc/swaps | /bin/grep "/dev/" | $AWK '{ print $1 }' ` |
|---|
| 1040 |
for dev_swap in $list_swaps ; do |
|---|
| 1041 |
dev_exists=`/sbin/vol_id $dev_swap | /bin/grep "$redhat_label"` |
|---|
| 1042 |
if [ "x$dev_exists" != "x" ]; then |
|---|
| 1043 |
actual_dev=$dev_swap |
|---|
| 1044 |
break; |
|---|
| 1045 |
fi |
|---|
| 1046 |
done |
|---|
| 1047 |
fi |
|---|
| 1048 |
|
|---|
| 1049 |
# 5th try : pre-formated LABEL. Format is : LABEL=SWAP-mydevice or SW-mydevice. e.g. : LABEL=SWAP-hda5 |
|---|
| 1050 |
# LABEL=SW-cciss/c0d0p3 (RDP) |
|---|
| 1051 |
# or could be a string that isn't a complete device name (eg. LABEL =SWAP-cciss/c0d0p) |
|---|
| 1052 |
# SWAP only |
|---|
| 1053 |
if [ "x$actual_dev" = "x" -a _"`echo $current_partition | /bin/grep -iE 'LABEL=SWAP|LABEL=SW-'`" != _"" ]; then |
|---|
| 1054 |
skip="" |
|---|
| 1055 |
uname=$KERVERRUN |
|---|
| 1056 |
[ "`echo $uname | grep "2.4.[0-9]"`" != "" ] && skip=16 |
|---|
| 1057 |
# 2.6.12 needs 16 (FC3) |
|---|
| 1058 |
[ "`echo $uname | grep "2.6.[0-1]"`" != "" ] && skip=16 |
|---|
| 1059 |
# 2.6.19 and upper needs 1052 |
|---|
| 1060 |
[ "`echo $uname | grep "2.6.19"`" != "" ] && skip=1052 |
|---|
| 1061 |
[ "`echo $uname | grep "2.6.[2-9]"`" != "" ] && skip=1052 |
|---|
| 1062 |
if [ $skip = "" ]; then |
|---|
| 1063 |
Die "Your kernel is too old. I don't know how to support labelled swap spaces with it" |
|---|
| 1064 |
fi |
|---|
| 1065 |
for try_dev in `tail +2 /proc/swaps | cut -d' ' -f1` |
|---|
| 1066 |
do |
|---|
| 1067 |
# Location of the swap label for kernel 2.6 |
|---|
| 1068 |
try_dev_label=`dd bs=1 count=16 skip=$skip if=$try_dev 2> /dev/null` |
|---|
| 1069 |
if [ "x$try_dev_label" = "x$redhat_label" ]; then |
|---|
| 1070 |
actual_dev=$try_dev |
|---|
| 1071 |
fi |
|---|
| 1072 |
done |
|---|
| 1073 |
fi |
|---|
| 1074 |
|
|---|
| 1075 |
# Check if one of all those tries has known success |
|---|
| 1076 |
if [ "x$actual_dev" != "x" ]; then |
|---|
| 1077 |
current_partition=$actual_dev |
|---|
| 1078 |
else |
|---|
| 1079 |
Die "Your system uses a LABEL partition ($current_partition), but you lack the tool to support it.\nPlease replace labels with their correct devices in $MY_FSTAB or install findfs|blkid|vol_id" |
|---|
| 1080 |
fi |
|---|
| 1081 |
# This part tries to retrieve the correct device from a UUID line in /etc/fstab |
|---|
| 1082 |
# current_partition contains only first column of /etc/fstab |
|---|
| 1083 |
elif [ "`echo "$current_partition" | /bin/grep -i "UUID="`" != "" ]; then |
|---|
| 1084 |
uuid=`echo "$current_partition" | cut -d'=' -f2` |
|---|
| 1085 |
actual_dev="" |
|---|
| 1086 |
|
|---|
| 1087 |
# 1st try, findfs - the RHEL way of finding labels and their partitions |
|---|
| 1088 |
if [ -x "/sbin/findfs" ]; then |
|---|
| 1089 |
actual_dev=`/sbin/findfs UUID=${uuid} 2> /dev/null` |
|---|
| 1090 |
fi |
|---|
| 1091 |
|
|---|
| 1092 |
# 2nd try : blkid, the good way for all UUID except swap |
|---|
| 1093 |
if [ "x$actual_dev" = "x" -a -x "/sbin/blkid" ]; then |
|---|
| 1094 |
actual_dev=`/sbin/blkid | /bin/grep "$uuid" | grep UUID= | cut -d':' -f1` |
|---|
| 1095 |
# For LVM FS it will give a /dev/dm-# which should then be converted |
|---|
| 1096 |
if [ $LVM = "v2" ] && [ "`echo $actual_dev | grep '/dev/dm'`" ]; then |
|---|
| 1097 |
major=`/bin/ls -l $actual_dev | $AWK '{print $5}'` |
|---|
| 1098 |
minor=`/bin/ls -l $actual_dev | $AWK '{print $6}'` |
|---|
| 1099 |
for dev in `ls /dev/mapper/*`; do |
|---|
| 1100 |
major1=`/bin/ls -l $dev | $AWK '{print $5}'` |
|---|
| 1101 |
minor1=`/bin/ls -l $dev | $AWK '{print $6}'` |
|---|
| 1102 |
if [ $major1 = $major ] && [ $minor1 = $minor ]; then |
|---|
| 1103 |
actual_dev=`/bin/ls -l $dev | $AWK '{print $10}'` |
|---|
| 1104 |
break |
|---|
| 1105 |
fi |
|---|
| 1106 |
done |
|---|
| 1107 |
fi |
|---|
| 1108 |
fi |
|---|
| 1109 |
|
|---|
| 1110 |
# 3th try, with vol_id |
|---|
| 1111 |
if [ "x$actual_dev" = "x" -a -x "/sbin/vol_id" ]; then |
|---|
| 1112 |
list_dev=`mount | /bin/grep -E '^/' | $AWK '{ print $1 }' ` |
|---|
| 1113 |
for dev in $list_dev ; do |
|---|
| 1114 |
dev_exists=`/sbin/vol_id $dev | /bin/grep "$uuid"` |
|---|
| 1115 |
if [ "x$dev_exists" != "x" ]; then |
|---|
| 1116 |
actual_dev=$dev |
|---|
| 1117 |
break; |
|---|
| 1118 |
fi |
|---|
| 1119 |
done |
|---|
| 1120 |
fi |
|---|
| 1121 |
|
|---|
| 1122 |
# 4th try, with dumpuuid (VMWare only ?) for swap |
|---|
| 1123 |
if [ "x$actual_dev" = "x" -a -x "/sbin/dumpuuid" ]; then |
|---|
| 1124 |
list_dev=`cat /proc/swaps | /bin/grep -E '^/' | $AWK '{ print $1 }' ` |
|---|
| 1125 |
for dev in $list_dev ; do |
|---|
| 1126 |
dev_exists=`/sbin/dumpuuid $dev | /bin/grep "$uuid"` |
|---|
| 1127 |
if [ "x$dev_exists" != "x" ]; then |
|---|
| 1128 |
actual_dev=$dev |
|---|
| 1129 |
break; |
|---|
| 1130 |
fi |
|---|
| 1131 |
done |
|---|
| 1132 |
fi |
|---|
| 1133 |
|
|---|
| 1134 |
# Check if one of all those tries has known success |
|---|
| 1135 |
if [ "x$actual_dev" != "x" ]; then |
|---|
| 1136 |
current_partition=$actual_dev |
|---|
| 1137 |
else |
|---|
| 1138 |
Die "Your system uses a UUID partition ($current_partition),\nbut you lack the tool to support it.\nPlease replace labels with their correct devices in $MY_FSTAB or\ninstall findfs|blkid|vol_id or\nrelabel the partition with the correct UUID if it's a swap partition." |
|---|
| 1139 |
fi |
|---|
| 1140 |
else |
|---|
| 1141 |
# Needs to handle the recent OpenSUSE fancy way of dealing with fstab :-( |
|---|
| 1142 |
# they use symlinks in fstab unrelated to what is shown in mount ! |
|---|
| 1143 |
if [ _"$partition_mountpt" = _"" ]; then |
|---|
| 1144 |
# set default in case we dont't find it |
|---|
| 1145 |
for tmpp in `tr -s '\t' ' ' < $MY_FSTAB | /bin/grep -Ev "^#" | $AWK '{print $1}'`; do |
|---|
| 1146 |
if [ _"`readlink -f $tmpp`" = _"$current_partition" ]; then |
|---|
| 1147 |
str_to_find_fmt_with=$tmpp |
|---|
| 1148 |
partition_mountpt=`tr -s '\t' ' ' < $MY_FSTAB | /bin/grep -w "$tmpp" | /bin/grep -vx " *#.*" | $AWK '{print $2}' | head -n1` |
|---|
| 1149 |
break; |
|---|
| 1150 |
fi |
|---|
| 1151 |
done |
|---|
| 1152 |
fi |
|---|
| 1153 |
fi |
|---|
| 1154 |
|
|---|
| 1155 |
# Look for devices which have to be excluded |
|---|
| 1156 |
skip=0 |
|---|
| 1157 |
if [ "$MINDI_EXCLUDE_DEVS" ] ; then |
|---|
| 1158 |
l="" |
|---|
| 1159 |
list_of_devices="`ReadAllLink $current_partition`" |
|---|
| 1160 |
for d in $list_of_devices; do |
|---|
| 1161 |
l="$l `$MINDI_LIB/analyze-my-lvm --givemapperofdm $d`" |
|---|
| 1162 |
done |
|---|
| 1163 |
list_of_devices="`echo $l | sort -u`" |
|---|
| 1164 |
for d in $MINDI_EXCLUDE_DEVS ; do |
|---|
| 1165 |
if [ "`echo " $list_of_devices " | grep " $d"`" != "" ]; then |
|---|
| 1166 |
echo "Excluding $current_partition from mountlist (due to excluded device $d)" >> $LOGFILE |
|---|
| 1167 |
skip=1 |
|---|
| 1168 |
continue |
|---|
| 1169 |
fi |
|---|
| 1170 |
done |
|---|
| 1171 |
fi |
|---|
| 1172 |
if [ $skip -eq 1 ]; then |
|---|
| 1173 |
continue |
|---|
| 1174 |
fi |
|---|
| 1175 |
|
|---|
| 1176 |
partition_format=`$AWK '$1 == "'"$str_to_find_fmt_with"'" {print $3}' $MY_FSTAB` |
|---|
| 1177 |
# Some distributions such as Debian do not put /dev/<VG>/<LV> in fstab |
|---|
| 1178 |
# for LVM partitions but use /dev/mapper/<VG>-<LV> instead. Fortunately, |
|---|
| 1179 |
# the former is then a link to the latter, so we test whether |
|---|
| 1180 |
# $current_partition is actually such a link or not and set |
|---|
| 1181 |
# $current_lvolume accordingly. On Debian you may find more than one answer |
|---|
| 1182 |
# so we remove the one corresponding to /dev/.static |
|---|
| 1183 |
# On RedHat even if the device name is different (/dev/mapper/<VG><LV>), the |
|---|
| 1184 |
# principle is the same and we need to find the link to it as well. |
|---|
| 1185 |
# Note that $current_lvolume may well be an |
|---|
| 1186 |
# ordinary device. It is just to make sure that we feed the right value |
|---|
| 1187 |
# into any of the LVM tools if possible. |
|---|
| 1188 |
|
|---|
| 1189 |
current_lvolume="$current_partition" |
|---|
| 1190 |
if [ $LVM = "v2" ] && [ "`echo $current_partition | grep -E '^/dev/mapper/'`" ]; then |
|---|
| 1191 |
# .static dir are a Debian specificity |
|---|
| 1192 |
current_lvolume="`find /dev -lname "$current_partition" | grep -Ev '^/dev/\.static/'`" |
|---|
| 1193 |
echo $current_lvolume | grep -q ' ' |
|---|
| 1194 |
if [ $? -eq 0 ]; then |
|---|
| 1195 |
LogFile "WARNING: Multiple Logical Volumes found. Report to dev team" |
|---|
| 1196 |
fi |
|---|
| 1197 |
# if it's not found, it may well be a real device such as a multipath one |
|---|
| 1198 |
# /dev/mapper/mpath... Thus we revert the situation so that next test succeed |
|---|
| 1199 |
if [ _"$current_lvolume" = _"" ]; then |
|---|
| 1200 |
current_lvolume="$current_partition" |
|---|
| 1201 |
fi |
|---|
| 1202 |
fi |
|---|
| 1203 |
# |
|---|
| 1204 |
# End of LVM device style variation code (other than $current_lvolume). |
|---|
| 1205 |
|
|---|
| 1206 |
if [ $LVM != "false" ] && [ "`$LVMCMD lvdisplay $current_lvolume 2> /dev/null`" ]; then |
|---|
| 1207 |
# Size computed via LVM not directly |
|---|
| 1208 |
partition_size="lvm" |
|---|
| 1209 |
else |
|---|
| 1210 |
partition_size=`SizeOfPartition $current_partition` |
|---|
| 1211 |
[ "`echo "$current_partition" | grep "[0-9]"`" = "" ] && continue |
|---|
| 1212 |
[ "`echo "$current_partition" | grep -c "^/"`" -ne "1" ] && continue |
|---|
| 1213 |
if [ "$partition_format" = "swap" ] || [ "$partition_mountpt" = "swap" ] ; then |
|---|
| 1214 |
partition_size=`grep -Fv "Priority" /proc/swaps | tr -s '\t' ' ' | grep -F "$current_partition" | $AWK '{print $3}'` |
|---|
| 1215 |
[ "$partition_mountpt" != "swap" ] && partition_mountpt="swap" |
|---|
| 1216 |
[ "$partition_format" != "swap" ] && partition_format="swap" |
|---|
| 1217 |
if [ "$partition_size" = "" ] ; then |
|---|
| 1218 |
totalsize=0 |
|---|
| 1219 |
items=0 |
|---|
| 1220 |
for i in `tr -s ' ' '\t' < /proc/swaps | grep -Fv "Filename" | cut -f3` ; do |
|---|
| 1221 |
totalsize=$(($totalsize+$i)) |
|---|
| 1222 |
items=$(($items+1)) |
|---|
| 1223 |
done |
|---|
| 1224 |
[ "$items" -gt "0" ] && partition_size=$(($totalsize/$items)) || partition_size=0 |
|---|
| 1225 |
[ "$partition_size" -lt "125000" ] && partition_size=125000 |
|---|
| 1226 |
LogFile "I'm guessing $c_p is $(($partition_size/1024))MB" |
|---|
| 1227 |
fi |
|---|
| 1228 |
fi |
|---|
| 1229 |
fi |
|---|
| 1230 |
[ "$partition_mountpt" = "swap" ] && partition_format="swap" |
|---|
| 1231 |
[ "$partition_format" = "swap" ] && partition_mountpt="swap" |
|---|
| 1232 |
if [ "$partition_mountpt" = "" ] ; then |
|---|
| 1233 |
if [ "`$LVMCMD pvdisplay $current_lvolume 2> /dev/null`" != "" ] ; then |
|---|
| 1234 |
if [ "`grep -F device /etc/raidtab 2> /dev/null | grep -w $current_partition`" ] ; then |
|---|
| 1235 |
partition_mountpt="raid" |
|---|
| 1236 |
partition_format="raid" |
|---|
| 1237 |
else |
|---|
| 1238 |
partition_mountpt="lvm" |
|---|
| 1239 |
partition_format="lvm" |
|---|
| 1240 |
fi |
|---|
| 1241 |
fi |
|---|
| 1242 |
fi |
|---|
| 1243 |
psz=$partition_size |
|---|
| 1244 |
LogFile "Examining $current_partition (mount=$partition_mountpt fmt=$partition_format psz=$psz)" |
|---|
| 1245 |
[ "$psz" != "lvm" ] && psz=$(($psz/1024)) |
|---|
| 1246 |
if [ "`echo " $IMAGE_DEVS " | grep -F " $current_partition "`" != "" ] ; then |
|---|
| 1247 |
partition_mountpt="image" |
|---|
| 1248 |
old_partition_fmt=$partition_format |
|---|
| 1249 |
partition_format="`$FDISK -l 2>> $LOGFILE | tr '*' ' ' | tr '+' ' ' | tr -s ' ' '\t' | grep -w "$absolute_partition" | cut -f5`" |
|---|
| 1250 |
partition_size=$(($partition_size+1)); # just in case |
|---|
| 1251 |
if [ "$partition_format" = "Linux" ] ; then |
|---|
| 1252 |
LogFile "Are you imaging a mounted swap partition? Silly..." |
|---|
| 1253 |
LogFile "Reverting format from $old_partition_fmt to $partition_format" |
|---|
| 1254 |
partition_format=$old_partition_fmt |
|---|
| 1255 |
fi |
|---|
| 1256 |
fi |
|---|
| 1257 |
|
|---|
| 1258 |
if [ ! "$partition_mountpt" ] ; then |
|---|
| 1259 |
LogFile "------- $FDISK -l $qq log ------------" |
|---|
| 1260 |
for qq in "" `find /dev/ida/c*d* ! -name '*p*' 2> /dev/null`; do |
|---|
| 1261 |
partition_format=`$FDISK -l $qq 2>> $LOGFILE | grep -w "$c_p" | sed 's/12/|/' | tr -s '\t' ' ' | cut -d'|' -f2 | cut -d' ' -f2-9` |
|---|
| 1262 |
[ "$partition_format" ] && break |
|---|
| 1263 |
done |
|---|
| 1264 |
LogFile "------- $FDISK log end ------------" |
|---|
| 1265 |
if [ "$partition_format" = "Compaq diagnostics" ] ; then |
|---|
| 1266 |
partition_format="compaq" |
|---|
| 1267 |
elif [ ! "`grep -F device /etc/raidtab 2> /dev/null | grep -w $current_partition`" ] ; then |
|---|
| 1268 |
LogAll "Unable to find mountpoint of $current_partition - ignoring" |
|---|
| 1269 |
continue |
|---|
| 1270 |
fi |
|---|
| 1271 |
fi |
|---|
| 1272 |
if [ "$redhat_label" ]; then |
|---|
| 1273 |
label="$redhat_label" |
|---|
| 1274 |
elif [ "$uuid" ]; then |
|---|
| 1275 |
label="$uuid" |
|---|
| 1276 |
fi |
|---|
| 1277 |
partition_format="`echo "$partition_format" | cut -d',' -f1`"; # in case user has ext3,ext2 or something dumb like that |
|---|
| 1278 |
[ "$partition_format" = "auto" ] && partition_format="`mount | grep -w $current_partition | $AWK '{print$5;}'`"; # in case user uses 'auto' (dumb!) |
|---|
| 1279 |
unofficial_outstring=`printf "%-15s %-15s %-15s %7s %-15s\n" $current_partition $partition_mountpt $partition_format $psz "$label"` |
|---|
| 1280 |
if [ "$current_partition" = "" ] ; then |
|---|
| 1281 |
LogFile "Unknown partition (outstring = $unofficial_outstring)" |
|---|
| 1282 |
elif [ "$partition_mountpt" = "" ] && [ -f "/etc/raidtab" ] ; then |
|---|
| 1283 |
if [ "`grep -F device /etc/raidtab 2>/dev/null | grep -F $current_partition`" ] ; then |
|---|
| 1284 |
partition_mountpt=raid |
|---|
| 1285 |
partition_format=raid |
|---|
| 1286 |
printf "%-15s %-15s %-15s %7s %15s\n" $current_partition $partition_mountpt $partition_format $psz "$label" | tee -a $LOGFILE |
|---|
| 1287 |
printf "%s %s %s %s %s %s\n" $current_partition $partition_mountpt $partition_format $partition_size "$label" >> $mountlist |
|---|
| 1288 |
else |
|---|
| 1289 |
LogFile "Unknown mountpoint (outstring = $unofficial_outstring)" |
|---|
| 1290 |
fi |
|---|
| 1291 |
elif [ "$partition_format" = "" ] ; then |
|---|
| 1292 |
LogFile "Unknown format (outstring = $unofficial_outstring)" |
|---|
| 1293 |
elif [ "$partition_size" = "" ] ; then |
|---|
| 1294 |
LogFile "Unknown partition size (outstring = $unofficial_outstring)" |
|---|
| 1295 |
elif [ "$partition_mountpt" = "/proc" ] || [ "$partition_mountpt" = "/dev/pts" ] ; then |
|---|
| 1296 |
continue |
|---|
| 1297 |
else |
|---|
| 1298 |
if [ "$partition_format" = "dos" ] || [ "$partition_format" = "msdos" ] ; then |
|---|
| 1299 |
LogFile "vfat should be used instead of dos/msdos as a partition format" |
|---|
| 1300 |
partition_format="vfat" |
|---|
| 1301 |
fi |
|---|
| 1302 |
printf "%-15s %-15s %-15s %7s %-15s\n" $current_partition $partition_mountpt $partition_format $psz "$label" | tee -a $LOGFILE |
|---|
| 1303 |
printf "%s %s %s %s %s\n" $current_partition $partition_mountpt $partition_format $partition_size "$label" >> $mountlist |
|---|
| 1304 |
fi |
|---|
| 1305 |
done |
|---|
| 1306 |
LogAll "-----------------------------------" |
|---|
| 1307 |
} |
|---|
| 1308 |
|
|---|
| 1309 |
CheckMountlist() { |
|---|
| 1310 |
local file=$1 |
|---|
| 1311 |
# Coherency verification |
|---|
| 1312 |
ML01=`cat $file | wc -l` |
|---|
| 1313 |
ML02=`grep -v ' lvm ' $file | wc -l` |
|---|
| 1314 |
ML1=`$AWK '{print $1}' $file | sort -u | wc -l` |
|---|
| 1315 |
ML2=`grep -v ' lvm ' $file | $AWK '{print $2}' | sort -u | wc -l` |
|---|
| 1316 |
if [ "$ML01" -ne "$ML1" ]; then |
|---|
| 1317 |
LogFile "--------------------------------------------" |
|---|
| 1318 |
echo "WARNING: Duplicate device entry in mountlist" | tee -a $LOGFILE |
|---|
| 1319 |
LogFile "--------------------------------------------" |
|---|
| 1320 |
fi |
|---|
| 1321 |
if [ "$ML02" -ne "$ML2" ]; then |
|---|
| 1322 |
LogFile "--------------------------------------------" |
|---|
| 1323 |
echo "WARNING: Duplicate mountpoint entry in mountlist" | tee -a $LOGFILE |
|---|
| 1324 |
LogFile "------------------------------------------------" |
|---|
| 1325 |
fi |
|---|
| 1326 |
} |
|---|
| 1327 |
|
|---|
| 1328 |
MakeSureNumberIsInteger() { |
|---|
| 1329 |
res=`echo "$1" | tr -s '\-[0-9]' ' '` |
|---|
| 1330 |
if [ "$res" != " " ] && [ "$res" != "" ] ; then |
|---|
| 1331 |
echo "result = '$res'" |
|---|
| 1332 |
Die "$1 should be an integer" |
|---|
| 1333 |
fi |
|---|
| 1334 |
} |
|---|
| 1335 |
|
|---|
| 1336 |
|
|---|
| 1337 |
OfferToMakeBootableISO() { |
|---|
| 1338 |
local i old_pwd |
|---|
| 1339 |
if [ -z "$ISO_CMD" ]; then |
|---|
| 1340 |
LogIt "Neither mkisofs nor genisoimage found, unable to make CD image" |
|---|
| 1341 |
return |
|---|
| 1342 |
fi |
|---|
| 1343 |
if [ "$PROMPT_MAKE_CD_IMAGE" = "yes" ] && [ _"$MONDO_SHARE" = _"" ]; then |
|---|
| 1344 |
echo -en "Shall I make a bootable CD image? (y/[n]) " |
|---|
| 1345 |
read i |
|---|
| 1346 |
[ "$i" != "y" ] && [ "$i" != "Y" ] && return 0 |
|---|
| 1347 |
fi |
|---|
| 1348 |
rm -Rf $MINDI_TMP/iso |
|---|
| 1349 |
mkdir -p $MINDI_TMP/iso/{images,archives} |
|---|
| 1350 |
cp -f $MINDI_CACHE/{*.gz,*.img} $MINDI_TMP/iso/images 2>> $LOGFILE || LogAll "OfferToMakeBootableISO: Cannot copy $MINDI_CACHE/*.gz to $MINDI_TMP/iso/images" |
|---|
| 1351 |
LogFile "mindi_lib = $MINDI_DATA" |
|---|
| 1352 |
for i in memdisk memtest.bin memtest.img ; do |
|---|
| 1353 |
j=$MINDI_DATA/$i |
|---|
| 1354 |
k=$MINDI_TMP/iso |
|---|
| 1355 |
if [ -e "$j" ] ; then |
|---|
| 1356 |
LogAll "Copying $j to $k" |
|---|
| 1357 |
cp -f $j $k 2>> $LOGFILE || Die "Failed to copy $j to $k" |
|---|
| 1358 |
cp -f $j $MINDI_TMP 2>> $LOGFILE || Die "Failed to copy $j to $MINDI_TMP" |
|---|
| 1359 |
if [ _"$MONDO_SHARE" != _"" ]; then |
|---|
| 1360 |
cp -f $j $MONDO_ROOT 2>> $LOGFILE || Die "Failed to copy $j to $MONDO_ROOT" |
|---|
| 1361 |
fi |
|---|
| 1362 |
fi |
|---|
| 1363 |
done |
|---|
| 1364 |
MakeMessageFile > $MINDI_TMP/iso/message.txt |
|---|
| 1365 |
cp $kernelpath $MINDI_TMP/iso/vmlinuz 2>> $LOGFILE || Die "Cannot copy vmlinuz ($kernelpath) to mindi tmp ($MINDI_TMP/iso/vmlinuz). Did you run out of disk space?" |
|---|
| 1366 |
cp $MINDI_TMP/initrd.img $MINDI_TMP/iso/initrd.img 2>> $LOGFILE || Die "Cannot copy initrd.img ($MINDI_TMP/initrd.img) to $MINDI_TMP/iso/initrd.img. Did you run out of disk space?" |
|---|
| 1367 |
if [ _"$MONDO_SHARE" != _"" ]; then |
|---|
| 1368 |
cp $kernelpath $MONDO_ROOT/vmlinuz 2>> $LOGFILE || Die "Cannot copy vmlinuz ($kernelpath) to mondo root ($MONDO_ROOT/vmlinuz). Did you run out of disk space?" |
|---|
| 1369 |
cp $MINDI_TMP/initrd.img $MONDO_ROOT/initrd.img 2>> $LOGFILE || Die "Cannot copy initrd.img ($MINDI_TMP/initrd.img) to $MONDO_ROOT/initrd.img. Did you run out of disk space?" |
|---|
| 1370 |
fi |
|---|
| 1371 |
MakeBootConfFile isolinux > $MINDI_TMP/iso/isolinux.cfg |
|---|
| 1372 |
if [ "$ARCH" != "ia64" ] ; then |
|---|
| 1373 |
cp $ISOLINUX $MINDI_TMP/iso/isolinux.bin 2>> $LOGFILE || Die "Cannot copy isolinux.bin ($ISOLINUX) to $MINDI_TMP/iso - did you run out of disk space?" |
|---|
| 1374 |
fi |
|---|
| 1375 |
old_pwd=`pwd` |
|---|
| 1376 |
cd $MINDI_TMP/iso |
|---|
| 1377 |
if [ "$ARCH" != "ia64" ] ; then |
|---|
| 1378 |
if [ _"$MONDO_SHARE" != _"" ]; then |
|---|
| 1379 |
cp -f $MINDI_TMP/iso/{isolinux.cfg,initrd.img,vmlinuz,isolinux.bin,message.txt} $MONDO_ROOT 2>> $LOGFILE || Die "Cannot copy core files to ramdisk for boot disk (under $MONDO_ROOT). Did you run out of disk space?" |
|---|
| 1380 |
cp -f $MONDO_SHARE/autorun $MINDI_TMP/iso 2>> $LOGFILE |
|---|
| 1381 |
fi |
|---|
| 1382 |
$ISO_CMD -U $ISO_OPT -V Mindi_Image -o $MINDI_CACHE/mindi.iso -b isolinux.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table . > /dev/null 2> $MINDI_TMP/mkisofs.log |
|---|
| 1383 |
else |
|---|
| 1384 |
$ISO_CMD $ISO_OPT -V Mindi_Image -o $MINDI_CACHE/mindi.iso -b images/mindi-bootroot.$BOOT_SIZE.img -c images/boot.cat -no-emul-boot . > /dev/null 2> $MINDI_TMP/mkisofs.log |
|---|
| 1385 |
rm -f images/mindi-bootroot.$BOOT_SIZE.img |
|---|
| 1386 |
fi |
|---|
| 1387 |
if [ "$?" -ne "0" ] ; then |
|---|
| 1388 |
LogFile "----------- $ISO_CMD's errors --------------" |
|---|
| 1389 |
cat $MINDI_TMP/mkisofs.log >> $LOGFILE |
|---|
| 1390 |
echo "$ISO_CMD returned the following errors:-" |
|---|
| 1391 |
cat $MINDI_TMP/mkisofs.log |
|---|
| 1392 |
LogAll "Failed to create ISO image." |
|---|
| 1393 |
else |
|---|
| 1394 |
LogAll "Created bootable ISO image at $MINDI_CACHE/mindi.iso" |
|---|
| 1395 |
fi |
|---|
| 1396 |
rm -f $MINDI_TMP/mkisofs.log |
|---|
| 1397 |
cd $old_pwd |
|---|
| 1398 |
} |
|---|
| 1399 |
|
|---|
| 1400 |
|
|---|
| 1401 |
OfferToMakeBootableUSB() { |
|---|
| 1402 |
local i |
|---|
| 1403 |
if [ "$PROMPT_MAKE_USB_IMAGE" = "yes" ] && [ _"$MONDO_SHARE" = _"" ]; then |
|---|
| 1404 |
echo -n "Shall I make a bootable USB image ? (y/[n]) " |
|---|
| 1405 |
read i |
|---|
| 1406 |
[ "$i" != "y" ] && [ "$i" != "Y" ] && return 0 |
|---|
| 1407 |
if [ "$USBDEVICE" = "" ]; then |
|---|
| 1408 |
echo -en "Please enter the device name of your USB device (e.g. /dev/sda) : " |
|---|
| 1409 |
read dev |
|---|
| 1410 |
USBDEVICE=$dev |
|---|
| 1411 |
fi |
|---|
| 1412 |
echo "WARNING: This will erase all content on $USBDEVICE" |
|---|
| 1413 |
echo -en "Are you sure you want to use $USBDEVICE (y/[n]) " |
|---|
| 1414 |
read i |
|---|
| 1415 |
[ "$i" != "y" ] && [ "$i" != "Y" ] && return 0 |
|---|
| 1416 |
fi |
|---|
| 1417 |
rm -Rf $MINDI_TMP/usb |
|---|
| 1418 |
mkdir -p $MINDI_TMP/usb |
|---|
| 1419 |
USBPART="${USBDEVICE}1" |
|---|
| 1420 |
|
|---|
| 1421 |
echo -en "Transforming $USBDEVICE in a Bootable device " |
|---|
| 1422 |
echo -en "." |
|---|
| 1423 |
LogFile "Transforming $USBDEVICE in a Bootable device" |
|---|
| 1424 |
LogFile "Checking $USBDEVICE" |
|---|
| 1425 |
$FDISK -l $USBDEVICE 2>> $LOGFILE 1>> $LOGFILE |
|---|
| 1426 |
if [ $? -ne 0 ]; then |
|---|
| 1427 |
LogAll "Unable to access $USBDEVICE" |
|---|
| 1428 |
LogAll "Make sure your USB device is pluged in" |
|---|
| 1429 |
exit -1 |
|---|
| 1430 |
fi |
|---|
| 1431 |
echo -en "." |
|---|
| 1432 |
# Some distro do auto mount at that point (Ubuntu) |
|---|
| 1433 |
LogFile "Unmounting $USBPART just in case" |
|---|
| 1434 |
umount $USBPART 2>> $LOGFILE 1>> $LOGFILE |
|---|
| 1435 |
# If your key has no MBR it may cause an issue |
|---|
| 1436 |
# Use dd if=mbr.bin of=$USBDEVICE or ms-sys -s $USBDEVICE |
|---|
| 1437 |
LogFile "Preparing $USBDEVICE" |
|---|
| 1438 |
$FDISK $USBDEVICE 2>> $LOGFILE 1>> $LOGFILE << EOF |
|---|
| 1439 |
d |
|---|
| 1440 |
d |
|---|
| 1441 |
d |
|---|
| 1442 |
d |
|---|
| 1443 |
n |
|---|
| 1444 |
p |
|---|
| 1445 |
1 |
|---|
| 1446 |
|
|---|
| 1447 |
|
|---|
| 1448 |
t |
|---|
| 1449 |
b |
|---|
| 1450 |
a |
|---|
| 1451 |
1 |
|---|
| 1452 |
w |
|---|
| 1453 |
EOF |
|---|
| 1454 |
if [ $? -ne 0 ]; then |
|---|
| 1455 |
LogAll "Unable to create a vfat Filesystem on $USBDEVICE" |
|---|
| 1456 |
LogAll "Make sure your USB device is pluged in" |
|---|
| 1457 |
$FDISK -l $USBDEVICE 2>&1 | tee -a $LOGFILE |
|---|
| 1458 |
MindiExit -1 |
|---|
| 1459 |
fi |
|---|
| 1460 |
LogFile "The USB device $USBDEVICE now looks like this:" |
|---|
| 1461 |
$FDISK -l $USBDEVICE 2>&1 | tee -a $LOGFILE |
|---|
| 1462 |
echo -en "." |
|---|
| 1463 |
# Some distro do auto mount at that point (Ubuntu) |
|---|
| 1464 |
LogFile "Unmounting $USBPART just in case again" |
|---|
| 1465 |
umount $USBPART 2>> $LOGFILE 1>> $LOGFILE |
|---|
| 1466 |
echo -en "." |
|---|
| 1467 |
LogFile "Creating a vfat filesystem on $USBPART" |
|---|
| 1468 |
mkdosfs -F 32 $USBPART 2>&1 >> $LOGFILE |
|---|
| 1469 |
if [ $? -ne 0 ]; then |
|---|
| 1470 |
LogAll "Unable to create a vfat filesystem on $USBPART" |
|---|
| 1471 |
LogAll "Make sure your USB device is pluged in and partitioned ($USBPART must exist on it)" |
|---|
| 1472 |
$FDISK -l $USBDEVICE 2>&1 | tee -a $LOGFILE |
|---|
| 1473 |
MindiExit -1 |
|---|
| 1474 |
fi |
|---|
| 1475 |
echo -en "." |
|---|
| 1476 |
LogFile "Mounting $USBPART on $MINDI_TMP/usb" |
|---|
| 1477 |
mount $USBPART $MINDI_TMP/usb 2>> $LOGFILE |
|---|
| 1478 |
if [ $? -ne 0 ]; then |
|---|
| 1479 |
LogAll "Unable to mount $USBPART on $MINDI_TMP/usb" |
|---|
| 1480 |
LogAll "Make sure your USB device is pluged in, partitioned and formated ($USBPART must exist on it)" |
|---|
| 1481 |
$FDISK -l $USBDEVICE 2>&1 | tee -a $LOGFILE |
|---|
| 1482 |
MindiExit -1 |
|---|
| 1483 |
fi |
|---|
| 1484 |
echo -en "." |
|---|
| 1485 |
mkdir -p $MINDI_TMP/usb/images |
|---|
| 1486 |
cp -f $MINDI_CACHE/*.img $MINDI_CACHE/*.gz $MINDI_TMP/usb/images 2>> $LOGFILE || LogAll "OfferToMakeBootableUSB: Cannot copy $i to $MINDI_TMP/usb/images" |
|---|
| 1487 |
echo -en "." |
|---|
| 1488 |
LogFile "mindi_lib = $MINDI_DATA" |
|---|
| 1489 |
for i in memdisk memtest.bin memtest.img ; do |
|---|
| 1490 |
j=$MINDI_DATA/$i |
|---|
| 1491 |
k=$MINDI_TMP/usb |
|---|
| 1492 |
if [ -e "$j" ] ; then |
|---|
| 1493 |
LogAll "Copying $j to $k" |
|---|
| 1494 |
cp -f $j $k 2>> $LOGFILE || Die "Failed to copy $j to $k" |
|---|
| 1495 |
cp -f $j $MINDI_TMP 2>> $LOGFILE || Die "Failed to copy $j to $MINDI_TMP" |
|---|
| 1496 |
fi |
|---|
| 1497 |
done |
|---|
| 1498 |
echo -en "." |
|---|
| 1499 |
MakeMessageFile > $MINDI_TMP/usb/message.txt |
|---|
| 1500 |
echo -en "." |
|---|
| 1501 |
cp $kernelpath $MINDI_TMP/usb/vmlinuz 2>> $LOGFILE || Die "Cannot copy vmlinuz ($kernelpath) to mindi tmp ($MINDI_TMP/usb/vmlinuz). Did you run out of disk space?" |
|---|
| 1502 |
echo -en "." |
|---|
| 1503 |
cp $MINDI_TMP/initrd.img $MINDI_TMP/usb/initrd.img 2>> $LOGFILE |
|---|
| 1504 |
echo -en "." |
|---|
| 1505 |
MakeBootConfFile syslinux > $MINDI_TMP/usb/syslinux.cfg |
|---|
| 1506 |
echo -en "." |
|---|
| 1507 |
LogAll "----------- syslinux's conf --------------" |
|---|
| 1508 |
cat $MINDI_TMP/usb/syslinux.cfg |tee -a $LOGFILE |
|---|
| 1509 |
LogAll "------------------------------------------" |
|---|
| 1510 |
umount $MINDI_TMP/usb |
|---|
| 1511 |
if [ "$ARCH" != "ia64" ] ; then |
|---|
| 1512 |
syslinux -s $USBPART 2>> $MINDI_TMP/syslinux.log |
|---|
| 1513 |
if [ "$?" -ne "0" ] ; then |
|---|
| 1514 |
LogAll "----------- syslinux's errors --------------" |
|---|
| 1515 |
cat $MINDI_TMP/syslinux.log |tee -a $LOGFILE |
|---|
| 1516 |
echo "------------------------------------------" |
|---|
| 1517 |
LogAll "Failed to create USB image." |
|---|
| 1518 |
else |
|---|
| 1519 |
echo -e "$DONE" |
|---|
| 1520 |
LogFile "Created bootable USB image on $USBDEVICE" |
|---|
| 1521 |
fi |
|---|
| 1522 |
rm -f $MINDI_TMP/syslinux.log |
|---|
| 1523 |
else |
|---|
| 1524 |
echo "No USB boot support for ia64" |
|---|
| 1525 |
MindiExit -1 |
|---|
| 1526 |
fi |
|---|
| 1527 |
} |
|---|
| 1528 |
|
|---|
| 1529 |
|
|---|
| 1530 |
MakeMessageFile() { |
|---|
| 1531 |
|
|---|
| 1532 |
if [ -x "/bin/lsb_release" ]; then |
|---|
| 1533 |
DESC=`/bin/lsb_release -d | cut -d: -f2 | sed "s/[ \t]*//"` |
|---|
| 1534 |
elif [ -x "/usr/bin/pbdistrocheck" ]; then |
|---|
| 1535 |
# For pb >= 0.9.8 |
|---|
| 1536 |
DESC=`/usr/bin/pbdistrocheck -d` |
|---|
| 1537 |
else |
|---|
| 1538 |
iss="/dev/null" |
|---|
| 1539 |
[ -r /etc/issue.net ] && iss="/etc/issue.net" |
|---|
| 1540 |
[ -r /etc/issue ] && iss="/etc/issue" |
|---|
| 1541 |
DESC=`head -1 $iss` |
|---|
| 1542 |
fi |
|---|
| 1543 |
sed "s/ZZZZZ/$MINDI_VERSION/" $MINDI_DATA/msg-txt | sed "s/KKKKK/Kernel $KERVER/" | sed "s/AAAAA/on a $ARCH architecture/" | sed "s/TTTTT/`LC_TIME=C date`/" | sed "s/MMMMM/`hostname`/" | sed "s/DDDDD/$DESC/" |
|---|
| 1544 |
if [ _"$MONDO_SHARE" != _"" ]; then |
|---|
| 1545 |
if [ "$CDRECOVERY" != "yes" ] ; then |
|---|
| 1546 |
if [ -e "$MINDI_TMP/NETFS-DEV" ] ; then |
|---|
| 1547 |
echo -en "Press <enter> to continue.\n" |
|---|
| 1548 |
elif [ ! "$MINDI_TMP" ] ; then |
|---|
| 1549 |
echo -en "FYI, this is _not_ a Mondo Rescue CD.\n" |
|---|
| 1550 |
if [ -e "$MINDI_DATA/memtest.img" ] ; then |
|---|
| 1551 |
echo -en "Type 'memtest' <Enter> to test your PC's memory intensively.\nJust press <Enter> to go to the main test menu.\n" |
|---|
| 1552 |
fi |
|---|
| 1553 |
else |
|---|
| 1554 |
echo -en "$BOOT_MEDIA_MESSAGE" |
|---|
| 1555 |
fi |
|---|
| 1556 |
else |
|---|
| 1557 |
echo -en "\ |
|---|
| 1558 |
To restore your disk to factory defaults, type 'RESTORE' <enter>.\n\ |
|---|
| 1559 |
CAUTION: THIS WILL ERASE YOUR WHOLE DISK !!!\n" |
|---|
| 1560 |
fi |
|---|
| 1561 |
fi |
|---|
| 1562 |
echo -en "\n\n\n" |
|---|
| 1563 |
} |
|---|
| 1564 |
|
|---|
| 1565 |
|
|---|
| 1566 |
MakeBootConfFile() { |
|---|
| 1567 |
local options i ooo |
|---|
| 1568 |
options="" |
|---|
| 1569 |
# Type of boot file (elilo or syslinux/isolinux) |
|---|
| 1570 |
type=$1 |
|---|
| 1571 |
if [ "$type" = "elilo" ]; then |
|---|
| 1572 |
sep="=" |
|---|
| 1573 |
else |
|---|
| 1574 |
sep=" " |
|---|
| 1575 |
fi |
|---|
| 1576 |
|
|---|
| 1577 |
# Generic header for conf file |
|---|
| 1578 |
if [ "$type" != "elilo" ] ; then |
|---|
| 1579 |
echo -en "prompt 1\ndisplay message.txt\n" |
|---|
| 1580 |
else |
|---|
| 1581 |
echo -en "prompt\n" |
|---|
| 1582 |
fi |
|---|
| 1583 |
|
|---|
| 1584 |
# Compute which default option to boot from |
|---|
| 1585 |
if [ "$CDRECOVERY" = "yes" ] ; then |
|---|
| 1586 |
echo -en "default${sep}RESTORE\n" |
|---|
| 1587 |
# In case it's mondoarchive |
|---|
| 1588 |
elif [ _"$MONDO_SHARE" != _"" ]; then |
|---|
| 1589 |
if [ -e "$MINDI_TMP/NETFS-DEV" ] ; then |
|---|
| 1590 |
echo -en "default${sep}iso\n" |
|---|
| 1591 |
else |
|---|
| 1592 |
echo -en "default${sep}interactive\n" |
|---|
| 1593 |
fi |
|---|
| 1594 |
else |
|---|
| 1595 |
echo -en "default${sep}expert\n" |
|---|
| 1596 |
fi |
|---|
| 1597 |
|
|---|
| 1598 |
# Handle timeout |
|---|
| 1599 |
if [ "$CDRECOVERY" != "yes" ] ; then |
|---|
| 1600 |
echo -en "timeout${sep}300\n" |
|---|
| 1601 |
else |
|---|
| 1602 |
echo -en "timeout${sep}10000\n" |
|---|
| 1603 |
fi |
|---|
| 1604 |
echo -en "\n" |
|---|
| 1605 |
|
|---|
| 1606 |
# prepare which labels will be generated |
|---|
| 1607 |
if [ "$CDRECOVERY" = "yes" ] ; then |
|---|
| 1608 |
options="RESTORE expert" |
|---|
| 1609 |
else |
|---|
| 1610 |
if [ _"$MONDO_SHARE" != _"" ]; then |
|---|
| 1611 |
options="interactive expert compare iso nuke isonuke" |
|---|
| 1612 |
else |
|---|
| 1613 |
options="expert" |
|---|
| 1614 |
fi |
|---|
| 1615 |
fi |
|---|
| 1616 |
|
|---|
| 1617 |
# Generate rest of conf file |
|---|
| 1618 |
for i in $options ; do |
|---|
| 1619 |
ooo=$i |
|---|
| 1620 |
[ "$ooo" = "RESTORE" ] && ooo="nuke" |
|---|
| 1621 |
if [ "$type" = "elilo" ]; then |
|---|
| 1622 |
outstr="image=/vmlinuz\n\tlabel=$i\n\tinitrd=/initrd.img\n\troot=/dev/ram0 append=\" rw ramdisk_size=$ramdisk_size $ooo $MINDI_ADDITIONAL_BOOT_PARAMS \"\n" |
|---|
| 1623 |
else |
|---|
| 1624 |
ps="/" |
|---|
| 1625 |
if [ "$type" = "syslinux" ]; then |
|---|
| 1626 |
ps="" |
|---|
| 1627 |
fi |
|---|
| 1628 |
outstr="label $i\n\tkernel ${ps}vmlinuz\n\tappend initrd=${ps}initrd.img root=/dev/ram0 rw ramdisk_size=$ramdisk_size ${ooo} $MINDI_ADDITIONAL_BOOT_PARAMS\n" |
|---|
| 1629 |
fi |
|---|
| 1630 |
echo -en "$outstr" |
|---|
| 1631 |
done |
|---|
| 1632 |
|
|---|
| 1633 |
if [ -e "$MINDI_DATA/memtest.img" ] ; then |
|---|
| 1634 |
if [ "$type" = "elilo" ]; then |
|---|
| 1635 |
echo -en "image=/memtest.bin\n\tlabel=memtest\n" |
|---|
| 1636 |
echo -en "image=/memdisk\n\tlabel=memdisk\nappend=\"initrd=memtest.img\"\n" |
|---|
| 1637 |
else |
|---|
| 1638 |
ps="/" |
|---|
| 1639 |
if [ "$type" = "syslinux" ]; then |
|---|
| 1640 |
ps="" |
|---|
| 1641 |
fi |
|---|
| 1642 |
echo -en "label memtest\n\tkernel ${ps}memtest.bin\n" |
|---|
| 1643 |
echo -en "label memdisk\n\tkernel ${ps}memdisk\nappend initrd=${ps}memtest.img\n" |
|---|
| 1644 |
fi |
|---|
| 1645 |
fi |
|---|
| 1646 |
} |
|---|
| 1647 |
|
|---|
| 1648 |
|
|---|
| 1649 |
|
|---|
| 1650 |
PrepareBootDiskImage() { |
|---|
| 1651 |
local imagesdir dev imagefile mountpoint fname i kernelpath cfg_file testpath options retval outstr old_pwd ooo max_kernel_size bootimage liloconf mountefi |
|---|
| 1652 |
imagesdir=$MINDI_CACHE |
|---|
| 1653 |
kernelpath=$1 |
|---|
| 1654 |
do_boot_root_thingy="" |
|---|
| 1655 |
retval=0 |
|---|
| 1656 |
|
|---|
| 1657 |
[ ! -e "$kernelpath" ] && Die "PBDI - cannot find $kernelpath kernel" |
|---|
| 1658 |
echo -en "Making "$BOOT_SIZE"KB boot disk..." |
|---|
| 1659 |
TurnTgzIntoRdz $MINDI_DATA/rootfs $MINDI_TMP/initrd.img `du -sk $kernelpath | cut -f1` || Die "Could not turn rootfs into initrd.img; are you SURE your kernel supports loopfs?" |
|---|
| 1660 |
echo -en "..." |
|---|
| 1661 |
imagefile=$MINDI_CACHE/mindi-bootroot.$BOOT_SIZE.img |
|---|
| 1662 |
mountpoint=$MINDI_TMP/mountpoint.$$ |
|---|
| 1663 |
mkdir -p $mountpoint |
|---|
| 1664 |
dd if=/dev/zero of=$imagefile bs=1k count=$BOOT_SIZE &> /dev/null || Die "Cannot dd blank file" |
|---|
| 1665 |
LogFile "Creating vfat filesystem on $imagefile" |
|---|
| 1666 |
mkdosfs $imagefile >> $LOGFILE 2>> $LOGFILE |
|---|
| 1667 |
if [ "$ARCH" != "ia64" ] ; then |
|---|
| 1668 |
# syslinux should be run on a local file (doen't work through NFS Cf: #297) |
|---|
| 1669 |
# Ensure that $MINDI_CACHE is not on NFS (it shouldn't) |
|---|
| 1670 |
syslinux $imagefile >> $LOGFILE 2>> $LOGFILE |
|---|
| 1671 |
fi |
|---|
| 1672 |
|
|---|
| 1673 |
mount -t vfat -o loop $imagefile $mountpoint || LogAll "Cannot mount (PBDI)" |
|---|
| 1674 |
|
|---|
| 1675 |
# copy Mindi's skeleton fs & lilo/syslinux/whatever stuff into it |
|---|
| 1676 |
mkdir -p $mountpoint/etc |
|---|
| 1677 |
liloconf=$mountpoint/elilo.conf |
|---|
| 1678 |
|
|---|
| 1679 |
MakeMessageFile > $mountpoint/message.txt |
|---|
| 1680 |
|
|---|
| 1681 |
if [ "$ARCH" != "ia64" ] ; then |
|---|
| 1682 |
MakeBootConfFile isolinux > $mountpoint/syslinux.cfg |
|---|
| 1683 |
else |
|---|
| 1684 |
MakeBootConfFile elilo > $liloconf |
|---|
| 1685 |
# Copy it so that CD-ROM menu entry is satisfied |
|---|
| 1686 |
mountefi=0 |
|---|
| 1687 |
df -T | grep /boot/efi | grep -q vfat |
|---|
| 1688 |
if [ $? -ne 0 ]; then |
|---|
| 1689 |
mount /boot/efi |
|---|
| 1690 |
if [ $? -ne 0 ]; then |
|---|
| 1691 |
echo "You have to mount your EFI partition when using mindi" |
|---|
| 1692 |
MindiExit -1 |
|---|
| 1693 |
fi |
|---|
| 1694 |
mountefi=1 |
|---|
| 1695 |
fi |
|---|
| 1696 |
el=`find /boot/efi -name elilo.efi` |
|---|
| 1697 |
cp $el $mountpoint |
|---|
| 1698 |
cp $liloconf $mountpoint |
|---|
| 1699 |
if [ $mountefi -eq 1 ]; then |
|---|
| 1700 |
umount /boot/efi 2>&1 > /dev/null |
|---|
| 1701 |
fi |
|---|
| 1702 |
fi |
|---|
| 1703 |
|
|---|
| 1704 |
LogFile "Copying $MINDI_TMP/initrd.img to $mountpoint/initrd.img..." |
|---|
| 1705 |
cp -f $MINDI_TMP/initrd.img $mountpoint/initrd.img 2>> $LOGFILE |
|---|
| 1706 |
if [ "$?" -ne "0" ] ; then |
|---|
| 1707 |
LogAll "Failed to copy $MINDI_TMP/initrd.img to $mountpoint" |
|---|
| 1708 |
cat $MINDI_TMP/mtpt.$$ >> $LOGFILE |
|---|
| 1709 |
LogAll "Please unload some of your modules and try again." |
|---|
| 1710 |
rm -f $MINDI_TMP/mtpt.$$ |
|---|
| 1711 |
LogAll "Cannot incorporate initrd.img in bootdisk (kernel / modules too big?)" |
|---|
| 1712 |
retval=$(($retval+1)) |
|---|
| 1713 |
fi |
|---|
| 1714 |
|
|---|
| 1715 |
# copy the kernel across |
|---|
| 1716 |
[ "$mountpoint" != "" ] && rm -Rf $mountpoint/lost+found |
|---|
| 1717 |
dd if=/dev/zero of=$mountpoint/zero bs=1k count=16 &> /dev/null |
|---|
| 1718 |
free_space=`df -k -P $mountpoint | tail -n1 | tr -s ' ' '\t' | cut -f4` |
|---|
| 1719 |
cp -f $kernelpath $mountpoint/vmlinuz &> /dev/null |
|---|
| 1720 |
if [ "$?" -ne "0" ] ; then |
|---|
| 1721 |
LogFile "Files at mountpoint ($mountpoint) :-" |
|---|
| 1722 |
du -sk $mountpoint/* >> $LOGFILE |
|---|
| 1723 |
LogFile "--- end of list of files ---" |
|---|
| 1724 |
echo -en "Kernel size = `du -sk $kernelpath | cut -f1` K\nRamdisk free = $free_space K\n\ |
|---|
| 1725 |
Sorry, your kernel is too big for your image.\n" >> $LOGFILE |
|---|
| 1726 |
[ "$mountpoint" != "" ] && rm -f $mountpoint/vmlinuz |
|---|
| 1727 |
cd $old_pwd |
|---|
| 1728 |
umount $mountpoint || Die "Cannot unmount mountpoint ($mountpoint)" |
|---|
| 1729 |
rmdir $mountpoint || LogAll "Cannot rmdir (PBDI)" |
|---|
| 1730 |
|
|---|
| 1731 |
rm -f $imagefile |
|---|
| 1732 |
return 0 |
|---|
| 1733 |
fi |
|---|
| 1734 |
max_kernel_size=$(($free_space+`du -sk $kernelpath | cut -f1`)) |
|---|
| 1735 |
LogFile "Free space left on image = $free_space KB" |
|---|
| 1736 |
LogFile "Max kernel size on $BOOT_SIZE KB image (est'd) = $max_kernel_size K" |
|---|
| 1737 |
|
|---|
| 1738 |
# make it bootable |
|---|
| 1739 |
[ "$mountpoint" != "" ] && rm -f $mountpoint/zero |
|---|
| 1740 |
[ -e "$MINDI_DATA/memdisk" ] && cp -f $MINDI_DATA/memdisk $mountpoint 2>> $LOGFILE |
|---|
| 1741 |
|
|---|
| 1742 |
if [ "$ARCH" = "ia64" ] ; then |
|---|
| 1743 |
cp `dirname $kernelpath`/*.efi $mountpoint 2>> $LOGFILE |
|---|
| 1744 |
fi |
|---|
| 1745 |
umount $mountpoint || Die "Cannot unmount mountpoint ($mountpoint)" |
|---|
| 1746 |
echo -en "..." |
|---|
| 1747 |
rmdir $mountpoint || LogAll "Cannot rmdir (PBDI)" |
|---|
| 1748 |
|
|---|
| 1749 |
if [ "$retval" -eq "0" ] ; then |
|---|
| 1750 |
echo -en "...$DONE\n" |
|---|
| 1751 |
LogAll "$BOOT_SIZE KB boot disk was created OK\n" |
|---|
| 1752 |
else |
|---|
| 1753 |
echo -en "...failed\n" |
|---|
| 1754 |
LogAll "$BOOT_SIZE KB boot disk was NOT created\n" |
|---|
| 1755 |
rm -f $imagefile |
|---|
| 1756 |
fi |
|---|
| 1757 |
[ "$retval" -ne "0" ] && LogAll "PrepareBootDiskImage() is returning nonzero" |
|---|
| 1758 |
return $retval |
|---|
| 1759 |
} |
|---|
| 1760 |
|
|---|
| 1761 |
|
|---|
| 1762 |
ParseModprobeForIncludes() { |
|---|
| 1763 |
local MODPROBE_CONF mpincfile includes include |
|---|
| 1764 |
|
|---|
| 1765 |
MODPROBE_CONF=/etc/modprobe.conf |
|---|
| 1766 |
mpincfile=$1 |
|---|
| 1767 |
touch $mpincfile |
|---|
| 1768 |
if [ -a $MODPROBE_CONF ]; then |
|---|
| 1769 |
includes=$($AWK '/^[ \t]*include[ \t]+/ {if(NF>=2){print $2}}' $MODPROBE_CONF|sort -u) |
|---|
| 1770 |
if [ -n "$includes" ]; then |
|---|
| 1771 |
for include in $includes |
|---|
| 1772 |
do |
|---|
| 1773 |
if [ -a "$include" ]; then |
|---|
| 1774 |
echo $include >> $mpincfile |
|---|
| 1775 |
fi |
|---|
| 1776 |
done |
|---|
| 1777 |
fi |
|---|
| 1778 |
fi |
|---|
| 1779 |
} |
|---|
| 1780 |
|
|---|
| 1781 |
|
|---|
| 1782 |
PrepareDataDiskImages() { |
|---|
| 1783 |
local needlist bigdir diskdir imagesdir res i j k old_pwd lines lfiles includefile |
|---|
| 1784 |
|
|---|
| 1785 |
imagesdir=$MINDI_CACHE |
|---|
| 1786 |
rm -f $imagesdir/mindi.iso |
|---|
| 1787 |
needlist=$MINDI_TMP/what-we-need.txt |
|---|
| 1788 |
bigdir=$MINDI_TMP/bigdir |
|---|
| 1789 |
mkdir -p $bigdir/usr/bin |
|---|
| 1790 |
mkdir -p $bigdir/usr/sbin |
|---|
| 1791 |
includefile=$MINDI_TMP/$$.includefile.txt |
|---|
| 1792 |
|
|---|
| 1793 |
lfiles=`ls $DEPLIST_DIR/* | grep -v /minimal` |
|---|
| 1794 |
if [ -e "$DEPLIST_FILE" ]; then |
|---|
| 1795 |
lfiles="$DEPLIST_FILE $lfiles" |
|---|
| 1796 |
fi |
|---|
| 1797 |
lines=`grep -vx " *#.*" $lfiles | grep -vx "" | wc -l` |
|---|
| 1798 |
ParseModprobeForIncludes $includefile |
|---|
| 1799 |
lines=$(($lines+`cat $includefile | wc -l`)) |
|---|
| 1800 |
cat $lfiles $includefile | GenerateGiantDependencyList $needlist $lines |
|---|
| 1801 |
res=$? |
|---|
| 1802 |
rm -f $includefile |
|---|
| 1803 |
# This function appends to the file passed in param |
|---|
| 1804 |
ListKernelModulePaths $needlist |
|---|
| 1805 |
if [ "$res" -ne "0" ] ; then |
|---|
| 1806 |
Die "You have $res files present in dependency list\nbut absent from filesystem." |
|---|
| 1807 |
fi |
|---|
| 1808 |
FindAndAddUserKeyboardMappingFile |
|---|
| 1809 |
mkdir -p $bigdir/tmp |
|---|
| 1810 |
[ -d "/mnt/.boot.d" ] && echo "Oh Jebus" > $bigdir/tmp/DUMBASS-GENTOO |
|---|
| 1811 |
DropOptimizedLibraries $needlist $bigdir |
|---|
| 1812 |
echo -en "Assembling dependency files" |
|---|
| 1813 |
|
|---|
| 1814 |
CopyDependenciesToDirectory < $needlist $bigdir `wc -l $needlist` |
|---|
| 1815 |
|
|---|
| 1816 |
# also copy io.sys and msdos.sys, if we can find them |
|---|
| 1817 |
for i in `mount | cut -d' ' -f3` ; do |
|---|
| 1818 |
for j in io.sys msdos.sys ; do |
|---|
| 1819 |
[ -e "$i/$j" ] && cp -f $i/$j $bigdir 2>> $LOGFILE |
|---|
| 1820 |
done |
|---|
| 1821 |
done |
|---|
| 1822 |
|
|---|
| 1823 |
# master boot record, too |
|---|
| 1824 |
i=`cat $MINDI_TMP/BOOTLOADER.DEVICE 2> /dev/null` |
|---|
| 1825 |
if [ "$i" ] ; then |
|---|
| 1826 |
LogAll "Backing up $i's MBR" |
|---|
| 1827 |
dd if=$i of=$bigdir/BOOTLOADER.MBR bs=446 count=1 >> $LOGFILE 2>> $LOGFILE |
|---|
| 1828 |
sleep 1 |
|---|
| 1829 |
sync |
|---|
| 1830 |
j=$i |
|---|
| 1831 |
[ -h "$j" ] && j=`readlink -f $j` |
|---|
| 1832 |
LogAll "Creating /dev/boot_device ($j)" |
|---|
| 1833 |
mkdir -p $bigdir/dev |
|---|
| 1834 |
cp -pRdf $j $bigdir/dev/boot_device 2>> $LOGFILE || Die "Unable to create /dev/boot_device on ramdisk" |
|---|
| 1835 |
fi |
|---|
| 1836 |
|
|---|
| 1837 |
old_pwd=`pwd` |
|---|
| 1838 |
cd $bigdir |
|---|
| 1839 |
|
|---|
| 1840 |
# Get terminfo content |
|---|
| 1841 |
ti="usr/share/terminfo/l" |
|---|
| 1842 |
if [ -d /$ti ]; then |
|---|
| 1843 |
mkdir -p $ti |
|---|
| 1844 |
cp -Rdf /$ti/* $ti 2>> $LOGFILE || LogAll "WARNING - error occurred while copying terminfo" |
|---|
| 1845 |
fi |
|---|
| 1846 |
if [ -e "$MONDO_SHARE/restore-scripts" ]; then |
|---|
| 1847 |
cp -Rdf $MONDO_SHARE/restore-scripts/* . 2>> $LOGFILE |
|---|
| 1848 |
[ "$?" -ne "0" ] && [ _"$MONDO_SHARE" != _"" ] && Die "Cannot find/install $MONDO_SHARE/restore-scripts" |
|---|
| 1849 |
fi |
|---|
| 1850 |
if [ -d "/lib/dev-state" ]; then |
|---|
| 1851 |
tar cf - -C / ./lib/dev-state 2>> $MINDI_TMP/$$.log | tar xf - || LogAll "Unable to handle /lib/dev-state" $MINDI_TMP/$$.log |
|---|
| 1852 |
fi |
|---|
| 1853 |
cd $old_pwd |
|---|
| 1854 |
echo -e "$DONE" |
|---|
| 1855 |
TOTAL_BIGDIR_SIZE=`du -sk $bigdir | cut -f1` |
|---|
| 1856 |
mkdir -p $bigdir/tmp |
|---|
| 1857 |
if [ $LVM != "false" ]; then |
|---|
| 1858 |
$MINDI_DATA/analyze-my-lvm > $bigdir/tmp/i-want-my-lvm |
|---|
| 1859 |
if [ "$?" -ne "0" ]; then |
|---|
| 1860 |
LVM="false" |
|---|
| 1861 |
rm -f $bigdir/tmp/i-want-my-lvm |
|---|
| 1862 |
else |
|---|
| 1863 |
echo "Your i-want-my-lvm file content is:" >> $LOGFILE |
|---|
| 1864 |
echo "-----------------------------------" >> $LOGFILE |
|---|
| 1865 |
cat $bigdir/tmp/i-want-my-lvm >> $LOGFILE |
|---|
| 1866 |
echo "-----------------------------------" >> $LOGFILE |
|---|
| 1867 |
fi |
|---|
| 1868 |
fi |
|---|
| 1869 |
|
|---|
| 1870 |
if [ _"$MONDO_SHARE" != _"" ]; then |
|---|
| 1871 |
for q in filelist.full.gz biggielist.txt ; do |
|---|
| 1872 |
[ ! -e "$MINDI_TMP/$q" ] && Die "Cannot find $MINDI_TMP/$q" |
|---|
| 1873 |
cp -pRdf $MINDI_TMP/$q $bigdir/tmp 2>> $LOGFILE |
|---|
| 1874 |
done |
|---|
| 1875 |
fi |
|---|
| 1876 |
|
|---|
| 1877 |
echo -en "Tarring and zipping the data content..." |
|---|
| 1878 |
size_of_all_tools=`du -sk $bigdir | cut -f1` |
|---|
| 1879 |
(cd $bigdir ; tar -b 4096 -cf - . 2>> $MINDI_TMP/$$.log | gzip -9 > $imagesdir/all.tar.gz || LogAll "Problem creating all.tar.gz" $MINDI_TMP/$$.log) |
|---|
| 1880 |
LogFile "Size of the data content" |
|---|
| 1881 |
LogFile "------------------------" |
|---|
| 1882 |
du -sk $imagesdir/*gz >> $LOGFILE |
|---|
| 1883 |
LogFile "------------------------" |
|---|
| 1884 |
echo -e "$DONE" |
|---|
| 1885 |
|
|---|
| 1886 |
FRIENDLY_OUTSTRING="Boot and data disk images were created." |
|---|
| 1887 |
rm -rf $bigdir |
|---|
| 1888 |
rm -f $needlist |
|---|
| 1889 |
} |
|---|
| 1890 |
|
|---|
| 1891 |
|
|---|
| 1892 |
ProcessLDD() { |
|---|
| 1893 |
local incoming f d nd bd bnd |
|---|
| 1894 |
read incoming |
|---|
| 1895 |
while [ "$incoming" != "" ]; do |
|---|
| 1896 |
# We take the full path name of the dyn. lib. we want |
|---|
| 1897 |
incoming=`echo "$incoming" | $AWK '{if (match($1,/\//)) {print $1} else {if (match($3,/\//)) print $3} fi}'` |
|---|
| 1898 |
for f in $incoming ; do |
|---|
| 1899 |
# echo modified file name if one of the parent dir is a link |
|---|
| 1900 |
# by replacing the original dirname by the destination of the link |
|---|
| 1901 |
d="`dirname $f`" |
|---|
| 1902 |
found="false" |
|---|
| 1903 |
while [ "$d" != "/" ]; do |
|---|
| 1904 |
if [ -h "$d" ]; then |
|---|
| 1905 |
nd=`readlink -f $d` |
|---|
| 1906 |
bd=`basename $d` |
|---|
| 1907 |
bnd=`basename $nd` |
|---|
| 1908 |
f=`echo $f | sed "s~/$bd/~/$bnd/~"` |
|---|
| 1909 |
echo $d |
|---|
| 1910 |
fi |
|---|
| 1911 |
d="`dirname $d`" |
|---|
| 1912 |
done |
|---|
| 1913 |
|
|---|
| 1914 |
echo "$f" |
|---|
| 1915 |
echo "`ReadAllLink $f`" |
|---|
| 1916 |
done |
|---|
| 1917 |
read incoming |
|---|
| 1918 |
done |
|---|
| 1919 |
} |
|---|
| 1920 |
|
|---|
| 1921 |
|
|---|
| 1922 |
Prompt() { |
|---|
| 1923 |
echo -en "$1" |
|---|
| 1924 |
read line |
|---|
| 1925 |
} |
|---|
| 1926 |
|
|---|
| 1927 |
|
|---|
| 1928 |
ReadLine() { |
|---|
| 1929 |
local i incoming |
|---|
| 1930 |
read incoming |
|---|
| 1931 |
i=0 |
|---|
| 1932 |
while [ "$i" -le "32" ] && [ "$incoming" = "" ] ; do |
|---|
| 1933 |
i=$(($i+1)) |
|---|
| 1934 |
read incoming |
|---|
| 1935 |
done |
|---|
| 1936 |
echo "$incoming" |
|---|
| 1937 |
} |
|---|
| 1938 |
|
|---|
| 1939 |
|
|---|
| 1940 |
SizeOfPartition() { |
|---|
| 1941 |
local devpath drive res stub |
|---|
| 1942 |
device=$1 |
|---|
| 1943 |
if [ "`echo "$device" | grep -F "/dev/md"`" != "" ] ; then |
|---|
| 1944 |
res=`SizeOfRaidPartition $device` |
|---|
| 1945 |
[ "$res" = "" ] && Die "Cannot find $device's size - is your /etc/raidtab sane?" |
|---|
| 1946 |
echo "$res" |
|---|
| 1947 |
return 0 |
|---|
| 1948 |
fi |
|---|
| 1949 |
# patch from Bill <bill@iwizard.biz> - 2003/08/25 |
|---|
| 1950 |
res=`$FDISK -s $device 2>> $LOGFILE` |
|---|
| 1951 |
# end patch |
|---|
| 1952 |
# take only the first in case of multiple mount (cifs, nfs, ...) |
|---|
| 1953 |
[ "$res" = "" ] && res=`df -k -P -x supermount | tr -s '\t' ' ' | grep -F "$device " | cut -d' ' -f2 | head -1` |
|---|
| 1954 |
[ "$res" = "" ] && res="-1" |
|---|
| 1955 |
echo $res |
|---|
| 1956 |
return 0 |
|---|
| 1957 |
} |
|---|
| 1958 |
|
|---|
| 1959 |
|
|---|
| 1960 |
SizeOfRaidPartition() { |
|---|
| 1961 |
local real_dev smallest_size silly tmp |
|---|
| 1962 |
|
|---|
| 1963 |
silly=999999999 |
|---|
| 1964 |
smallest_size=$silly |
|---|
| 1965 |
|
|---|
| 1966 |
for real_dev in `GetRaidDevMembers $1` ; do |
|---|
| 1967 |
tmp=`SizeOfPartition $real_dev` |
|---|
| 1968 |
[ "$tmp" -lt "$smallest_size" ] && smallest_size=$tmp |
|---|
| 1969 |
done |
|---|
| 1970 |
|
|---|
| 1971 |
if [ "$smallest_size" = "$silly" ] ; then |
|---|
| 1972 |
echo "-1" |
|---|
| 1973 |
return 1 |
|---|
| 1974 |
else |
|---|
| 1975 |
echo "$smallest_size" |
|---|
| 1976 |
return 0 |
|---|
| 1977 |
fi |
|---|
| 1978 |
} |
|---|
| 1979 |
|
|---|
| 1980 |
|
|---|
| 1981 |
StripComments() |
|---|
| 1982 |
{ |
|---|
| 1983 |
local tempfile |
|---|
| 1984 |
|
|---|
| 1985 |
tempfile=$MINDI_TMP/$$.strip.txt |
|---|
| 1986 |
cp -f $1 $tempfile 2>> $LOGFILE |
|---|
| 1987 |
$AWK '{if (substr($0,0,1)!="#" || substr($0,0,3)=="#!/") {print $0;};}' $tempfile > $1 |
|---|
| 1988 |
rm -f $tempfile |
|---|
| 1989 |
LogFile "Stripped comments from $2" |
|---|
| 1990 |
} |
|---|
| 1991 |
|
|---|
| 1992 |
|
|---|
| 1993 |
|
|---|
| 1994 |
StripExecutable() |
|---|
| 1995 |
{ |
|---|
| 1996 |
local tmpfile |
|---|
| 1997 |
|
|---|
| 1998 |
tmpfile=$MINDI_TMP/stripped.$$.dat |
|---|
| 1999 |
[ -d "$1" ] || [ -h "$1" ] && return |
|---|
| 2000 |
cp -f $1 $tmpfile 2>> $LOGFILE |
|---|
| 2001 |
strip $tmpfile 2> /dev/null |
|---|
| 2002 |
if [ "$?" -eq "0" ] ; then |
|---|
| 2003 |
cp -f $tmpfile $1 2>> $LOGFILE |
|---|
| 2004 |
LogFile "Stripped binary $2" |
|---|
| 2005 |
fi |
|---|
| 2006 |
rm -f $tmpfile |
|---|
| 2007 |
} |
|---|
| 2008 |
|
|---|
| 2009 |
KernelVer() { |
|---|
| 2010 |
local fkern_ver fname |
|---|
| 2011 |
|
|---|
| 2012 |
fname=$1 |
|---|
| 2013 |
file $fname | grep -q gzip |
|---|
| 2014 |
if [ "$?" -eq "0" ] ; then |
|---|
| 2015 |
# Used by ia64 |
|---|
| 2016 |
fkern_ver=`gzip -cd $fname | strings 2> /dev/null | grep "[2-9]+*[.][0-9]+*[.][0-9]+*[^\@]*@"` |
|---|
| 2017 |
else |
|---|
| 2018 |
fkern_ver=`strings $fname 2> /dev/null | grep "[2-9]+*[.][0-9]+*[.][0-9]+*[^\@]*@"` |
|---|
| 2019 |
fi |
|---|
| 2020 |
echo "$fkern_ver" |
|---|
| 2021 |
} |
|---|
| 2022 |
|
|---|
| 2023 |
|
|---|
| 2024 |
TryToFindKernelPath() { |
|---|
| 2025 |
local fname incoming res fkern_ver we_want_version possible_kernels noof_kernels kernelpath kdate duff_kernels |
|---|
| 2026 |
|
|---|
| 2027 |
we_want_version=$KERVERRUN |
|---|
| 2028 |
possible_kernels="" |
|---|
| 2029 |
duff_kernels="" |
|---|
| 2030 |
|
|---|
| 2031 |
if [ "$ARCH" = "ia64" ] ; then |
|---|
| 2032 |
root="/boot/efi/efi" |
|---|
| 2033 |
else |
|---|
| 2034 |
root="/" |
|---|
| 2035 |
fi |
|---|
| 2036 |
for fname in `find $root -maxdepth 2 -type f | grep -E 'lin|kern' | grep -Ev '^/proc/|^/net/'` ; do |
|---|
| 2037 |
[ ! -e "$fname" ] && continue |
|---|
| 2038 |
[ "$fname" = "/boot/vmlinuz.shipped" ] && [ -f "/boot/vmlinuz" ] && continue; # ignore SuSE's extra kernel |
|---|
| 2039 |
fkern_ver=`KernelVer $fname` |
|---|
| 2040 |
[ "$fkern_ver" = "" ] && continue |
|---|
| 2041 |
[ "`echo "$fkern_ver" |grep -F "$we_want_version "`" = "" ] && continue |
|---|
| 2042 |
[ -f "$fname" ] || continue |
|---|
| 2043 |
[ -h "$fname" ] && continue |
|---|
| 2044 |
kdate=`uname -v | $AWK '{for(i=1;i<NF;i++){if(index($i,":")){print $i;};};}' | $AWK '{print $NF;}'` |
|---|
| 2045 |
file $fname | grep -q gzip |
|---|
| 2046 |
if [ "$?" -eq "0" ] ; then |
|---|
| 2047 |
# Used by ia64 |
|---|
| 2048 |
if [ "`gzip -cd $fname | strings 2> /dev/null | grep -F "$kdate"`" = "" ] ; then |
|---|
| 2049 |
LogAll "Have you recompiled your kernel \"$fname\" w/o rebooting? Naughty but I'll allow it..." |
|---|
| 2050 |
duff_kernels="$fname $duff_kernels" |
|---|
| 2051 |
else |
|---|
| 2052 |
[ "`echo "$fname" | grep -F "vmlinux"`" ] && continue |
|---|
| 2053 |
possible_kernels="$fname $possible_kernels" |
|---|
| 2054 |
fi |
|---|
| 2055 |
else |
|---|
| 2056 |
if [ "`strings $fname 2> /dev/null | grep -F "$kdate"`" = "" ] ; then |
|---|
| 2057 |
LogAll "Have you recompiled your kernel \"$fname\" w/o rebooting?\n Naughty but I'll allow it..." |
|---|
| 2058 |
duff_kernels="$fname $duff_kernels" |
|---|
| 2059 |
else |
|---|
| 2060 |
[ "`echo "$fname" | grep -F "vmlinux"`" ] && continue |
|---|
| 2061 |
possible_kernels="$fname $possible_kernels" |
|---|
| 2062 |
fi |
|---|
| 2063 |
fi |
|---|
| 2064 |
done |
|---|
| 2065 |
if [ ! "$possible_kernels" ] && uname -a | grep Knoppix > /dev/null ; then |
|---|
| 2066 |
possible_kernels=`find /boot/vmlinuz-2.* | tail -n1` |
|---|
| 2067 |
fi |
|---|
| 2068 |
if [ ! "$possible_kernels" ] ; then |
|---|
| 2069 |
LogAll "No kernel matches exactly. Are there any duff kernels?" |
|---|
| 2070 |
possible_kernels="$duff_kernels" |
|---|
| 2071 |
if [ ! "$possible_kernels" ] ; then |
|---|
| 2072 |
LogAll "Sorry, no duff kernels either" |
|---|
| 2073 |
else |
|---|
| 2074 |
LogAll "I bet you're running Debian or Gentoo, aren't you?" |
|---|
| 2075 |
LogAll "Your kernel doesn't have a sane builddate. Oh well..." |
|---|
| 2076 |
fi |
|---|
| 2077 |
fi |
|---|
| 2078 |
possible_kernels=`echo "$possible_kernels" | tr -s ' ' '\n' | sort -u | tr '\n' ' '` |
|---|
| 2079 |
noof_kernels=`CountItemsIn "$possible_kernels"` |
|---|
| 2080 |
if [ "$noof_kernels" -eq "0" ] ; then |
|---|
| 2081 |
LogAll "Could not find your kernel." |
|---|
| 2082 |
if [ -e "/boot/vmlinuz" ] ; then |
|---|
| 2083 |
LogAll "Using /boot/vmlinuz as a last resort." |
|---|
| 2084 |
output=/boot/vmlinuz |
|---|
| 2085 |
else |
|---|
| 2086 |
output="" |
|---|
| 2087 |
fi |
|---|
| 2088 |
elif [ "$noof_kernels" -eq "1" ] ; then |
|---|
| 2089 |
kernelpath=`echo "$possible_kernels" | sed s/' '//` |
|---|
| 2090 |
LogFile "Your kernel is $kernelpath (v$KERVERRUN)" |
|---|
| 2091 |
output="$kernelpath" |
|---|
| 2092 |
else |
|---|
| 2093 |
for i in $possible_kernels ; do |
|---|
| 2094 |
if echo $i | grep "$KERVERRUN" ; then |
|---|
| 2095 |
LogAll "OK, I used my initiative and found that " |
|---|
| 2096 |
LogAll "$i is probably your kernel. " |
|---|
| 2097 |
output="$i" |
|---|
| 2098 |
return |
|---|
| 2099 |
fi |
|---|
| 2100 |
done |
|---|
| 2101 |
if echo " $possible_kernels " | grep -F "/boot/vmlinuz " &> /dev/null ; then |
|---|
| 2102 |
output=/boot/vmlinuz |
|---|
| 2103 |
LogFile "Schlomo, this one's for you." |
|---|
| 2104 |
else |
|---|
| 2105 |
LogAll "Two or more possible kernels found. You may specify any one of them and the " |
|---|
| 2106 |
LogAll "boot disks will still work, probably. If one does not work, try another." |
|---|
| 2107 |
LogAll "$possible_kernels" |
|---|
| 2108 |
echo "" |
|---|
| 2109 |
fi |
|---|
| 2110 |
fi |
|---|
| 2111 |
echo "$output" | tr -s ' ' '\n' | sort -u | tr '\n' ' ' |
|---|
| 2112 |
} |
|---|
| 2113 |
|
|---|
| 2114 |
|
|---|
| 2115 |
TurnTgzIntoRdz() { |
|---|
| 2116 |
local tgz_dir_fname rdz_fname tempfile mountpoint old_pwd nodes kernelsize res currsize not_copied j k s w needed_modules_path |
|---|
| 2117 |
|
|---|
| 2118 |
tgz_dir_fname=$1 |
|---|
| 2119 |
rdz_fname=$2 |
|---|
| 2120 |
kernelsize=$3 |
|---|
| 2121 |
# Compute the list of all that should be copied/created on the final mountpoint under MINDI_TMP |
|---|
| 2122 |
# mkdir.lis will contain the list of directries to create |
|---|
| 2123 |
# cp.lis will contain the list of files/dirs to copy |
|---|
| 2124 |
# ln.lis will contain the list of files to link to existing files |
|---|
| 2125 |
# rm.lis will contain the list of files to remove after the copies |
|---|
| 2126 |
# AL04Oct08: Check whether /lib64 is a link and if so explicitly create one in rootfs |
|---|
| 2127 |
if [ -h "/lib64" ]; then |
|---|
| 2128 |
echo lib >> $MINDI_TMP/mkdir.lis |
|---|
| 2129 |
echo ln -s lib lib64 >> $MINDI_TMP/ln.lis |
|---|
| 2130 |
fi |
|---|
| 2131 |
|
|---|
| 2132 |
[ -e "/dev/.devfsd" ] && echo "/dev/.devfsd found" > $MINDI_CACHE/USE-DEVFS |
|---|
| 2133 |
echo $MINDI_CACHE/USE-DEVFS >> $MIDI_TMP/cp.lis |
|---|
| 2134 |
|
|---|
| 2135 |
# We need a minimal conf in the initial ramdisk |
|---|
| 2136 |
mountlis=`grep -v "^#.*" $DEPLIST_FILE_MIN $DEPLIST_DIR/minimal*.conf | cut -d: -f2 | sort -u` |
|---|
| 2137 |
ReadAllLink $mountlis >> $MINDI_TMP/mnt.lis |
|---|
| 2138 |
LocateDeps `cat $MINDI_TMP/mnt.lis` >> $MINDI_TMP/deps.lis |
|---|
| 2139 |
# Special for libs |
|---|
| 2140 |
ReadAllLink `grep -E "/lib" $DEPLIST_FILE_MIN $DEPLIST_DIR/minimal*.conf | grep -v "^#.*" | cut -d: -f2` >> $MINDI_TMP/deps.lis |
|---|
| 2141 |
|
|---|
| 2142 |
echo `cat $MINDI_TMP/mnt.lis` `sort -u $MINDI_TMP/deps.lis` >> $MINDI_TMP/cp.lis |
|---|
| 2143 |
rm -f $MINDI_TMP/deps.lis $MINDI_TMP/mnt.lis |
|---|
| 2144 |
|
|---|
| 2145 |
# Copy of files mandatory for ld.so |
|---|
| 2146 |
echo /etc/ld.so.c* >> $MINDI_TMP/cp.lis |
|---|
| 2147 |
|
|---|
| 2148 |
# Avoid an issue on some distro (RHEL5) |
|---|
| 2149 |
echo ./etc/ld.so.conf.d/kernelcap* >> $MINDI_TMP/rm.lis |
|---|
| 2150 |
|
|---|
| 2151 |
# Need for a tmp dir |
|---|
| 2152 |
echo tmp >> $MINDI_TMP/mkdir.lis |
|---|
| 2153 |
|
|---|
| 2154 |
# Management of udev (which includes modprobe in rules) |
|---|
| 2155 |
ps auxww | grep -v grep | grep -qw udevd |
|---|
| 2156 |
if [ $? -eq 0 ]; then |
|---|
| 2157 |
echo "udev device manager found" > $MINDI_CACHE/USE-UDEV |
|---|
| 2158 |
echo $MINDI_CACHE/USE-UDEV >> $MINDI_TMP/cp.lis |
|---|
| 2159 |
LogFile "udev device manager found" |
|---|
| 2160 |
echo /etc/udev /lib*/udev >> $MINDI_TMP/cp.lis |
|---|
| 2161 |
# This avoids NIC remapping if on another machine at restore time on Debian at least |
|---|
| 2162 |
echo ./etc/udev/rules.d/z[0-9][0-9]_persistent-net.rules >> $MINDI_TMP/rm.lis |
|---|
| 2163 |
# This avoids NIC remapping if on another machine at restore time on Ubuntu at least |
|---|
| 2164 |
echo ./etc/udev/rules.d/[0-9][0-9]-persistent-net.rules >> $MINDI_TMP/rm.lis |
|---|
| 2165 |
if [ -x /sbin/udevd ]; then |
|---|
| 2166 |
# Get only the files which exist in the udev.files list |
|---|
| 2167 |
# and potentially their symlink structure and their deps |
|---|
| 2168 |
mountlis=`grep -Ev "^#" $MINDI_CONF/udev.files` |
|---|
| 2169 |
ReadAllLink $mountlis | sort -u >> $MINDI_TMP/udev.lis |
|---|
| 2170 |
LocateDeps `cat $MINDI_TMP/udev.lis` | sort -u >> $MINDI_TMP/cp.lis |
|---|
| 2171 |
cat $MINDI_TMP/udev.lis >> $MINDI_TMP/cp.lis |
|---|
| 2172 |
rm -f $MINDI_TMP/udev.lis |
|---|
| 2173 |
else |
|---|
| 2174 |
LogAll "udevd daemon not in standard place (/sbin)" |
|---|
| 2175 |
LogAll "mindi will use static devices which may cause problems" |
|---|
| 2176 |
rm -f $MINDI_CACHE/USE-UDEV |
|---|
| 2177 |
fi |
|---|
| 2178 |
fi |
|---|
| 2179 |
|
|---|
| 2180 |
# Management of potential HW info (Proliant only at the moment) |
|---|
| 2181 |
rm -rf $MINDI_CACHE/bkphw |
|---|
| 2182 |
mindi-bkphw $MINDI_CACHE $MINDI_CONF | tee -a $LOGFILE |
|---|
| 2183 |
if [ -d $MINDI_CACHE/bkphw ]; then |
|---|
| 2184 |
LogAll "Hardware Information found and saved ..." |
|---|
| 2185 |
echo $MINDI_CACHE/bkphw >> $MIDNDI_TMP/cp.lis |
|---|
| 2186 |
if [ -f $MINDI_CACHE/tools.files ]; then |
|---|
| 2187 |
lis=`grep -Ev '^#' $MINDI_CACHE/tools.files` |
|---|
| 2188 |
LocateDeps $lis > $MINDI_TMP/tools.lis |
|---|
| 2189 |
echo $lis `sort -u $MINDI_TMP/tools.lis` >> $MINDI_TMP/cp.lis |
|---|
| 2190 |
fi |
|---|
| 2191 |
if [ -f $MINDI_CACHE/mindi-rsthw ]; then |
|---|
| 2192 |
chmod 755 $MINDI_CACHE/mindi-rsthw |
|---|
| 2193 |
echo $MINDI_CACHE/mindi-rsthw >> $MINDI_TMP/cp.lis |
|---|
| 2194 |
fi |
|---|
| 2195 |
rm -f $MINDI_TMP/tools.lis $MINDI_CACHE/tools.files |
|---|
| 2196 |
fi |
|---|
| 2197 |
|
|---|
| 2198 |
# Management of perl scripts delivered needed at restore time |
|---|
| 2199 |
mindi-get-perl-modules `cat $MINDI_CONF/perl-scripts` >> $MINDI_TMP/cp.lis |
|---|
| 2200 |
|
|---|
| 2201 |
echo mnt/cdrom >> $MINDI_TMP/mkdir.lis |
|---|
| 2202 |
|
|---|
| 2203 |
ls /dev/fd0*[1,2][4,7,8]* >> $MINDI_TMP/cp.lis 2> /dev/null |
|---|
| 2204 |
|
|---|
| 2205 |
if [ "${kernelname}" != "" ] |
|---|
| 2206 |
then |
|---|
| 2207 |
needed_modules_path=/lib/modules/${kernelname} |
|---|
| 2208 |
else |
|---|
| 2209 |
needed_modules_path=/lib/modules/$KERVERRUN |
|---|
| 2210 |
fi |
|---|
| 2211 |
|
|---|
| 2212 |
needed_modules="" |
|---|
| 2213 |
list_of_groovy_mods="$CDROM_MODS $FORCE_MODS" |
|---|
| 2214 |
|
|---|
| 2215 |
if [ -e "$MINDI_TMP/NETFS-DEV" ] ; then |
|---|
| 2216 |
# For PXE boot |
|---|
| 2217 |
list_of_groovy_mods="$list_of_groovy_mods $NET_MODS" |
|---|
| 2218 |
fi |
|---|
| 2219 |
if [ "$PROMPT_MAKE_USB_IMAGE" = "yes" ] && [ "$USBDEVICE" != "" ]; then |
|---|
| 2220 |
list_of_groovy_mods="$list_of_groovy_mods $EXTRA_MODS" |
|---|
| 2221 |
fi |
|---|
| 2222 |
for i in $DENY_MODS; do |
|---|
| 2223 |
LogFile "Removing $i from the list of modules to load" |
|---|
| 2224 |
list_of_groovy_mods=`echo ${list_of_groovy_mods} | tr ' ' '\n' | grep -Ev "^${i}$" | tr '\n' ' '` |
|---|
| 2225 |
done |
|---|
| 2226 |
|
|---|
| 2227 |
[ -e "$needed_modules_path" ] || LogAll "path $needed_modules_path does not exist.\n If you're not using a modular kernel then you're NUTS." |
|---|
| 2228 |
for i in $list_of_groovy_mods ; do |
|---|
| 2229 |
needed_modules="$needed_modules `FindSpecificModuleInPath $needed_modules_path $i`" |
|---|
| 2230 |
done |
|---|
| 2231 |
|
|---|
| 2232 |
for i in $needed_modules ; do |
|---|
| 2233 |
[ -e "$i" ] && s=`du -sk $i | cut -f1` || s="" |
|---|
| 2234 |
LogFile "Adding $i ($s KB) to the rootfs" |
|---|
| 2235 |
echo $i >> $MINDI_TMP/cp.lis |
|---|
| 2236 |
done |
|---|
| 2237 |
|
|---|
| 2238 |
# Also copy modules.dep in case of udev so that normal modprobe works |
|---|
| 2239 |
echo $needed_modules_path/modules.dep >> $MINDI_TMP/cp.lis |
|---|
| 2240 |
|
|---|
| 2241 |
# Manages mountlit.txt |
|---|
| 2242 |
MakeMountlist $MINDI_CACHE/mountlist.txt |
|---|
| 2243 |
CheckMountlist $MINDI_CACHE/mountlist.txt |
|---|
| 2244 |
echo $MINDI_CACHE/mountlist.txt >> $MINDI_TMP/cp.lis |
|---|
| 2245 |
cat $MINDI_CACHE/mountlist.txt >> $LOGFILE |
|---|
| 2246 |
LogFile "-----------------------------------" |
|---|
| 2247 |
|
|---|
| 2248 |
if [ ! -e "/sbin/devfsd" ] ; then |
|---|
| 2249 |
LogFile "Deleting devfsd daemon from ramdisk because /sbin/devfsd not found" |
|---|
| 2250 |
echo ./sbin/devfsd >> $MINDI_TMP/rm.lis |
|---|
| 2251 |
fi |
|---|
| 2252 |
|
|---|
| 2253 |
cd $old_pwd |
|---|
| 2254 |
if [ _"$MONDO_SHARE" != _"" ]; then |
|---|
| 2255 |
MakeMondoConfigFile $MINDI_CACHE/mondorestore.cfg |
|---|
| 2256 |
echo $MINDI_CACHE/mondorestore.cfg >> $MINDI_TMP/cp.lis |
|---|
| 2257 |
fi |
|---|
| 2258 |
echo proc >> $MINDI_TMP/mkdir.lis |
|---|
| 2259 |
|
|---|
| 2260 |
# Copy of files mandatory for ssh to automate mount if sshfs is used |
|---|
| 2261 |
echo .ssh >> $MINDI_TMP/mkdir.lis |
|---|
| 2262 |
|
|---|
| 2263 |
# Now create the container and do the job |
|---|
| 2264 |
tempfile=$MINDI_TMP/temp.rd |
|---|
| 2265 |
mountpoint=$MINDI_TMP/mnt1 |
|---|
| 2266 |
res=0 |
|---|
| 2267 |
echo -en "..." |
|---|
| 2268 |
dd if=/dev/zero of=$tempfile bs=1k count=$ramdisk_size &> /dev/null || Die "Not enough room for temporary ramdisk ($tempfile)" |
|---|
| 2269 |
echo -en "..." |
|---|
| 2270 |
LogFile "Creating ext2 filesystem on $tempfile" |
|---|
| 2271 |
mke2fs -b 1024 -m 0 -i 2048 -F $tempfile >> $LOGFILE 2>> $LOGFILE || Die "Unable to create an ext2 file system on $tempfile" |
|---|
| 2272 |
echo -en "..." |
|---|
| 2273 |
mkdir -p $mountpoint |
|---|
| 2274 |
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." |
|---|
| 2275 |
echo -en "..." |
|---|
| 2276 |
old_pwd=`pwd` |
|---|
| 2277 |
|
|---|
| 2278 |
# First create dirs |
|---|
| 2279 |
for d in `cat $MINDI_TMP/mkdir.lis`; do |
|---|
| 2280 |
mkdir -p $mountpoint/$d 2>&1 >> $LOGFILE |
|---|
| 2281 |
done |
|---|
| 2282 |
|
|---|
| 2283 |
# Then copy files needed |
|---|
| 2284 |
LANGUAGE=C tar cf - `cat $MINDI_TMP/cp.lis` 2> /dev/null | (cd $mountpoint ; tar xf - ) 2>&1 | grep -Ev "tar: Removing.*/\'" >> $LOGFILE |
|---|
| 2285 |
|
|---|
| 2286 |
# Then handle links |
|---|
| 2287 |
if [ -f $MINDI_TMP/ln.lis ]; then |
|---|
| 2288 |
(cd $mountpoint ; bash $MINDI_TMP/ln.lis) 2>&1 >> $LOGFILE |
|---|
| 2289 |
fi |
|---|
| 2290 |
|
|---|
| 2291 |
# Finally remove useless stff |
|---|
| 2292 |
(cd $mountpoint ; rm -f `cat $MINDI_TMP/rm.lis`) 2>&1 >> $LOGFILE |
|---|
| 2293 |
|
|---|
| 2294 |
# Copy of files mandatory for ssh to automate mount if sshfs is used |
|---|
| 2295 |
cp -rp ~root/.ssh/*.pub ~root/.ssh/config ~root/.ssh/known* $mountpoint/.ssh 2> /dev/null |
|---|
| 2296 |
cat > $mountpoint/bin/myssh << EOF |
|---|
| 2297 |
ssh -o StrictHostKeyChecking=no $* |
|---|
| 2298 |
EOF |
|---|
| 2299 |
chmod 755 $mountpoint/bin/myssh |
|---|
| 2300 |
|
|---|
| 2301 |
# Finally integrate what we provide statically as part of mindi |
|---|
| 2302 |
(cd $tgz_dir_fname ; LANGUAGE=C tar cf - . ) | (cd $mountpoint ; tar xf - ) 2>&1 | grep -Ev "tar: Removing.*/\'" >> $LOGFILE |
|---|
| 2303 |
|
|---|
| 2304 |
# Extracting devices |
|---|
| 2305 |
(cd $mountpoint/dev ; tar -zxf dev-entries.tgz) || Die "Cannot untar dev-entries.tgz" |
|---|
| 2306 |
rm -f $mountpoint/dev/dev-entries.tgz |
|---|
| 2307 |
|
|---|
| 2308 |
LogFile "---------------------------" |
|---|
| 2309 |
LogFile "Content of initial ramdisk:" |
|---|
| 2310 |
LogFile "---------------------------" |
|---|
| 2311 |
(cd $mountpoint ; ls -Rla ) >> $LOGFILE |
|---|
| 2312 |
LogFile "---------------------------" |
|---|
| 2313 |
|
|---|
| 2314 |
# Determine what filesystem to use for initrd image |
|---|
| 2315 |
LogFile "Call GetInitrdFilesystemToUse() with parameter ${kernelpath} to get filesystem to use for initrd." |
|---|
| 2316 |
gvFileSystem=`GetInitrdFilesystemToUse ${kernelpath}` |
|---|
| 2317 |
[ -z gvFileSystem ] && Die "GetFilesystemToUse() failed. Terminating." |
|---|
| 2318 |
if [ "$gvFileSystem" = "ext2fs" ] || [ "$gvFileSystem" = "ext3fs" ]; then |
|---|
| 2319 |
# say what will be used |
|---|
| 2320 |
LogFile "Creating an $gvFileSystem initrd image..." |
|---|
| 2321 |
# kernel expects linuxrc in ext2 filesystem |
|---|
| 2322 |
( cd $mountpoint && ln -sf sbin/init linuxrc ) |
|---|
| 2323 |
# unmount loop filesystem and create image file using the standard approach |
|---|
| 2324 |
umount $mountpoint || Die "Cannot unmount $tempfile" |
|---|
| 2325 |
dd if=$tempfile bs=1k 2> /dev/null > ${rdz_fname}.tmp 2> /dev/null |
|---|
| 2326 |
bs=`tune2fs -l ${rdz_fname}.tmp | grep -E '^Block size:' | cut -d: -f2 | sed 's/^ *//'` |
|---|
| 2327 |
MINDI_ADDITIONAL_BOOT_PARAMS="$MINDI_ADDITIONAL_BOOT_PARAMS ramdisk_blocksize=$bs" |
|---|
| 2328 |
gzip -c9 ${rdz_fname}.tmp > $rdz_fname |
|---|
| 2329 |
rm -f ${rdz_fname}.tmp |
|---|
| 2330 |
# log that we are done |
|---|
| 2331 |
LogFile "...done." |
|---|
| 2332 |
elif [ "$gvFileSystem" = "initramfs" ]; then |
|---|
| 2333 |
# say what will be used |
|---|
| 2334 |
LogFile "Creating a gzip'ed cpio (AKA initramfs) initrd image..." |
|---|
| 2335 |
# make sure that cpio is there |
|---|
| 2336 |
which cpio &> /dev/null; [ $? -eq 0 ] || Die "cpio not found. Please install package cpio and try again." |
|---|
| 2337 |
# go into filesystem |
|---|
| 2338 |
cd $mountpoint |
|---|
| 2339 |
# kernel expects init in cpio filesystem |
|---|
| 2340 |
ln -sf sbin/init init |
|---|
| 2341 |
# create cpio image file and unmount loop filesystem |
|---|
| 2342 |
find . -print | cpio -o -H newc | gzip -9 > $rdz_fname 2> /dev/null |
|---|
| 2343 |
cd $old_pwd |
|---|
| 2344 |
umount $mountpoint || Die "Cannot unmount $tempfile" |
|---|
| 2345 |
# log that we are done |
|---|
| 2346 |
LogFile "...done." |
|---|
| 2347 |
else |
|---|
| 2348 |
Die "Filesystem $gvFileSystem not supported for initrd image. Terminating." |
|---|
| 2349 |
fi |
|---|
| 2350 |
ls -al $MINDI_TMP/initrd.img > /tmp/initrd.log |
|---|
| 2351 |
|
|---|
| 2352 |
if [ "$res" -eq "0" ] ; then |
|---|
| 2353 |
echo -en "..." |
|---|
| 2354 |
else |
|---|
| 2355 |
echo -en "\rMade an rdz WITH ERRORS. \n" |
|---|
| 2356 |
fi |
|---|
| 2357 |
return 0 |
|---|
| 2358 |
} |
|---|
| 2359 |
|
|---|
| 2360 |
|
|---|
| 2361 |
############################################################################## |
|---|
| 2362 |
#----------------------------------- Main -----------------------------------# |
|---|
| 2363 |
############################################################################## |
|---|
| 2364 |
|
|---|
| 2365 |
# Now we can create what we need |
|---|
| 2366 |
mkdir -p $MINDI_TMP |
|---|
| 2367 |
|
|---|
| 2368 |
# Purge from potential old run |
|---|
| 2369 |
if [ _"$MINDI_CACHE" = _"" ]; then |
|---|
| 2370 |
Die "MINDI_CACHE undefined" |
|---|
| 2371 |
fi |
|---|
| 2372 |
|
|---|
| 2373 |
if [ "$1" = "--printvar" ] ; then |
|---|
| 2374 |
shift |
|---|
| 2375 |
if [ _"$1" != _"" ] ; then |
|---|
| 2376 |
set | grep -Ew "^$1" | cut -d= -f2 |
|---|
| 2377 |
fi |
|---|
| 2378 |
exit 0 |
|---|
| 2379 |
fi |
|---|
| 2380 |
|
|---|
| 2381 |
> $LOGFILE |
|---|
| 2382 |
LogFile "mindi v$MINDI_VERSION" |
|---|
| 2383 |
LogFile "$ARCH architecture detected" |
|---|
| 2384 |
LogFile "mindi called with the following arguments:" |
|---|
| 2385 |
LogFile "$*" |
|---|
| 2386 |
LogFile "Start date : `date`" |
|---|
| 2387 |
LogFile "-----------------------------" |
|---|
| 2388 |
|
|---|
| 2389 |
[ -e "/sbin/mkdosfs" ] && [ ! -e "/sbin/mkfs.vfat" ] && ln -sf /sbin/mkdosfs /sbin/mkfs.vfat |
|---|
| 2390 |
|
|---|
| 2391 |
# Log some capital variables |
|---|
| 2392 |
[ "$MINDI_PREFIX" = "XXX" ] && Die "Mindi has not been installed correctly." |
|---|
| 2393 |
LogFile "MONDO_SHARE = $MONDO_SHARE" |
|---|
| 2394 |
LogFile "MINDI_DATA = $MINDI_DATA" |
|---|
| 2395 |
LogFile "MINDI_SBIN = $MINDI_SBIN" |
|---|
| 2396 |
[ "$MINDI_CONF" = "YYY" ] && Die "Mindi has not been installed correctly." |
|---|
| 2397 |
LogFile "MINDI_CONF = $MINDI_CONF" |
|---|
| 2398 |
if [ -f $MINDI_CONFIG ]; then |
|---|
| 2399 |
LogFile "-----------------------------" |
|---|
| 2400 |
LogFile " Mindi configuration file " |
|---|
| 2401 |
LogFile "-----------------------------" |
|---|
| 2402 |
grep -Ev '^#' $MINDI_CONFIG >> $LOGFILE |
|---|
| 2403 |
LogFile "-----------------------------" |
|---|
| 2404 |
fi |
|---|
| 2405 |
|
|---|
| 2406 |
|
|---|
| 2407 |
trap AbortHere SIGTERM SIGHUP SIGQUIT SIGKILL SIGABRT SIGINT |
|---|
| 2408 |
|
|---|
| 2409 |
# Sanity checks |
|---|
| 2410 |
which which > /dev/null 2> /dev/null || Die "Please install 'which'." |
|---|
| 2411 |
which strings > /dev/null 2> /dev/null || Die "Please install binutils and libbinutils; you have no 'strings' executable." |
|---|
| 2412 |
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." |
|---|
| 2413 |
which gawk > /dev/null 2> /dev/null && AWK=`which gawk 2>/dev/null` || AWK="`which awk 2>/dev/null`" |
|---|
| 2414 |
if which awk &> /dev/null ; then |
|---|
| 2415 |
if ! which gawk &> /dev/null ; then |
|---|
| 2416 |
LogAll "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" |
|---|
| 2417 |
fi |
|---|
| 2418 |
fi |
|---|
| 2419 |
which mke2fs > /dev/null 2> /dev/null || Die "Please put mke2fs in system path" |
|---|
| 2420 |
[ ! -e "$FDISK" ] && Die "Cannot find $FDISK" |
|---|
| 2421 |
|
|---|
| 2422 |
[ "`echo $KERVERRUN | 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" |
|---|
| 2423 |
|
|---|
| 2424 |
# Update the PATH variable if incomplete |
|---|
| 2425 |
if [ -e "/sbin/mkfs" ] && ! which mkfs &> /dev/null ; then |
|---|
| 2426 |
PATH=$PATH:/sbin:/usr/sbin |
|---|
| 2427 |
export PATH |
|---|
| 2428 |
LogFile "Your PATH did not include /sbin or /usr/sbin. I have fixed that, temporarily." |
|---|
| 2429 |
LogFile "However, you may wish to ask your vendor to provide a permanent fix..." |
|---|
| 2430 |
LogFile " Or you might like to call 'su -' instead of 'su', for example." |
|---|
| 2431 |
fi |
|---|
| 2432 |
|
|---|
| 2433 |
if ! which mkfs.vfat 1> /dev/null 2> /dev/null ; then |
|---|
| 2434 |
Die "mkfs.vfat missing from your filesystem - please install your dosfstools RPM or DEB package. Perhaps your PATH environmental variable is broken, too?" |
|---|
| 2435 |
fi |
|---|
| 2436 |
|
|---|
| 2437 |
### BERLIOS |
|---|
| 2438 |
### Fix as it's not mandatory on ia64 |
|---|
| 2439 |
if [ "$ARCH" = "ia64" ] ; then |
|---|
| 2440 |
if which elilo &> /dev/null ; then |
|---|
| 2441 |
LILO_EXE=elilo |
|---|
| 2442 |
else |
|---|
| 2443 |
LILO_EXE=`which false 2> /dev/null` |
|---|
| 2444 |
fi |
|---|
| 2445 |
else |
|---|
| 2446 |
FindIsolinuxBinary |
|---|
| 2447 |
fi |
|---|
| 2448 |
trap "Aborted" SIGTERM |
|---|
| 2449 |
DONE="\r\t\t\t\t\t\t\t\tDone. " |
|---|
| 2450 |
kernelpath="" |
|---|
| 2451 |
MONDO_ROOT=/var/cache/mondo |
|---|
| 2452 |
mkdir -p $MONDO_ROOT |
|---|
| 2453 |
|
|---|
| 2454 |
if [ -d "/proc/lvm" ]; then |
|---|
| 2455 |
# LVM v1 |
|---|
| 2456 |
LVMCMD="" |
|---|
| 2457 |
LVM="v1" |
|---|
| 2458 |
elif [ -d "/dev/mapper" ]; then |
|---|
| 2459 |
# LVM v2 |
|---|
| 2460 |
LVMCMD="lvm" |
|---|
| 2461 |
LVM="v2" |
|---|
| 2462 |
else |
|---|
| 2463 |
LVM="false" |
|---|
| 2464 |
fi |
|---|
| 2465 |
|
|---|
| 2466 |
if [ -e "/proc/cmdline" ]; then |
|---|
| 2467 |
CMDLINE="/proc/cmdline" |
|---|
| 2468 |
elif [ -e "/tmp/cmdline" ]; then |
|---|
| 2469 |
CMDLINE="/tmp/cmdline" |
|---|
| 2470 |
else |
|---|
| 2471 |
CMDLINE="/dev/null" |
|---|
| 2472 |
fi |
|---|
| 2473 |
|
|---|
| 2474 |
LogFile "LVM set to $LVM" |
|---|
| 2475 |
LogFile "----------" |
|---|
| 2476 |
LogFile "mount result:" |
|---|
| 2477 |
LogFile "-------------" |
|---|
| 2478 |
mount >> $LOGFILE |
|---|
| 2479 |
LogFile "-------------" |
|---|
| 2480 |
if [ -e /etc/raidtab ]; then |
|---|
| 2481 |
LogFile "-------------" |
|---|
| 2482 |
LogFile "/etc/raidtab content:" |
|---|
| 2483 |
LogFile "-------------" |
|---|
| 2484 |
cat /etc/raidtab >> $LOGFILE |
|---|
| 2485 |
fi |
|---|
| 2486 |
LogFile "-------------" |
|---|
| 2487 |
LogFile "cat $CMDLINE" |
|---|
| 2488 |
LogFile "-------------" |
|---|
| 2489 |
cat $CMDLINE >> $LOGFILE |
|---|
| 2490 |
LogFile "-------------" |
|---|
| 2491 |
LogFile "cat /proc/swaps:" |
|---|
| 2492 |
LogFile "-------------" |
|---|
| 2493 |
cat /proc/swaps >> $LOGFILE |
|---|
| 2494 |
LogFile "-------------" |
|---|
| 2495 |
LogFile "cat /proc/partitions:" |
|---|
| 2496 |
LogFile "-------------" |
|---|
| 2497 |
cat /proc/partitions >> $LOGFILE |
|---|
| 2498 |
LogFile "-------------" |
|---|
| 2499 |
LogFile "cat /proc/filesystems:" |
|---|
| 2500 |
LogFile "-------------" |
|---|
| 2501 |
cat /proc/filesystems >> $LOGFILE |
|---|
| 2502 |
LogFile "-------------" |
|---|
| 2503 |
LogFile "lsmod result:" |
|---|
| 2504 |
LogFile "-------------" |
|---|
| 2505 |
lsmod >> $LOGFILE |
|---|
| 2506 |
MODULES="`cat /proc/modules | $AWK '{print $1}'`" |
|---|
| 2507 |
if [ -x /usr/sbin/esxcfg-module ]; then |
|---|
| 2508 |
LogFile "-------------" |
|---|
| 2509 |
LogFile "VMWare ESX server detected - Enabling dedicated support" |
|---|
| 2510 |
LogFile "-------------" |
|---|
| 2511 |
LogFile "VMWare modules" |
|---|
| 2512 |
LogFile "-------------" |
|---|
| 2513 |
/usr/sbin/esxcfg-module -l >> $LOGFILE |
|---|
| 2514 |
MODULES="$MODULES `/usr/sbin/esxcfg-module -l | $AWK '{print $1}'`" |
|---|
| 2515 |
fi |
|---|
| 2516 |
LogFile "FORCE_MODS:" |
|---|
| 2517 |
LogFile "-------------" |
|---|
| 2518 |
LogFile $FORCE_MODS |
|---|
| 2519 |
LogFile "-------------" |
|---|
| 2520 |
LogFile "DENY_MODS:" |
|---|
| 2521 |
LogFile "-------------" |
|---|
| 2522 |
LogFile $DENY_MODS |
|---|
| 2523 |
LogFile "-------------" |
|---|
| 2524 |
LogFile "df result:" |
|---|
| 2525 |
LogFile "----------" |
|---|
| 2526 |
df -T >> $LOGFILE |
|---|
| 2527 |
LogFile "-------------" |
|---|
| 2528 |
LogFile "Liste of extra modules is:" |
|---|
| 2529 |
LogFile "$EXTRA_MODS" |
|---|
| 2530 |
LogFile "-------------" |
|---|
| 2531 |
|
|---|
| 2532 |
# Compute libata version |
|---|
| 2533 |
laver=`modinfo libata | grep -Ei '^Version:' | cut -d: -f2 | cut -d. -f1 | sed 's/ *//g' 2> /dev/null` |
|---|
| 2534 |
# If libata v2 is used then remove ide-generic as it will perturbate boot |
|---|
| 2535 |
if [ "`echo $MODULES | grep libata`" ]; then |
|---|
| 2536 |
if [ "$laver" = "2" ]; then |
|---|
| 2537 |
DENY_MODS="$DENY_MODS ide-generic" |
|---|
| 2538 |
LogFile "ide-generic removed from module list as your system uses libata v2+" |
|---|
| 2539 |
LogFile "-------------" |
|---|
| 2540 |
fi |
|---|
| 2541 |
fi |
|---|
| 2542 |
|
|---|
| 2543 |
# Check for ISO_CMD command |
|---|
| 2544 |
if [ ! -x $ISO_CMD ]; then |
|---|
| 2545 |
echo "NOTE: No CD image (ISO file) utility found" >> $LOGFILE |
|---|
| 2546 |
fi |
|---|
| 2547 |
|
|---|
| 2548 |
FLOPPY_WAS_MOUNTED="" |
|---|
| 2549 |
for mtpt in /media/floppy /mnt/floppy /floppy ; do |
|---|
| 2550 |
if mount | grep -w $mtpt &> /dev/null ; then |
|---|
| 2551 |
FLOPPY_WAS_MOUNTED="$FLOPPY_WAS_MOUNTED $mtpt" |
|---|
| 2552 |
umount $mtpt |
|---|
| 2553 |
fi |
|---|
| 2554 |
done |
|---|
| 2555 |
|
|---|
| 2556 |
# |
|---|
| 2557 |
# If we have a USB device we need to store info |
|---|
| 2558 |
# and remove it from the parameters line |
|---|
| 2559 |
# |
|---|
| 2560 |
if [ "$#" -ne "0" ] ; then |
|---|
| 2561 |
if [ "$1" = "--usb" ] ; then |
|---|
| 2562 |
shift |
|---|
| 2563 |
USBDEVICE=$1 |
|---|
| 2564 |
if [ _"$USBDEVICE" = _"" ]; then |
|---|
| 2565 |
Die "No USB device specified" |
|---|
| 2566 |
fi |
|---|
| 2567 |
shift |
|---|
| 2568 |
fi |
|---|
| 2569 |
fi |
|---|
| 2570 |
|
|---|
| 2571 |
if [ "$#" -ne "0" ] ; then |
|---|
| 2572 |
if [ "$1" = "--findkernel" ] ; then |
|---|
| 2573 |
res=`TryToFindKernelPath` |
|---|
| 2574 |
# Avoids logfile content for mondo |
|---|
| 2575 |
export MONDO_SHARE="" |
|---|
| 2576 |
if [ "$res" = "" ] ; then |
|---|
| 2577 |
MindiExit -1 |
|---|
| 2578 |
else |
|---|
| 2579 |
echo "$res" |
|---|
| 2580 |
MindiExit 0 |
|---|
| 2581 |
fi |
|---|
| 2582 |
elif [ "$1" = "--locatedeps" ] ; then |
|---|
| 2583 |
[ ! "$2" ] && Die "Please specify the binary to look at" |
|---|
| 2584 |
LocateDeps $* |
|---|
| 2585 |
# Avoids logfile content for mondo |
|---|
| 2586 |
export MONDO_SHARE="" |
|---|
| 2587 |
MindiExit $? |
|---|
| 2588 |
elif [ "$1" = "--readalllink" ] ; then |
|---|
| 2589 |
[ ! "$2" ] && Die "Please specify the binary to look at" |
|---|
| 2590 |
shift |
|---|
| 2591 |
ReadAllLink $* |
|---|
| 2592 |
# Avoids logfile content for mondo |
|---|
| 2593 |
export MONDO_SHARE="" |
|---|
| 2594 |
MindiExit $? |
|---|
| 2595 |
elif [ "$1" = "--makemountlist" ] ; then |
|---|
| 2596 |
[ ! "$2" ] && Die "Please specify the output file" |
|---|
| 2597 |
MakeMountlist $2 |
|---|
| 2598 |
CheckMountlist $2 |
|---|
| 2599 |
# Avoids logfile content for mondo |
|---|
| 2600 |
export MONDO_SHARE="" |
|---|
| 2601 |
MindiExit $? |
|---|
| 2602 |
elif [ "$1" = "-V" ] || [ "$1" = "-v" ] || [ "$1" = "--version" ] || [ "$1" = "-version" ] ; then |
|---|
| 2603 |
echo "Mindi v$MINDI_VERSION" |
|---|
| 2604 |
# Avoids logfile content for mondo |
|---|
| 2605 |
export MONDO_SHARE="" |
|---|
| 2606 |
MindiExit 0 |
|---|
| 2607 |
elif [ "$#" -ge "9" ] && [ "$1" = "--custom" ] ; then |
|---|
| 2608 |
MONDO_TMP=$2 |
|---|
| 2609 |
# Change MINDI_TMP for the one provided by mondo |
|---|
| 2610 |
# So that it can get back the built files |
|---|
| 2611 |
if [ _"$MONDO_TMP" = _"" ]; then |
|---|
| 2612 |
Die "MONDO_TMP is empty, aborting" |
|---|
| 2613 |
fi |
|---|
| 2614 |
if [ _"$MONDO_TMP" = _"/" ]; then |
|---|
| 2615 |
Die "MONDO_TMP is /, aborting" |
|---|
| 2616 |
fi |
|---|
| 2617 |
mv $MINDI_TMP/* $MINDI_TMP/.??* $MONDO_TMP 2>> $LOGFILE |
|---|
| 2618 |
rmdir $MINDI_TMP |
|---|
| 2619 |
export MINDI_TMP=$MONDO_TMP |
|---|
| 2620 |
mkdir -p $MINDI_TMP |
|---|
| 2621 |
|
|---|
| 2622 |
# This is the scratch dir in mondo - subdir images |
|---|
| 2623 |
MINDI_CACHE=$3 |
|---|
| 2624 |
|
|---|
| 2625 |
kernelpath=$4; [ "$kernelpath" = "(null)" ] && kernelpath="" |
|---|
| 2626 |
### |
|---|
| 2627 |
### Sq-Modification... |
|---|
| 2628 |
### Attempt to locate kernel specific module path |
|---|
| 2629 |
### if module path is found then use it other wise use uname -r to set it... |
|---|
| 2630 |
### |
|---|
| 2631 |
kernelname=`echo $kernelpath | cut -d'-' -f2-` |
|---|
| 2632 |
LogAll "kernelname = $kernelname" |
|---|
| 2633 |
LogAll "kernelpath = $kernelpath" |
|---|
| 2634 |
if [ ! -d "/lib/modules/$kernelname" ] |
|---|
| 2635 |
then |
|---|
| 2636 |
LogAll "Module path for ${kernelpath} not found..." |
|---|
| 2637 |
LogAll "using running kernel\'s modules." |
|---|
| 2638 |
kernelname=$KERVERRUN |
|---|
| 2639 |
else |
|---|
| 2640 |
LogAll "Using modules for kernel: ${kernelname}" |
|---|
| 2641 |
fi |
|---|
| 2642 |
### |
|---|
| 2643 |
### end of Sq-Modification |
|---|
| 2644 |
### |
|---|
| 2645 |
TAPEDEV=$5 |
|---|
| 2646 |
TAPESIZE=$6 |
|---|
| 2647 |
FILES_IN_FILELIST=$7 |
|---|
| 2648 |
USE_LZO=$8 |
|---|
| 2649 |
CDRECOVERY=$9 |
|---|
| 2650 |
if [ "${10}" = "(null)" ] || [ "${10}" = "" ] ; then |
|---|
| 2651 |
IMAGE_DEVS="" |
|---|
| 2652 |
else |
|---|
| 2653 |
IMAGE_DEVS="`echo "${10}" | tr '|' ' '`" |
|---|
| 2654 |
fi |
|---|
| 2655 |
if [ "${11}" ] ; then |
|---|
| 2656 |
LILO_OPTIONS="" |
|---|
| 2657 |
# LogAll "LILO will use conservative settings, to be compatible with older BIOSes." |
|---|
| 2658 |
fi |
|---|
| 2659 |
ESTIMATED_TOTAL_NOOF_SLICES=${12} |
|---|
| 2660 |
export MINDI_EXCLUDE_DEVS="${13}" |
|---|
| 2661 |
USE_COMP="${14}" |
|---|
| 2662 |
USE_LILO="${15}" |
|---|
| 2663 |
USE_STAR="${16}" |
|---|
| 2664 |
INTERNAL_TAPE_BLOCK_SIZE="${17}" |
|---|
| 2665 |
DIFFERENTIAL="${18}" |
|---|
| 2666 |
USE_GZIP="${19}" |
|---|
| 2667 |
USE_LZMA="${20}" |
|---|
| 2668 |
[ "$USE_COMP" = "" ] && USE_COMP=yes |
|---|
| 2669 |
[ "$USE_GZIP" = "" ] && USE_GZIP=no |
|---|
| 2670 |
[ "$USE_LZMA" = "" ] && USE_LZMA=no |
|---|
| 2671 |
[ "$TAPEDEV" ] && LogAll "This is a tape-based backup. Fine." |
|---|
| 2672 |
[ "$kernelpath" = "" ] && kernelpath=`TryToFindKernelPath` |
|---|
| 2673 |
kernelname=`echo $kernelpath | cut -d'-' -f2-` |
|---|
| 2674 |
if [ ! -d "/lib/modules/$kernelname" ] |
|---|
| 2675 |
then |
|---|
| 2676 |
LogAll "Module path for ${kernelpath} not found..." |
|---|
| 2677 |
LogAll "using running kernel\'s modules." |
|---|
| 2678 |
kernelname=$KERVERRUN |
|---|
| 2679 |
else |
|---|
| 2680 |
LogAll "Using modules for kernel: ${kernelname}" |
|---|
| 2681 |
fi |
|---|
| 2682 |
# MONDO_ROOT is the real scratchdir |
|---|
| 2683 |
MONDO_ROOT=`echo $MINDI_CACHE | sed 's/\(.*\)\/.*/\1/'` |
|---|
| 2684 |
if [ _"$MONDO_ROOT" != _"" ]; then |
|---|
| 2685 |
mkdir -p $MONDO_ROOT |
|---|
| 2686 |
else |
|---|
| 2687 |
Die "MONDO_ROOT is undefined" |
|---|
| 2688 |
fi |
|---|
| 2689 |
else |
|---|
| 2690 |
LogScreen "Syntax: mindi (--custom ....)" |
|---|
| 2691 |
MindiExit -1 |
|---|
| 2692 |
fi |
|---|
| 2693 |
fi |
|---|
| 2694 |
|
|---|
| 2695 |
if [ _"$MINDI_CACHE" != _"" ]; then |
|---|
| 2696 |
rm -rf $MINDI_CACHE/* 2> /dev/null |
|---|
| 2697 |
mkdir -p $MINDI_CACHE |
|---|
| 2698 |
fi |
|---|
| 2699 |
|
|---|
| 2700 |
[ "$CDRECOVERY" = "yes" ] || CDRECOVERY=no |
|---|
| 2701 |
|
|---|
| 2702 |
LogAll "Mindi Linux mini-distro generator v$MINDI_VERSION" |
|---|
| 2703 |
LogAll "Latest Mindi is available from http://www.mondorescue.org" |
|---|
| 2704 |
LogAll "------------------------------------------------------------------------------" |
|---|
| 2705 |
LogFile "DIFFERENTIAL = $DIFFERENTIAL" |
|---|
| 2706 |
LogFile "INTERNAL TAPE BLOCK SIZE = $INTERNAL_TAPE_BLOCK_SIZE" |
|---|
| 2707 |
|
|---|
| 2708 |
if [ "$PROMPT_MAKE_USB_IMAGE" = "yes" ] && [ "$USBDEVICE" != "" ]; then |
|---|
| 2709 |
LogAll "Including the generation of a Bootable USB device on $USBDEVICE" |
|---|
| 2710 |
fi |
|---|
| 2711 |
|
|---|
| 2712 |
if [ "$kernelpath" = "" ] ; then |
|---|
| 2713 |
[ _"$MONDO_SHARE" != _"" ] && Die "Please use -k <path> to specify kernel." |
|---|
| 2714 |
echo -en "Do you want to use your own kernel to build the boot disk ([y]/n) ?" |
|---|
| 2715 |
read ch |
|---|
| 2716 |
if [ "$ch" != "n" ] && [ "$ch" != "N" ] ; then |
|---|
| 2717 |
USE_OWN_KERNEL="yes" |
|---|
| 2718 |
else |
|---|
| 2719 |
USE_OWN_KERNEL="no" |
|---|
| 2720 |
fi |
|---|
| 2721 |
if [ "$USE_OWN_KERNEL" = "yes" ]; then |
|---|
| 2722 |
kernelpath=`TryToFindKernelPath` |
|---|
| 2723 |
if [ "$kernelpath" = "" ] ; then |
|---|
| 2724 |
echo -n "Please enter kernel path : " |
|---|
| 2725 |
read kernelpath |
|---|
| 2726 |
fi |
|---|
| 2727 |
fi |
|---|
| 2728 |
fi |
|---|
| 2729 |
LogFile "Mindi's temp dir=$MINDI_TMP" |
|---|
| 2730 |
LogFile "Mindi's output dir=$MINDI_CACHE" |
|---|
| 2731 |
[ "$(($RANDOM%64))" -eq "0" ] && LogAll "Dude, I've looked inside your computer and it's really dusty..." |
|---|
| 2732 |
|
|---|
| 2733 |
PrepareDataDiskImages |
|---|
| 2734 |
|
|---|
| 2735 |
export ramdisk_size=$(($size_of_all_tools+$EXTRA_SPACE)) |
|---|
| 2736 |
|
|---|
| 2737 |
LogFile "Ramdisk will be $ramdisk_size KB" |
|---|
| 2738 |
PrepareBootDiskImage $kernelpath || Die "Failed to create $ramdisk_size MB disk image." |
|---|
| 2739 |
|
|---|
| 2740 |
[ -e "$MINDI_DATA/memtest.img" ] && BOOT_MEDIA_MESSAGE="$BOOT_MEDIA_MESSAGE\n\ |
|---|
| 2741 |
...Or type 'memtest' to test your PC's RAM thoroughly.\n" |
|---|
| 2742 |
|
|---|
| 2743 |
if [ _"$MONDO_SHARE" = _"" ]; then |
|---|
| 2744 |
ListImagesForUser |
|---|
| 2745 |
OfferToMakeBootableISO |
|---|
| 2746 |
if [ "$PROMPT_MAKE_USB_IMAGE" = "yes" ]; then |
|---|
| 2747 |
OfferToMakeBootableUSB |
|---|
| 2748 |
fi |
|---|
| 2749 |
LogAll "Finished." |
|---|
| 2750 |
elif [ "$TAPEDEV" ] ; then |
|---|
| 2751 |
if [ "$ARCH" != "ia64" ] ; then |
|---|
| 2752 |
# We need to keep the img file as boot file for ia64 platform |
|---|
| 2753 |
rm -f $MINDI_CACHE/{*img,*iso} |
|---|
| 2754 |
else |
|---|
| 2755 |
rm -f $MINDI_CACHE/*iso |
|---|
| 2756 |
fi |
|---|
| 2757 |
if [ "$PROMPT_MAKE_USB_IMAGE" = "yes" ] && [ "$USBDEVICE" != "" ]; then |
|---|
| 2758 |
OfferToMakeBootableUSB |
|---|
| 2759 |
fi |
|---|
| 2760 |
OfferToMakeBootableISO |
|---|
| 2761 |
if [ -e "$MINDI_CACHE/all.tar.gz" ] ; then |
|---|
| 2762 |
cp -f $MINDI_CACHE/all.tar.gz $MINDI_TMP/ 2>> $LOGFILE |
|---|
| 2763 |
else |
|---|
| 2764 |
Die "Cannot find all.tar.gz, to be written to tape" |
|---|
| 2765 |
fi |
|---|
| 2766 |
elif [ "$PROMPT_MAKE_USB_IMAGE" = "yes" ] && [ "$USBDEVICE" != "" ]; then |
|---|
| 2767 |
OfferToMakeBootableUSB |
|---|
| 2768 |
else |
|---|
| 2769 |
OfferToMakeBootableISO |
|---|
| 2770 |
fi |
|---|
| 2771 |
# cleanup |
|---|
| 2772 |
LogAll "$FRIENDLY_OUTSTRING" |
|---|
| 2773 |
for mtpt in $FLOPPY_WAS_MOUNTED ; do |
|---|
| 2774 |
mount $mtpt |
|---|
| 2775 |
done |
|---|
| 2776 |
MindiExit 0 |
|---|