Home | History | Annotate | Download | only in livemedia
      1  17  dminer #!/usr/bin/bash
      2  17  dminer #
      3  17  dminer # CDDL HEADER START
      4  17  dminer #
      5  17  dminer # The contents of this file are subject to the terms of the
      6  17  dminer # Common Development and Distribution License (the "License").
      7  17  dminer # You may not use this file except in compliance with the License.
      8  17  dminer #
      9  17  dminer # You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
     10  17  dminer # or http://www.opensolaris.org/os/licensing.
     11  17  dminer # See the License for the specific language governing permissions
     12  17  dminer # and limitations under the License.
     13  17  dminer #
     14  17  dminer # When distributing Covered Code, include this CDDL HEADER in each
     15  17  dminer # file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     16  17  dminer # If applicable, add the following below this CDDL HEADER, with the
     17  17  dminer # fields enclosed by brackets "[]" replaced with your own identifying
     18  17  dminer # information: Portions Copyright [yyyy] [name of copyright owner]
     19  17  dminer #
     20  17  dminer # CDDL HEADER END
     21  17  dminer #
     22  17  dminer # Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
     23  17  dminer # Use is subject to license terms.
     24  17  dminer #
     25  17  dminer # Script to install Belenix onto a Bootable LiveUSB
     26  17  dminer # By Anil Gulecha
     27  17  dminer #
     28  48    dave 
     29  17  dminer if [ $# != 1 ]; then
     30  17  dminer 	echo "Usage: $0 <USB image path>"
     31  17  dminer 	exit 1
     32  17  dminer fi
     33  17  dminer 
     34  17  dminer img=$1
     35  20  dminer if [ ! -f $img ] && [ ! -c $img ]; then
     36  17  dminer 	echo "Error: $img does not exist."
     37  17  dminer 	exit 1
     38  17  dminer fi
     39  17  dminer 
     40  17  dminer let i=0
     41  17  dminer 
     42  17  dminer #nawk script to o/p the details of plugged in USB drives
     43  17  dminer rmformat 2>/dev/null | nawk 'BEGIN {
     44  17  dminer       FS = ":";
     45  17  dminer       lnode=0;
     46  17  dminer       physdev="";
     47  17  dminer       node = "";
     48  17  dminer       devname = "";
     49  17  dminer       bus = "";
     50  17  dminer       size = 0;
     51  17  dminer       bustype = "USB";
     52  17  dminer } {
     53  17  dminer       if (lnode == 1 && match($1, "Logical Node")) {
     54  17  dminer               if (match(bus, bustype))
     55  17  dminer                       printf("%s\t%s\t%s\t%s\n", physdev, node, size, devname);
     56  17  dminer               node = $2;
     57  17  dminer       } else {
     58  17  dminer               if (match($1, "Logical Node")) {
     59  17  dminer                       lnode = 1;
     60  17  dminer                       node = $2;
     61  17  dminer 	      } else if (match($1, "Bus")) {
     62  17  dminer 		      bus=$2
     63  17  dminer               } else if (match($1, "Connected Device")) {
     64  17  dminer                       devname = $2;
     65  17  dminer               } else if (match($1, "Size")) {
     66  17  dminer                       size = $2;
     67  17  dminer               } else if (match($1, "Physical Node")) {
     68  17  dminer 		      physdev=$2
     69  17  dminer 	      }
     70  17  dminer       }
     71  17  dminer } END {
     72  17  dminer       if (lnode == 1) {
     73  17  dminer               if (match(bus, bustype))
     74  17  dminer                        printf("%s\t%s\t%s\t%s\n", physdev, node, size, devname);
     75  17  dminer       }
     76  17  dminer }' >/tmp/ulst
     77  17  dminer 
     78  17  dminer while read p l s m d; do
     79  17  dminer 	phys[$i]=$p
     80  17  dminer 	log[$i]=$l
     81  17  dminer 	size[$i]=$s
     82  17  dminer 	mult[$i]=$m
     83  17  dminer 	desc[$i]=$d
     84  17  dminer 	let i=$i+1
     85  17  dminer done </tmp/ulst
     86  17  dminer rm /tmp/ulst
     87  17  dminer 
     88  17  dminer echo Found the following USB devices:
     89  17  dminer let j=0
     90  17  dminer while [ $j -lt $i ]; do
     91  17  dminer 	echo "$j:	${log[$j]}	${size[$j]} ${mult[$j]}	${desc[$j]}"
     92  17  dminer 	let j=$j+1
     93  17  dminer done
     94  17  dminer while read -p "Enter the number of your choice: " choice; do
     95  17  dminer 	if [ -z "${choice}" ]; then
     96  17  dminer 		continue
     97  17  dminer 	fi
     98  17  dminer 	if [ $choice -lt 0 ] || [ $choice -ge $i ]; then
     99  17  dminer 		echo "Invalid choice"
    100  17  dminer 		continue
    101  17  dminer 	fi
    102  17  dminer 	break
    103  17  dminer done
    104  17  dminer 
    105  17  dminer dev=${log[$choice]}
    106  48    dave s0cdev=`echo $dev|sed -e 's/p0/s0/'`
    107  48    dave s0bdev=`echo $s0cdev|sed -e 's/rdsk/dsk/'`
    108  48    dave if [ ! -b $s0bdev ] || [ ! -c $s0cdev ]; then
    109  48    dave 	echo "Missing device nodes for $dev"
    110  17  dminer 	exit 1
    111  17  dminer fi
    112  17  dminer 
    113  17  dminer if [ ! -n "$dev" ]; then
    114  17  dminer        echo INFORMATION: No USB selected/found.. Please plug in and try again
    115  17  dminer        exit 1
    116  17  dminer fi
    117  17  dminer 
    118  17  dminer sz=${size[$choice]}
    119  17  dminer multiplier=${mult[$choice]}
    120  17  dminer 
    121  17  dminer if [ "$multiplier" = "GB" ]; then
    122  17  dminer        lvalue=`echo $sz | cut -f1 -d"."`
    123  17  dminer        rvalue=`echo $sz | cut -f2 -d"."`
    124  17  dminer        lvalue=`expr $lvalue \* 1000`
    125  17  dminer        rvalue=`expr $rvalue \* 100`
    126  17  dminer        sz=`expr $lvalue + $rvalue`
    127  17  dminer else
    128  17  dminer        sz=`echo $sz | cut -f1 -d"."`
    129  17  dminer fi
    130  17  dminer 
    131  17  dminer while true;
    132  17  dminer do
    133  17  dminer        echo ""
    134  17  dminer        echo WARNING: All data on your USB storage will be lost.
    135  17  dminer        echo Are you sure you want to install to
    136  23  dminer        echo -n ${desc[$choice]}, $sz MB at $dev ?
    137  17  dminer        read -p "(y/n) " yn
    138  17  dminer        case $yn in
    139  17  dminer        y* | Y* )
    140  17  dminer                break ;;
    141  17  dminer        [nN]* )
    142  17  dminer        	       echo "Installation aborted"
    143  17  dminer 	       exit 0 ;;
    144  17  dminer        * )
    145  17  dminer        	       echo Invalid choice.. Exiting ;exit 0;;
    146  17  dminer        esac
    147  17  dminer done
    148  25  dminer 
    149  25  dminer # Ensure we have things unmounted
    150  48    dave umount -f $s0bdev
    151  25  dminer 
    152  17  dminer # Install fdisk table with Solaris using entire disk, default VTOC
    153  17  dminer fdisk -B $dev
    154  17  dminer 
    155  17  dminer # Now create root partition.  We want to find number of cylinders in backup
    156  17  dminer # partition from label created by fdisk -B and then generate root partition
    157  17  dminer # using whole disk minus cylinder 1
    158  48    dave acyls=`prtvtoc $dev | grep accessible | sed -e 's/  //g' -e 's/*//'|cut -f1 -d' '`
    159  17  dminer cyls=`expr ${acyls} - 1`
    160  17  dminer format -e $dev >/dev/null <<EOF
    161  17  dminer pa
    162  17  dminer 0
    163  17  dminer root
    164  17  dminer wm
    165  17  dminer 1
    166  17  dminer ${cyls}c
    167  17  dminer label
    168  17  dminer 0
    169  17  dminer y
    170  17  dminer EOF
    171  17  dminer 
    172  21  dminer # Copy image to USB.  16k blocks seem to be about as fast as anything
    173  17  dminer echo "Copying image to USB device"
    174  48    dave time dd if=$img of=$s0cdev bs=16384
    175  17  dminer 
    176  17  dminer # Mount image
    177  17  dminer mnt=/tmp/usb.$$
    178  17  dminer mkdir $mnt
    179  48    dave mount $s0bdev $mnt
    180  17  dminer # Install grub stages to usb
    181  48    dave echo Installing grub to USB device $s0cdev
    182  48    dave installgrub -mf $mnt/boot/grub/stage1 $mnt/boot/grub/stage2 $s0cdev > /dev/null
    183  17  dminer umount $mnt
    184  17  dminer rmdir $mnt
    185  17  dminer echo "Completed copy to USB"
    186  17  dminer 
    187