Here's a snippet of something I've been working on along the same lines -
this is /bin/csh syntax, and works on raid0 but should work on regular
partitions as well:
echo "get raid size..."
@ r_tot = `disklabel -p g raid0 | awk '/total bytes/ { print int($3) }'`
@ r_root = 1; @ r_tot -= $r_root
@ r_swap = 1; @ r_tot -= $r_swap
@ r_tmp = 1; @ r_tot -= $r_tmp
@ r_usr = 10; @ r_tot -= $r_usr
@ r_home = 4; @ r_tot -= $r_home
@ r_obj = 4; @ r_tot -= $r_obj
@ r_xobj = 4; @ r_tot -= $r_xobj
@ r_pobj = 20; @ r_tot -= $r_pobj
@ r_var = $r_tot
if ($r_var < 0) then
echo 'not enough space on raid0 for all partitions'
exit 1
endif
echo "create raid label partitions..."
# NB: blank lines matter here
disklabel -E raid0 << _EOF_
a a
${r_root}G
a b
${r_swap}G
a d
${r_tmp}G
a e
${r_usr}G
a f
${r_home}G
a g
${r_obj}G
a h
${r_xobj}G
a i
${r_pobj}G
a j
w
q
_EOF_