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 userland if someone
18 # creates userland geli and zfs tools.
20 # This assumes an external program install-boot.sh which will install
21 # the appropriate boot files in the appropriate locations.
23 # These images assume ada0 will be the root image. We should likely
24 # use labels, but we don't.
26 # Assumes you've already rebuilt... maybe bad? Also maybe bad: the env
27 # vars should likely be conditionally set to allow better automation.
30 . $(dirname $0)/install-boot.sh
36 # Copy kernel + boot loader
37 (cd $src ; tar cf - .) | (cd $dst; tar xf -)
40 mk_nogeli_gpt_ufs_legacy() {
44 cat > ${src}/etc/fstab <<EOF
45 /dev/ada0p2 / ufs rw 1 1
47 makefs -t ffs -B little -s 200m ${img}.p2 ${src}
48 mkimg -s gpt -b ${src}/boot/pmbr \
49 -p freebsd-boot:=${src}/boot/gptboot \
50 -p freebsd-ufs:=${img}.p2 -o ${img}
51 rm -f ${src}/etc/fstab
54 mk_nogeli_gpt_ufs_uefi() {
58 cat > ${src}/etc/fstab <<EOF
59 /dev/ada0p2 / ufs rw 1 1
61 make_esp_file ${img}.p1 ${espsize} ${src}/boot/loader.efi
62 makefs -t ffs -B little -s 200m ${img}.p2 ${src}
65 -p freebsd-ufs:=${img}.p2 -o ${img}
66 rm -f ${src}/etc/fstab
69 mk_nogeli_gpt_ufs_both() {
73 cat > ${src}/etc/fstab <<EOF
74 /dev/ada0p3 / ufs rw 1 1
76 make_esp_file ${img}.p1 ${espsize} ${src}/boot/loader.efi
77 makefs -t ffs -B little -s 200m ${img}.p3 ${src}
78 # p1 is boot for uefi, p2 is boot for gpt, p3 is /
79 mkimg -b ${src}/boot/pmbr -s gpt \
81 -p freebsd-boot:=${src}/boot/gptboot \
82 -p freebsd-ufs:=${img}.p3 \
84 rm -f ${src}/etc/fstab
87 mk_nogeli_gpt_zfs_legacy() {
95 pool=nogeli-gpt-zfs-legacy
97 dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
98 md=$(mdconfig -f ${img})
99 gpart create -s gpt ${md}
100 gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k
101 gpart add -t freebsd-zfs -l root $md
102 # install-boot will make this bootable
103 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2
104 zpool set bootfs=${pool} ${pool}
105 zfs create -po mountpoint=/ ${pool}/ROOT/default
106 # NB: The online guides go nuts customizing /var and other mountpoints here, no need
107 cpsys ${src} ${mntpt}
108 # need to make a couple of tweaks
109 cat >> ${mntpt}/boot/loader.conf <<EOF
113 cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
114 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
115 cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
117 zfs umount -f ${pool}/ROOT/default
118 zfs set mountpoint=none ${pool}/ROOT/default
119 zpool set bootfs=${pool}/ROOT/default ${pool}
120 zpool set autoexpand=on ${pool}
122 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
126 mk_nogeli_gpt_zfs_uefi() {
134 pool=nogeli-gpt-zfs-uefi
136 dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
137 md=$(mdconfig -f ${img})
138 gpart create -s gpt ${md}
139 gpart add -t efi -s ${espsize}k -a 4k ${md}
140 gpart add -t freebsd-zfs -l root $md
141 # install-boot will make this bootable
142 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2
143 zpool set bootfs=${pool} ${pool}
144 zfs create -po mountpoint=/ ${pool}/ROOT/default
145 # NB: The online guides go nuts customizing /var and other mountpoints here, no need
146 cpsys ${src} ${mntpt}
147 # need to make a couple of tweaks
148 cat >> ${mntpt}/boot/loader.conf <<EOF
152 cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
153 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
154 cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
156 zfs umount -f ${pool}/ROOT/default
157 zfs set mountpoint=none ${pool}/ROOT/default
158 zpool set bootfs=${pool}/ROOT/default ${pool}
159 zpool set autoexpand=on ${pool}
161 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
165 mk_nogeli_gpt_zfs_both() {
173 pool=nogeli-gpt-zfs-both
175 dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
176 md=$(mdconfig -f ${img})
177 gpart create -s gpt ${md}
178 gpart add -t efi -s ${espsize}k -a 4k ${md}
179 gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k
180 gpart add -t freebsd-zfs -l root $md
181 # install-boot will make this bootable
182 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3
183 zpool set bootfs=${pool} ${pool}
184 zfs create -po mountpoint=/ ${pool}/ROOT/default
185 # NB: The online guides go nuts customizing /var and other mountpoints here, no need
186 cpsys ${src} ${mntpt}
187 # need to make a couple of tweaks
188 cat >> ${mntpt}/boot/loader.conf <<EOF
192 cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
193 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
194 cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
196 zfs umount -f ${pool}/ROOT/default
197 zfs set mountpoint=none ${pool}/ROOT/default
198 zpool set bootfs=${pool}/ROOT/default ${pool}
199 zpool set autoexpand=on ${pool}
201 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
205 mk_nogeli_mbr_ufs_legacy() {
209 cat > ${src}/etc/fstab <<EOF
210 /dev/ada0s1a / ufs rw 1 1
212 makefs -t ffs -B little -s 200m ${img}.s1a ${src}
213 mkimg -s bsd -b ${src}/boot/boot -p freebsd-ufs:=${img}.s1a -o ${img}.s1
214 mkimg -a 1 -s mbr -b ${src}/boot/boot0sio -p freebsd:=${img}.s1 -o ${img}
215 rm -f ${src}/etc/fstab
218 mk_nogeli_mbr_ufs_uefi() {
222 cat > ${src}/etc/fstab <<EOF
223 /dev/ada0s2a / ufs rw 1 1
225 make_esp_file ${img}.s1 ${espsize} ${src}/boot/loader.efi
226 makefs -t ffs -B little -s 200m ${img}.s2a ${src}
227 mkimg -s bsd -p freebsd-ufs:=${img}.s2a -o ${img}.s2
228 mkimg -a 1 -s mbr -p efi:=${img}.s1 -p freebsd:=${img}.s2 -o ${img}
229 rm -f ${src}/etc/fstab
232 mk_nogeli_mbr_ufs_both() {
236 cat > ${src}/etc/fstab <<EOF
237 /dev/ada0s2a / ufs rw 1 1
239 make_esp_file ${img}.s1 ${espsize} ${src}/boot/loader.efi
240 makefs -t ffs -B little -s 200m ${img}.s2a ${src}
241 mkimg -s bsd -b ${src}/boot/boot -p freebsd-ufs:=${img}.s2a -o ${img}.s2
242 mkimg -a 2 -s mbr -b ${src}/boot/mbr -p efi:=${img}.s1 -p freebsd:=${img}.s2 -o ${img}
243 rm -f ${src}/etc/fstab
246 mk_nogeli_mbr_zfs_legacy() {
254 pool=nogeli-mbr-zfs-legacy
256 dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
257 md=$(mdconfig -f ${img})
258 gpart create -s mbr ${md}
259 gpart add -t freebsd ${md}
260 gpart set -a active -i 1 ${md}
261 gpart create -s bsd ${md}s1
262 gpart add -t freebsd-zfs ${md}s1
263 # install-boot will make this bootable
264 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s1a
265 zpool set bootfs=${pool} ${pool}
266 zfs create -po mountpoint=/ ${pool}/ROOT/default
267 # NB: The online guides go nuts customizing /var and other mountpoints here, no need
268 cpsys ${src} ${mntpt}
269 # need to make a couple of tweaks
270 cat >> ${mntpt}/boot/loader.conf <<EOF
274 cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
275 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
276 cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
278 zfs umount -f ${pool}/ROOT/default
279 zfs set mountpoint=none ${pool}/ROOT/default
280 zpool set bootfs=${pool}/ROOT/default ${pool}
281 zpool set autoexpand=on ${pool}
283 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
287 mk_nogeli_mbr_zfs_uefi() {
295 pool=nogeli-mbr-zfs-uefi
297 dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
298 md=$(mdconfig -f ${img})
299 gpart create -s mbr ${md}
300 gpart add -t efi -s ${espsize}k ${md}
301 gpart add -t freebsd ${md}
302 gpart set -a active -i 2 ${md}
303 gpart create -s bsd ${md}s2
304 gpart add -t freebsd-zfs ${md}s2
305 # install-boot will make this bootable
306 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s2a
307 zpool set bootfs=${pool} ${pool}
308 zfs create -po mountpoint=/ ${pool}/ROOT/default
309 # NB: The online guides go nuts customizing /var and other mountpoints here, no need
310 cpsys ${src} ${mntpt}
311 # need to make a couple of tweaks
312 cat >> ${mntpt}/boot/loader.conf <<EOF
316 cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
317 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
318 cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
320 zfs umount -f ${pool}/ROOT/default
321 zfs set mountpoint=none ${pool}/ROOT/default
322 zpool set bootfs=${pool}/ROOT/default ${pool}
323 zpool set autoexpand=on ${pool}
325 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
329 mk_nogeli_mbr_zfs_both() {
337 pool=nogeli-mbr-zfs-both
339 dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
340 md=$(mdconfig -f ${img})
341 gpart create -s mbr ${md}
342 gpart add -t efi -s ${espsize}k ${md}
343 gpart add -t freebsd ${md}
344 gpart set -a active -i 2 ${md}
345 gpart create -s bsd ${md}s2
346 gpart add -t freebsd-zfs ${md}s2
347 # install-boot will make this bootable
348 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s2a
349 zpool set bootfs=${pool} ${pool}
350 zfs create -po mountpoint=/ ${pool}/ROOT/default
351 # NB: The online guides go nuts customizing /var and other mountpoints here, no need
352 cpsys ${src} ${mntpt}
353 # need to make a couple of tweaks
354 cat >> ${mntpt}/boot/loader.conf <<EOF
358 cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
359 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
360 cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
362 zfs umount -f ${pool}/ROOT/default
363 zfs set mountpoint=none ${pool}/ROOT/default
364 zpool set bootfs=${pool}/ROOT/default ${pool}
365 zpool set autoexpand=on ${pool}
367 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
371 mk_geli_gpt_ufs_legacy() {
380 dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
381 md=$(mdconfig -f ${img})
382 gpart create -s gpt ${md}
383 gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k
384 gpart add -t freebsd-ufs -l root $md
385 # install-boot will make this bootable
386 echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p2
387 echo ${passphrase} | geli attach -j - ${md}p2
388 newfs /dev/${md}p2.eli
389 mount /dev/${md}p2.eli ${mntpt}
390 cpsys ${src} ${mntpt}
391 # need to make a couple of tweaks
392 cat > ${mntpt}/boot/loader.conf <<EOF
395 cat > ${mntpt}/etc/fstab <<EOF
396 /dev/ada0p2.eli / ufs rw 1 1
399 cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
403 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
407 mk_geli_gpt_ufs_uefi() {
416 dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
417 md=$(mdconfig -f ${img})
418 gpart create -s gpt ${md}
419 gpart add -t efi -s ${espsize}k -a 4k ${md}
420 gpart add -t freebsd-ufs -l root $md
421 # install-boot will make this bootable
422 echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p2
423 echo ${passphrase} | geli attach -j - ${md}p2
424 newfs /dev/${md}p2.eli
425 mount /dev/${md}p2.eli ${mntpt}
426 cpsys ${src} ${mntpt}
427 # need to make a couple of tweaks
428 cat > ${mntpt}/boot/loader.conf <<EOF
431 cat > ${mntpt}/etc/fstab <<EOF
432 /dev/ada0p2.eli / ufs rw 1 1
435 cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
439 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
443 mk_geli_gpt_ufs_both() {
452 dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
453 md=$(mdconfig -f ${img})
454 gpart create -s gpt ${md}
455 gpart add -t efi -s ${espsize}k -a 4k ${md}
456 gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k
457 gpart add -t freebsd-ufs -l root $md
458 # install-boot will make this bootable
459 echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p3
460 echo ${passphrase} | geli attach -j - ${md}p3
461 newfs /dev/${md}p3.eli
462 mount /dev/${md}p3.eli ${mntpt}
463 cpsys ${src} ${mntpt}
464 # need to make a couple of tweaks
465 cat > ${mntpt}/boot/loader.conf <<EOF
468 cat > ${mntpt}/etc/fstab <<EOF
469 /dev/ada0p3.eli / ufs rw 1 1
472 cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
476 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
480 mk_geli_gpt_zfs_legacy() {
488 pool=geli-gpt-zfs-legacy
490 dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
491 md=$(mdconfig -f ${img})
492 gpart create -s gpt ${md}
493 gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k
494 gpart add -t freebsd-zfs -l root $md
495 # install-boot will make this bootable
496 echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p2
497 echo ${passphrase} | geli attach -j - ${md}p2
498 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2.eli
499 zpool set bootfs=${pool} ${pool}
500 zfs create -po mountpoint=/ ${pool}/ROOT/default
501 # NB: The online guides go nuts customizing /var and other mountpoints here, no need
502 cpsys ${src} ${mntpt}
503 # need to make a couple of tweaks
504 cat >> ${mntpt}/boot/loader.conf <<EOF
509 cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
510 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
511 cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
512 cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
514 zfs umount -f ${pool}/ROOT/default
515 zfs set mountpoint=none ${pool}/ROOT/default
516 zpool set bootfs=${pool}/ROOT/default ${pool}
517 zpool set autoexpand=on ${pool}
520 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
524 mk_geli_gpt_zfs_uefi() {
532 pool=geli-gpt-zfs-uefi
534 dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
535 md=$(mdconfig -f ${img})
536 gpart create -s gpt ${md}
537 gpart add -t efi -s ${espsize}k -a 4k ${md}
538 gpart add -t freebsd-zfs -l root $md
539 # install-boot will make this bootable
540 echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p2
541 echo ${passphrase} | geli attach -j - ${md}p2
542 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2.eli
543 zpool set bootfs=${pool} ${pool}
544 zfs create -po mountpoint=/ ${pool}/ROOT/default
545 # NB: The online guides go nuts customizing /var and other mountpoints here, no need
546 cpsys ${src} ${mntpt}
547 # need to make a couple of tweaks
548 cat >> ${mntpt}/boot/loader.conf <<EOF
553 cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
554 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
555 cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
556 cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
558 zfs umount -f ${pool}/ROOT/default
559 zfs set mountpoint=none ${pool}/ROOT/default
560 zpool set bootfs=${pool}/ROOT/default ${pool}
561 zpool set autoexpand=on ${pool}
564 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
568 mk_geli_gpt_zfs_both() {
576 pool=geli-gpt-zfs-both
578 dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
579 md=$(mdconfig -f ${img})
580 gpart create -s gpt ${md}
581 gpart add -t efi -s ${espsize}k -a 4k ${md}
582 gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k
583 gpart add -t freebsd-zfs -l root $md
584 # install-boot will make this bootable
585 echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p3
586 echo ${passphrase} | geli attach -j - ${md}p3
587 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3.eli
588 zpool set bootfs=${pool} ${pool}
589 zfs create -po mountpoint=/ ${pool}/ROOT/default
590 # NB: The online guides go nuts customizing /var and other mountpoints here, no need
591 cpsys ${src} ${mntpt}
592 # need to make a couple of tweaks
593 cat > ${mntpt}/boot/loader.conf <<EOF
598 cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
599 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
600 cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
601 cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
603 zfs umount -f ${pool}/ROOT/default
604 zfs set mountpoint=none ${pool}/ROOT/default
605 zpool set bootfs=${pool}/ROOT/default ${pool}
606 zpool set autoexpand=on ${pool}
609 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
613 # GELI+MBR is not a valid configuration
614 mk_geli_mbr_ufs_legacy() {
617 mk_geli_mbr_ufs_uefi() {
620 mk_geli_mbr_ufs_both() {
623 mk_geli_mbr_zfs_legacy() {
626 mk_geli_mbr_zfs_uefi() {
629 mk_geli_mbr_zfs_both() {
637 mk_sparc64_nogeli_vtoc8_ufs_ofw() {
646 cat > ${src}/etc/fstab <<EOF
647 /dev/ada0a / ufs rw 1 1
649 makefs -t ffs -B big -s 200m ${img} ${src}
650 md=$(mdconfig -f ${img})
651 # For non-native builds, ensure that geom_part(4) supports VTOC8.
652 kldload geom_part_vtoc8.ko
653 gpart create -s VTOC8 ${md}
654 gpart add -t freebsd-ufs ${md}
655 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
657 rm -f ${src}/etc/fstab
660 qser="-serial telnet::4444,server -nographic"
662 # https://wiki.freebsd.org/QemuRecipes
669 echo "qemu-system-aarch64 -m 4096M -cpu cortex-a57 -M virt \
670 -bios QEMU_EFI.fd ${qser} \
671 -drive if=none,file=${img},id=hd0 \
672 -device virtio-blk-device,drive=hd0" > $sh
674 # https://wiki.freebsd.org/arm64/QEMU also has
675 # -device virtio-net-device,netdev=net0
676 # -netdev user,id=net0
685 echo "qemu-system-x86_64 -m 256m --drive file=${img},format=raw ${qser}" > $sh
694 echo "qemu-system-x86_64 -m 256m -bios ~/bios/OVMF-X64.fd --drive file=${img},format=raw ${qser}" > $sh
703 echo "qemu-system-x86_64 -m 256m --drive file=${img},format=raw ${qser}" > $sh
704 echo "qemu-system-x86_64 -m 256m -bios ~/bios/OVMF-X64.fd --drive file=${img},format=raw ${qser}" >> $sh
717 echo "qemu-system-i386 --drive file=${img},format=raw ${qser}" > $sh
727 echo "qemu-system-i386 -bios ~/bios/OVMF-X32.fd --drive file=${img},format=raw ${qser}" > $sh
731 # Needs UEFI to be supported
737 echo "qemu-system-i386 --drive file=${img},format=raw ${qser}" > $sh
738 echo "qemu-system-i386 -bios ~/bios/OVMF-X32.fd --drive file=${img},format=raw ${qser}" >> $sh
750 # Create sparse file and mount newly created filesystem(s) on it
751 img=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.img
752 sh=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.sh
753 echo "vvvvvvvvvvvvvv Creating $img vvvvvvvvvvvvvvv"
755 eval mk_${geli}_${scheme}_${fs}_${bios} ${DESTDIR} ${img} ${MNTPT} ${geli} ${scheme} ${fs} ${bios}
756 eval qemu_${arch}_${bios} ${img} ${sh}
757 [ -n "${SUDO_USER}" ] && chown ${SUDO_USER} ${img}*
758 echo "^^^^^^^^^^^^^^ Created $img ^^^^^^^^^^^^^^^"
762 # qemu-system-mips -kernel /path/to/rootfs/boot/kernel/kernel -nographic -hda /path/to/disk.img -m 2048
764 # Powerpc -- doesn't work but maybe it would enough for testing -- needs details
766 # qemu-system-ppc64 -drive file=/path/to/disk.img,format=raw
769 # qemu-system-sparc64 -drive file=/path/to/disk.img,format=raw
772 SRCTOP=$(make -v SRCTOP)
774 OBJDIR=$(make -v .OBJDIR)
775 IMGDIR=${OBJDIR}/boot-images
777 MNTPT=$(mktemp -d /tmp/stand-test.XXXXXX)
779 # Setup the installed tree...
780 DESTDIR=${OBJDIR}/boot-tree
782 mkdir -p ${DESTDIR}/boot/defaults
783 mkdir -p ${DESTDIR}/boot/kernel
784 cp /boot/kernel/kernel ${DESTDIR}/boot/kernel
785 echo -h -D -S115200 > ${DESTDIR}/boot.config
786 cat > ${DESTDIR}/boot/loader.conf <<EOF
788 comconsole_speed=115200
793 cp /boot/device.hints ${DESTDIR}/boot/device.hints
794 # Assume we're already built
795 make install DESTDIR=${DESTDIR} MK_MAN=no MK_INSTALL_AS_USER=yes WITHOUT_DEBUG_FILES=yes
796 if [ $? -ne 0 ]; then
797 echo "make install failed"
800 # Copy init, /bin/sh, minimal libraries and testing /etc/rc
801 mkdir -p ${DESTDIR}/sbin ${DESTDIR}/bin \
802 ${DESTDIR}/lib ${DESTDIR}/libexec \
803 ${DESTDIR}/etc ${DESTDIR}/dev
804 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
807 cat > ${DESTDIR}/etc/rc <<EOF
810 sysctl machdep.bootmethod
811 echo "RC COMMAND RUNNING -- SUCCESS!!!!!"
815 # If we were given exactly 5 args, go make that one image.
817 if [ $# -eq 5 ]; then
822 # OK. Let the games begin
824 for arch in amd64; do
825 for geli in nogeli geli; do
826 for scheme in gpt mbr; do
827 for fs in ufs zfs; do
828 for bios in legacy uefi both; do
829 make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
840 # Notes for the future
843 for geli in nogeli geli; do
844 for scheme in gpt mbr; do
845 for fs in ufs zfs; do
846 for bios in legacy; do
847 make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
854 for arch in arm aarch64; do
855 for scheme in gpt mbr; do
857 for bios in uboot efi; do
858 make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
863 for arch in powerpc powerpc64; do
864 for scheme in ppc-wtf; do
866 for bios in ofw uboot chrp; do
867 make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
872 for arch in sparc64; do
873 for geli in nogeli; do
874 for scheme in vtoc8; do
877 make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}