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