8 # Builds all the bat-shit crazy combinations we support booting from,
9 # at least for amd64. It assume you have a ~sane kernel in /boot/kernel
10 # and copies that into the ~150MB root images we create (we create the du
11 # size of the kernel + 20MB
13 # Sad panda sez: this runs as root, but could be userland if someone
14 # creates userland geli and zfs tools.
16 # This assumes an external prograam install-boot.sh which will install
17 # the appropriate boot files in the appropriate locations.
19 # These images assume ada0 will be the root image. We should likely
20 # use labels, but we don't.
22 # ASsumes you've already rebuilt... maybe bad? Also maybe bad: the env
23 # vars should likely be conditionally set to allow better automation.
30 # Copy kernel + boot loader
31 (cd $src ; tar cf - .) | (cd $dst; tar xf -)
36 local src dst md mntpt
40 if [ "${do_boot1_efi}" -eq 1 ]; then
41 cp ${src}/boot/boot1.efifat ${dst}
43 dd if=/dev/zero of=${dst} count=1 seek=$((100 * 1024 * 1024 / 512))
44 md=$(mdconfig -f ${dst})
45 newfs_msdos -a 32 /dev/${md}
46 mntpt=$(mktemp -d /tmp/stand-test.XXXXXX)
47 mount -t msdos /dev/${md} ${mntpt}
48 # mkdir -p ${mntpt}/efi/freebsd # not yet
49 mkdir -p ${mntpt}/efi/boot
50 cp ${src}/boot/loader.efi ${mntpt}/efi/boot/bootx64.efi
57 mk_nogeli_gpt_ufs_legacy() {
61 cat > ${src}/etc/fstab <<EOF
62 /dev/ada0p2 / ufs rw 1 1
64 makefs -t ffs -B little -s 200m ${img}.p2 ${src}
65 mkimg -s gpt -b ${src}/boot/pmbr \
66 -p freebsd-boot:=${src}/boot/gptboot \
67 -p freebsd-ufs:=${img}.p2 -o ${img}
68 rm -f ${src}/etc/fstab
71 mk_nogeli_gpt_ufs_uefi() {
75 cat > ${src}/etc/fstab <<EOF
76 /dev/ada0p2 / ufs rw 1 1
78 make_esp ${src} ${img}.p1
79 makefs -t ffs -B little -s 200m ${img}.p2 ${src}
82 -p freebsd-ufs:=${img}.p2 -o ${img}
83 rm -f ${src}/etc/fstab
86 mk_nogeli_gpt_ufs_both() {
90 cat > ${src}/etc/fstab <<EOF
91 /dev/ada0p3 / ufs rw 1 1
93 make_esp ${src} ${img}.p1
94 makefs -t ffs -B little -s 200m ${img}.p3 ${src}
95 # p1 is boot for uefi, p2 is boot for gpt, p3 is /
96 mkimg -b ${src}/boot/pmbr -s gpt \
98 -p freebsd-boot:=${src}/boot/gptboot \
99 -p freebsd-ufs:=${img}.p3 \
101 rm -f ${src}/etc/fstab
104 mk_nogeli_gpt_zfs_legacy() {
112 pool=nogeli-gpt-zfs-legacy
114 dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
115 md=$(mdconfig -f ${img})
116 gpart create -s gpt ${md}
117 gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k
118 gpart add -t freebsd-zfs -l root $md
119 # install-boot will make this bootable
120 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2
121 zpool set bootfs=${pool} ${pool}
122 zfs create -po mountpoint=/ ${pool}/ROOT/default
123 # NB: The online guides go nuts customizing /var and other mountpoints here, no need
124 cpsys ${src} ${mntpt}
125 # need to make a couple of tweaks
126 cat >> ${mntpt}/boot/loader.conf <<EOF
130 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
131 cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
133 zfs umount -f ${pool}/ROOT/default
134 zfs set mountpoint=none ${pool}/ROOT/default
135 zpool set bootfs=${pool}/ROOT/default ${pool}
136 zpool set autoexpand=on ${pool}
138 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
142 mk_nogeli_gpt_zfs_uefi() {
150 pool=nogeli-gpt-zfs-uefi
152 dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
153 md=$(mdconfig -f ${img})
154 gpart create -s gpt ${md}
155 gpart add -t efi -s 800k -a 4k ${md}
156 gpart add -t freebsd-zfs -l root $md
157 # install-boot will make this bootable
158 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2
159 zpool set bootfs=${pool} ${pool}
160 zfs create -po mountpoint=/ ${pool}/ROOT/default
161 # NB: The online guides go nuts customizing /var and other mountpoints here, no need
162 cpsys ${src} ${mntpt}
163 # need to make a couple of tweaks
164 cat >> ${mntpt}/boot/loader.conf <<EOF
168 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
169 cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
171 zfs umount -f ${pool}/ROOT/default
172 zfs set mountpoint=none ${pool}/ROOT/default
173 zpool set bootfs=${pool}/ROOT/default ${pool}
174 zpool set autoexpand=on ${pool}
176 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
180 mk_nogeli_gpt_zfs_both() {
188 pool=nogeli-gpt-zfs-both
190 dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
191 md=$(mdconfig -f ${img})
192 gpart create -s gpt ${md}
193 gpart add -t efi -s 800k -a 4k ${md}
194 gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k
195 gpart add -t freebsd-zfs -l root $md
196 # install-boot will make this bootable
197 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3
198 zpool set bootfs=${pool} ${pool}
199 zfs create -po mountpoint=/ ${pool}/ROOT/default
200 # NB: The online guides go nuts customizing /var and other mountpoints here, no need
201 cpsys ${src} ${mntpt}
202 # need to make a couple of tweaks
203 cat >> ${mntpt}/boot/loader.conf <<EOF
207 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
208 cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
210 zfs umount -f ${pool}/ROOT/default
211 zfs set mountpoint=none ${pool}/ROOT/default
212 zpool set bootfs=${pool}/ROOT/default ${pool}
213 zpool set autoexpand=on ${pool}
215 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
219 mk_nogeli_mbr_ufs_legacy() {
223 cat > ${src}/etc/fstab <<EOF
224 /dev/ada0s1a / ufs rw 1 1
226 makefs -t ffs -B little -s 200m ${img}.s1a ${src}
227 mkimg -s bsd -b ${src}/boot/boot -p freebsd-ufs:=${img}.s1a -o ${img}.s1
228 mkimg -a 1 -s mbr -b ${src}/boot/boot0sio -p freebsd:=${img}.s1 -o ${img}
229 rm -f ${src}/etc/fstab
232 mk_nogeli_mbr_ufs_uefi() {
236 cat > ${src}/etc/fstab <<EOF
237 /dev/ada0s1a / ufs rw 1 1
239 make_esp ${src} ${img}.s1
240 makefs -t ffs -B little -s 200m ${img}.s2a ${src}
241 mkimg -s bsd -p freebsd-ufs:=${img}.s2a -o ${img}.s2
242 mkimg -a 1 -s mbr -p efi:=${img}.s1 -p freebsd:=${img}.s2 -o ${img}
243 rm -f ${src}/etc/fstab
246 mk_nogeli_mbr_ufs_both() {
250 cat > ${src}/etc/fstab <<EOF
251 /dev/ada0s1a / ufs rw 1 1
253 make_esp ${src} ${img}.s1
254 makefs -t ffs -B little -s 200m ${img}.s2a ${src}
255 mkimg -s bsd -b ${src}/boot/boot -p freebsd-ufs:=${img}.s2a -o ${img}.s2
256 mkimg -a 2 -s mbr -b ${src}/boot/mbr -p efi:=${img}.s1 -p freebsd:=${img}.s2 -o ${img}
257 rm -f ${src}/etc/fstab
260 mk_nogeli_mbr_zfs_legacy() {
268 pool=nogeli-mbr-zfs-legacy
270 dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
271 md=$(mdconfig -f ${img})
272 gpart create -s mbr ${md}
273 gpart add -t freebsd ${md}
274 gpart set -a active -i 1 ${md}
275 gpart create -s bsd ${md}s1
276 gpart add -t freebsd-zfs ${md}s1
277 # install-boot will make this bootable
278 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s1a
279 zpool set bootfs=${pool} ${pool}
280 zfs create -po mountpoint=/ ${pool}/ROOT/default
281 # NB: The online guides go nuts customizing /var and other mountpoints here, no need
282 cpsys ${src} ${mntpt}
283 # need to make a couple of tweaks
284 cat >> ${mntpt}/boot/loader.conf <<EOF
288 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
289 cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
291 zfs umount -f ${pool}/ROOT/default
292 zfs set mountpoint=none ${pool}/ROOT/default
293 zpool set bootfs=${pool}/ROOT/default ${pool}
294 zpool set autoexpand=on ${pool}
296 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
300 mk_nogeli_mbr_zfs_uefi() {
308 pool=nogeli-mbr-zfs-uefi
310 dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
311 md=$(mdconfig -f ${img})
312 gpart create -s mbr ${md}
313 gpart add -t \!239 -s 800k ${md}
314 gpart add -t freebsd ${md}
315 gpart set -a active -i 2 ${md}
316 gpart create -s bsd ${md}s2
317 gpart add -t freebsd-zfs ${md}s2
318 # install-boot will make this bootable
319 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s2a
320 zpool set bootfs=${pool} ${pool}
321 zfs create -po mountpoint=/ ${pool}/ROOT/default
322 # NB: The online guides go nuts customizing /var and other mountpoints here, no need
323 cpsys ${src} ${mntpt}
324 # need to make a couple of tweaks
325 cat >> ${mntpt}/boot/loader.conf <<EOF
329 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
330 cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
332 zfs umount -f ${pool}/ROOT/default
333 zfs set mountpoint=none ${pool}/ROOT/default
334 zpool set bootfs=${pool}/ROOT/default ${pool}
335 zpool set autoexpand=on ${pool}
337 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
341 mk_nogeli_mbr_zfs_both() {
349 pool=nogeli-mbr-zfs-both
351 dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
352 md=$(mdconfig -f ${img})
353 gpart create -s mbr ${md}
354 gpart add -t \!239 -s 800k ${md}
355 gpart add -t freebsd ${md}
356 gpart set -a active -i 2 ${md}
357 gpart create -s bsd ${md}s2
358 gpart add -t freebsd-zfs ${md}s2
359 # install-boot will make this bootable
360 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s2a
361 zpool set bootfs=${pool} ${pool}
362 zfs create -po mountpoint=/ ${pool}/ROOT/default
363 # NB: The online guides go nuts customizing /var and other mountpoints here, no need
364 cpsys ${src} ${mntpt}
365 # need to make a couple of tweaks
366 cat >> ${mntpt}/boot/loader.conf <<EOF
370 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
371 cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
373 zfs umount -f ${pool}/ROOT/default
374 zfs set mountpoint=none ${pool}/ROOT/default
375 zpool set bootfs=${pool}/ROOT/default ${pool}
376 zpool set autoexpand=on ${pool}
378 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
382 mk_geli_gpt_ufs_legacy() {
391 dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
392 md=$(mdconfig -f ${img})
393 gpart create -s gpt ${md}
394 gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k
395 gpart add -t freebsd-ufs -l root $md
396 # install-boot will make this bootable
397 echo passphrase | geli init -bg -e AES-XTS -i 50000 -J - -l 256 -s 4096 ${md}p2
398 echo passphrase | geli attach -j - ${md}p2
399 newfs /dev/${md}p2.eli
400 mount /dev/${md}p2.eli ${mntpt}
401 cpsys ${src} ${mntpt}
402 # need to make a couple of tweaks
403 cat > ${mntpt}/boot/loader.conf <<EOF
406 cat > ${mntpt}/etc/fstab <<EOF
407 /dev/ada0p2.eli / ufs rw 1 1
410 cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
414 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
418 mk_geli_gpt_ufs_uefi() {
427 dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
428 md=$(mdconfig -f ${img})
429 gpart create -s gpt ${md}
430 gpart add -t efi -s 800k -a 4k ${md}
431 gpart add -t freebsd-ufs -l root $md
432 # install-boot will make this bootable
433 echo passphrase | geli init -bg -e AES-XTS -i 50000 -J - -l 256 -s 4096 ${md}p2
434 echo passphrase | geli attach -j - ${md}p2
435 newfs /dev/${md}p2.eli
436 mount /dev/${md}p2.eli ${mntpt}
437 cpsys ${src} ${mntpt}
438 # need to make a couple of tweaks
439 cat > ${mntpt}/boot/loader.conf <<EOF
442 cat > ${mntpt}/etc/fstab <<EOF
443 /dev/ada0p2.eli / ufs rw 1 1
446 cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
450 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
454 mk_geli_gpt_ufs_both() {
463 dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
464 md=$(mdconfig -f ${img})
465 gpart create -s gpt ${md}
466 gpart add -t efi -s 800k -a 4k ${md}
467 gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k
468 gpart add -t freebsd-ufs -l root $md
469 # install-boot will make this bootable
470 echo passphrase | geli init -bg -e AES-XTS -i 50000 -J - -l 256 -s 4096 ${md}p3
471 echo passphrase | geli attach -j - ${md}p3
472 newfs /dev/${md}p3.eli
473 mount /dev/${md}p3.eli ${mntpt}
474 cpsys ${src} ${mntpt}
475 # need to make a couple of tweaks
476 cat > ${mntpt}/boot/loader.conf <<EOF
479 cat > ${mntpt}/etc/fstab <<EOF
480 /dev/ada0p3.eli / ufs rw 1 1
483 cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
487 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
491 mk_geli_gpt_zfs_legacy() {
499 pool=geli-gpt-zfs-legacy
501 dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
502 md=$(mdconfig -f ${img})
503 gpart create -s gpt ${md}
504 gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k
505 gpart add -t freebsd-zfs -l root $md
506 # install-boot will make this bootable
507 echo passphrase | geli init -bg -e AES-XTS -i 50000 -J - -l 256 -s 4096 ${md}p2
508 echo passphrase | geli attach -j - ${md}p2
509 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2.eli
510 zpool set bootfs=${pool} ${pool}
511 zfs create -po mountpoint=/ ${pool}/ROOT/default
512 # NB: The online guides go nuts customizing /var and other mountpoints here, no need
513 cpsys ${src} ${mntpt}
514 # need to make a couple of tweaks
515 cat >> ${mntpt}/boot/loader.conf <<EOF
520 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
521 cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
522 cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
524 zfs umount -f ${pool}/ROOT/default
525 zfs set mountpoint=none ${pool}/ROOT/default
526 zpool set bootfs=${pool}/ROOT/default ${pool}
527 zpool set autoexpand=on ${pool}
530 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
534 mk_geli_gpt_zfs_uefi() {
542 pool=geli-gpt-zfs-uefi
544 dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
545 md=$(mdconfig -f ${img})
546 gpart create -s gpt ${md}
547 gpart add -t efi -s 800k -a 4k ${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 50000 -J - -l 256 -s 4096 ${md}p2
551 echo passphrase | geli attach -j - ${md}p2
552 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2.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/zfs.ko ${mntpt}/boot/kernel/zfs.ko
564 cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
565 cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
567 zfs umount -f ${pool}/ROOT/default
568 zfs set mountpoint=none ${pool}/ROOT/default
569 zpool set bootfs=${pool}/ROOT/default ${pool}
570 zpool set autoexpand=on ${pool}
573 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
577 mk_geli_gpt_zfs_both() {
585 pool=geli-gpt-zfs-both
587 dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
588 md=$(mdconfig -f ${img})
589 gpart create -s gpt ${md}
590 gpart add -t efi -s 800k -a 4k ${md}
591 gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k
592 gpart add -t freebsd-zfs -l root $md
593 # install-boot will make this bootable
594 echo passphrase | geli init -bg -e AES-XTS -i 50000 -J - -l 256 -s 4096 ${md}p3
595 echo passphrase | geli attach -j - ${md}p3
596 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3.eli
597 zpool set bootfs=${pool} ${pool}
598 zfs create -po mountpoint=/ ${pool}/ROOT/default
599 # NB: The online guides go nuts customizing /var and other mountpoints here, no need
600 cpsys ${src} ${mntpt}
601 # need to make a couple of tweaks
602 cat > ${mntpt}/boot/loader.conf <<EOF
607 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
608 cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
609 cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
611 zfs umount -f ${pool}/ROOT/default
612 zfs set mountpoint=none ${pool}/ROOT/default
613 zpool set bootfs=${pool}/ROOT/default ${pool}
614 zpool set autoexpand=on ${pool}
617 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
621 # GELI+MBR is not a valid configuration
622 mk_geli_mbr_ufs_legacy() {
625 mk_geli_mbr_ufs_uefi() {
628 mk_geli_mbr_ufs_both() {
631 mk_geli_mbr_zfs_legacy() {
634 mk_geli_mbr_zfs_uefi() {
637 mk_geli_mbr_zfs_both() {
645 mk_sparc64_nogeli_vtoc8_ufs_ofw() {
654 cat > ${src}/etc/fstab <<EOF
655 /dev/ada0a / ufs rw 1 1
657 makefs -t ffs -B big -s 200m ${img} ${src}
658 md=$(mdconfig -f ${img})
659 # For non-native builds, ensure that geom_part(4) supports VTOC8.
660 kldload geom_part_vtoc8.ko
661 gpart create -s VTOC8 ${md}
662 gpart add -t freebsd-ufs ${md}
663 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
665 rm -f ${src}/etc/fstab
668 qser="-serial telnet::4444,server -nographic"
670 # https://wiki.freebsd.org/QemuRecipes
677 echo "qemu-system-aarch64 -m 4096M -cpu cortex-a57 -M virt \
678 -bios QEMU_EFI.fd ${qser} \
679 -drive if=none,file=${img},id=hd0 \
680 -device virtio-blk-device,drive=hd0" > $sh
681 # https://wiki.freebsd.org/arm64/QEMU also has
682 # -device virtio-net-device,netdev=net0
683 # -netdev user,id=net0
692 echo "qemu-system-x86_64 -m 256m --drive file=${img},format=raw ${qser}" > $sh
700 echo "qemu-system-x86_64 -m 256m -bios ~/bios/OVMF-X64.fd --drive file=${img},format=raw ${qser}" > $sh
708 echo "qemu-system-x86_64 -m 256m --drive file=${img},format=raw ${qser}" > $sh
709 echo "qemu-system-x86_64 -m 256m -bios ~/bios/OVMF-X64.fd --drive file=${img},format=raw ${qser}" >> $sh
721 echo "qemu-system-i386 --drive file=${img},format=raw ${qser}" > $sh
730 echo "qemu-system-i386 -bios ~/bios/OVMF-X32.fd --drive file=${img},format=raw ${qser}" > $sh
733 # Needs UEFI to be supported
739 echo "qemu-system-i386 --drive file=${img},format=raw ${qser}" > $sh
740 echo "qemu-system-i386 -bios ~/bios/OVMF-X32.fd --drive file=${img},format=raw ${qser}" >> $sh
751 # Create sparse file and mount newly created filesystem(s) on it
752 img=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.img
753 sh=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.sh
754 echo "vvvvvvvvvvvvvv Creating $img vvvvvvvvvvvvvvv"
756 eval mk_${geli}_${scheme}_${fs}_${bios} ${DESTDIR} ${img} ${MNTPT} ${geli} ${scheme} ${fs} ${bios}
757 eval qemu_${arch}_${bios} ${img} ${sh}
758 [ -n "${SUDO_USER}" ] && chown ${SUDO_USER} ${img}*
759 echo "^^^^^^^^^^^^^^ Created $img ^^^^^^^^^^^^^^^"
763 # qemu-system-mips -kernel /path/to/rootfs/boot/kernel/kernel -nographic -hda /path/to/disk.img -m 2048
765 # Powerpc -- doesn't work but maybe it would enough for testing -- needs details
767 # qemu-system-ppc64 -drive file=/path/to/disk.img,format=raw
770 # qemu-system-sparc64 -drive file=/path/to/disk.img,format=raw
773 SRCTOP=$(make -v SRCTOP)
775 OBJDIR=$(make -v .OBJDIR)
776 IMGDIR=${OBJDIR}/boot-images
778 MNTPT=$(mktemp -d /tmp/stand-test.XXXXXX)
780 # Setup the installed tree...
781 DESTDIR=${OBJDIR}/boot-tree
783 mkdir -p ${DESTDIR}/boot/defaults
784 mkdir -p ${DESTDIR}/boot/kernel
785 # XXX boot1 exists only on sparc64
786 cp /boot/boot1 ${DESTDIR}/boot
787 cp /boot/kernel/kernel ${DESTDIR}/boot/kernel
788 echo -h -D -S115200 > ${DESTDIR}/boot.config
789 cat > ${DESTDIR}/boot/loader.conf <<EOF
791 comconsole_speed=115200
795 cp /boot/device.hints ${DESTDIR}/boot/device.hints
796 # Assume we're already built
797 make install DESTDIR=${DESTDIR} MK_MAN=no MK_INSTALL_AS_USER=yes
798 # Copy init, /bin/sh, minimal libraries and testing /etc/rc
799 mkdir -p ${DESTDIR}/sbin ${DESTDIR}/bin \
800 ${DESTDIR}/lib ${DESTDIR}/libexec \
801 ${DESTDIR}/etc ${DESTDIR}/dev
802 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
805 cat > ${DESTDIR}/etc/rc <<EOF
808 sysctl machdep.bootmethod
809 echo "RC COMMAND RUNNING -- SUCCESS!!!!!"
813 # If we were given exactly 5 args, go make that one image.
815 if [ $# -eq 5 ]; then
820 # OK. Let the games begin
822 for arch in amd64; do
823 for geli in nogeli geli; do
824 for scheme in gpt mbr; do
825 for fs in ufs zfs; do
826 for bios in legacy uefi both; do
827 make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
838 # Notes for the future
841 for geli in nogeli geli; do
842 for scheme in gpt mbr; do
843 for fs in ufs zfs; do
844 for bios in legacy; do
845 make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
852 for arch in arm aarch64; do
853 for scheme in gpt mbr; do
855 for bios in uboot efi; do
856 make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
861 for arch in powerpc powerpc64; do
862 for scheme in ppc-wtf; do
864 for bios in ofw uboot chrp; do
865 make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
870 for arch in sparc64; do
871 for geli in nogeli; do
872 for scheme in vtoc8; do
875 make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}