Print this page
Have kayak install full-GPT disks and use BSD Loader


  74           PAT=${want:1}
  75           if [[ -n $(echo ${diskname[$disk]} | egrep -e "$PAT") ]]; then
  76             echo $disk
  77           fi
  78           ;;
  79       esac
  80     done
  81   done
  82 }
  83 ListDisksAnd() {
  84   EXPECT=$(( $(echo "$1" | sed -e 's/[^,]//g;' | wc -c) + 0))
  85   for part in $(echo "$1" | sed -e 's/,/ /g;'); do
  86     ListDisks $part
  87   done | sort | uniq -c | awk '{if($1=='$EXPECT'){print $2;}}'
  88 }
  89 ListDisksUnique(){
  90   for term in $*; do
  91     ListDisksAnd $term
  92   done | sort | uniq | xargs
  93 }
  94 SMIboot() {
  95   DISK=$1
  96   RDSK=/dev/rdsk/${DISK}p0
  97   S2=/dev/rdsk/${DISK}s2
  98   fdisk -B ${RDSK}
  99   disks -C
 100   prtvtoc -h ${RDSK} | awk '/./{p=0;} {if($1=="2"){size=$5;p=1;} if($1=="8"){start=$5;p=1;} if(p==1){print $1" "$2" "$3" "$4" "$5;}} END{size=size-start; print "0 2 00 "start" "size;}' | sort -n | fmthard -s /dev/stdin $S2
 101   disks -C
 102 }
 103 
 104 BuildRpool() {
 105   ztype=""
 106   ztgt=""
 107   disks=`ListDisksUnique $*`
 108   log "Disks being used for rpool: $disks"
 109   if [[ -z "$disks" ]]; then
 110     bomb "No matching disks found to build rpool"
 111   fi

 112   for i in $disks
 113   do
 114     SMIboot $i
 115     if [[ -n "$ztgt" ]]; then
 116       ztype="mirror"
 117     fi
 118     ztgt="$ztgt ${i}s0"
 119     INSTALL_GRUB_TGT="$INSTALL_GRUB_TGT /dev/rsdk/${i}s2"

 120   done
 121   log "zpool destroy rpool (just in case we've been run twice)"
 122   zpool destroy rpool 2> /dev/null
 123   log "Creating rpool with: zpool create -f rpool $ztype $ztgt"

 124   zpool create -f rpool $ztype $ztgt || bomb "Failed to create rpool"
 125   BuildBE
 126 }
 127 GetTargetVolSize() {
 128     # Aim for 25% of physical memory (minimum 1G)
 129     # prtconf always reports in megabytes
 130     local mem=`/usr/sbin/prtconf | /bin/awk '/^Memory size/ { print $3 }'`
 131     if [[ $mem -lt 4096 ]]; then
 132         local vsize=1
 133     else
 134         local quart=`echo "scale=1;$mem/4096" | /bin/bc`
 135         local vsize=`printf %0.f $quart`
 136     fi
 137     echo $vsize
 138 }    
 139 GetRpoolFree() {
 140     local zfsavail=`/sbin/zfs list -H -o avail rpool`
 141     if [[ ${zfsavail:(-1)} = "G" ]]; then
 142         local avail=`printf %0.f ${zfsavail::-1}`
 143     elif [[ ${zfsavail:(-1)} = "T" ]]; then




  74           PAT=${want:1}
  75           if [[ -n $(echo ${diskname[$disk]} | egrep -e "$PAT") ]]; then
  76             echo $disk
  77           fi
  78           ;;
  79       esac
  80     done
  81   done
  82 }
  83 ListDisksAnd() {
  84   EXPECT=$(( $(echo "$1" | sed -e 's/[^,]//g;' | wc -c) + 0))
  85   for part in $(echo "$1" | sed -e 's/,/ /g;'); do
  86     ListDisks $part
  87   done | sort | uniq -c | awk '{if($1=='$EXPECT'){print $2;}}'
  88 }
  89 ListDisksUnique(){
  90   for term in $*; do
  91     ListDisksAnd $term
  92   done | sort | uniq | xargs
  93 }









  94 
  95 BuildRpool() {
  96   ztype=""
  97   ztgt=""
  98   disks=`ListDisksUnique $*`
  99   log "Disks being used for rpool: $disks"
 100   if [[ -z "$disks" ]]; then
 101     bomb "No matching disks found to build rpool"
 102   fi
 103   rm -f /tmp/kayak-disk-list
 104   for i in $disks
 105   do

 106     if [[ -n "$ztgt" ]]; then
 107       ztype="mirror"
 108     fi
 109     ztgt="$ztgt ${i}"
 110     # Keep track of disks for later...
 111     echo ${i} >> /tmp/kayak-disk-list
 112   done
 113   log "zpool destroy rpool (just in case we've been run twice)"
 114   zpool destroy rpool 2> /dev/null
 115   log "Creating rpool with: zpool create -f rpool $ztype $ztgt"
 116   # Just let "zpool create" do its thing. We want GPT disks now.
 117   zpool create -f rpool $ztype $ztgt || bomb "Failed to create rpool"
 118   BuildBE
 119 }
 120 GetTargetVolSize() {
 121     # Aim for 25% of physical memory (minimum 1G)
 122     # prtconf always reports in megabytes
 123     local mem=`/usr/sbin/prtconf | /bin/awk '/^Memory size/ { print $3 }'`
 124     if [[ $mem -lt 4096 ]]; then
 125         local vsize=1
 126     else
 127         local quart=`echo "scale=1;$mem/4096" | /bin/bc`
 128         local vsize=`printf %0.f $quart`
 129     fi
 130     echo $vsize
 131 }    
 132 GetRpoolFree() {
 133     local zfsavail=`/sbin/zfs list -H -o avail rpool`
 134     if [[ ${zfsavail:(-1)} = "G" ]]; then
 135         local avail=`printf %0.f ${zfsavail::-1}`
 136     elif [[ ${zfsavail:(-1)} = "T" ]]; then