Subversion Repositories livecd

Rev

Rev 22 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
15 beyerle@PS 1
#!/bin/bash
2
#
3
###############################################################
4
#
5
# Installes the LiveCD on local harddisk
6
# 
7
# Boot LiveCD and run this script as root
8
#
9
# Urs Beyerle, PSI
10
#
11
###############################################################
12
 
13
 
14
###############################################################
15
# Definitions
16
###############################################################
17
 
18
# files which should be restored from .ori files
19
FILES_RESTORE="/etc/init.d/netfs \
20
           /etc/init.d/autofs \
21
           /etc/init.d/halt \
22
           /etc/init.d/network
23
           /etc/init.d/functions \
24
           /etc/rc.d/rc.sysinit \
25
           /etc/sysconfig/afs \
26
           /etc/motd \
27
           /etc/redhat-release \
16 beyerle@PS 28
	   /etc/rc.d/rc.local \
15 beyerle@PS 29
           /etc/rc.d/rc.sysinit"
30
 
16 beyerle@PS 31
LIVECD_INIT_SCRIPTS="runfirst \
32
                    runveryfirst \
33
                    runlast \
34
                    kudzu-auto"
15 beyerle@PS 35
 
36
# Main directories which should be not be copied
16 beyerle@PS 37
DIR_NOT_COPY="/proc \
38
              /dev \
39
              /livecd \
40
              /boot \
41
              /afs \
42
              /sys \
43
              /mnt \
44
              /media"
15 beyerle@PS 45
 
46
# Mount point of the new SL system
47
NEW=/mnt/harddisk
48
 
21 beyerle@PS 49
# Name of the script
15 beyerle@PS 50
SCRIPTNAME=$( basename $0 )
51
 
16 beyerle@PS 52
 
53
 
21 beyerle@PS 54
 
15 beyerle@PS 55
###############################################################
56
# Functions
57
###############################################################
58
 
59
function usage() {
60
 
61
   ## Usage
62
   # ----------------------------------------------------------
63
 
64
   cat <<EOF
21 beyerle@PS 65
 
22 beyerle@PS 66
  $SCRIPTNAME [OPTIONS] -mbr=[DEVICE] [PARTITION]
15 beyerle@PS 67
 
21 beyerle@PS 68
    Installes LiveCD on PARTITION and the boot loader grub
69
    into the Master Boot Record (MBR) of DEVICE.
15 beyerle@PS 70
 
21 beyerle@PS 71
  OPTIONS:
15 beyerle@PS 72
 
21 beyerle@PS 73
    -h   --help         print this screen
22 beyerle@PS 74
    -swap=[partition]   use [partition] as swap
75
    -win=[partition]    your active Windows partition. If not given, 
76
                        $SCRIPTNAME tries to find it
18 beyerle@PS 77
    -nogrub             do not install grub (leave MBR untouched) 
21 beyerle@PS 78
    -floppy             needed, if grub should be installed on floppy
15 beyerle@PS 79
    -y                  answer all questions with yes
80
 
21 beyerle@PS 81
 
82
  Example:
83
 
22 beyerle@PS 84
  $SCRIPTNAME -swap=/dev/sda3 -mbr=/dev/sda /dev/sda2
21 beyerle@PS 85
 
86
    Will install LiveCD on /dev/sda2 (= second partition on 
87
    first SATA disk). All data on /dev/sda2 will be deleted.
88
    /dev/sda3 has to be a Linux Swap partion. GRUB will be 
89
    installed in the MBR of /dev/sda (= first SATA disk).
90
 
15 beyerle@PS 91
EOF
92
}
93
 
94
 
21 beyerle@PS 95
function exit_now() {
96
 
97
    local exitcode=$1
98
    umount $INSTALL_PART 2>/dev/null
99
    exit $exitcode
100
}
101
 
102
 
103
 
15 beyerle@PS 104
###############################################################
105
# Main
106
###############################################################
107
 
16 beyerle@PS 108
### are we root?
109
### -----------------------------------------------------------
15 beyerle@PS 110
if [ "$( whoami )" != "root" ]; then
22 beyerle@PS 111
    echo "Please run this script as roo/home/l_beyerle/svn-livecd/livecd/trunkt."
21 beyerle@PS 112
    exit_now 1
15 beyerle@PS 113
fi
114
 
16 beyerle@PS 115
 
