8 # The smallest FAT32 filesystem is 33292 KB
12 # Builds all the bat-shit crazy combinations we support booting from,
13 # at least for amd64. It assume you have a ~sane kernel in /boot/kernel
14 # and copies that into the ~150MB root images we create (we create the du
15 # size of the kernel + 20MB).
17 # Sad panda sez: this runs as root, but could be any user if someone
18 # creates userland geli.
20 # This assumes an external program install-boot.sh which will install
21 # the appropriate boot files in the appropriate locations.
23 # Assumes you've already rebuilt... maybe bad? Also maybe bad: the env
24 # vars should likely be conditionally set to allow better automation.
27 . $(dirname $0)/install-boot.sh
33 # Copy kernel + boot loader
34 (cd $src ; tar cf - .) | (cd $dst; tar xf -)
40 cat > ${dir}/etc/fstab <<EOF
41 /dev/ufs/root / ufs rw 1 1
45 mk_nogeli_gpt_ufs_legacy() {
50 makefs -t ffs -B little -s 200m -o label=root ${img}.p2 ${src}
51 mkimg -s gpt -b ${src}/boot/pmbr \
52 -p freebsd-boot:=${src}/boot/gptboot \
53 -p freebsd-ufs:=${img}.p2 -o ${img}
54 rm -f ${src}/etc/fstab
57 mk_nogeli_gpt_ufs_uefi() {
62 make_esp_file ${img}.p1 ${espsize} ${src}/boot/loader.efi
63 makefs -t ffs -B little -s 200m -o label=root ${img}.p2 ${src}
66 -p freebsd-ufs:=${img}.p2 -o ${img}
67 rm -f ${src}/etc/fstab
70 mk_nogeli_gpt_ufs_both() {
75 make_esp_file ${img}.p1 ${espsize} ${src}/boot/loader.efi
76 makefs -t ffs -B little -s 200m -o label=root ${img}.p3 ${src}
77 # p1 is boot for uefi, p2 is boot for gpt, p3 is /
78 mkimg -b ${src}/boot/pmbr -s gpt \
80 -p freebsd-boot:=${src}/boot/gptboot \
81 -p freebsd-ufs:=${img}.p3 \
83 rm -f ${src}/etc/fstab
86 # XXX should not assume host == target
93 mkdir -p $dst/boot/kernel
94 cat > ${dst}/boot/loader.conf.local <<EOF
98 cp /boot/kernel/acl_nfs4.ko ${dst}/boot/kernel/acl_nfs4.ko
99 cp /boot/kernel/cryptodev.ko ${dst}/boot/kernel/cryptodev.ko
100 cp /boot/kernel/zfs.ko ${dst}/boot/kernel/zfs.ko
103 mk_nogeli_gpt_zfs_legacy() {
111 pool=nogeli-gpt-zfs-legacy
115 makefs -t zfs -s 200m \
116 -o poolname=${pool} -o bootfs=${pool} -o rootpath=/ \
117 ${img}.p2 ${src} ${dst}
118 mkimg -b ${src}/boot/pmbr -s gpt \
119 -p freebsd-boot:=/boot/gptzfsboot \
120 -p freebsd-zfs:=${img}.p2 \
125 mk_nogeli_gpt_zfs_uefi() {
133 pool=nogeli-gpt-zfs-uefi
137 make_esp_file ${img}.p1 ${espsize} ${src}/boot/loader.efi
138 makefs -t zfs -s 200m \
139 -o poolname=${pool} -o bootfs=${pool} -o rootpath=/ \
140 ${img}.p2 ${src} ${dst}
141 mkimg -b ${src}/boot/pmbr -s gpt \
143 -p freebsd-zfs:=${img}.p2 \
148 mk_nogeli_gpt_zfs_both() {
156 pool=nogeli-gpt-zfs-both
160 make_esp_file ${img}.p2 ${espsize} ${src}/boot/loader.efi
161 makefs -t zfs -s 200m \
162 -o poolname=${pool} -o bootfs=${pool} -o rootpath=/ \
163 ${img}.p3 ${src} ${dst}
164 mkimg -b ${src}/boot/pmbr -s gpt \
165 -p freebsd-boot:=/boot/gptzfsboot \
167 -p freebsd-zfs:=${img}.p3 \
172 mk_nogeli_mbr_ufs_legacy() {
177 makefs -t ffs -B little -s 200m -o label=root ${img}.s1a ${src}
178 mkimg -s bsd -b ${src}/boot/boot -p freebsd-ufs:=${img}.s1a -o ${img}.s1
179 mkimg -a 1 -s mbr -b ${src}/boot/boot0sio -p freebsd:=${img}.s1 -o ${img}
180 rm -f ${src}/etc/fstab
183 mk_nogeli_mbr_ufs_uefi() {
188 make_esp_file ${img}.s1 ${espsize} ${src}/boot/loader.efi
189 makefs -t ffs -B little -s 200m -o label=root ${img}.s2a ${src}
190 mkimg -s bsd -p freebsd-ufs:=${img}.s2a -o ${img}.s2
191 mkimg -a 1 -s mbr -p efi:=${img}.s1 -p freebsd:=${img}.s2 -o ${img}
192 rm -f ${src}/etc/fstab
195 mk_nogeli_mbr_ufs_both() {
200 make_esp_file ${img}.s1 ${espsize} ${src}/boot/loader.efi
201 makefs -t ffs -B little -s 200m -o label=root ${img}.s2a ${src}
202 mkimg -s bsd -b ${src}/boot/boot -p freebsd-ufs:=${img}.s2a -o ${img}.s2
203 mkimg -a 2 -s mbr -b ${src}/boot/mbr -p efi:=${img}.s1 -p freebsd:=${img}.s2 -o ${img}
204 rm -f ${src}/etc/fstab
207 mk_nogeli_mbr_zfs_legacy() {
215 pool=nogeli-mbr-zfs-legacy
218 makefs -t zfs -s 200m \
219 -o poolname=${pool} -o bootfs=${pool} -o rootpath=/ \
220 ${img}.s1a ${src} ${dst}
221 # The old boot1/boot2 boot split is also used by zfs. We need to extract zfsboot1
222 # from this image. Since there's no room in the mbr format for the rest of the loader,
223 # it will load the zfsboot loader from the reserved for bootloader area of the ZFS volume
224 # being booted, hence the need to dd it into the raw img later.
225 # Please note: zfsboot only works with partition 'a' which must be the root
226 # partition / zfs volume
227 dd if=${src}/boot/zfsboot of=${dst}/zfsboot1 count=1
228 mkimg -s bsd -b ${dst}zfsboot1 -p freebsd-zfs:=${img}.s1a -o ${img}.s1
229 dd if=${src}/boot/zfsboot of=${img}.s1a skip=1 seek=1024
230 mkimg -a 1 -s mbr -b ${src}/boot/mbr -p freebsd:=${img}.s1 -o ${img}
234 mk_nogeli_mbr_zfs_uefi() {
242 pool=nogeli-mbr-zfs-uefi
245 make_esp_file ${img}.s1 ${espsize} ${src}/boot/loader.efi
246 makefs -t zfs -s 200m \
247 -o poolname=${pool} -o bootfs=${pool} -o rootpath=/ \
248 ${img}.s2a ${src} ${dst}
249 mkimg -s bsd -b ${dst}zfsboot1 -p freebsd-zfs:=${img}.s2a -o ${img}.s2
250 mkimg -a 1 -s mbr -b ${src}/boot/mbr -p efi:=${img}.s1 -p freebsd:=${img}.s2 -o ${img}
254 mk_nogeli_mbr_zfs_both() {
262 pool=nogeli-mbr-zfs-both
265 make_esp_file ${img}.s1 ${espsize} ${src}/boot/loader.efi
266 makefs -t zfs -s 200m \
267 -o poolname=${pool} -o bootfs=${pool} -o rootpath=/ \
268 ${img}.s2a ${src} ${dst}
269 # The old boot1/boot2 boot split is also used by zfs. We need to extract zfsboot1
270 # from this image. Since there's no room in the mbr format for the rest of the loader,
271 # it will load the zfsboot loader from the reserved for bootloader area of the ZFS volume
272 # being booted, hence the need to dd it into the raw img later.
273 # Please note: zfsboot only works with partition 'a' which must be the root
274 # partition / zfs volume
275 dd if=${src}/boot/zfsboot of=${dst}/zfsboot1 count=1
276 mkimg -s bsd -b ${dst}zfsboot1 -p freebsd-zfs:=${img}.s2a -o ${img}.s2
277 dd if=${src}/boot/zfsboot of=${img}.s1a skip=1 seek=1024
278 mkimg -a 1 -s mbr -b ${src}/boot/mbr -p efi:=${img}.s1 -p freebsd:=${img}.s2 -o ${img}
281 mk_geli_gpt_ufs_legacy() {
290 dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
291 md=$(mdconfig -f ${img})
292 gpart create -s gpt ${md}
293 gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k
294 gpart add -t freebsd-ufs -l root $md
295 # install-boot will make this bootable
296 echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p2
297 echo ${passphrase} | geli attach -j - ${md}p2
298 newfs -L root /dev/${md}p2.eli
299 mount /dev/${md}p2.eli ${mntpt}
300 cpsys ${src} ${mntpt}
301 # need to make a couple of tweaks
302 cat > ${mntpt}/boot/loader.conf <<EOF
307 cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
311 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
315 mk_geli_gpt_ufs_uefi() {
324 dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
325 md=$(mdconfig -f ${img})
326 gpart create -s gpt ${md}
327 gpart add -t efi -s ${espsize}k -a 4k ${md}
328 gpart add -t freebsd-ufs -l root $md
329 # install-boot will make this bootable
330 echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p2
331 echo ${passphrase} | geli attach -j - ${md}p2
332 newfs -L root /dev/${md}p2.eli
333 mount /dev/${md}p2.eli ${mntpt}
334 cpsys ${src} ${mntpt}
335 # need to make a couple of tweaks
336 cat > ${mntpt}/boot/loader.conf <<EOF
341 cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
345 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
349 mk_geli_gpt_ufs_both() {
358 dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
359 md=$(mdconfig -f ${img})
360 gpart create -s gpt ${md}
361 gpart add -t efi -s ${espsize}k -a 4k ${md}
362 gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k
363 gpart add -t freebsd-ufs -l root $md
364 # install-boot will make this bootable
365 echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p3
366 echo ${passphrase} | geli attach -j - ${md}p3
367 newfs -L root /dev/${md}p3.eli
368 mount /dev/${md}p3.eli ${mntpt}
369 cpsys ${src} ${mntpt}
370 # need to make a couple of tweaks
371 cat > ${mntpt}/boot/loader.conf <<EOF
376 cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
380 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
384 mk_geli_gpt_zfs_legacy() {
392 pool=geli-gpt-zfs-legacy
394 # Note that in this flavor we create an empty p2 ufs partition, and put
395 # the bootable zfs stuff on p3, just to test the ability of the zfs probe
396 # probe routines to find a pool on a partition other than the first one.
398 dd if=/dev/zero of=${img} count=1 seek=$(( 300 * 1024 * 1024 / 512 ))
399 md=$(mdconfig -f ${img})
400 gpart create -s gpt ${md}
401 gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k
402 gpart add -t freebsd-ufs -s 100m ${md}
403 gpart add -t freebsd-zfs -l root $md
404 # install-boot will make this bootable
405 echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p3
406 echo ${passphrase} | geli attach -j - ${md}p3
407 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3.eli
408 zpool set bootfs=${pool} ${pool}
409 zfs create -po mountpoint=/ ${pool}/ROOT/default
410 # NB: The online guides go nuts customizing /var and other mountpoints here, no need
411 cpsys ${src} ${mntpt}
412 # need to make a couple of tweaks
413 cat >> ${mntpt}/boot/loader.conf <<EOF
418 cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
419 cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko
420 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
421 cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
423 zfs umount -f ${pool}/ROOT/default
424 zfs set mountpoint=none ${pool}/ROOT/default
425 zpool set bootfs=${pool}/ROOT/default ${pool}
426 zpool set autoexpand=on ${pool}
429 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
433 mk_geli_gpt_zfs_uefi() {
441 pool=geli-gpt-zfs-uefi
443 # Note that in this flavor we create an empty p2 ufs partition, and put
444 # the bootable zfs stuff on p3, just to test the ability of the zfs probe
445 # probe routines to find a pool on a partition other than the first one.
447 dd if=/dev/zero of=${img} count=1 seek=$(( 300 * 1024 * 1024 / 512 ))
448 md=$(mdconfig -f ${img})
449 gpart create -s gpt ${md}
450 gpart add -t efi -s ${espsize}k -a 4k ${md}
451 gpart add -t freebsd-ufs -s 100m ${md}
452 gpart add -t freebsd-zfs -l root $md
453 # install-boot will make this bootable
454 echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p3
455 echo ${passphrase} | geli attach -j - ${md}p3
456 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3.eli
457 zpool set bootfs=${pool} ${pool}
458 zfs create -po mountpoint=/ ${pool}/ROOT/default
459 # NB: The online guides go nuts customizing /var and other mountpoints here, no need
460 cpsys ${src} ${mntpt}
461 # need to make a couple of tweaks
462 cat >> ${mntpt}/boot/loader.conf <<EOF
467 cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
468 cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko
469 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
470 cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
472 zfs umount -f ${pool}/ROOT/default
473 zfs set mountpoint=none ${pool}/ROOT/default
474 zpool set bootfs=${pool}/ROOT/default ${pool}
475 zpool set autoexpand=on ${pool}
478 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
482 mk_geli_gpt_zfs_both() {
490 pool=geli-gpt-zfs-both
492 dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
493 md=$(mdconfig -f ${img})
494 gpart create -s gpt ${md}
495 gpart add -t efi -s ${espsize}k -a 4k ${md}
496 gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k
497 gpart add -t freebsd-zfs -l root $md
498 # install-boot will make this bootable
499 echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p3
500 echo ${passphrase} | geli attach -j - ${md}p3
501 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3.eli
502 zpool set bootfs=${pool} ${pool}
503 zfs create -po mountpoint=/ ${pool}/ROOT/default
504 # NB: The online guides go nuts customizing /var and other mountpoints here, no need
505 cpsys ${src} ${mntpt}
506 # need to make a couple of tweaks
507 cat > ${mntpt}/boot/loader.conf <<EOF
512 cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
513 cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko
514 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
515 cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
517 zfs umount -f ${pool}/ROOT/default
518 zfs set mountpoint=none ${pool}/ROOT/default
519 zpool set bootfs=${pool}/ROOT/default ${pool}
520 zpool set autoexpand=on ${pool}
523 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
527 # GELI+MBR is not a valid configuration
528 mk_geli_mbr_ufs_legacy() {
531 mk_geli_mbr_ufs_uefi() {
534 mk_geli_mbr_ufs_both() {
537 mk_geli_mbr_zfs_legacy() {
540 mk_geli_mbr_zfs_uefi() {
543 mk_geli_mbr_zfs_both() {
551 qser="-monitor telnet::4444,server,nowait -serial stdio -nographic"
553 # https://wiki.freebsd.org/QemuRecipes
560 echo "qemu-system-aarch64 -m 4096M -cpu cortex-a57 -M virt \
561 -bios QEMU_EFI.fd ${qser} \
562 -drive if=none,file=${img},id=hd0 \
563 -device virtio-blk-device,drive=hd0" > $sh
565 # https://wiki.freebsd.org/arm64/QEMU also has
566 # -device virtio-net-device,netdev=net0
567 # -netdev user,id=net0
573 fn=$(basename $1 .sh)
584 echo "echo -n $(basename $sh .sh):' '" > $sh
585 echo "(qemu-system-x86_64 -m 256m --drive file=${img},format=raw ${qser} | tee $log 2>&1 | grep -q SUCCESS) && echo legacy pass || echo legacy fail" >> $sh
595 echo "echo -n $(basename $sh .sh):' '" > $sh
596 echo "(qemu-system-x86_64 -m 256m -bios ~/bios/OVMF-X64.fd --drive file=${img},format=raw ${qser} | tee $log 2>&1 | grep -q SUCCESS) && echo uefi pass || echo uefi fail" >> $sh
606 echo "echo -n $(basename $sh .sh):' '" > $sh
607 echo "(qemu-system-x86_64 -m 256m --drive file=${img},format=raw ${qser} | tee $log 2>&1 | grep -q SUCCESS) && echo legacy pass || echo legacy fail" >> $sh
608 echo "echo -n $(basename $sh .sh):' '" >> $sh
609 echo "(qemu-system-x86_64 -m 256m -bios ~/bios/OVMF-X64.fd --drive file=${img},format=raw ${qser} | tee -a $log 2>&1 | grep -q SUCCESS) && echo uefi pass || echo uefi fail" >> $sh
622 echo "qemu-system-i386 --drive file=${img},format=raw ${qser}" > $sh
632 echo "qemu-system-i386 -bios ~/bios/OVMF-X32.fd --drive file=${img},format=raw ${qser}" > $sh
636 # Needs UEFI to be supported
642 echo "qemu-system-i386 --drive file=${img},format=raw ${qser}" > $sh
643 echo "qemu-system-i386 -bios ~/bios/OVMF-X32.fd --drive file=${img},format=raw ${qser}" >> $sh
655 # Create sparse file and mount newly created filesystem(s) on it
656 img=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.img
657 sh=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.sh
658 echo "$sh" >> ${IMGDIR}/all.sh
659 echo date >> ${IMGDIR}/all.sh
660 echo "vvvvvvvvvvvvvv Creating $img vvvvvvvvvvvvvvv"
662 eval mk_${geli}_${scheme}_${fs}_${bios} ${DESTDIR} ${img} ${MNTPT} ${geli} ${scheme} ${fs} ${bios}
663 eval qemu_${arch}_${bios} ${img} ${sh}
664 [ -n "${SUDO_USER}" ] && chown ${SUDO_USER} ${img}*
665 echo "^^^^^^^^^^^^^^ Created $img ^^^^^^^^^^^^^^^"
668 # Powerpc -- doesn't work but maybe it would enough for testing -- needs details
670 # qemu-system-ppc64 -drive file=/path/to/disk.img,format=raw
673 SRCTOP=$(make -v SRCTOP)
675 OBJDIR=$(make -v .OBJDIR)
676 IMGDIR=${OBJDIR}/boot-images
678 MNTPT=$(mktemp -d /tmp/stand-test.XXXXXX)
680 # Setup the installed tree...
681 DESTDIR=${OBJDIR}/boot-tree
683 mkdir -p ${DESTDIR}/boot/defaults
684 mkdir -p ${DESTDIR}/boot/kernel
685 cp /boot/kernel/kernel ${DESTDIR}/boot/kernel
686 echo -h -D -S115200 > ${DESTDIR}/boot.config
687 cat > ${DESTDIR}/boot/loader.conf <<EOF
688 comconsole_speed=115200
692 cp /boot/device.hints ${DESTDIR}/boot/device.hints
693 # Assume we're already built
694 make install DESTDIR=${DESTDIR} MK_MAN=no MK_INSTALL_AS_USER=yes WITHOUT_DEBUG_FILES=yes
695 if [ $? -ne 0 ]; then
696 echo "make install failed"
699 # Copy init, /bin/sh, minimal libraries and testing /etc/rc
700 mkdir -p ${DESTDIR}/sbin ${DESTDIR}/bin \
701 ${DESTDIR}/lib ${DESTDIR}/libexec \
702 ${DESTDIR}/etc ${DESTDIR}/dev
703 for f in /sbin/halt /sbin/init /bin/sh /sbin/sysctl $(ldd /bin/sh | awk 'NF == 4 { print $3; }') /libexec/ld-elf.so.1; do
706 cat > ${DESTDIR}/etc/rc <<EOF
709 sysctl machdep.bootmethod
710 echo "RC COMMAND RUNNING -- SUCCESS!!!!!"
714 # If we were given exactly 5 args, go make that one image.
716 rm -f ${IMGDIR}/all.sh
717 echo date > ${IMGDIR}/all.sh
718 chmod +x ${IMGDIR}/all.sh
720 if [ $# -eq 5 ]; then
722 echo ${IMGDIR}/all.sh
726 # OK. Let the games begin
728 for arch in amd64; do
729 for geli in nogeli; do # geli
730 for scheme in gpt mbr; do
731 for fs in ufs zfs; do
732 for bios in legacy uefi both; do
733 make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
739 # We should also do a cd image for amd64 here
740 echo ${IMGDIR}/all.sh
746 # Notes for the future
749 for geli in nogeli geli; do
750 for scheme in gpt mbr; do
751 for fs in ufs zfs; do
752 for bios in legacy; do
753 # The legacy boot is shared with amd64 so those routines could
754 # likely be used here.
755 make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
761 # We should also do a cd image for i386 here
763 for arch in arm aarch64; do
764 geli=nogeli # I don't think geli boot works / is supported on arm
765 for scheme in gpt mbr; do
766 for fs in ufs zfs; do
767 bios=efi # Note: arm has some uboot support with ufs, what to do?
768 make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
773 # It's not clear that the nested looping paradigm is best for powerpc
774 # due to its diversity.
775 for arch in powerpc powerpc64 powerpc64le; do
777 for scheme in apm gpt; do
778 fs=ufs # zfs + gpt might be supported?
779 for bios in ofw uboot chrp; do
780 make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
785 for arch in riscv; do
787 fs=ufs # Generic ZFS booting support with efi?
790 make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}