11 # Builds all the bat-shit crazy combinations we support booting from,
12 # at least for amd64. It assume you have a ~sane kernel in /boot/kernel
13 # and copies that into the ~150MB root images we create (we create the du
14 # size of the kernel + 20MB
16 # Sad panda sez: this runs as root, but could be userland if someone
17 # creates userland geli and zfs tools.
19 # This assumes an external prograam install-boot.sh which will install
20 # the appropriate boot files in the appropriate locations.
22 # These images assume ada0 will be the root image. We should likely
23 # use labels, but we don't.
25 # ASsumes you've already rebuilt... maybe bad? Also maybe bad: the env
26 # vars should likely be conditionally set to allow better automation.
33 # Copy kernel + boot loader
34 (cd $src ; tar cf - .) | (cd $dst; tar xf -)
39 local src dst md mntpt
43 if [ "${do_boot1_efi}" -eq 1 ]; then
44 cp ${src}/boot/boot1.efifat ${dst}
46 dd if=/dev/zero of=${dst} count=1 seek=$((100 * 1024 * 1024 / 512))
47 md=$(mdconfig -f ${dst})
48 newfs_msdos -a 32 /dev/${md}
49 mntpt=$(mktemp -d /tmp/stand-test.XXXXXX)
50 mount -t msdos /dev/${md} ${mntpt}
51 # mkdir -p ${mntpt}/efi/freebsd # not yet
52 mkdir -p ${mntpt}/efi/boot
53 cp ${src}/boot/loader.efi ${mntpt}/efi/boot/bootx64.efi
60 mk_nogeli_gpt_ufs_legacy() {
64 cat > ${src}/etc/fstab <<EOF
65 /dev/ada0p2 / ufs rw 1 1
67 makefs -t ffs -B little -s 200m ${img}.p2 ${src}
68 mkimg -s gpt -b ${src}/boot/pmbr \
69 -p freebsd-boot:=${src}/boot/gptboot \
70 -p freebsd-ufs:=${img}.p2 -o ${img}
71 rm -f ${src}/etc/fstab
74 mk_nogeli_gpt_ufs_uefi() {
78 cat > ${src}/etc/fstab <<EOF
79 /dev/ada0p2 / ufs rw 1 1
81 make_esp ${src} ${img}.p1
82 makefs -t ffs -B little -s 200m ${img}.p2 ${src}
85 -p freebsd-ufs:=${img}.p2 -o ${img}
86 rm -f ${src}/etc/fstab
89 mk_nogeli_gpt_ufs_both() {
93 cat > ${src}/etc/fstab <<EOF
94 /dev/ada0p3 / ufs rw 1 1
96 make_esp ${src} ${img}.p1
97 makefs -t ffs -B little -s 200m ${img}.p3 ${src}
98 # p1 is boot for uefi, p2 is boot for gpt, p3 is /
99 mkimg -b ${src}/boot/pmbr -s gpt \
101 -p freebsd-boot:=${src}/boot/gptboot \
102 -p freebsd-ufs:=${img}.p3 \
104 rm -f ${src}/etc/fstab
107 mk_nogeli_gpt_zfs_legacy() {
115 pool=nogeli-gpt-zfs-legacy
117 dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
118 md=$(mdconfig -f ${img})
119 gpart create -s gpt ${md}
120 gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k
121 gpart add -t freebsd-zfs -l root $md
122 # install-boot will make this bootable
123 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2
124 zpool set bootfs=${pool} ${pool}
125 zfs create -po mountpoint=/ ${pool}/ROOT/default
126 # NB: The online guides go nuts customizing /var and other mountpoints here, no need
127 cpsys ${src} ${mntpt}
128 # need to make a couple of tweaks
129 cat >> ${mntpt}/boot/loader.conf <<EOF
133 cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
134 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
135 cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
137 zfs umount -f ${pool}/ROOT/default
138 zfs set mountpoint=none ${pool}/ROOT/default
139 zpool set bootfs=${pool}/ROOT/default ${pool}
140 zpool set autoexpand=on ${pool}
142 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
146 mk_nogeli_gpt_zfs_uefi() {
154 pool=nogeli-gpt-zfs-uefi
156 dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
157 md=$(mdconfig -f ${img})
158 gpart create -s gpt ${md}
159 gpart add -t efi -s 800k -a 4k ${md}
160 gpart add -t freebsd-zfs -l root $md
161 # install-boot will make this bootable
162 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2
163 zpool set bootfs=${pool} ${pool}
164 zfs create -po mountpoint=/ ${pool}/ROOT/default
165 # NB: The online guides go nuts customizing /var and other mountpoints here, no need
166 cpsys ${src} ${mntpt}
167 # need to make a couple of tweaks
168 cat >> ${mntpt}/boot/loader.conf <<EOF
172 cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
173 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
174 cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
176 zfs umount -f ${pool}/ROOT/default
177 zfs set mountpoint=none ${pool}/ROOT/default
178 zpool set bootfs=${pool}/ROOT/default ${pool}
179 zpool set autoexpand=on ${pool}
181 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
185 mk_nogeli_gpt_zfs_both() {
193 pool=nogeli-gpt-zfs-both
195 dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
196 md=$(mdconfig -f ${img})
197 gpart create -s gpt ${md}
198 gpart add -t efi -s 800k -a 4k ${md}
199 gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k
200 gpart add -t freebsd-zfs -l root $md
201 # install-boot will make this bootable
202 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3
203 zpool set bootfs=${pool} ${pool}
204 zfs create -po mountpoint=/ ${pool}/ROOT/default
205 # NB: The online guides go nuts customizing /var and other mountpoints here, no need
206 cpsys ${src} ${mntpt}
207 # need to make a couple of tweaks
208 cat >> ${mntpt}/boot/loader.conf <<EOF
212 cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
213 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
214 cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
216 zfs umount -f ${pool}/ROOT/default
217 zfs set mountpoint=none ${pool}/ROOT/default
218 zpool set bootfs=${pool}/ROOT/default ${pool}
219 zpool set autoexpand=on ${pool}
221 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
225 mk_nogeli_mbr_ufs_legacy() {
229 cat > ${src}/etc/fstab <<EOF
230 /dev/ada0s1a / ufs rw 1 1
232 makefs -t ffs -B little -s 200m ${img}.s1a ${src}
233 mkimg -s bsd -b ${src}/boot/boot -p freebsd-ufs:=${img}.s1a -o ${img}.s1
234 mkimg -a 1 -s mbr -b ${src}/boot/boot0sio -p freebsd:=${img}.s1 -o ${img}
235 rm -f ${src}/etc/fstab
238 mk_nogeli_mbr_ufs_uefi() {
242 cat > ${src}/etc/fstab <<EOF
243 /dev/ada0s2a / ufs rw 1 1
245 make_esp ${src} ${img}.s1
246 makefs -t ffs -B little -s 200m ${img}.s2a ${src}
247 mkimg -s bsd -p freebsd-ufs:=${img}.s2a -o ${img}.s2
248 mkimg -a 1 -s mbr -p efi:=${img}.s1 -p freebsd:=${img}.s2 -o ${img}
249 rm -f ${src}/etc/fstab
252 mk_nogeli_mbr_ufs_both() {
256 cat > ${src}/etc/fstab <<EOF
257 /dev/ada0s2a / ufs rw 1 1
259 make_esp ${src} ${img}.s1
260 makefs -t ffs -B little -s 200m ${img}.s2a ${src}
261 mkimg -s bsd -b ${src}/boot/boot -p freebsd-ufs:=${img}.s2a -o ${img}.s2
262 mkimg -a 2 -s mbr -b ${src}/boot/mbr -p efi:=${img}.s1 -p freebsd:=${img}.s2 -o ${img}
263 rm -f ${src}/etc/fstab
266 mk_nogeli_mbr_zfs_legacy() {
274 pool=nogeli-mbr-zfs-legacy
276 dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
277 md=$(mdconfig -f ${img})
278 gpart create -s mbr ${md}
279 gpart add -t freebsd ${md}
280 gpart set -a active -i 1 ${md}
281 gpart create -s bsd ${md}s1
282 gpart add -t freebsd-zfs ${md}s1
283 # install-boot will make this bootable
284 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s1a
285 zpool set bootfs=${pool} ${pool}
286 zfs create -po mountpoint=/ ${pool}/ROOT/default
287 # NB: The online guides go nuts customizing /var and other mountpoints here, no need
288 cpsys ${src} ${mntpt}
289 # need to make a couple of tweaks
290 cat >> ${mntpt}/boot/loader.conf <<EOF
294 cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
295 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
296 cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
298 zfs umount -f ${pool}/ROOT/default
299 zfs set mountpoint=none ${pool}/ROOT/default
300 zpool set bootfs=${pool}/ROOT/default ${pool}
301 zpool set autoexpand=on ${pool}
303 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
307 mk_nogeli_mbr_zfs_uefi() {
315 pool=nogeli-mbr-zfs-uefi
317 dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
318 md=$(mdconfig -f ${img})
319 gpart create -s mbr ${md}
320 gpart add -t \!239 -s 800k ${md}
321 gpart add -t freebsd ${md}
322 gpart set -a active -i 2 ${md}
323 gpart create -s bsd ${md}s2
324 gpart add -t freebsd-zfs ${md}s2
325 # install-boot will make this bootable
326 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s2a
327 zpool set bootfs=${pool} ${pool}
328 zfs create -po mountpoint=/ ${pool}/ROOT/default
329 # NB: The online guides go nuts customizing /var and other mountpoints here, no need
330 cpsys ${src} ${mntpt}
331 # need to make a couple of tweaks
332 cat >> ${mntpt}/boot/loader.conf <<EOF
336 cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
337 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
338 cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
340 zfs umount -f ${pool}/ROOT/default
341 zfs set mountpoint=none ${pool}/ROOT/default
342 zpool set bootfs=${pool}/ROOT/default ${pool}
343 zpool set autoexpand=on ${pool}
345 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
349 mk_nogeli_mbr_zfs_both() {
357 pool=nogeli-mbr-zfs-both
359 dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
360 md=$(mdconfig -f ${img})
361 gpart create -s mbr ${md}
362 gpart add -t \!239 -s 800k ${md}
363 gpart add -t freebsd ${md}
364 gpart set -a active -i 2 ${md}
365 gpart create -s bsd ${md}s2
366 gpart add -t freebsd-zfs ${md}s2
367 # install-boot will make this bootable
368 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s2a
369 zpool set bootfs=${pool} ${pool}
370 zfs create -po mountpoint=/ ${pool}/ROOT/default
371 # NB: The online guides go nuts customizing /var and other mountpoints here, no need
372 cpsys ${src} ${mntpt}
373 # need to make a couple of tweaks
374 cat >> ${mntpt}/boot/loader.conf <<EOF
378 cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
379 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
380 cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
382 zfs umount -f ${pool}/ROOT/default
383 zfs set mountpoint=none ${pool}/ROOT/default
384 zpool set bootfs=${pool}/ROOT/default ${pool}
385 zpool set autoexpand=on ${pool}
387 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
391 mk_geli_gpt_ufs_legacy() {
400 dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
401 md=$(mdconfig -f ${img})
402 gpart create -s gpt ${md}
403 gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k
404 gpart add -t freebsd-ufs -l root $md
405 # install-boot will make this bootable
406 echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p2
407 echo ${passphrase} | geli attach -j - ${md}p2
408 newfs /dev/${md}p2.eli
409 mount /dev/${md}p2.eli ${mntpt}
410 cpsys ${src} ${mntpt}
411 # need to make a couple of tweaks
412 cat > ${mntpt}/boot/loader.conf <<EOF
415 cat > ${mntpt}/etc/fstab <<EOF
416 /dev/ada0p2.eli / ufs rw 1 1
419 cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
423 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
427 mk_geli_gpt_ufs_uefi() {
436 dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
437 md=$(mdconfig -f ${img})
438 gpart create -s gpt ${md}
439 gpart add -t efi -s 800k -a 4k ${md}
440 gpart add -t freebsd-ufs -l root $md
441 # install-boot will make this bootable
442 echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p2
443 echo ${passphrase} | geli attach -j - ${md}p2
444 newfs /dev/${md}p2.eli
445 mount /dev/${md}p2.eli ${mntpt}
446 cpsys ${src} ${mntpt}
447 # need to make a couple of tweaks
448 cat > ${mntpt}/boot/loader.conf <<EOF
451 cat > ${mntpt}/etc/fstab <<EOF
452 /dev/ada0p2.eli / ufs rw 1 1
455 cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
459 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
463 mk_geli_gpt_ufs_both() {
472 dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
473 md=$(mdconfig -f ${img})
474 gpart create -s gpt ${md}
475 gpart add -t efi -s 800k -a 4k ${md}
476 gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k
477 gpart add -t freebsd-ufs -l root $md
478 # install-boot will make this bootable
479 echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p3
480 echo ${passphrase} | geli attach -j - ${md}p3
481 newfs /dev/${md}p3.eli
482 mount /dev/${md}p3.eli ${mntpt}
483 cpsys ${src} ${mntpt}
484 # need to make a couple of tweaks
485 cat > ${mntpt}/boot/loader.conf <<EOF
488 cat > ${mntpt}/etc/fstab <<EOF
489 /dev/ada0p3.eli / ufs rw 1 1
492 cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
496 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
500 mk_geli_gpt_zfs_legacy() {
508 pool=geli-gpt-zfs-legacy
510 # Note that in this flavor we create an empty p2 ufs partition, and put
511 # the bootable zfs stuff on p3, just to test the ability of the zfs probe
512 # probe routines to find a pool on a partition other than the first one.
514 dd if=/dev/zero of=${img} count=1 seek=$(( 300 * 1024 * 1024 / 512 ))
515 md=$(mdconfig -f ${img})
516 gpart create -s gpt ${md}
517 gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k
518 gpart add -t freebsd-ufs -s 100m ${md}
519 gpart add -t freebsd-zfs -l root $md
520 # install-boot will make this bootable
521 echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p3
522 echo ${passphrase} | geli attach -j - ${md}p3
523 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3.eli
524 zpool set bootfs=${pool} ${pool}
525 zfs create -po mountpoint=/ ${pool}/ROOT/default
526 # NB: The online guides go nuts customizing /var and other mountpoints here, no need
527 cpsys ${src} ${mntpt}
528 # need to make a couple of tweaks
529 cat >> ${mntpt}/boot/loader.conf <<EOF
534 cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
535 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
536 cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
537 cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
539 zfs umount -f ${pool}/ROOT/default
540 zfs set mountpoint=none ${pool}/ROOT/default
541 zpool set bootfs=${pool}/ROOT/default ${pool}
542 zpool set autoexpand=on ${pool}
545 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
549 mk_geli_gpt_zfs_uefi() {
557 pool=geli-gpt-zfs-uefi
559 # Note that in this flavor we create an empty p2 ufs partition, and put
560 # the bootable zfs stuff on p3, just to test the ability of the zfs probe
561 # probe routines to find a pool on a partition other than the first one.
563 dd if=/dev/zero of=${img} count=1 seek=$(( 300 * 1024 * 1024 / 512 ))
564 md=$(mdconfig -f ${img})
565 gpart create -s gpt ${md}
566 gpart add -t efi -s 800k -a 4k ${md}
567 gpart add -t freebsd-ufs -s 100m ${md}
568 gpart add -t freebsd-zfs -l root $md
569 # install-boot will make this bootable
570 echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p3
571 echo ${passphrase} | geli attach -j - ${md}p3
572 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3.eli
573 zpool set bootfs=${pool} ${pool}
574 zfs create -po mountpoint=/ ${pool}/ROOT/default
575 # NB: The online guides go nuts customizing /var and other mountpoints here, no need
576 cpsys ${src} ${mntpt}
577 # need to make a couple of tweaks
578 cat >> ${mntpt}/boot/loader.conf <<EOF
583 cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
584 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
585 cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
586 cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
588 zfs umount -f ${pool}/ROOT/default
589 zfs set mountpoint=none ${pool}/ROOT/default
590 zpool set bootfs=${pool}/ROOT/default ${pool}
591 zpool set autoexpand=on ${pool}
594 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
598 mk_geli_gpt_zfs_both() {
606 pool=geli-gpt-zfs-both
608 dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
609 md=$(mdconfig -f ${img})
610 gpart create -s gpt ${md}
611 gpart add -t efi -s 800k -a 4k ${md}
612 gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k
613 gpart add -t freebsd-zfs -l root $md
614 # install-boot will make this bootable
615 echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p3
616 echo ${passphrase} | geli attach -j - ${md}p3
617 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3.eli
618 zpool set bootfs=${pool} ${pool}
619 zfs create -po mountpoint=/ ${pool}/ROOT/default
620 # NB: The online guides go nuts customizing /var and other mountpoints here, no need
621 cpsys ${src} ${mntpt}
622 # need to make a couple of tweaks
623 cat > ${mntpt}/boot/loader.conf <<EOF
628 cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
629 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
630 cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
631 cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
633 zfs umount -f ${pool}/ROOT/default
634 zfs set mountpoint=none ${pool}/ROOT/default
635 zpool set bootfs=${pool}/ROOT/default ${pool}
636 zpool set autoexpand=on ${pool}
639 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
643 # GELI+MBR is not a valid configuration
644 mk_geli_mbr_ufs_legacy() {
647 mk_geli_mbr_ufs_uefi() {
650 mk_geli_mbr_ufs_both() {
653 mk_geli_mbr_zfs_legacy() {
656 mk_geli_mbr_zfs_uefi() {
659 mk_geli_mbr_zfs_both() {
667 mk_sparc64_nogeli_vtoc8_ufs_ofw() {
676 cat > ${src}/etc/fstab <<EOF
677 /dev/ada0a / ufs rw 1 1
679 makefs -t ffs -B big -s 200m ${img} ${src}
680 md=$(mdconfig -f ${img})
681 # For non-native builds, ensure that geom_part(4) supports VTOC8.
682 kldload geom_part_vtoc8.ko
683 gpart create -s VTOC8 ${md}
684 gpart add -t freebsd-ufs ${md}
685 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
687 rm -f ${src}/etc/fstab
690 qser="-serial telnet::4444,server -nographic"
692 # https://wiki.freebsd.org/QemuRecipes
699 echo "qemu-system-aarch64 -m 4096M -cpu cortex-a57 -M virt \
700 -bios QEMU_EFI.fd ${qser} \
701 -drive if=none,file=${img},id=hd0 \
702 -device virtio-blk-device,drive=hd0" > $sh
704 # https://wiki.freebsd.org/arm64/QEMU also has
705 # -device virtio-net-device,netdev=net0
706 # -netdev user,id=net0
715 echo "qemu-system-x86_64 -m 256m --drive file=${img},format=raw ${qser}" > $sh
724 echo "qemu-system-x86_64 -m 256m -bios ~/bios/OVMF-X64.fd --drive file=${img},format=raw ${qser}" > $sh
733 echo "qemu-system-x86_64 -m 256m --drive file=${img},format=raw ${qser}" > $sh
734 echo "qemu-system-x86_64 -m 256m -bios ~/bios/OVMF-X64.fd --drive file=${img},format=raw ${qser}" >> $sh
747 echo "qemu-system-i386 --drive file=${img},format=raw ${qser}" > $sh
757 echo "qemu-system-i386 -bios ~/bios/OVMF-X32.fd --drive file=${img},format=raw ${qser}" > $sh
761 # Needs UEFI to be supported
767 echo "qemu-system-i386 --drive file=${img},format=raw ${qser}" > $sh
768 echo "qemu-system-i386 -bios ~/bios/OVMF-X32.fd --drive file=${img},format=raw ${qser}" >> $sh
780 # Create sparse file and mount newly created filesystem(s) on it
781 img=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.img
782 sh=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.sh
783 echo "vvvvvvvvvvvvvv Creating $img vvvvvvvvvvvvvvv"
785 eval mk_${geli}_${scheme}_${fs}_${bios} ${DESTDIR} ${img} ${MNTPT} ${geli} ${scheme} ${fs} ${bios}
786 eval qemu_${arch}_${bios} ${img} ${sh}
787 [ -n "${SUDO_USER}" ] && chown ${SUDO_USER} ${img}*
788 echo "^^^^^^^^^^^^^^ Created $img ^^^^^^^^^^^^^^^"
792 # qemu-system-mips -kernel /path/to/rootfs/boot/kernel/kernel -nographic -hda /path/to/disk.img -m 2048
794 # Powerpc -- doesn't work but maybe it would enough for testing -- needs details
796 # qemu-system-ppc64 -drive file=/path/to/disk.img,format=raw
799 # qemu-system-sparc64 -drive file=/path/to/disk.img,format=raw
802 SRCTOP=$(make -v SRCTOP)
804 OBJDIR=$(make -v .OBJDIR)
805 IMGDIR=${OBJDIR}/boot-images
807 MNTPT=$(mktemp -d /tmp/stand-test.XXXXXX)
809 # Setup the installed tree...
810 DESTDIR=${OBJDIR}/boot-tree
812 mkdir -p ${DESTDIR}/boot/defaults
813 mkdir -p ${DESTDIR}/boot/kernel
814 cp /boot/kernel/kernel ${DESTDIR}/boot/kernel
815 echo -h -D -S115200 > ${DESTDIR}/boot.config
816 cat > ${DESTDIR}/boot/loader.conf <<EOF
818 comconsole_speed=115200
823 cp /boot/device.hints ${DESTDIR}/boot/device.hints
824 # Assume we're already built
825 make install DESTDIR=${DESTDIR} MK_MAN=no MK_INSTALL_AS_USER=yes WITHOUT_DEBUG_FILES=yes
826 if [ $? -ne 0 ]; then
827 echo "make install failed"
830 # Copy init, /bin/sh, minimal libraries and testing /etc/rc
831 mkdir -p ${DESTDIR}/sbin ${DESTDIR}/bin \
832 ${DESTDIR}/lib ${DESTDIR}/libexec \
833 ${DESTDIR}/etc ${DESTDIR}/dev
834 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
837 cat > ${DESTDIR}/etc/rc <<EOF
840 sysctl machdep.bootmethod
841 echo "RC COMMAND RUNNING -- SUCCESS!!!!!"
845 # If we were given exactly 5 args, go make that one image.
847 if [ $# -eq 5 ]; then
852 # OK. Let the games begin
854 for arch in amd64; do
855 for geli in nogeli geli; do
856 for scheme in gpt mbr; do
857 for fs in ufs zfs; do
858 for bios in legacy uefi both; do
859 make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
870 # Notes for the future
873 for geli in nogeli geli; do
874 for scheme in gpt mbr; do
875 for fs in ufs zfs; do
876 for bios in legacy; do
877 make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
884 for arch in arm aarch64; do
885 for scheme in gpt mbr; do
887 for bios in uboot efi; do
888 make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
893 for arch in powerpc powerpc64; do
894 for scheme in ppc-wtf; do
896 for bios in ofw uboot chrp; do
897 make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
902 for arch in sparc64; do
903 for geli in nogeli; do
904 for scheme in vtoc8; do
907 make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}