15 beyerle@PS 116
### read options from command-line
16 beyerle@PS 117
### -----------------------------------------------------------
15 beyerle@PS 118
while [ $# -gt 0 ]; do
119
 
120
    case "$1" in
121
       -h)
21 beyerle@PS 122
            usage; exit_now;;
22 beyerle@PS 123
 
21 beyerle@PS 124
       --help)
125
            usage; exit_now;;
22 beyerle@PS 126
 
24 beyerle@PS 127
       -swap*)
22 beyerle@PS 128
           if echo $1 | grep -q '=' ; then
129
	       SWAP_PART=$( echo $1 | sed 's/^-swap=//' )
130
	   else
131
	       shift
24 beyerle@PS 132
               SWAP_PART=$1
22 beyerle@PS 133
	   fi
134
	   shift; continue;;
135
 
24 beyerle@PS 136
       -mbr*)
22 beyerle@PS 137
           if echo $1 | grep -q '=' ; then
138
	       MBR_DEV=$( echo $1 | sed 's/^-mbr=//' )
139
	   else
140
	       shift
24 beyerle@PS 141
               MBR_DEV=$1
22 beyerle@PS 142
	   fi
143
	   shift; continue;;
144
 
24 beyerle@PS 145
       -win*)
22 beyerle@PS 146
           if echo $1 | grep -q '=' ; then
147
	       WIN_PART=$( echo $1 | sed 's/^-win=//' )
148
	   else
149
	       shift
24 beyerle@PS 150
               WIN_PART=$1
22 beyerle@PS 151
	   fi
152
	   shift; continue;;
153
 
16 beyerle@PS 154
       -nogrub)
155
            NOGRUB=$1; shift; continue;;
22 beyerle@PS 156
 
18 beyerle@PS 157
       -floppy)
158
            FLOPPY=$1; shift; continue;;
22 beyerle@PS 159
 
15 beyerle@PS 160
       -y)
161
            YES=$1; shift; continue;;
162
 
163
       *)
164
            INSTALL_PART=$1; break;;
165
    esac
166
 
167
done
168
echo
169
 
16 beyerle@PS 170
 
22 beyerle@PS 171
### test if $INSTALL_PART is defined and exists
172
### -----------------------------------------------------------
173
if [ ! $INSTALL_PART ]; then
174
    echo "No partition defined for installation"
175
    echo "Please see '$SCRIPTNAME -h'."; echo
176
    exit_now 1
177
fi
178
 
179
 
15 beyerle@PS 180
### test if MBR_DEV is given
16 beyerle@PS 181
### -----------------------------------------------------------
182
if [ ! $NOGRUB ]; then
183
    if [ ! $MBR_DEV ]; then
18 beyerle@PS 184
	echo "No MBR device defined."
16 beyerle@PS 185
	echo "Please see '$SCRIPTNAME -h'."; echo
21 beyerle@PS 186
	exit_now 1
16 beyerle@PS 187
    fi
15 beyerle@PS 188
fi
189
 
16 beyerle@PS 190
 
15 beyerle@PS 191
### test if $INSTALL_PART exists
16 beyerle@PS 192
### -----------------------------------------------------------
15 beyerle@PS 193
fdisk -l | cut -d" " -f1 | grep -q "^${INSTALL_PART}$"
194
if [ "$?" != "0" ]; then
195
    echo "Partition $INSTALL_PART not found! (see 'disk -l')"; echo
21 beyerle@PS 196
    exit_now 1
15 beyerle@PS 197
fi
198
 
16 beyerle@PS 199
 
15 beyerle@PS 200
### set $INSTALL_DEV (eg. /dev/sda)
16 beyerle@PS 201
### -----------------------------------------------------------
15 beyerle@PS 202
INSTALL_DEV=$( echo "$INSTALL_PART" | sed -e 's%\([sh]d[a-z]\)[0-9]*$%\1%' )
203
INSTALL_PART_NR=$( echo "$INSTALL_PART" | sed -e 's%.*/[sh]d[a-z]\([0-9]*\)$%\1%' )
204
 
205
 
206
### test if $SWAP_PART exists
16 beyerle@PS 207
### -----------------------------------------------------------
15 beyerle@PS 208
if [ $SWAP_PART ]; then
209
    fdisk -l | cut -d" " -f1 | grep -q "^${SWAP_PART}$"
