6 # Installs/updates the necessary boot blocks for the desired boot environment
8 # Lightly tested.. Intended to be installed, but until it matures, it will just
9 # be a boot tool for regression testing.
11 # insert code here to guess what you have -- yikes!
27 gpart show $dev | tail +2 | awk '$4 == "'$part'" { print $3; }'
30 boot_nogeli_gpt_zfs_legacy() {
34 idx=$(find-part $dev "freebsd-boot")
35 if [ -z "$idx" ] ; then
36 die "No freebsd-boot partition found"
38 doit gpart bootcode -b ${gpt0} -p ${gptzfs2} -i $idx $dev
42 boot_nogeli_gpt_ufs_legacy() {
46 idx=$(find-part $dev "freebsd-boot")
47 if [ -z "$idx" ] ; then
48 die "No freebsd-boot partition found"
50 doit gpart bootcode -b ${gpt0} -p ${gpt2} -i $idx $dev
54 boot_nogeli_mbr_zfs_legacy() {
58 # search to find the BSD slice
59 s=$(findpart $dev "freebsd-zfs")
61 die "No freebsd-zfs slice found"
63 # search to find the freebsd-zfs partition within the slice
64 # Or just assume it is 'a' because it has to be since it fails otherwise
65 dd if=${dst}/boot/zfsboot of=/tmp/zfsboot1 count=1
66 doit gpart bootcode -b /tmp/zfsboo1 ${dev}s${s} # Put boot1 into the start of part
67 sysctl kern.geom.debugflags=0x10 # Put boot2 into ZFS boot slot
68 doit dd if=${dst}/boot/zfsboot of=/dev/${dev}s${s} iseek=1 seek=1024
69 sysctl kern.geom.debugflags=0x0
74 boot_nogeli_mbr_ufs_legacy() {
78 doit gpart bootcode -b ${mbr0} ${dev}
79 s=$(findpart $dev "freebsd-ufs")
81 die "No freebsd-ufs slice found"
83 doit gpart bootcode -p ${mbr2} ${dev}s${s}
87 boot_nogeli_vtoc8_ufs_ofw() {
91 # For non-native builds, ensure that geom_part(4) supports VTOC8.
92 kldload geom_part_vtoc8.ko
93 doit gpart bootcode -p ${vtoc8} ${dev}
99 # Note: we really don't support geli boot in this script yet.
102 while getopts "b:d:f:g:o:s:" opt; do
115 [Yy][Ee][Ss]|geli) geli=geli ;;
131 # For gpt, we need to install pmbr as the primary boot loader
133 gpt0=${DESTDIR}/boot/pmbr
134 gpt2=${DESTDIR}/boot/gptboot
135 gptzfs2=${DESTDIR}/boot/gptzfsboot
137 # For MBR, we have lots of choices, but select boot0
138 mbr0=${DESTDIR}/boot/boot0
139 mbr2=${DESTDIR}/boot/boot
142 vtoc8=${DESTDIR}/boot/boot1
146 eval boot_${geli}_${scheme}_${fs}_${bios} $dev $DESTDIR $opts || echo "Unsupported boot env: ${geli}-${scheme}-${fs}-${bios}"