8 # The smallest FAT32 filesystem is 33292 KB
13 # Builds all the bat-shit crazy combinations we support booting from,
14 # at least for amd64. It assume you have a ~sane kernel in /boot/kernel
15 # and copies that into the ~150MB root images we create (we create the du
16 # size of the kernel + 20MB
18 # Sad panda sez: this runs as root, but could be userland if someone
19 # creates userland geli and zfs tools.
21 # This assumes an external program install-boot.sh which will install
22 # the appropriate boot files in the appropriate locations.
24 # These images assume ${dev} will be the root image. We should likely
25 # use labels, but we don't.
27 # Assumes you've already rebuilt... maybe bad? Also maybe bad: the env
28 # vars should likely be conditionally set to allow better automation.
31 . $(dirname $0)/install-boot.sh
37 # Copy kernel + boot loader
38 (cd $src ; tar cf - .) | (cd $dst; tar xf -)
41 mk_nogeli_gpt_ufs_legacy() {
45 cat > ${src}/etc/fstab <<EOF
46 /dev/${dev}p2 / ufs rw 1 1
48 makefs -t ffs -B little -s 200m ${img}.p2 ${src}
49 mkimg -s gpt -b ${src}/boot/pmbr \
50 -p freebsd-boot:=${src}/boot/gptboot \
51 -p freebsd-ufs:=${img}.p2 -o ${img}
52 rm -f ${src}/etc/fstab
55 mk_nogeli_gpt_ufs_uefi() {
59 cat > ${src}/etc/fstab <<EOF
60 /dev/${dev}p2 / ufs rw 1 1
62 make_esp_file ${img}.p1 ${espsize} ${src}/boot/loader.efi
63 makefs -t ffs -B little -s 200m ${img}.p2 ${src}
66 -p freebsd-ufs:=${img}.p2 -o ${img}
67 rm -f ${src}/etc/fstab
70 mk_nogeli_gpt_ufs_both() {
74 cat > ${src}/etc/fstab <<EOF
75 /dev/${dev}p3 / ufs rw 1 1
77 make_esp_file ${img}.p1 ${espsize} ${src}/boot/loader.efi
78 makefs -t ffs -B little -s 200m ${img}.p3 ${src}
79 # p1 is boot for uefi, p2 is boot for gpt, p3 is /
80 mkimg -b ${src}/boot/pmbr -s gpt \
82 -p freebsd-boot:=${src}/boot/gptboot \
83 -p freebsd-ufs:=${img}.p3 \
85 rm -f ${src}/etc/fstab
88 mk_nogeli_gpt_zfs_legacy() {
96 pool=nogeli-gpt-zfs-legacy
98 dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
99 md=$(mdconfig -f ${img})
100 gpart create -s gpt ${md}
101 gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k
102 gpart add -t freebsd-zfs -l root $md
103 # install-boot will make this bootable
104 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2
105 zpool set bootfs=${pool} ${pool}
106 zfs create -po mountpoint=/ ${pool}/ROOT/default
107 # NB: The online guides go nuts customizing /var and other mountpoints here, no need
108 cpsys ${src} ${mntpt}
109 # need to make a couple of tweaks
110 cat >> ${mntpt}/boot/loader.conf <<EOF
114 cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
115 cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko
116 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
118 zfs umount -f ${pool}/ROOT/default
119 zfs set mountpoint=none ${pool}/ROOT/default
120 zpool set bootfs=${pool}/ROOT/default ${pool}
121 zpool set autoexpand=on ${pool}
123 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
127 mk_nogeli_gpt_zfs_uefi() {
135 pool=nogeli-gpt-zfs-uefi
137 dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
138 md=$(mdconfig -f ${img})
139 gpart create -s gpt ${md}
140 gpart add -t efi -s ${espsize}k -a 4k ${md}
141 gpart add -t freebsd-zfs -l root $md
142 # install-boot will make this bootable
143 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2
144 zpool set bootfs=${pool} ${pool}
145 zfs create -po mountpoint=/ ${pool}/ROOT/default
146 # NB: The online guides go nuts customizing /var and other mountpoints here, no need
147 cpsys ${src} ${mntpt}
148 # need to make a couple of tweaks
149 cat >> ${mntpt}/boot/loader.conf <<EOF
153 cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
154 cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko
155 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
157 zfs umount -f ${pool}/ROOT/default
158 zfs set mountpoint=none ${pool}/ROOT/default
159 zpool set bootfs=${pool}/ROOT/default ${pool}
160 zpool set autoexpand=on ${pool}
162 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
166 mk_nogeli_gpt_zfs_both() {
174 pool=nogeli-gpt-zfs-both
176 dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
177 md=$(mdconfig -f ${img})
178 gpart create -s gpt ${md}
179 gpart add -t efi -s ${espsize}k -a 4k ${md}
180 gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k
181 gpart add -t freebsd-zfs -l root $md
182 # install-boot will make this bootable
183 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3
184 zpool set bootfs=${pool} ${pool}
185 zfs create -po mountpoint=/ ${pool}/ROOT/default
186 # NB: The online guides go nuts customizing /var and other mountpoints here, no need
187 cpsys ${src} ${mntpt}
188 # need to make a couple of tweaks
189 cat >> ${mntpt}/boot/loader.conf <<EOF
193 cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
194 cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko
195 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
197 zfs umount -f ${pool}/ROOT/default
198 zfs set mountpoint=none ${pool}/ROOT/default
199 zpool set bootfs=${pool}/ROOT/default ${pool}
200 zpool set autoexpand=on ${pool}
202 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
206 mk_nogeli_mbr_ufs_legacy() {
210 cat > ${src}/etc/fstab <<EOF
211 /dev/${dev}s1a / ufs rw 1 1
213 makefs -t ffs -B little -s 200m ${img}.s1a ${src}
214 mkimg -s bsd -b ${src}/boot/boot -p freebsd-ufs:=${img}.s1a -o ${img}.s1
215 mkimg -a 1 -s mbr -b ${src}/boot/boot0sio -p freebsd:=${img}.s1 -o ${img}
216 rm -f ${src}/etc/fstab
219 mk_nogeli_mbr_ufs_uefi() {
223 cat > ${src}/etc/fstab <<EOF
224 /dev/${dev}s2a / ufs rw 1 1
226 make_esp_file ${img}.s1 ${espsize} ${src}/boot/loader.efi
227 makefs -t ffs -B little -s 200m ${img}.s2a ${src}
228 mkimg -s bsd -p freebsd-ufs:=${img}.s2a -o ${img}.s2
229 mkimg -a 1 -s mbr -p efi:=${img}.s1 -p freebsd:=${img}.s2 -o ${img}
230 rm -f ${src}/etc/fstab
233 mk_nogeli_mbr_ufs_both() {
237 cat > ${src}/etc/fstab <<EOF
238 /dev/${dev}s2a / ufs rw 1 1
240 make_esp_file ${img}.s1 ${espsize} ${src}/boot/loader.efi
241 makefs -t ffs -B little -s 200m ${img}.s2a ${src}
242 mkimg -s bsd -b ${src}/boot/boot -p freebsd-ufs:=${img}.s2a -o ${img}.s2
243 mkimg -a 2 -s mbr -b ${src}/boot/mbr -p efi:=${img}.s1 -p freebsd:=${img}.s2 -o ${img}
244 rm -f ${src}/etc/fstab
247 mk_nogeli_mbr_zfs_legacy() {
255 pool=nogeli-mbr-zfs-legacy
257 dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
258 md=$(mdconfig -f ${img})
259 gpart create -s mbr ${md}
260 gpart add -t freebsd ${md}
261 gpart set -a active -i 1 ${md}
262 gpart create -s bsd ${md}s1
263 gpart add -t freebsd-zfs ${md}s1
264 # install-boot will make this bootable
265 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s1a
266 zpool set bootfs=${pool} ${pool}
267 zfs create -po mountpoint=/ ${pool}/ROOT/default
268 # NB: The online guides go nuts customizing /var and other mountpoints here, no need
269 cpsys ${src} ${mntpt}
270 # need to make a couple of tweaks
271 cat >> ${mntpt}/boot/loader.conf <<EOF
275 cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
276 cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko
277 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
279 zfs umount -f ${pool}/ROOT/default
280 zfs set mountpoint=none ${pool}/ROOT/default
281 zpool set bootfs=${pool}/ROOT/default ${pool}
282 zpool set autoexpand=on ${pool}
284 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
288 mk_nogeli_mbr_zfs_uefi() {
296 pool=nogeli-mbr-zfs-uefi
298 dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
299 md=$(mdconfig -f ${img})
300 gpart create -s mbr ${md}
301 gpart add -t efi -s ${espsize}k ${md}
302 gpart add -t freebsd ${md}
303 gpart set -a active -i 2 ${md}
304 gpart create -s bsd ${md}s2
305 gpart add -t freebsd-zfs ${md}s2
306 # install-boot will make this bootable
307 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s2a
308 zpool set bootfs=${pool} ${pool}
309 zfs create -po mountpoint=/ ${pool}/ROOT/default
310 # NB: The online guides go nuts customizing /var and other mountpoints here, no need
311 cpsys ${src} ${mntpt}
312 # need to make a couple of tweaks
313 cat >> ${mntpt}/boot/loader.conf <<EOF
317 cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
318 cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko
319 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
321 zfs umount -f ${pool}/ROOT/default
322 zfs set mountpoint=none ${pool}/ROOT/default
323 zpool set bootfs=${pool}/ROOT/default ${pool}
324 zpool set autoexpand=on ${pool}
326 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
330 mk_nogeli_mbr_zfs_both() {
338 pool=nogeli-mbr-zfs-both
340 dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
341 md=$(mdconfig -f ${img})
342 gpart create -s mbr ${md}
343 gpart add -t efi -s ${espsize}k ${md}
344 gpart add -t freebsd ${md}
345 gpart set -a active -i 2 ${md}
346 gpart create -s bsd ${md}s2
347 gpart add -t freebsd-zfs ${md}s2
348 # install-boot will make this bootable
349 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s2a
350 zpool set bootfs=${pool} ${pool}
351 zfs create -po mountpoint=/ ${pool}/ROOT/default
352 # NB: The online guides go nuts customizing /var and other mountpoints here, no need
353 cpsys ${src} ${mntpt}
354 # need to make a couple of tweaks
355 cat >> ${mntpt}/boot/loader.conf <<EOF
359 cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
360 cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko
361 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
363 zfs umount -f ${pool}/ROOT/default
364 zfs set mountpoint=none ${pool}/ROOT/default
365 zpool set bootfs=${pool}/ROOT/default ${pool}
366 zpool set autoexpand=on ${pool}
368 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
372 mk_geli_gpt_ufs_legacy() {
381 dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
382 md=$(mdconfig -f ${img})
383 gpart create -s gpt ${md}
384 gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k
385 gpart add -t freebsd-ufs -l root $md
386 # install-boot will make this bootable
387 echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p2
388 echo ${passphrase} | geli attach -j - ${md}p2
389 newfs /dev/${md}p2.eli
390 mount /dev/${md}p2.eli ${mntpt}
391 cpsys ${src} ${mntpt}
392 # need to make a couple of tweaks
393 cat > ${mntpt}/boot/loader.conf <<EOF
396 cat > ${mntpt}/etc/fstab <<EOF
397 /dev/${dev}p2.eli / ufs rw 1 1
400 cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
404 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
408 mk_geli_gpt_ufs_uefi() {
417 dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
418 md=$(mdconfig -f ${img})
419 gpart create -s gpt ${md}
420 gpart add -t efi -s ${espsize}k -a 4k ${md}
421 gpart add -t freebsd-ufs -l root $md
422 # install-boot will make this bootable
423 echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p2
424 echo ${passphrase} | geli attach -j - ${md}p2
425 newfs /dev/${md}p2.eli
426 mount /dev/${md}p2.eli ${mntpt}
427 cpsys ${src} ${mntpt}
428 # need to make a couple of tweaks
429 cat > ${mntpt}/boot/loader.conf <<EOF
432 cat > ${mntpt}/etc/fstab <<EOF
433 /dev/${dev}p2.eli / ufs rw 1 1
436 cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
440 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
444 mk_geli_gpt_ufs_both() {
453 dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
454 md=$(mdconfig -f ${img})
455 gpart create -s gpt ${md}
456 gpart add -t efi -s ${espsize}k -a 4k ${md}
457 gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k
458 gpart add -t freebsd-ufs -l root $md
459 # install-boot will make this bootable
460 echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p3
461 echo ${passphrase} | geli attach -j - ${md}p3
462 newfs /dev/${md}p3.eli
463 mount /dev/${md}p3.eli ${mntpt}
464 cpsys ${src} ${mntpt}
465 # need to make a couple of tweaks
466 cat > ${mntpt}/boot/loader.conf <<EOF
469 cat > ${mntpt}/etc/fstab <<EOF
470 /dev/${dev}p3.eli / ufs rw 1 1
473 cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
477 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
481 mk_geli_gpt_zfs_legacy() {
489 pool=geli-gpt-zfs-legacy
491 # Note that in this flavor we create an empty p2 ufs partition, and put
492 # the bootable zfs stuff on p3, just to test the ability of the zfs probe
493 # probe routines to find a pool on a partition other than the first one.
495 dd if=/dev/zero of=${img} count=1 seek=$(( 300 * 1024 * 1024 / 512 ))
496 md=$(mdconfig -f ${img})
497 gpart create -s gpt ${md}
498 gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k
499 gpart add -t freebsd-ufs -s 100m ${md}
500 gpart add -t freebsd-zfs -l root $md
501 # install-boot will make this bootable
502 echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p3
503 echo ${passphrase} | geli attach -j - ${md}p3
504 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3.eli
505 zpool set bootfs=${pool} ${pool}
506 zfs create -po mountpoint=/ ${pool}/ROOT/default
507 # NB: The online guides go nuts customizing /var and other mountpoints here, no need
508 cpsys ${src} ${mntpt}
509 # need to make a couple of tweaks
510 cat >> ${mntpt}/boot/loader.conf <<EOF
515 cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
516 cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko
517 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
518 cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
520 zfs umount -f ${pool}/ROOT/default
521 zfs set mountpoint=none ${pool}/ROOT/default
522 zpool set bootfs=${pool}/ROOT/default ${pool}
523 zpool set autoexpand=on ${pool}
526 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
530 mk_geli_gpt_zfs_uefi() {
538 pool=geli-gpt-zfs-uefi
540 # Note that in this flavor we create an empty p2 ufs partition, and put
541 # the bootable zfs stuff on p3, just to test the ability of the zfs probe
542 # probe routines to find a pool on a partition other than the first one.
544 dd if=/dev/zero of=${img} count=1 seek=$(( 300 * 1024 * 1024 / 512 ))
545 md=$(mdconfig -f ${img})
546 gpart create -s gpt ${md}
547 gpart add -t efi -s ${espsize}k -a 4k ${md}
548 gpart add -t freebsd-ufs -s 100m ${md}
549 gpart add -t freebsd-zfs -l root $md
550 # install-boot will make this bootable
551 echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p3
552 echo ${passphrase} | geli attach -j - ${md}p3
553 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3.eli
554 zpool set bootfs=${pool} ${pool}
555 zfs create -po mountpoint=/ ${pool}/ROOT/default
556 # NB: The online guides go nuts customizing /var and other mountpoints here, no need
557 cpsys ${src} ${mntpt}
558 # need to make a couple of tweaks
559 cat >> ${mntpt}/boot/loader.conf <<EOF
564 cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
565 cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko
566 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
567 cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
569 zfs umount -f ${pool}/ROOT/default
570 zfs set mountpoint=none ${pool}/ROOT/default
571 zpool set bootfs=${pool}/ROOT/default ${pool}
572 zpool set autoexpand=on ${pool}
575 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
579 mk_geli_gpt_zfs_both() {
587 pool=geli-gpt-zfs-both
589 dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
590 md=$(mdconfig -f ${img})
591 gpart create -s gpt ${md}
592 gpart add -t efi -s ${espsize}k -a 4k ${md}
593 gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k
594 gpart add -t freebsd-zfs -l root $md
595 # install-boot will make this bootable
596 echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p3
597 echo ${passphrase} | geli attach -j - ${md}p3
598 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3.eli
599 zpool set bootfs=${pool} ${pool}
600 zfs create -po mountpoint=/ ${pool}/ROOT/default
601 # NB: The online guides go nuts customizing /var and other mountpoints here, no need
602 cpsys ${src} ${mntpt}
603 # need to make a couple of tweaks
604 cat > ${mntpt}/boot/loader.conf <<EOF
609 cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
610 cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko
611 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
612 cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
614 zfs umount -f ${pool}/ROOT/default
615 zfs set mountpoint=none ${pool}/ROOT/default
616 zpool set bootfs=${pool}/ROOT/default ${pool}
617 zpool set autoexpand=on ${pool}
620 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
624 # GELI+MBR is not a valid configuration
625 mk_geli_mbr_ufs_legacy() {
628 mk_geli_mbr_ufs_uefi() {
631 mk_geli_mbr_ufs_both() {
634 mk_geli_mbr_zfs_legacy() {
637 mk_geli_mbr_zfs_uefi() {
640 mk_geli_mbr_zfs_both() {
648 mk_sparc64_nogeli_vtoc8_ufs_ofw() {
657 cat > ${src}/etc/fstab <<EOF
658 /dev/${dev}a / ufs rw 1 1
660 makefs -t ffs -B big -s 200m ${img} ${src}
661 md=$(mdconfig -f ${img})
662 # For non-native builds, ensure that geom_part(4) supports VTOC8.
663 kldload geom_part_vtoc8.ko
664 gpart create -s VTOC8 ${md}
665 gpart add -t freebsd-ufs ${md}
666 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
668 rm -f ${src}/etc/fstab
671 qser="-serial telnet::4444,server -nographic"
673 # https://wiki.freebsd.org/QemuRecipes
680 echo "qemu-system-aarch64 -m 4096M -cpu cortex-a57 -M virt \
681 -bios QEMU_EFI.fd ${qser} \
682 -drive if=none,file=${img},id=hd0 \
683 -device virtio-blk-device,drive=hd0" > $sh
685 # https://wiki.freebsd.org/arm64/QEMU also has
686 # -device virtio-net-device,netdev=net0
687 # -netdev user,id=net0
696 echo "qemu-system-x86_64 -m 256m --drive file=${img},format=raw ${qser}" > $sh
705 echo "qemu-system-x86_64 -m 256m -bios ~/bios/OVMF-X64.fd --drive file=${img},format=raw ${qser}" > $sh
714 echo "qemu-system-x86_64 -m 256m --drive file=${img},format=raw ${qser}" > $sh
715 echo "qemu-system-x86_64 -m 256m -bios ~/bios/OVMF-X64.fd --drive file=${img},format=raw ${qser}" >> $sh
728 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
742 # Needs UEFI to be supported
748 echo "qemu-system-i386 --drive file=${img},format=raw ${qser}" > $sh
749 echo "qemu-system-i386 -bios ~/bios/OVMF-X32.fd --drive file=${img},format=raw ${qser}" >> $sh
761 # Create sparse file and mount newly created filesystem(s) on it
762 img=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.img
763 sh=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.sh
764 echo "vvvvvvvvvvvvvv Creating $img vvvvvvvvvvvvvvv"
766 eval mk_${geli}_${scheme}_${fs}_${bios} ${DESTDIR} ${img} ${MNTPT} ${geli} ${scheme} ${fs} ${bios}
767 eval qemu_${arch}_${bios} ${img} ${sh}
768 [ -n "${SUDO_USER}" ] && chown ${SUDO_USER} ${img}*
769 echo "^^^^^^^^^^^^^^ Created $img ^^^^^^^^^^^^^^^"
773 # qemu-system-mips -kernel /path/to/rootfs/boot/kernel/kernel -nographic -hda /path/to/disk.img -m 2048
775 # Powerpc -- doesn't work but maybe it would enough for testing -- needs details
777 # qemu-system-ppc64 -drive file=/path/to/disk.img,format=raw
780 # qemu-system-sparc64 -drive file=/path/to/disk.img,format=raw
783 SRCTOP=$(make -v SRCTOP)
785 OBJDIR=$(make -v .OBJDIR)
786 IMGDIR=${OBJDIR}/boot-images
788 MNTPT=$(mktemp -d /tmp/stand-test.XXXXXX)
790 # Setup the installed tree...
791 DESTDIR=${OBJDIR}/boot-tree
793 mkdir -p ${DESTDIR}/boot/defaults
794 mkdir -p ${DESTDIR}/boot/kernel
795 cp /boot/kernel/kernel ${DESTDIR}/boot/kernel
796 echo -h -D -S115200 > ${DESTDIR}/boot.config
797 cat > ${DESTDIR}/boot/loader.conf <<EOF
798 comconsole_speed=115200
801 cp /boot/device.hints ${DESTDIR}/boot/device.hints
802 # Assume we're already built
803 make install DESTDIR=${DESTDIR} MK_MAN=no MK_INSTALL_AS_USER=yes WITHOUT_DEBUG_FILES=yes
804 if [ $? -ne 0 ]; then
805 echo "make install failed"
808 # Copy init, /bin/sh, minimal libraries and testing /etc/rc
809 mkdir -p ${DESTDIR}/sbin ${DESTDIR}/bin \
810 ${DESTDIR}/lib ${DESTDIR}/libexec \
811 ${DESTDIR}/etc ${DESTDIR}/dev
812 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
815 cat > ${DESTDIR}/etc/rc <<EOF
818 sysctl machdep.bootmethod
819 echo "RC COMMAND RUNNING -- SUCCESS!!!!!"
823 # If we were given exactly 5 args, go make that one image.
825 if [ $# -eq 5 ]; then
830 # OK. Let the games begin
832 for arch in amd64; do
833 for geli in nogeli geli; do
834 for scheme in gpt mbr; do
835 for fs in ufs zfs; do
836 for bios in legacy uefi both; do
837 make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
848 # Notes for the future
851 for geli in nogeli geli; do
852 for scheme in gpt mbr; do
853 for fs in ufs zfs; do
854 for bios in legacy; do
855 make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
862 for arch in arm aarch64; do
863 for scheme in gpt mbr; do
865 for bios in uboot efi; do
866 make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
871 for arch in powerpc powerpc64; do
872 for scheme in ppc-wtf; do
874 for bios in ofw uboot chrp; do
875 make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
880 for arch in sparc64; do
881 for geli in nogeli; do
882 for scheme in vtoc8; do
885 make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}