210
    if [ "$?" != "0" ]; then
211
	echo "Swap partition $SWAP_PART not found! (see 'disk -l')"; echo
21 beyerle@PS 212
	exit_now 1
15 beyerle@PS 213
    fi
214
    fdisk -l | grep "Linux swap" | cut -d" " -f1 | grep -q "^${SWAP_PART}$"
215
    if [ "$?" != "0" ]; then
216
	echo "Partition $SWAP_PART is not a Linux swap partition! (see 'disk -l')"; echo
21 beyerle@PS 217
	exit_now 1
15 beyerle@PS 218
    fi
219
fi
220
 
221
 
222
### print warning
16 beyerle@PS 223
### -----------------------------------------------------------
15 beyerle@PS 224
echo "-----------------------------------------------------------"
225
echo "   LiveCD will be installed on partition $INSTALL_PART."
226
[ "$SWAP_PART" ] && echo " Partition $SWAP_PART will be used as swap partition."
16 beyerle@PS 227
 
15 beyerle@PS 228
echo
16 beyerle@PS 229
[ ! $NOGRUB ] && echo " !! Master Boot Record of $MBR_DEV will be overwritten !!"
230
 
15 beyerle@PS 231
echo "     !! All data on $INSTALL_PART will be lost !!"
232
echo "-----------------------------------------------------------"
233
echo
234
 
235
 
236
### continue ?
16 beyerle@PS 237
### -----------------------------------------------------------
15 beyerle@PS 238
if [ ! $YES ]; then
239
    echo -n "Continue (y/N)? "
18 beyerle@PS 240
    read key
15 beyerle@PS 241
    echo
21 beyerle@PS 242
    [ "$key" != "y" ] && exit_now 0
15 beyerle@PS 243
fi
244
echo
245
 
246
 
21 beyerle@PS 247
### Backup MBR
248
### -----------------------------------------------------------
249
### to do !!!!!!!!!!
250
###
24 beyerle@PS 251
if [ ! $NOGRUB ]; then
252
    echo
253
fi
21 beyerle@PS 254
 
255
 
15 beyerle@PS 256
### format $INSTALL_PART
16 beyerle@PS 257
### -----------------------------------------------------------
15 beyerle@PS 258
echo -n "Format $INSTALL_PART, please wait ... " 
21 beyerle@PS 259
mkfs.ext3 -q $INSTALL_PART || exit_now 1
15 beyerle@PS 260
echo "done."; echo
261
 
262
 
263
### mount $INSTALL_PART
16 beyerle@PS 264
### -----------------------------------------------------------
15 beyerle@PS 265
echo -n "Try to mount $INSTALL_PART to $NEW ... "
266
mkdir -p $NEW
21 beyerle@PS 267
mount $INSTALL_PART $NEW || exit_now 1
15 beyerle@PS 268
echo "done."; echo
269
 
270
 
271
### copy root dirs
16 beyerle@PS 272
### -----------------------------------------------------------
15 beyerle@PS 273
echo "Copy Live System to $INSTALL_PART:"
274
root_dirs=$( ls / )
275
for dir in $root_dirs; do
276
    # check if dir is not in $DIR_NOT_COPY
277
    do_not_copy=""
278
    for not_dir in $DIR_NOT_COPY; do
279
	if [ "$not_dir" = "/$dir" ]; then 
280
	    do_not_copy="yes"
281
	    break
282
	fi
283
    done
284
    # do not copy links
285
    [ -L /$dir ] && do_not_copy="yes"
286
 
21 beyerle@PS 287
    fail=""
15 beyerle@PS 288
    if [ ! $do_not_copy ]; then
289
	echo -n "  * Copy  /$dir ... "
21 beyerle@PS 290
	cp -a /$dir $NEW || fail=true
15 beyerle@PS 291
	echo "done."
292
    fi
293
done
294
echo
21 beyerle@PS 295
if [ $fail ]; then
296
    echo "ERROR: Not everything was copied to $INSTALL_PART"
297
    exit_now 1
298
fi
15 beyerle@PS 299
 
300
 
16 beyerle@PS 301
### move /usr/opt back to /opt
302
### -----------------------------------------------------------
15 beyerle@PS 303
if [ -d $NEW/usr/opt ]; then
304
    echo -n "Move /opt back ... "
