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 # Note that in this flavor we create an empty p2 ufs partition, and put
491 # the bootable zfs stuff on p3, just to test the ability of the zfs probe
492 # probe routines to find a pool on a partition other than the first one.
494 dd if=/dev/zero of=${img} count=1 seek=$(( 300 * 1024 * 1024 / 512 ))
495 md=$(mdconfig -f ${img})
496 gpart create -s gpt ${md}
497 gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k
498 gpart add -t freebsd-ufs -s 100m ${md}
499 gpart add -t freebsd-zfs -l root $md
500 # install-boot will make this bootable
501 echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p3
502 echo ${passphrase} | geli attach -j - ${md}p3
503 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3.eli
504 zpool set bootfs=${pool} ${pool}
505 zfs create -po mountpoint=/ ${pool}/ROOT/default
506 # NB: The online guides go nuts customizing /var and other mountpoints here, no need
507 cpsys ${src} ${mntpt}
508 # need to make a couple of tweaks
509 cat >> ${mntpt}/boot/loader.conf <<EOF
514 cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
515 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
516 cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
517 cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
519 zfs umount -f ${pool}/ROOT/default
520 zfs set mountpoint=none ${pool}/ROOT/default
521 zpool set bootfs=${pool}/ROOT/default ${pool}
522 zpool set autoexpand=on ${pool}
525 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
529 mk_geli_gpt_zfs_uefi() {
537 pool=geli-gpt-zfs-uefi
539 # Note that in this flavor we create an empty p2 ufs partition, and put
540 # the bootable zfs stuff on p3, just to test the ability of the zfs probe
541 # probe routines to find a pool on a partition other than the first one.
543 dd if=/dev/zero of=${img} count=1 seek=$(( 300 * 1024 * 1024 / 512 ))
544 md=$(mdconfig -f ${img})
545 gpart create -s gpt ${md}
546 gpart add -t efi -s ${espsize}k -a 4k ${md}
547 gpart add -t freebsd-ufs -s 100m ${md}
548 gpart add -t freebsd-zfs -l root $md
549 # install-boot will make this bootable
550 echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p3
551 echo ${passphrase} | geli attach -j - ${md}p3
552 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3.eli
553 zpool set bootfs=${pool} ${pool}
554 zfs create -po mountpoint=/ ${pool}/ROOT/default
555 # NB: The online guides go nuts customizing /var and other mountpoints here, no need
556 cpsys ${src} ${mntpt}
557 # need to make a couple of tweaks
558 cat >> ${mntpt}/boot/loader.conf <<EOF
563 cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
564 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
565 cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
566 cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
568 zfs umount -f ${pool}/ROOT/default
569 zfs set mountpoint=none ${pool}/ROOT/default
570 zpool set bootfs=${pool}/ROOT/default ${pool}
571 zpool set autoexpand=on ${pool}
574 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
578 mk_geli_gpt_zfs_both() {
586 pool=geli-gpt-zfs-both
588 dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
589 md=$(mdconfig -f ${img})
590 gpart create -s gpt ${md}
591 gpart add -t efi -s ${espsize}k -a 4k ${md}
592 gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k
593 gpart add -t freebsd-zfs -l root $md
594 # install-boot will make this bootable
595 echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p3
596 echo ${passphrase} | geli attach -j - ${md}p3
597 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3.eli
598 zpool set bootfs=${pool} ${pool}
599 zfs create -po mountpoint=/ ${pool}/ROOT/default
600 # NB: The online guides go nuts customizing /var and other mountpoints here, no need
601 cpsys ${src} ${mntpt}
602 # need to make a couple of tweaks
603 cat > ${mntpt}/boot/loader.conf <<EOF
608 cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
609 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
610 cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
611 cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
613 zfs umount -f ${pool}/ROOT/default
614 zfs set mountpoint=none ${pool}/ROOT/default
615 zpool set bootfs=${pool}/ROOT/default ${pool}
616 zpool set autoexpand=on ${pool}
619 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
623 # GELI+MBR is not a valid configuration
624 mk_geli_mbr_ufs_legacy() {
627 mk_geli_mbr_ufs_uefi() {
630 mk_geli_mbr_ufs_both() {
633 mk_geli_mbr_zfs_legacy() {
636 mk_geli_mbr_zfs_uefi() {
639 mk_geli_mbr_zfs_both() {
647 mk_sparc64_nogeli_vtoc8_ufs_ofw() {
656 cat > ${src}/etc/fstab <<EOF
657 /dev/ada0a / ufs rw 1 1
659 makefs -t ffs -B big -s 200m ${img} ${src}
660 md=$(mdconfig -f ${img})
661 # For non-native builds, ensure that geom_part(4) supports VTOC8.
662 kldload geom_part_vtoc8.ko
663 gpart create -s VTOC8 ${md}
664 gpart add -t freebsd-ufs ${md}
665 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
667 rm -f ${src}/etc/fstab
670 qser="-serial telnet::4444,server -nographic"
672 # https://wiki.freebsd.org/QemuRecipes
679 echo "qemu-system-aarch64 -m 4096M -cpu cortex-a57 -M virt \
680 -bios QEMU_EFI.fd ${qser} \
681 -drive if=none,file=${img},id=hd0 \
682 -device virtio-blk-device,drive=hd0" > $sh
684 # https://wiki.freebsd.org/arm64/QEMU also has
685 # -device virtio-net-device,netdev=net0
686 # -netdev user,id=net0
695 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
713 echo "qemu-system-x86_64 -m 256m --drive file=${img},format=raw ${qser}" > $sh
714 echo "qemu-system-x86_64 -m 256m -bios ~/bios/OVMF-X64.fd --drive file=${img},format=raw ${qser}" >> $sh
727 echo "qemu-system-i386 --drive file=${img},format=raw ${qser}" > $sh
737 echo "qemu-system-i386 -bios ~/bios/OVMF-X32.fd --drive file=${img},format=raw ${qser}" > $sh
741 # Needs UEFI to be supported
747 echo "qemu-system-i386 --drive file=${img},format=raw ${qser}" > $sh
748 echo "qemu-system-i386 -bios ~/bios/OVMF-X32.fd --drive file=${img},format=raw ${qser}" >> $sh
760 # Create sparse file and mount newly created filesystem(s) on it
761 img=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.img
762 sh=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.sh
763 echo "vvvvvvvvvvvvvv Creating $img vvvvvvvvvvvvvvv"
765 eval mk_${geli}_${scheme}_${fs}_${bios} ${DESTDIR} ${img} ${MNTPT} ${geli} ${scheme} ${fs} ${bios}
766 eval qemu_${arch}_${bios} ${img} ${sh}
767 [ -n "${SUDO_USER}" ] && chown ${SUDO_USER} ${img}*
768 echo "^^^^^^^^^^^^^^ Created $img ^^^^^^^^^^^^^^^"
772 # qemu-system-mips -kernel /path/to/rootfs/boot/kernel/kernel -nographic -hda /path/to/disk.img -m 2048
774 # Powerpc -- doesn't work but maybe it would enough for testing -- needs details
776 # qemu-system-ppc64 -drive file=/path/to/disk.img,format=raw
779 # qemu-system-sparc64 -drive file=/path/to/disk.img,format=raw
782 SRCTOP=$(make -v SRCTOP)
784 OBJDIR=$(make -v .OBJDIR)
785 IMGDIR=${OBJDIR}/boot-images
787 MNTPT=$(mktemp -d /tmp/stand-test.XXXXXX)
789 # Setup the installed tree...
790 DESTDIR=${OBJDIR}/boot-tree
792 mkdir -p ${DESTDIR}/boot/defaults
793 mkdir -p ${DESTDIR}/boot/kernel
794 cp /boot/kernel/kernel ${DESTDIR}/boot/kernel
795 echo -h -D -S115200 > ${DESTDIR}/boot.config
796 cat > ${DESTDIR}/boot/loader.conf <<EOF
798 comconsole_speed=115200
803 cp /boot/device.hints ${DESTDIR}/boot/device.hints
804 # Assume we're already built
805 make install DESTDIR=${DESTDIR} MK_MAN=no MK_INSTALL_AS_USER=yes WITHOUT_DEBUG_FILES=yes
806 if [ $? -ne 0 ]; then
807 echo "make install failed"
810 # Copy init, /bin/sh, minimal libraries and testing /etc/rc
811 mkdir -p ${DESTDIR}/sbin ${DESTDIR}/bin \
812 ${DESTDIR}/lib ${DESTDIR}/libexec \
813 ${DESTDIR}/etc ${DESTDIR}/dev
814 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
817 cat > ${DESTDIR}/etc/rc <<EOF
820 sysctl machdep.bootmethod
821 echo "RC COMMAND RUNNING -- SUCCESS!!!!!"
825 # If we were given exactly 5 args, go make that one image.
827 if [ $# -eq 5 ]; then
832 # OK. Let the games begin
834 for arch in amd64; do
835 for geli in nogeli geli; do
836 for scheme in gpt mbr; do
837 for fs in ufs zfs; do
838 for bios in legacy uefi both; do
839 make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
850 # Notes for the future
853 for geli in nogeli geli; do
854 for scheme in gpt mbr; do
855 for fs in ufs zfs; do
856 for bios in legacy; do
857 make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
864 for arch in arm aarch64; do
865 for scheme in gpt mbr; do
867 for bios in uboot efi; do
868 make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
873 for arch in powerpc powerpc64; do
874 for scheme in ppc-wtf; do
876 for bios in ofw uboot chrp; do
877 make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
882 for arch in sparc64; do
883 for geli in nogeli; do
884 for scheme in vtoc8; do
887 make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}