xref: /freebsd/tools/boot/rootgen.sh (revision db8b56134506840832bec2d1ce07b9e00d4d6d71)
1082c6764SWarner Losh#!/bin/sh
2082c6764SWarner Losh
3082c6764SWarner Losh# $FreeBSD$
4082c6764SWarner Losh
57b4b55e5SIan Leporepassphrase=passphrase
67b4b55e5SIan Leporeiterations=50000
7595deaf7SIan Lepore
8*db8b5613SRebecca Cran# The smallest FAT32 filesystem is 33292 KB
9*db8b5613SRebecca Cranespsize=33292
10d050cd6bSWarner Losh
11082c6764SWarner Losh#
12082c6764SWarner Losh# Builds all the bat-shit crazy combinations we support booting from,
13082c6764SWarner Losh# at least for amd64. It assume you have a ~sane kernel in /boot/kernel
14082c6764SWarner Losh# and copies that into the ~150MB root images we create (we create the du
15082c6764SWarner Losh# size of the kernel + 20MB
16082c6764SWarner Losh#
17082c6764SWarner Losh# Sad panda sez: this runs as root, but could be userland if someone
18082c6764SWarner Losh# creates userland geli and zfs tools.
19082c6764SWarner Losh#
20*db8b5613SRebecca Cran# This assumes an external program install-boot.sh which will install
21082c6764SWarner Losh# the appropriate boot files in the appropriate locations.
22082c6764SWarner Losh#
23082c6764SWarner Losh# These images assume ada0 will be the root image. We should likely
24082c6764SWarner Losh# use labels, but we don't.
25082c6764SWarner Losh#
26*db8b5613SRebecca Cran# Assumes you've already rebuilt... maybe bad? Also maybe bad: the env
27082c6764SWarner Losh# vars should likely be conditionally set to allow better automation.
28082c6764SWarner Losh#
29082c6764SWarner Losh
30082c6764SWarner Loshcpsys() {
31082c6764SWarner Losh    src=$1
32082c6764SWarner Losh    dst=$2
33082c6764SWarner Losh
34082c6764SWarner Losh    # Copy kernel + boot loader
35082c6764SWarner Losh    (cd $src ; tar cf - .) | (cd $dst; tar xf -)
36082c6764SWarner Losh}
37082c6764SWarner Losh
38082c6764SWarner Loshmk_nogeli_gpt_ufs_legacy() {
39082c6764SWarner Losh    src=$1
40082c6764SWarner Losh    img=$2
41082c6764SWarner Losh
4222cf6021SWarner Losh    cat > ${src}/etc/fstab <<EOF
4322cf6021SWarner Losh/dev/ada0p2	/		ufs	rw	1	1
4422cf6021SWarner LoshEOF
45082c6764SWarner Losh    makefs -t ffs -B little -s 200m ${img}.p2 ${src}
46082c6764SWarner Losh    mkimg -s gpt -b ${src}/boot/pmbr \
47082c6764SWarner Losh	  -p freebsd-boot:=${src}/boot/gptboot \
48082c6764SWarner Losh	  -p freebsd-ufs:=${img}.p2 -o ${img}
4922cf6021SWarner Losh    rm -f ${src}/etc/fstab
50082c6764SWarner Losh}
51082c6764SWarner Losh
52082c6764SWarner Loshmk_nogeli_gpt_ufs_uefi() {
53082c6764SWarner Losh    src=$1
54082c6764SWarner Losh    img=$2
55082c6764SWarner Losh
5622cf6021SWarner Losh    cat > ${src}/etc/fstab <<EOF
5722cf6021SWarner Losh/dev/ada0p2	/		ufs	rw	1	1
5822cf6021SWarner LoshEOF
59*db8b5613SRebecca Cran    make_esp_file ${img}.p1 ${espsize} ${src}
60082c6764SWarner Losh    makefs -t ffs -B little -s 200m ${img}.p2 ${src}
61f438a143SAllan Jude    mkimg -s gpt \
6222cf6021SWarner Losh	  -p efi:=${img}.p1 \
63082c6764SWarner Losh	  -p freebsd-ufs:=${img}.p2 -o ${img}
6422cf6021SWarner Losh    rm -f ${src}/etc/fstab
65082c6764SWarner Losh}
66082c6764SWarner Losh
67082c6764SWarner Loshmk_nogeli_gpt_ufs_both() {
68082c6764SWarner Losh    src=$1
69082c6764SWarner Losh    img=$2
70082c6764SWarner Losh
7122cf6021SWarner Losh    cat > ${src}/etc/fstab <<EOF
7222cf6021SWarner Losh/dev/ada0p3	/		ufs	rw	1	1
7322cf6021SWarner LoshEOF
74*db8b5613SRebecca Cran    make_esp_file ${img}.p1 ${espsize} ${src}
75082c6764SWarner Losh    makefs -t ffs -B little -s 200m ${img}.p3 ${src}
76082c6764SWarner Losh    # p1 is boot for uefi, p2 is boot for gpt, p3 is /
77082c6764SWarner Losh    mkimg -b ${src}/boot/pmbr -s gpt \
78d050cd6bSWarner Losh	  -p efi:=${img}.p1 \
79082c6764SWarner Losh	  -p freebsd-boot:=${src}/boot/gptboot \
80082c6764SWarner Losh	  -p freebsd-ufs:=${img}.p3 \
81082c6764SWarner Losh	  -o ${img}
8222cf6021SWarner Losh    rm -f ${src}/etc/fstab
83082c6764SWarner Losh}
84082c6764SWarner Losh
85082c6764SWarner Loshmk_nogeli_gpt_zfs_legacy() {
86082c6764SWarner Losh    src=$1
87082c6764SWarner Losh    img=$2
88082c6764SWarner Losh    mntpt=$3
89082c6764SWarner Losh    geli=$4
90082c6764SWarner Losh    scheme=$5
91082c6764SWarner Losh    fs=$6
92082c6764SWarner Losh    bios=$7
93082c6764SWarner Losh    pool=nogeli-gpt-zfs-legacy
94082c6764SWarner Losh
95082c6764SWarner Losh    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
96082c6764SWarner Losh    md=$(mdconfig -f ${img})
97082c6764SWarner Losh    gpart create -s gpt ${md}
98082c6764SWarner Losh    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
99082c6764SWarner Losh    gpart add -t freebsd-zfs -l root $md
100082c6764SWarner Losh    # install-boot will make this bootable
101082c6764SWarner Losh    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2
102082c6764SWarner Losh    zpool set bootfs=${pool} ${pool}
1032145d0ecSAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
104082c6764SWarner Losh    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
105082c6764SWarner Losh    cpsys ${src} ${mntpt}
106082c6764SWarner Losh    # need to make a couple of tweaks
107d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
108082c6764SWarner Loshzfs_load=YES
109082c6764SWarner Loshopensolaris_load=YES
110082c6764SWarner LoshEOF
111082c6764SWarner Losh    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
112082c6764SWarner Losh    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
113082c6764SWarner Losh    # end tweaks
1142145d0ecSAllan Jude    zfs umount -f ${pool}/ROOT/default
1152145d0ecSAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
1162145d0ecSAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
117082c6764SWarner Losh    zpool set autoexpand=on ${pool}
118082c6764SWarner Losh    zpool export ${pool}
119082c6764SWarner Losh    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
120082c6764SWarner Losh    mdconfig -d -u ${md}
121082c6764SWarner Losh}
122082c6764SWarner Losh
123082c6764SWarner Loshmk_nogeli_gpt_zfs_uefi() {
124712b4ca9SAllan Jude    src=$1
125712b4ca9SAllan Jude    img=$2
126712b4ca9SAllan Jude    mntpt=$3
127712b4ca9SAllan Jude    geli=$4
128712b4ca9SAllan Jude    scheme=$5
129712b4ca9SAllan Jude    fs=$6
130712b4ca9SAllan Jude    bios=$7
131712b4ca9SAllan Jude    pool=nogeli-gpt-zfs-uefi
132712b4ca9SAllan Jude
133712b4ca9SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
134712b4ca9SAllan Jude    md=$(mdconfig -f ${img})
135712b4ca9SAllan Jude    gpart create -s gpt ${md}
136*db8b5613SRebecca Cran    gpart add -t efi -s ${espsize}k -a 4k ${md}
137712b4ca9SAllan Jude    gpart add -t freebsd-zfs -l root $md
138712b4ca9SAllan Jude    # install-boot will make this bootable
139712b4ca9SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2
140712b4ca9SAllan Jude    zpool set bootfs=${pool} ${pool}
141712b4ca9SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
142712b4ca9SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
143712b4ca9SAllan Jude    cpsys ${src} ${mntpt}
144712b4ca9SAllan Jude    # need to make a couple of tweaks
145d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
146712b4ca9SAllan Judezfs_load=YES
147712b4ca9SAllan Judeopensolaris_load=YES
148712b4ca9SAllan JudeEOF
149712b4ca9SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
150712b4ca9SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
151712b4ca9SAllan Jude    # end tweaks
152712b4ca9SAllan Jude    zfs umount -f ${pool}/ROOT/default
153712b4ca9SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
154712b4ca9SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
155712b4ca9SAllan Jude    zpool set autoexpand=on ${pool}
156712b4ca9SAllan Jude    zpool export ${pool}
157712b4ca9SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
158712b4ca9SAllan Jude    mdconfig -d -u ${md}
159082c6764SWarner Losh}
160082c6764SWarner Losh
161082c6764SWarner Loshmk_nogeli_gpt_zfs_both() {
162712b4ca9SAllan Jude    src=$1
163712b4ca9SAllan Jude    img=$2
164712b4ca9SAllan Jude    mntpt=$3
165712b4ca9SAllan Jude    geli=$4
166712b4ca9SAllan Jude    scheme=$5
167712b4ca9SAllan Jude    fs=$6
168712b4ca9SAllan Jude    bios=$7
169712b4ca9SAllan Jude    pool=nogeli-gpt-zfs-both
170712b4ca9SAllan Jude
171712b4ca9SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
172712b4ca9SAllan Jude    md=$(mdconfig -f ${img})
173712b4ca9SAllan Jude    gpart create -s gpt ${md}
174*db8b5613SRebecca Cran    gpart add -t efi -s ${espsize}k -a 4k ${md}
175712b4ca9SAllan Jude    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
176712b4ca9SAllan Jude    gpart add -t freebsd-zfs -l root $md
177712b4ca9SAllan Jude    # install-boot will make this bootable
178712b4ca9SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3
179712b4ca9SAllan Jude    zpool set bootfs=${pool} ${pool}
180712b4ca9SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
181712b4ca9SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
182712b4ca9SAllan Jude    cpsys ${src} ${mntpt}
183712b4ca9SAllan Jude    # need to make a couple of tweaks
184d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
185712b4ca9SAllan Judezfs_load=YES
186712b4ca9SAllan Judeopensolaris_load=YES
187712b4ca9SAllan JudeEOF
188712b4ca9SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
189712b4ca9SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
190712b4ca9SAllan Jude    # end tweaks
191712b4ca9SAllan Jude    zfs umount -f ${pool}/ROOT/default
192712b4ca9SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
193712b4ca9SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
194712b4ca9SAllan Jude    zpool set autoexpand=on ${pool}
195712b4ca9SAllan Jude    zpool export ${pool}
196712b4ca9SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
197712b4ca9SAllan Jude    mdconfig -d -u ${md}
198082c6764SWarner Losh}
199082c6764SWarner Losh
200082c6764SWarner Loshmk_nogeli_mbr_ufs_legacy() {
20122cf6021SWarner Losh    src=$1
20222cf6021SWarner Losh    img=$2
20322cf6021SWarner Losh
20422cf6021SWarner Losh    cat > ${src}/etc/fstab <<EOF
20522cf6021SWarner Losh/dev/ada0s1a	/		ufs	rw	1	1
20622cf6021SWarner LoshEOF
20722cf6021SWarner Losh    makefs -t ffs -B little -s 200m ${img}.s1a ${src}
20822cf6021SWarner Losh    mkimg -s bsd -b ${src}/boot/boot -p freebsd-ufs:=${img}.s1a -o ${img}.s1
209f438a143SAllan Jude    mkimg -a 1 -s mbr -b ${src}/boot/boot0sio -p freebsd:=${img}.s1 -o ${img}
21022cf6021SWarner Losh    rm -f ${src}/etc/fstab
211082c6764SWarner Losh}
212082c6764SWarner Losh
213082c6764SWarner Loshmk_nogeli_mbr_ufs_uefi() {
214f438a143SAllan Jude    src=$1
215f438a143SAllan Jude    img=$2
216f438a143SAllan Jude
217f438a143SAllan Jude    cat > ${src}/etc/fstab <<EOF
218c7940ca2SIan Lepore/dev/ada0s2a	/		ufs	rw	1	1
219f438a143SAllan JudeEOF
220*db8b5613SRebecca Cran    make_esp_file ${img}.s1 ${espsize} ${src}
221f438a143SAllan Jude    makefs -t ffs -B little -s 200m ${img}.s2a ${src}
222f438a143SAllan Jude    mkimg -s bsd -p freebsd-ufs:=${img}.s2a -o ${img}.s2
223f438a143SAllan Jude    mkimg -a 1 -s mbr -p efi:=${img}.s1 -p freebsd:=${img}.s2 -o ${img}
224f438a143SAllan Jude    rm -f ${src}/etc/fstab
225082c6764SWarner Losh}
226082c6764SWarner Losh
227082c6764SWarner Loshmk_nogeli_mbr_ufs_both() {
228f438a143SAllan Jude    src=$1
229f438a143SAllan Jude    img=$2
230f438a143SAllan Jude
231f438a143SAllan Jude    cat > ${src}/etc/fstab <<EOF
232c7940ca2SIan Lepore/dev/ada0s2a	/		ufs	rw	1	1
233f438a143SAllan JudeEOF
234*db8b5613SRebecca Cran    make_esp_file ${img}.s1 ${espsize} ${src}
235f438a143SAllan Jude    makefs -t ffs -B little -s 200m ${img}.s2a ${src}
236f438a143SAllan Jude    mkimg -s bsd -b ${src}/boot/boot -p freebsd-ufs:=${img}.s2a -o ${img}.s2
237f438a143SAllan Jude    mkimg -a 2 -s mbr -b ${src}/boot/mbr -p efi:=${img}.s1 -p freebsd:=${img}.s2 -o ${img}
238f438a143SAllan Jude    rm -f ${src}/etc/fstab
239082c6764SWarner Losh}
240082c6764SWarner Losh
241082c6764SWarner Loshmk_nogeli_mbr_zfs_legacy() {
242f438a143SAllan Jude    src=$1
243f438a143SAllan Jude    img=$2
244f438a143SAllan Jude    mntpt=$3
245f438a143SAllan Jude    geli=$4
246f438a143SAllan Jude    scheme=$5
247f438a143SAllan Jude    fs=$6
248f438a143SAllan Jude    bios=$7
249f438a143SAllan Jude    pool=nogeli-mbr-zfs-legacy
250f438a143SAllan Jude
251f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
252f438a143SAllan Jude    md=$(mdconfig -f ${img})
253f438a143SAllan Jude    gpart create -s mbr ${md}
254f438a143SAllan Jude    gpart add -t freebsd ${md}
255f438a143SAllan Jude    gpart set -a active -i 1 ${md}
256f438a143SAllan Jude    gpart create -s bsd ${md}s1
257f438a143SAllan Jude    gpart add -t freebsd-zfs ${md}s1
258f438a143SAllan Jude    # install-boot will make this bootable
259f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s1a
260f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
261f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
262f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
263f438a143SAllan Jude    cpsys ${src} ${mntpt}
264f438a143SAllan Jude    # need to make a couple of tweaks
265d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
266f438a143SAllan Judezfs_load=YES
267f438a143SAllan Judeopensolaris_load=YES
268f438a143SAllan JudeEOF
269f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
270f438a143SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
271f438a143SAllan Jude    # end tweaks
272f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
273f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
274f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
275f438a143SAllan Jude    zpool set autoexpand=on ${pool}
276f438a143SAllan Jude    zpool export ${pool}
277f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
278f438a143SAllan Jude    mdconfig -d -u ${md}
279082c6764SWarner Losh}
280082c6764SWarner Losh
281082c6764SWarner Loshmk_nogeli_mbr_zfs_uefi() {
282f438a143SAllan Jude    src=$1
283f438a143SAllan Jude    img=$2
284f438a143SAllan Jude    mntpt=$3
285f438a143SAllan Jude    geli=$4
286f438a143SAllan Jude    scheme=$5
287f438a143SAllan Jude    fs=$6
288f438a143SAllan Jude    bios=$7
289f438a143SAllan Jude    pool=nogeli-mbr-zfs-uefi
290f438a143SAllan Jude
291f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
292f438a143SAllan Jude    md=$(mdconfig -f ${img})
293f438a143SAllan Jude    gpart create -s mbr ${md}
294*db8b5613SRebecca Cran    gpart add -t efi -s ${espsize}k ${md}
295f438a143SAllan Jude    gpart add -t freebsd ${md}
296f438a143SAllan Jude    gpart set -a active -i 2 ${md}
297f438a143SAllan Jude    gpart create -s bsd ${md}s2
298f438a143SAllan Jude    gpart add -t freebsd-zfs ${md}s2
299f438a143SAllan Jude    # install-boot will make this bootable
300f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s2a
301f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
302f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
303f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
304f438a143SAllan Jude    cpsys ${src} ${mntpt}
305f438a143SAllan Jude    # need to make a couple of tweaks
306d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
307f438a143SAllan Judezfs_load=YES
308f438a143SAllan Judeopensolaris_load=YES
309f438a143SAllan JudeEOF
310f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
311f438a143SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
312f438a143SAllan Jude    # end tweaks
313f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
314f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
315f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
316f438a143SAllan Jude    zpool set autoexpand=on ${pool}
317f438a143SAllan Jude    zpool export ${pool}
318f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
319f438a143SAllan Jude    mdconfig -d -u ${md}
320082c6764SWarner Losh}
321082c6764SWarner Losh
322082c6764SWarner Loshmk_nogeli_mbr_zfs_both() {
323f438a143SAllan Jude    src=$1
324f438a143SAllan Jude    img=$2
325f438a143SAllan Jude    mntpt=$3
326f438a143SAllan Jude    geli=$4
327f438a143SAllan Jude    scheme=$5
328f438a143SAllan Jude    fs=$6
329f438a143SAllan Jude    bios=$7
330f438a143SAllan Jude    pool=nogeli-mbr-zfs-both
331f438a143SAllan Jude
332f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
333f438a143SAllan Jude    md=$(mdconfig -f ${img})
334f438a143SAllan Jude    gpart create -s mbr ${md}
335*db8b5613SRebecca Cran    gpart add -t efi -s  ${espsize}k ${md}
336f438a143SAllan Jude    gpart add -t freebsd ${md}
337f438a143SAllan Jude    gpart set -a active -i 2 ${md}
338f438a143SAllan Jude    gpart create -s bsd ${md}s2
339f438a143SAllan Jude    gpart add -t freebsd-zfs ${md}s2
340f438a143SAllan Jude    # install-boot will make this bootable
341f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s2a
342f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
343f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
344f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
345f438a143SAllan Jude    cpsys ${src} ${mntpt}
346f438a143SAllan Jude    # need to make a couple of tweaks
347d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
348f438a143SAllan Judezfs_load=YES
349f438a143SAllan Judeopensolaris_load=YES
350f438a143SAllan JudeEOF
351f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
352f438a143SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
353f438a143SAllan Jude    # end tweaks
354f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
355f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
356f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
357f438a143SAllan Jude    zpool set autoexpand=on ${pool}
358f438a143SAllan Jude    zpool export ${pool}
359f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
360f438a143SAllan Jude    mdconfig -d -u ${md}
361082c6764SWarner Losh}
362082c6764SWarner Losh
363082c6764SWarner Loshmk_geli_gpt_ufs_legacy() {
364f438a143SAllan Jude    src=$1
365f438a143SAllan Jude    img=$2
366f438a143SAllan Jude    mntpt=$3
367f438a143SAllan Jude    geli=$4
368f438a143SAllan Jude    scheme=$5
369f438a143SAllan Jude    fs=$6
370f438a143SAllan Jude    bios=$7
371f438a143SAllan Jude
372f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
373f438a143SAllan Jude    md=$(mdconfig -f ${img})
374f438a143SAllan Jude    gpart create -s gpt ${md}
375f438a143SAllan Jude    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
376f438a143SAllan Jude    gpart add -t freebsd-ufs -l root $md
377f438a143SAllan Jude    # install-boot will make this bootable
378595deaf7SIan Lepore    echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p2
379595deaf7SIan Lepore    echo ${passphrase} | geli attach -j - ${md}p2
380f438a143SAllan Jude    newfs /dev/${md}p2.eli
381f438a143SAllan Jude    mount /dev/${md}p2.eli ${mntpt}
382f438a143SAllan Jude    cpsys ${src} ${mntpt}
383f438a143SAllan Jude    # need to make a couple of tweaks
384f438a143SAllan Jude    cat > ${mntpt}/boot/loader.conf <<EOF
385f438a143SAllan Judegeom_eli_load=YES
386f438a143SAllan JudeEOF
387f438a143SAllan Jude    cat > ${mntpt}/etc/fstab <<EOF
388f438a143SAllan Jude/dev/ada0p2.eli	/		ufs	rw	1	1
389f438a143SAllan JudeEOF
390f438a143SAllan Jude
391f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
392f438a143SAllan Jude    # end tweaks
393f438a143SAllan Jude    umount -f ${mntpt}
394f438a143SAllan Jude    geli detach ${md}p2
395f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
396f438a143SAllan Jude    mdconfig -d -u ${md}
397082c6764SWarner Losh}
398082c6764SWarner Losh
399082c6764SWarner Loshmk_geli_gpt_ufs_uefi() {
400f438a143SAllan Jude    src=$1
401f438a143SAllan Jude    img=$2
402f438a143SAllan Jude    mntpt=$3
403f438a143SAllan Jude    geli=$4
404f438a143SAllan Jude    scheme=$5
405f438a143SAllan Jude    fs=$6
406f438a143SAllan Jude    bios=$7
407f438a143SAllan Jude
408f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
409f438a143SAllan Jude    md=$(mdconfig -f ${img})
410f438a143SAllan Jude    gpart create -s gpt ${md}
411*db8b5613SRebecca Cran    gpart add -t efi -s ${espsize}k -a 4k ${md}
412f438a143SAllan Jude    gpart add -t freebsd-ufs -l root $md
413f438a143SAllan Jude    # install-boot will make this bootable
414595deaf7SIan Lepore    echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p2
415595deaf7SIan Lepore    echo ${passphrase} | geli attach -j - ${md}p2
416f438a143SAllan Jude    newfs /dev/${md}p2.eli
417f438a143SAllan Jude    mount /dev/${md}p2.eli ${mntpt}
418f438a143SAllan Jude    cpsys ${src} ${mntpt}
419f438a143SAllan Jude    # need to make a couple of tweaks
420f438a143SAllan Jude    cat > ${mntpt}/boot/loader.conf <<EOF
421f438a143SAllan Judegeom_eli_load=YES
422f438a143SAllan JudeEOF
423f438a143SAllan Jude    cat > ${mntpt}/etc/fstab <<EOF
424f438a143SAllan Jude/dev/ada0p2.eli	/		ufs	rw	1	1
425f438a143SAllan JudeEOF
426f438a143SAllan Jude
427f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
428f438a143SAllan Jude    # end tweaks
429f438a143SAllan Jude    umount -f ${mntpt}
430f438a143SAllan Jude    geli detach ${md}p2
431f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
432f438a143SAllan Jude    mdconfig -d -u ${md}
433082c6764SWarner Losh}
434082c6764SWarner Losh
435082c6764SWarner Loshmk_geli_gpt_ufs_both() {
436f438a143SAllan Jude    src=$1
437f438a143SAllan Jude    img=$2
438f438a143SAllan Jude    mntpt=$3
439f438a143SAllan Jude    geli=$4
440f438a143SAllan Jude    scheme=$5
441f438a143SAllan Jude    fs=$6
442f438a143SAllan Jude    bios=$7
443f438a143SAllan Jude
444f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
445f438a143SAllan Jude    md=$(mdconfig -f ${img})
446f438a143SAllan Jude    gpart create -s gpt ${md}
447*db8b5613SRebecca Cran    gpart add -t efi -s ${espsize}k -a 4k ${md}
448f438a143SAllan Jude    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
449f438a143SAllan Jude    gpart add -t freebsd-ufs -l root $md
450f438a143SAllan Jude    # install-boot will make this bootable
451595deaf7SIan Lepore    echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p3
452595deaf7SIan Lepore    echo ${passphrase} | geli attach -j - ${md}p3
453f438a143SAllan Jude    newfs /dev/${md}p3.eli
454f438a143SAllan Jude    mount /dev/${md}p3.eli ${mntpt}
455f438a143SAllan Jude    cpsys ${src} ${mntpt}
456f438a143SAllan Jude    # need to make a couple of tweaks
457f438a143SAllan Jude    cat > ${mntpt}/boot/loader.conf <<EOF
458f438a143SAllan Judegeom_eli_load=YES
459f438a143SAllan JudeEOF
460f438a143SAllan Jude    cat > ${mntpt}/etc/fstab <<EOF
461f438a143SAllan Jude/dev/ada0p3.eli	/		ufs	rw	1	1
462f438a143SAllan JudeEOF
463f438a143SAllan Jude
464f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
465f438a143SAllan Jude    # end tweaks
466f438a143SAllan Jude    umount -f ${mntpt}
467f438a143SAllan Jude    geli detach ${md}p3
468f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
469f438a143SAllan Jude    mdconfig -d -u ${md}
470082c6764SWarner Losh}
471082c6764SWarner Losh
472082c6764SWarner Loshmk_geli_gpt_zfs_legacy() {
473f438a143SAllan Jude    src=$1
474f438a143SAllan Jude    img=$2
475f438a143SAllan Jude    mntpt=$3
476f438a143SAllan Jude    geli=$4
477f438a143SAllan Jude    scheme=$5
478f438a143SAllan Jude    fs=$6
479f438a143SAllan Jude    bios=$7
480f438a143SAllan Jude    pool=geli-gpt-zfs-legacy
481f438a143SAllan Jude
482f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
483f438a143SAllan Jude    md=$(mdconfig -f ${img})
484f438a143SAllan Jude    gpart create -s gpt ${md}
485f438a143SAllan Jude    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
486f438a143SAllan Jude    gpart add -t freebsd-zfs -l root $md
487f438a143SAllan Jude    # install-boot will make this bootable
488595deaf7SIan Lepore    echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p2
489595deaf7SIan Lepore    echo ${passphrase} | geli attach -j - ${md}p2
490f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2.eli
491f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
492f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
493f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
494f438a143SAllan Jude    cpsys ${src} ${mntpt}
495f438a143SAllan Jude    # need to make a couple of tweaks
496d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
497f438a143SAllan Judezfs_load=YES
498f438a143SAllan Judeopensolaris_load=YES
499f438a143SAllan Judegeom_eli_load=YES
500f438a143SAllan JudeEOF
501f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
502f438a143SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
503f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
504f438a143SAllan Jude    # end tweaks
505f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
506f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
507f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
508f438a143SAllan Jude    zpool set autoexpand=on ${pool}
509f438a143SAllan Jude    zpool export ${pool}
510f438a143SAllan Jude    geli detach ${md}p2
511f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
512f438a143SAllan Jude    mdconfig -d -u ${md}
513082c6764SWarner Losh}
514082c6764SWarner Losh
515082c6764SWarner Loshmk_geli_gpt_zfs_uefi() {
516f438a143SAllan Jude    src=$1
517f438a143SAllan Jude    img=$2
518f438a143SAllan Jude    mntpt=$3
519f438a143SAllan Jude    geli=$4
520f438a143SAllan Jude    scheme=$5
521f438a143SAllan Jude    fs=$6
522f438a143SAllan Jude    bios=$7
523f438a143SAllan Jude    pool=geli-gpt-zfs-uefi
524f438a143SAllan Jude
525f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
526f438a143SAllan Jude    md=$(mdconfig -f ${img})
527f438a143SAllan Jude    gpart create -s gpt ${md}
528*db8b5613SRebecca Cran    gpart add -t efi -s ${espsize}k -a 4k ${md}
529f438a143SAllan Jude    gpart add -t freebsd-zfs -l root $md
530f438a143SAllan Jude    # install-boot will make this bootable
531595deaf7SIan Lepore    echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p2
532595deaf7SIan Lepore    echo ${passphrase} | geli attach -j - ${md}p2
533f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2.eli
534f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
535f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
536f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
537f438a143SAllan Jude    cpsys ${src} ${mntpt}
538f438a143SAllan Jude    # need to make a couple of tweaks
539d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
540f438a143SAllan Judezfs_load=YES
541f438a143SAllan Judeopensolaris_load=YES
542f438a143SAllan Judegeom_eli_load=YES
543f438a143SAllan JudeEOF
544f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
545f438a143SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
546f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
547f438a143SAllan Jude    # end tweaks
548f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
549f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
550f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
551f438a143SAllan Jude    zpool set autoexpand=on ${pool}
552f438a143SAllan Jude    zpool export ${pool}
553f438a143SAllan Jude    geli detach ${md}p2
554f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
555f438a143SAllan Jude    mdconfig -d -u ${md}
556082c6764SWarner Losh}
557082c6764SWarner Losh
558082c6764SWarner Loshmk_geli_gpt_zfs_both() {
559f438a143SAllan Jude    src=$1
560f438a143SAllan Jude    img=$2
561f438a143SAllan Jude    mntpt=$3
562f438a143SAllan Jude    geli=$4
563f438a143SAllan Jude    scheme=$5
564f438a143SAllan Jude    fs=$6
565f438a143SAllan Jude    bios=$7
566f438a143SAllan Jude    pool=geli-gpt-zfs-both
567f438a143SAllan Jude
568f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
569f438a143SAllan Jude    md=$(mdconfig -f ${img})
570f438a143SAllan Jude    gpart create -s gpt ${md}
571*db8b5613SRebecca Cran    gpart add -t efi -s ${espsize}k -a 4k ${md}
572f438a143SAllan Jude    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
573f438a143SAllan Jude    gpart add -t freebsd-zfs -l root $md
574f438a143SAllan Jude    # install-boot will make this bootable
575595deaf7SIan Lepore    echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p3
576595deaf7SIan Lepore    echo ${passphrase} | geli attach -j - ${md}p3
577f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3.eli
578f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
579f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
580f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
581f438a143SAllan Jude    cpsys ${src} ${mntpt}
582f438a143SAllan Jude    # need to make a couple of tweaks
583f438a143SAllan Jude    cat > ${mntpt}/boot/loader.conf <<EOF
584f438a143SAllan Judezfs_load=YES
585f438a143SAllan Judeopensolaris_load=YES
586f438a143SAllan Judegeom_eli_load=YES
587f438a143SAllan JudeEOF
588f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
589f438a143SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
590f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
591f438a143SAllan Jude    # end tweaks
592f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
593f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
594f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
595f438a143SAllan Jude    zpool set autoexpand=on ${pool}
596f438a143SAllan Jude    zpool export ${pool}
597f438a143SAllan Jude    geli detach ${md}p3
598f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
599f438a143SAllan Jude    mdconfig -d -u ${md}
600082c6764SWarner Losh}
601082c6764SWarner Losh
602f438a143SAllan Jude# GELI+MBR is not a valid configuration
603082c6764SWarner Loshmk_geli_mbr_ufs_legacy() {
604082c6764SWarner Losh}
605082c6764SWarner Losh
606082c6764SWarner Loshmk_geli_mbr_ufs_uefi() {
607082c6764SWarner Losh}
608082c6764SWarner Losh
609082c6764SWarner Loshmk_geli_mbr_ufs_both() {
610082c6764SWarner Losh}
611082c6764SWarner Losh
612082c6764SWarner Loshmk_geli_mbr_zfs_legacy() {
613082c6764SWarner Losh}
614082c6764SWarner Losh
615082c6764SWarner Loshmk_geli_mbr_zfs_uefi() {
616082c6764SWarner Losh}
617082c6764SWarner Losh
618082c6764SWarner Loshmk_geli_mbr_zfs_both() {
619082c6764SWarner Losh}
620082c6764SWarner Losh
621082c6764SWarner Losh# iso
622082c6764SWarner Losh# pxeldr
623082c6764SWarner Losh# u-boot
62422cf6021SWarner Losh# powerpc
62522cf6021SWarner Losh
626ba8d50d0SMarius Stroblmk_sparc64_nogeli_vtoc8_ufs_ofw() {
627ba8d50d0SMarius Strobl    src=$1
628ba8d50d0SMarius Strobl    img=$2
629ba8d50d0SMarius Strobl    mntpt=$3
630ba8d50d0SMarius Strobl    geli=$4
631ba8d50d0SMarius Strobl    scheme=$5
632ba8d50d0SMarius Strobl    fs=$6
633ba8d50d0SMarius Strobl    bios=$7
634ba8d50d0SMarius Strobl
635ba8d50d0SMarius Strobl    cat > ${src}/etc/fstab <<EOF
636ba8d50d0SMarius Strobl/dev/ada0a	/		ufs	rw	1	1
637ba8d50d0SMarius StroblEOF
638ba8d50d0SMarius Strobl    makefs -t ffs -B big -s 200m ${img} ${src}
639ba8d50d0SMarius Strobl    md=$(mdconfig -f ${img})
640ba8d50d0SMarius Strobl    # For non-native builds, ensure that geom_part(4) supports VTOC8.
641ba8d50d0SMarius Strobl    kldload geom_part_vtoc8.ko
642ba8d50d0SMarius Strobl    gpart create -s VTOC8 ${md}
643ba8d50d0SMarius Strobl    gpart add -t freebsd-ufs ${md}
644ba8d50d0SMarius Strobl    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
645ba8d50d0SMarius Strobl    mdconfig -d -u ${md}
646ba8d50d0SMarius Strobl    rm -f ${src}/etc/fstab
647ba8d50d0SMarius Strobl}
648ba8d50d0SMarius Strobl
6497b4b55e5SIan Leporeqser="-serial telnet::4444,server -nographic"
65022cf6021SWarner Losh
65122cf6021SWarner Losh# https://wiki.freebsd.org/QemuRecipes
65222cf6021SWarner Losh# aarch64
65322cf6021SWarner Loshqemu_aarch64_uefi()
65422cf6021SWarner Losh{
65522cf6021SWarner Losh    img=$1
65622cf6021SWarner Losh    sh=$2
65722cf6021SWarner Losh
65822cf6021SWarner Losh    echo "qemu-system-aarch64 -m 4096M -cpu cortex-a57 -M virt  \
65922cf6021SWarner Losh        -bios QEMU_EFI.fd ${qser} \
66022cf6021SWarner Losh        -drive if=none,file=${img},id=hd0 \
66122cf6021SWarner Losh        -device virtio-blk-device,drive=hd0" > $sh
662dfe34ceaSIan Lepore    chmod 755 $sh
66322cf6021SWarner Losh# https://wiki.freebsd.org/arm64/QEMU also has
66422cf6021SWarner Losh#       -device virtio-net-device,netdev=net0
66522cf6021SWarner Losh#       -netdev user,id=net0
66622cf6021SWarner Losh}
66722cf6021SWarner Losh
66822cf6021SWarner Losh# Amd64 qemu
66922cf6021SWarner Loshqemu_amd64_legacy()
67022cf6021SWarner Losh{
67122cf6021SWarner Losh    img=$1
67222cf6021SWarner Losh    sh=$2
67322cf6021SWarner Losh
67448cb46aaSWarner Losh    echo "qemu-system-x86_64 -m 256m --drive file=${img},format=raw ${qser}" > $sh
675dfe34ceaSIan Lepore    chmod 755 $sh
67622cf6021SWarner Losh}
67722cf6021SWarner Losh
67822cf6021SWarner Loshqemu_amd64_uefi()
67922cf6021SWarner Losh{
68022cf6021SWarner Losh    img=$1
68122cf6021SWarner Losh    sh=$2
68222cf6021SWarner Losh
68348cb46aaSWarner Losh    echo "qemu-system-x86_64 -m 256m -bios ~/bios/OVMF-X64.fd --drive file=${img},format=raw ${qser}" > $sh
684dfe34ceaSIan Lepore    chmod 755 $sh
68522cf6021SWarner Losh}
68622cf6021SWarner Losh
68722cf6021SWarner Loshqemu_amd64_both()
68822cf6021SWarner Losh{
68922cf6021SWarner Losh    img=$1
69022cf6021SWarner Losh    sh=$2
69122cf6021SWarner Losh
69248cb46aaSWarner Losh    echo "qemu-system-x86_64 -m 256m --drive file=${img},format=raw ${qser}" > $sh
69348cb46aaSWarner Losh    echo "qemu-system-x86_64 -m 256m -bios ~/bios/OVMF-X64.fd --drive file=${img},format=raw ${qser}" >> $sh
694dfe34ceaSIan Lepore    chmod 755 $sh
69522cf6021SWarner Losh}
69622cf6021SWarner Losh
69722cf6021SWarner Losh# arm
69822cf6021SWarner Losh# nothing listed?
69922cf6021SWarner Losh
70022cf6021SWarner Losh# i386
70122cf6021SWarner Loshqemu_i386_legacy()
70222cf6021SWarner Losh{
70322cf6021SWarner Losh    img=$1
70422cf6021SWarner Losh    sh=$2
70522cf6021SWarner Losh
70622cf6021SWarner Losh    echo "qemu-system-i386 --drive file=${img},format=raw ${qser}" > $sh
707dfe34ceaSIan Lepore    chmod 755 $sh
70822cf6021SWarner Losh}
70922cf6021SWarner Losh
71022cf6021SWarner Losh# Not yet supported
71122cf6021SWarner Loshqemu_i386_uefi()
71222cf6021SWarner Losh{
71322cf6021SWarner Losh    img=$1
71422cf6021SWarner Losh    sh=$2
71522cf6021SWarner Losh
71622cf6021SWarner Losh    echo "qemu-system-i386 -bios ~/bios/OVMF-X32.fd --drive file=${img},format=raw ${qser}" > $sh
717dfe34ceaSIan Lepore    chmod 755 $sh
71822cf6021SWarner Losh}
71922cf6021SWarner Losh
72022cf6021SWarner Losh# Needs UEFI to be supported
72122cf6021SWarner Loshqemu_i386_both()
72222cf6021SWarner Losh{
72322cf6021SWarner Losh    img=$1
72422cf6021SWarner Losh    sh=$2
72522cf6021SWarner Losh
72622cf6021SWarner Losh    echo "qemu-system-i386 --drive file=${img},format=raw ${qser}" > $sh
727712b4ca9SAllan Jude    echo "qemu-system-i386 -bios ~/bios/OVMF-X32.fd --drive file=${img},format=raw ${qser}" >> $sh
728dfe34ceaSIan Lepore    chmod 755 $sh
72922cf6021SWarner Losh}
73022cf6021SWarner Losh
731432b4921SIan Leporemake_one_image()
732432b4921SIan Lepore{
733432b4921SIan Lepore    local arch=${1?}
734432b4921SIan Lepore    local geli=${2?}
735432b4921SIan Lepore    local scheme=${3?}
736432b4921SIan Lepore    local fs=${4?}
737432b4921SIan Lepore    local bios=${5?}
738432b4921SIan Lepore
739432b4921SIan Lepore    # Create sparse file and mount newly created filesystem(s) on it
740432b4921SIan Lepore    img=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.img
741432b4921SIan Lepore    sh=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.sh
742432b4921SIan Lepore    echo "vvvvvvvvvvvvvv   Creating $img  vvvvvvvvvvvvvvv"
743432b4921SIan Lepore    rm -f ${img}*
744432b4921SIan Lepore    eval mk_${geli}_${scheme}_${fs}_${bios} ${DESTDIR} ${img} ${MNTPT} ${geli} ${scheme} ${fs} ${bios}
745432b4921SIan Lepore    eval qemu_${arch}_${bios} ${img} ${sh}
746432b4921SIan Lepore    [ -n "${SUDO_USER}" ] && chown ${SUDO_USER} ${img}*
747432b4921SIan Lepore    echo "^^^^^^^^^^^^^^   Created $img   ^^^^^^^^^^^^^^^"
748432b4921SIan Lepore}
749432b4921SIan Lepore
75022cf6021SWarner Losh# mips
75122cf6021SWarner Losh# qemu-system-mips -kernel /path/to/rootfs/boot/kernel/kernel -nographic -hda /path/to/disk.img -m 2048
75222cf6021SWarner Losh
75322cf6021SWarner Losh# Powerpc -- doesn't work but maybe it would enough for testing -- needs details
75422cf6021SWarner Losh# powerpc64
75522cf6021SWarner Losh# qemu-system-ppc64 -drive file=/path/to/disk.img,format=raw
75622cf6021SWarner Losh
75722cf6021SWarner Losh# sparc64
75822cf6021SWarner Losh# qemu-system-sparc64 -drive file=/path/to/disk.img,format=raw
75922cf6021SWarner Losh
760082c6764SWarner Losh# Misc variables
761082c6764SWarner LoshSRCTOP=$(make -v SRCTOP)
762082c6764SWarner Loshcd ${SRCTOP}/stand
763082c6764SWarner LoshOBJDIR=$(make -v .OBJDIR)
764082c6764SWarner LoshIMGDIR=${OBJDIR}/boot-images
765082c6764SWarner Loshmkdir -p ${IMGDIR}
766082c6764SWarner LoshMNTPT=$(mktemp -d /tmp/stand-test.XXXXXX)
767082c6764SWarner Losh
768082c6764SWarner Losh# Setup the installed tree...
769082c6764SWarner LoshDESTDIR=${OBJDIR}/boot-tree
770082c6764SWarner Loshrm -rf ${DESTDIR}
771082c6764SWarner Loshmkdir -p ${DESTDIR}/boot/defaults
772082c6764SWarner Loshmkdir -p ${DESTDIR}/boot/kernel
773082c6764SWarner Loshcp /boot/kernel/kernel ${DESTDIR}/boot/kernel
774328884aeSWarner Loshecho -h -D -S115200 > ${DESTDIR}/boot.config
775d050cd6bSWarner Loshcat > ${DESTDIR}/boot/loader.conf <<EOF
776d050cd6bSWarner Loshconsole=comconsole
777d050cd6bSWarner Loshcomconsole_speed=115200
7781c70f60eSWarner Loshboot_serial=yes
7791c70f60eSWarner Loshboot_multicons=yes
780d050cd6bSWarner LoshEOF
781082c6764SWarner Losh# XXX
782082c6764SWarner Loshcp /boot/device.hints ${DESTDIR}/boot/device.hints
783082c6764SWarner Losh# Assume we're already built
784082c6764SWarner Loshmake install DESTDIR=${DESTDIR} MK_MAN=no MK_INSTALL_AS_USER=yes
78522cf6021SWarner Losh# Copy init, /bin/sh, minimal libraries and testing /etc/rc
78622cf6021SWarner Loshmkdir -p ${DESTDIR}/sbin ${DESTDIR}/bin \
78722cf6021SWarner Losh      ${DESTDIR}/lib ${DESTDIR}/libexec \
78822cf6021SWarner Losh      ${DESTDIR}/etc ${DESTDIR}/dev
789d050cd6bSWarner Loshfor f in /sbin/halt /sbin/init /bin/sh /sbin/sysctl $(ldd /bin/sh | awk 'NF == 4 { print $3; }') /libexec/ld-elf.so.1; do
790082c6764SWarner Losh    cp $f ${DESTDIR}/$f
791082c6764SWarner Loshdone
79222cf6021SWarner Loshcat > ${DESTDIR}/etc/rc <<EOF
79322cf6021SWarner Losh#!/bin/sh
79422cf6021SWarner Losh
795d050cd6bSWarner Loshsysctl machdep.bootmethod
79622cf6021SWarner Loshecho "RC COMMAND RUNNING -- SUCCESS!!!!!"
79722cf6021SWarner Loshhalt -p
79822cf6021SWarner LoshEOF
799082c6764SWarner Losh
800432b4921SIan Lepore# If we were given exactly 5 args, go make that one image.
801432b4921SIan Lepore
802432b4921SIan Leporeif [ $# -eq 5 ]; then
803432b4921SIan Lepore    make_one_image $*
804432b4921SIan Lepore    exit
805432b4921SIan Leporefi
806432b4921SIan Lepore
807082c6764SWarner Losh# OK. Let the games begin
808082c6764SWarner Losh
80922cf6021SWarner Loshfor arch in amd64; do
810082c6764SWarner Losh    for geli in nogeli geli; do
811082c6764SWarner Losh	for scheme in gpt mbr; do
812082c6764SWarner Losh	    for fs in ufs zfs; do
813082c6764SWarner Losh		for bios in legacy uefi both; do
814432b4921SIan Lepore		    make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
815082c6764SWarner Losh		done
816082c6764SWarner Losh	    done
817082c6764SWarner Losh	done
818082c6764SWarner Losh    done
81922cf6021SWarner Loshdone
820082c6764SWarner Losh
821082c6764SWarner Loshrmdir ${MNTPT}
82222cf6021SWarner Losh
82322cf6021SWarner Loshexit 0
82422cf6021SWarner Losh
82522cf6021SWarner Losh# Notes for the future
82622cf6021SWarner Losh
82722cf6021SWarner Loshfor arch in i386; do
82822cf6021SWarner Losh    for geli in nogeli geli; do
82922cf6021SWarner Losh	for scheme in gpt mbr; do
83022cf6021SWarner Losh	    for fs in ufs zfs; do
83122cf6021SWarner Losh		for bios in legacy; do
832432b4921SIan Lepore		    make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
83322cf6021SWarner Losh		done
83422cf6021SWarner Losh	    done
83522cf6021SWarner Losh	done
83622cf6021SWarner Losh    done
83722cf6021SWarner Loshdone
83822cf6021SWarner Losh
83922cf6021SWarner Loshfor arch in arm aarch64; do
84022cf6021SWarner Losh    for scheme in gpt mbr; do
84122cf6021SWarner Losh	fs=ufs
84222cf6021SWarner Losh	for bios in uboot efi; do
843432b4921SIan Lepore	    make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
84422cf6021SWarner Losh	done
84522cf6021SWarner Losh    done
84622cf6021SWarner Loshdone
84722cf6021SWarner Losh
84822cf6021SWarner Loshfor arch in powerpc powerpc64; do
84922cf6021SWarner Losh    for scheme in ppc-wtf; do
85022cf6021SWarner Losh	fs=ufs
85122cf6021SWarner Losh	for bios in ofw uboot chrp; do
852432b4921SIan Lepore	    make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
85322cf6021SWarner Losh	done
85422cf6021SWarner Losh    done
85522cf6021SWarner Loshdone
85622cf6021SWarner Losh
85722cf6021SWarner Loshfor arch in sparc64; do
858ba8d50d0SMarius Strobl    for geli in nogeli; do
859ba8d50d0SMarius Strobl	for scheme in vtoc8; do
860ba8d50d0SMarius Strobl	    for fs in ufs; do
86122cf6021SWarner Losh		for bios in ofw; do
862432b4921SIan Lepore		    make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
86322cf6021SWarner Losh		done
86422cf6021SWarner Losh	    done
86522cf6021SWarner Losh	done
866ba8d50d0SMarius Strobl    done
867ba8d50d0SMarius Strobldone
868