305
    mv $NEW/usr/opt $NEW/
306
    echo "done."; echo
307
fi
308
 
309
 
310
### create dirs which were not copied
16 beyerle@PS 311
### -----------------------------------------------------------
15 beyerle@PS 312
for dir in $DIR_NOT_COPY; do
313
    mkdir $NEW/$dir
314
done
315
rmdir $NEW/livecd $NEW/mnt
316
 
317
 
318
### copy back original files
16 beyerle@PS 319
### -----------------------------------------------------------
15 beyerle@PS 320
echo -n "Restore original files ... " 
321
for file in $FILES_RESTORE; do
322
    [ -r $NEW/${file}.ori ] && cp -a $NEW/${file}.ori $NEW/${file} 
323
done
324
echo "done."; echo
325
 
326
 
327
 
16 beyerle@PS 328
### define kernel version
329
### -----------------------------------------------------------
330
rpm --quiet -q kernel     && UP_installed=true
331
rpm --quiet -q kernel-smp && SMP_installed=true
332
[ $UP_installed ]  && KERNEL_VERSION=$( rpm -q --qf "%{V}-%{R}" kernel 2>/dev/null )
333
[ $SMP_installed ] && KERNEL_VERSION=$( rpm -q --qf "%{V}-%{R}" kernel-smp  2>/dev/null )
334
if [ ! $KERNEL_VERSION ]; then
335
    echo "ERROR: Kernel version could not be determined - installation failed"; echo
21 beyerle@PS 336
    exit_now 1
16 beyerle@PS 337
fi    
15 beyerle@PS 338
 
18 beyerle@PS 339
 
22 beyerle@PS 340
 
341
 
24 beyerle@PS 342
if [ ! $NOGRUB ]; then
15 beyerle@PS 343
 
24 beyerle@PS 344
    ### install grub
345
    ### -----------------------------------------------------------
346
    echo "Run grub-install: "; echo
347
    mkdir -p $NEW/boot/grub
348
    if [ $FLOPPY ]; then
349
	grub-install --root-directory=$NEW $MBR_DEV
350
    else
351
	grub-install --no-floppy --root-directory=$NEW $MBR_DEV
352
    fi
353
    echo "done."; echo
15 beyerle@PS 354
 
355
 
24 beyerle@PS 356
    ### check for device.map file 
357
    ### -----------------------------------------------------------
358
    DEVICE_MAP=$NEW/boot/grub/device.map
359
    if [ ! -e $NEW/boot/grub/device.map ]; then
360
	echo "ERROR: $NEW/boot/grub/device.map not found"
361
	exit_now 1
362
    fi
15 beyerle@PS 363
 
22 beyerle@PS 364
 
24 beyerle@PS 365
    ### convert dev syntax to grub syntax
366
    ### -----------------------------------------------------------
367
    GRUB_INSTALL_DEV=$( grep $INSTALL_DEV $DEVICE_MAP | awk '{ print $1 }' )
368
    GRUB_ROOT_PART=$( echo "$GRUB_INSTALL_DEV" | sed "s%)$%,`expr $INSTALL_PART_NR - 1`)%" )
22 beyerle@PS 369
 
15 beyerle@PS 370
 
24 beyerle@PS 371
    ### find active Windows partition
372
    ### -----------------------------------------------------------
373
    if [ ! $WIN_PART ]; then
374
        # try to find active Windows partition
375
	WIN_PART=$( fdisk -l 2>/dev/null | awk '{ if ($2 == "*" && $7 ~ "NTFS") print $1 }' | head -1 )
376
    fi
377
 
378
    if [ $WIN_PART ]; then
379
	WIN_installed=true
380
	WIN_DISK=$( echo "$WIN_PART" | sed -e 's%\([sh]d[a-z]\)[0-9]*$%\1%' )
381
	WIN_PART_NR=$( echo "$WIN_PART" | sed -e 's%.*/[sh]d[a-z]\([0-9]*\)$%\1%' )
382
        # convert dev syntax to grub syntax
383
	GRUB_WIN_DEV=$( grep $WIN_DISK $DEVICE_MAP | awk '{ print $1 }' )
384
	GRUB_WIN_PART=$( echo "$GRUB_WIN_DEV" | sed "s%)$%,`expr $WIN_PART_NR - 1`)%" )
385
 
386
        # $GRUB_WIN_PART should be something like (hd0,0)
387
	echo "Found active Windows partition ( $WIN_PART = $GRUB_WIN_PART )" 
388
	echo "Will add entry for Windows in GRUB."
389
	echo
390
    fi
391
 
392
 
393
    ### create grub.conf file
394
    ### -----------------------------------------------------------
395
    echo "Create grub.conf:"
396
 
397
    cat > $NEW/boot/grub/grub.conf <<EOF
15 beyerle@PS 398
# grub.conf generated by $SCRIPTNAME
399
default=0
400
timeout=5
401
splashimage=$GRUB_ROOT_PART/boot/grub/splash.xpm.gz
402
#hiddenmenu
16 beyerle@PS 403
EOF
404
 
24 beyerle@PS 405
    if [ $UP_installed ]; then
406
	echo " Add entry for UP kernel into grub.conf"
407
	cat >> $NEW/boot/grub/grub.conf <<EOF
16 beyerle@PS 408
title Scientific Linux (${KERNEL_VERSION})
15 beyerle@PS 409
        root $GRUB_ROOT_PART
410
	kernel /boot/vmlinuz-$KERNEL_VERSION ro root=$INSTALL_PART
411
	initrd /boot/initrd-$KERNEL_VERSION.img
16 beyerle@PS 412
EOF
24 beyerle@PS 413
    fi
16 beyerle@PS 414
 
24 beyerle@PS 415
    if [ $SMP_installed ]; then
416
	echo " Add entry for SMP kernel into grub.conf"
417
	cat >> $NEW/boot/grub/grub.conf <<EOF
16 beyerle@PS 418
title Scientific Linux (${KERNEL_VERSION}smp)
419
        root $GRUB_ROOT_PART
420
	kernel /boot/vmlinuz-${KERNEL_VERSION}smp ro root=$INSTALL_PART
421
	initrd /boot/initrd-${KERNEL_VERSION}smp.img
422
EOF
24 beyerle@PS 423
    fi
16 beyerle@PS 424
 
24 beyerle@PS 425
    if [ $WIN_installed ]; then
426
	echo " Add entry for Windows into grub.conf"
427
	cat >> $NEW/boot/grub/grub.conf <<EOF
15 beyerle@PS 428
title Windows
429
        rootnoverify $GRUB_WIN_PART
430
        chainloader +1
431
EOF
24 beyerle@PS 432
    fi
433
 
434
    chmod 600 $NEW/boot/grub/grub.conf
435
    ln -s ../boot/grub/grub.conf $NEW/etc/grub.conf
436
    ln -s ./grub.conf $NEW/boot/grub/menu.lst
437
    echo "done."; echo
438
 
16 beyerle@PS 439
fi
15 beyerle@PS 440
 
441
 
16 beyerle@PS 442
### install kernel into /boot
443
### -----------------------------------------------------------
21 beyerle@PS 444
echo "Install kernel(s) ..."
15 beyerle@PS 445
 
16 beyerle@PS 446
[ -e /boot/vmlinuz ]      && BOOT_DIR=/boot
447
[ -e /boot/boot/vmlinuz ] && BOOT_DIR=/boot/boot
15 beyerle@PS 448
 
16 beyerle@PS 449
if [ ! $BOOT_DIR ]; then
450
    echo "ERROR: No kernel found - installation failed"; echo
21 beyerle@PS 451
    exit_now 1
16 beyerle@PS 452
fi
453
 
454
cp -a $BOOT_DIR/vmlinuz            $NEW/boot/vmlinuz-${KERNEL_VERSION}
455
cp -a $BOOT_DIR/vmlinuzs           $NEW/boot/vmlinuz-${KERNEL_VERSION}smp  2>/dev/null
456
cp -a $BOOT_DIR/System.map-*       $NEW/boot/
457
cp -a $BOOT_DIR/config-*           $NEW/boot/
458
cp -a $BOOT_DIR/grub/splash.xpm.gz $NEW/boot/grub/
459
echo "done."; echo
460
 
461
 
21 beyerle@PS 462
### create /etc/fstab
16 beyerle@PS 463
### -----------------------------------------------------------
21 beyerle@PS 464
cat > $NEW/etc/fstab <<EOF
465
$INSTALL_PART         /                    ext3    defaults        1 1
466
devpts            /dev/pts             devpts  gid=5,mode=620  0 0
467
tmpfs             /dev/shm             tmpfs   defaults        0 0
468
proc              /proc                proc    defaults        0 0
469
sysfs             /sys                 sysfs   defaults        0 0
470
EOF
471
if [ $SWAP_PART ]; then
472
    echo "$SWAP_PART         swap                 swap    defaults        0 0" >> $NEW/etc/fstab
473
fi
474
 
475
 
476
### make initrd 
477
### (needs $NEW/etc/fstab to find correct modules for root filesystem !!)
478
### -----------------------------------------------------------
479
echo "Create initrd(s) ..."
22 beyerle@PS 480
# initrd should not be build on tmpfs (we take $NEW/tmp instead of /tmp)
481
sed -i "s|^TMPDIR=.*|TMPDIR=\"$NEW/tmp\"|" /usr/sbin/livecd-mkinitrd
482
 
16 beyerle@PS 483
if [ $UP_installed ]; then
21 beyerle@PS 484
    depmod -a ${KERNEL_VERSION}
22 beyerle@PS 485
    /usr/sbin/livecd-mkinitrd --fstab=$NEW/etc/fstab \
21 beyerle@PS 486
                    $NEW//boot/initrd-${KERNEL_VERSION}.img ${KERNEL_VERSION}
18 beyerle@PS 487
    if [ ! -e $NEW/boot/initrd-${KERNEL_VERSION}.img ]; then
488
	echo "ERROR: Failed to create $NEW/boot/initrd-${KERNEL_VERSION}.img"
21 beyerle@PS 489
	exit_now 1
18 beyerle@PS 490
    fi
16 beyerle@PS 491
fi
492
if [ $SMP_installed ]; then
21 beyerle@PS 493
    depmod -a ${KERNEL_VERSION}smp
22 beyerle@PS 494
    /usr/sbin/livecd-mkinitrd --fstab=$NEW/etc/fstab \
21 beyerle@PS 495
                    $NEW/boot/initrd-${KERNEL_VERSION}smp.img ${KERNEL_VERSION}smp
18 beyerle@PS 496
    if [ ! -e $NEW/boot/initrd-${KERNEL_VERSION}smp.img ]; then
497
	echo "ERROR: Failed to create $NEW/boot/initrd-${KERNEL_VERSION}smp.img"
21 beyerle@PS 498
	exit_now 1
18 beyerle@PS 499
    fi
16 beyerle@PS 500
fi
501
echo "done."; echo
502
 
503
 
15 beyerle@PS 504
### remove LiveCD init.d scripts
16 beyerle@PS 505
### -----------------------------------------------------------
506
for file in $LIVECD_INIT_SCRIPTS; do
507
    rm -f $NEW/etc/init.d/$file
508
    for n in 0 1 2 3 4 5 6; do
509
	rm -f $NEW/etc/rc.d/rc${n}.d/*$file
510
    done
15 beyerle@PS 511
done
512
 
16 beyerle@PS 513
 
514
### restore cronjobs
515
### -----------------------------------------------------------
516
mv /etc/cron_backup/sysstat /etc/cron.d/ 2>/dev/null
517
mv /etc/cron_backup/00-makewhatis.cron.weekly /etc/cron.weekly/00-makewhatis.cron 2>/dev/null
518
mv /etc/cron_backup/* /etc/cron.daily/
519
 
520
 
18 beyerle@PS 521
### turn on kudzu again
522
### -----------------------------------------------------------
523
chkconfig kudzu on
524
 
525
 
15 beyerle@PS 526
### umount $INSTALL_PART
16 beyerle@PS 527
### -----------------------------------------------------------
528
umount $INSTALL_PART
15 beyerle@PS 529
 
22 beyerle@PS 530
 
531
### print summary
532
### -----------------------------------------------------------
533
echo "-----------------------------------------------------------"
534
echo "  LiveCD installed on partition $INSTALL_PART."
535
[ "$SWAP_PART" ] && echo "  Partition $SWAP_PART will be used as swap partition."
536
[ ! $NOGRUB ]    && echo "  GRUB installed in Master Boot Record of $MBR_DEV."
537
[ $WIN_PART ]    && echo "  Entry in grub.conf for Windows partition on $WIN_PART."
538
echo "-----------------------------------------------------------"
539
echo "End of $SCRIPTNAME."
540
echo