xref: /freebsd/tools/boot/rootgen.sh (revision 0661cd79cae1a9497d5c2b9c14b607c07737248d)
1082c6764SWarner Losh#!/bin/sh
2082c6764SWarner Losh
3082c6764SWarner Losh# $FreeBSD$
4082c6764SWarner Losh
57b4b55e5SIan Leporepassphrase=passphrase
67b4b55e5SIan Leporeiterations=50000
7595deaf7SIan Lepore
8db8b5613SRebecca Cran# The smallest FAT32 filesystem is 33292 KB
9db8b5613SRebecca 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#
20db8b5613SRebecca 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#
26db8b5613SRebecca 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
30*0661cd79SRebecca Cran. $(dirname $0)/install-boot.sh
31*0661cd79SRebecca Cran
32082c6764SWarner Loshcpsys() {
33082c6764SWarner Losh    src=$1
34082c6764SWarner Losh    dst=$2
35082c6764SWarner Losh
36082c6764SWarner Losh    # Copy kernel + boot loader
37082c6764SWarner Losh    (cd $src ; tar cf - .) | (cd $dst; tar xf -)
38082c6764SWarner Losh}
39082c6764SWarner Losh
40082c6764SWarner Loshmk_nogeli_gpt_ufs_legacy() {
41082c6764SWarner Losh    src=$1
42082c6764SWarner Losh    img=$2
43082c6764SWarner Losh
4422cf6021SWarner Losh    cat > ${src}/etc/fstab <<EOF
4522cf6021SWarner Losh/dev/ada0p2	/		ufs	rw	1	1
4622cf6021SWarner LoshEOF
47082c6764SWarner Losh    makefs -t ffs -B little -s 200m ${img}.p2 ${src}
48082c6764SWarner Losh    mkimg -s gpt -b ${src}/boot/pmbr \
49082c6764SWarner Losh	  -p freebsd-boot:=${src}/boot/gptboot \
50082c6764SWarner Losh	  -p freebsd-ufs:=${img}.p2 -o ${img}
5122cf6021SWarner Losh    rm -f ${src}/etc/fstab
52082c6764SWarner Losh}
53082c6764SWarner Losh
54082c6764SWarner Loshmk_nogeli_gpt_ufs_uefi() {
55082c6764SWarner Losh    src=$1
56082c6764SWarner Losh    img=$2
57082c6764SWarner Losh
5822cf6021SWarner Losh    cat > ${src}/etc/fstab <<EOF
5922cf6021SWarner Losh/dev/ada0p2	/		ufs	rw	1	1
6022cf6021SWarner LoshEOF
61*0661cd79SRebecca Cran    make_esp_file ${img}.p1 ${espsize} ${src}/boot/loader.efi
62082c6764SWarner Losh    makefs -t ffs -B little -s 200m ${img}.p2 ${src}
63f438a143SAllan Jude    mkimg -s gpt \
6422cf6021SWarner Losh	  -p efi:=${img}.p1 \
65082c6764SWarner Losh	  -p freebsd-ufs:=${img}.p2 -o ${img}
6622cf6021SWarner Losh    rm -f ${src}/etc/fstab
67082c6764SWarner Losh}
68082c6764SWarner Losh
69082c6764SWarner Loshmk_nogeli_gpt_ufs_both() {
70082c6764SWarner Losh    src=$1
71082c6764SWarner Losh    img=$2
72082c6764SWarner Losh
7322cf6021SWarner Losh    cat > ${src}/etc/fstab <<EOF
7422cf6021SWarner Losh/dev/ada0p3	/		ufs	rw	1	1
7522cf6021SWarner LoshEOF
76*0661cd79SRebecca Cran    make_esp_file ${img}.p1 ${espsize} ${src}/boot/loader.efi
77082c6764SWarner Losh    makefs -t ffs -B little -s 200m ${img}.p3 ${src}
78082c6764SWarner Losh    # p1 is boot for uefi, p2 is boot for gpt, p3 is /
79082c6764SWarner Losh    mkimg -b ${src}/boot/pmbr -s gpt \
80d050cd6bSWarner Losh	  -p efi:=${img}.p1 \
81082c6764SWarner Losh	  -p freebsd-boot:=${src}/boot/gptboot \
82082c6764SWarner Losh	  -p freebsd-ufs:=${img}.p3 \
83082c6764SWarner Losh	  -o ${img}
8422cf6021SWarner Losh    rm -f ${src}/etc/fstab
85082c6764SWarner Losh}
86082c6764SWarner Losh
87082c6764SWarner Loshmk_nogeli_gpt_zfs_legacy() {
88082c6764SWarner Losh    src=$1
89082c6764SWarner Losh    img=$2
90082c6764SWarner Losh    mntpt=$3
91082c6764SWarner Losh    geli=$4
92082c6764SWarner Losh    scheme=$5
93082c6764SWarner Losh    fs=$6
94082c6764SWarner Losh    bios=$7
95082c6764SWarner Losh    pool=nogeli-gpt-zfs-legacy
96082c6764SWarner Losh
97082c6764SWarner Losh    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
98082c6764SWarner Losh    md=$(mdconfig -f ${img})
99082c6764SWarner Losh    gpart create -s gpt ${md}
100082c6764SWarner Losh    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
101082c6764SWarner Losh    gpart add -t freebsd-zfs -l root $md
102082c6764SWarner Losh    # install-boot will make this bootable
103082c6764SWarner Losh    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2
104082c6764SWarner Losh    zpool set bootfs=${pool} ${pool}
1052145d0ecSAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
106082c6764SWarner Losh    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
107082c6764SWarner Losh    cpsys ${src} ${mntpt}
108082c6764SWarner Losh    # need to make a couple of tweaks
109d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
110082c6764SWarner Loshzfs_load=YES
111082c6764SWarner Loshopensolaris_load=YES
112082c6764SWarner LoshEOF
113082c6764SWarner Losh    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
114082c6764SWarner Losh    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
115082c6764SWarner Losh    # end tweaks
1162145d0ecSAllan Jude    zfs umount -f ${pool}/ROOT/default
1172145d0ecSAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
1182145d0ecSAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
119082c6764SWarner Losh    zpool set autoexpand=on ${pool}
120082c6764SWarner Losh    zpool export ${pool}
121082c6764SWarner Losh    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
122082c6764SWarner Losh    mdconfig -d -u ${md}
123082c6764SWarner Losh}
124082c6764SWarner Losh
125082c6764SWarner Loshmk_nogeli_gpt_zfs_uefi() {
126712b4ca9SAllan Jude    src=$1
127712b4ca9SAllan Jude    img=$2
128712b4ca9SAllan Jude    mntpt=$3
129712b4ca9SAllan Jude    geli=$4
130712b4ca9SAllan Jude    scheme=$5
131712b4ca9SAllan Jude    fs=$6
132712b4ca9SAllan Jude    bios=$7
133712b4ca9SAllan Jude    pool=nogeli-gpt-zfs-uefi
134712b4ca9SAllan Jude
135712b4ca9SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
136712b4ca9SAllan Jude    md=$(mdconfig -f ${img})
137712b4ca9SAllan Jude    gpart create -s gpt ${md}
138db8b5613SRebecca Cran    gpart add -t efi -s ${espsize}k -a 4k ${md}
139712b4ca9SAllan Jude    gpart add -t freebsd-zfs -l root $md
140712b4ca9SAllan Jude    # install-boot will make this bootable
141712b4ca9SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2
142712b4ca9SAllan Jude    zpool set bootfs=${pool} ${pool}
143712b4ca9SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
144712b4ca9SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
145712b4ca9SAllan Jude    cpsys ${src} ${mntpt}
146712b4ca9SAllan Jude    # need to make a couple of tweaks
147d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
148712b4ca9SAllan Judezfs_load=YES
149712b4ca9SAllan Judeopensolaris_load=YES
150712b4ca9SAllan JudeEOF
151712b4ca9SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
152712b4ca9SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
153712b4ca9SAllan Jude    # end tweaks
154712b4ca9SAllan Jude    zfs umount -f ${pool}/ROOT/default
155712b4ca9SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
156712b4ca9SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
157712b4ca9SAllan Jude    zpool set autoexpand=on ${pool}
158712b4ca9SAllan Jude    zpool export ${pool}
159712b4ca9SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
160712b4ca9SAllan Jude    mdconfig -d -u ${md}
161082c6764SWarner Losh}
162082c6764SWarner Losh
163082c6764SWarner Loshmk_nogeli_gpt_zfs_both() {
164712b4ca9SAllan Jude    src=$1
165712b4ca9SAllan Jude    img=$2
166712b4ca9SAllan Jude    mntpt=$3
167712b4ca9SAllan Jude    geli=$4
168712b4ca9SAllan Jude    scheme=$5
169712b4ca9SAllan Jude    fs=$6
170712b4ca9SAllan Jude    bios=$7
171712b4ca9SAllan Jude    pool=nogeli-gpt-zfs-both
172712b4ca9SAllan Jude
173712b4ca9SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
174712b4ca9SAllan Jude    md=$(mdconfig -f ${img})
175712b4ca9SAllan Jude    gpart create -s gpt ${md}
176db8b5613SRebecca Cran    gpart add -t efi -s ${espsize}k -a 4k ${md}
177712b4ca9SAllan Jude    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
178712b4ca9SAllan Jude    gpart add -t freebsd-zfs -l root $md
179712b4ca9SAllan Jude    # install-boot will make this bootable
180712b4ca9SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3
181712b4ca9SAllan Jude    zpool set bootfs=${pool} ${pool}
182712b4ca9SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
183712b4ca9SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
184712b4ca9SAllan Jude    cpsys ${src} ${mntpt}
185712b4ca9SAllan Jude    # need to make a couple of tweaks
186d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
187712b4ca9SAllan Judezfs_load=YES
188712b4ca9SAllan Judeopensolaris_load=YES
189712b4ca9SAllan JudeEOF
190712b4ca9SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
191712b4ca9SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
192712b4ca9SAllan Jude    # end tweaks
193712b4ca9SAllan Jude    zfs umount -f ${pool}/ROOT/default
194712b4ca9SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
195712b4ca9SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
196712b4ca9SAllan Jude    zpool set autoexpand=on ${pool}
197712b4ca9SAllan Jude    zpool export ${pool}
198712b4ca9SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
199712b4ca9SAllan Jude    mdconfig -d -u ${md}
200082c6764SWarner Losh}
201082c6764SWarner Losh
202082c6764SWarner Loshmk_nogeli_mbr_ufs_legacy() {
20322cf6021SWarner Losh    src=$1
20422cf6021SWarner Losh    img=$2
20522cf6021SWarner Losh
20622cf6021SWarner Losh    cat > ${src}/etc/fstab <<EOF
20722cf6021SWarner Losh/dev/ada0s1a	/		ufs	rw	1	1
20822cf6021SWarner LoshEOF
20922cf6021SWarner Losh    makefs -t ffs -B little -s 200m ${img}.s1a ${src}
21022cf6021SWarner Losh    mkimg -s bsd -b ${src}/boot/boot -p freebsd-ufs:=${img}.s1a -o ${img}.s1
211f438a143SAllan Jude    mkimg -a 1 -s mbr -b ${src}/boot/boot0sio -p freebsd:=${img}.s1 -o ${img}
21222cf6021SWarner Losh    rm -f ${src}/etc/fstab
213082c6764SWarner Losh}
214082c6764SWarner Losh
215082c6764SWarner Loshmk_nogeli_mbr_ufs_uefi() {
216f438a143SAllan Jude    src=$1
217f438a143SAllan Jude    img=$2
218f438a143SAllan Jude
219f438a143SAllan Jude    cat > ${src}/etc/fstab <<EOF
220c7940ca2SIan Lepore/dev/ada0s2a	/		ufs	rw	1	1
221f438a143SAllan JudeEOF
222*0661cd79SRebecca Cran    make_esp_file ${img}.s1 ${espsize} ${src}/boot/loader.efi
223f438a143SAllan Jude    makefs -t ffs -B little -s 200m ${img}.s2a ${src}
224f438a143SAllan Jude    mkimg -s bsd -p freebsd-ufs:=${img}.s2a -o ${img}.s2
225f438a143SAllan Jude    mkimg -a 1 -s mbr -p efi:=${img}.s1 -p freebsd:=${img}.s2 -o ${img}
226f438a143SAllan Jude    rm -f ${src}/etc/fstab
227082c6764SWarner Losh}
228082c6764SWarner Losh
229082c6764SWarner Loshmk_nogeli_mbr_ufs_both() {
230f438a143SAllan Jude    src=$1
231f438a143SAllan Jude    img=$2
232f438a143SAllan Jude
233f438a143SAllan Jude    cat > ${src}/etc/fstab <<EOF
234c7940ca2SIan Lepore/dev/ada0s2a	/		ufs	rw	1	1
235f438a143SAllan JudeEOF
236*0661cd79SRebecca Cran    make_esp_file ${img}.s1 ${espsize} ${src}/boot/loader.efi
237f438a143SAllan Jude    makefs -t ffs -B little -s 200m ${img}.s2a ${src}
238f438a143SAllan Jude    mkimg -s bsd -b ${src}/boot/boot -p freebsd-ufs:=${img}.s2a -o ${img}.s2
239f438a143SAllan Jude    mkimg -a 2 -s mbr -b ${src}/boot/mbr -p efi:=${img}.s1 -p freebsd:=${img}.s2 -o ${img}
240f438a143SAllan Jude    rm -f ${src}/etc/fstab
241082c6764SWarner Losh}
242082c6764SWarner Losh
243082c6764SWarner Loshmk_nogeli_mbr_zfs_legacy() {
244f438a143SAllan Jude    src=$1
245f438a143SAllan Jude    img=$2
246f438a143SAllan Jude    mntpt=$3
247f438a143SAllan Jude    geli=$4
248f438a143SAllan Jude    scheme=$5
249f438a143SAllan Jude    fs=$6
250f438a143SAllan Jude    bios=$7
251f438a143SAllan Jude    pool=nogeli-mbr-zfs-legacy
252f438a143SAllan Jude
253f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
254f438a143SAllan Jude    md=$(mdconfig -f ${img})
255f438a143SAllan Jude    gpart create -s mbr ${md}
256f438a143SAllan Jude    gpart add -t freebsd ${md}
257f438a143SAllan Jude    gpart set -a active -i 1 ${md}
258f438a143SAllan Jude    gpart create -s bsd ${md}s1
259f438a143SAllan Jude    gpart add -t freebsd-zfs ${md}s1
260f438a143SAllan Jude    # install-boot will make this bootable
261f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s1a
262f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
263f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
264f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
265f438a143SAllan Jude    cpsys ${src} ${mntpt}
266f438a143SAllan Jude    # need to make a couple of tweaks
267d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
268f438a143SAllan Judezfs_load=YES
269f438a143SAllan Judeopensolaris_load=YES
270f438a143SAllan JudeEOF
271f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
272f438a143SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
273f438a143SAllan Jude    # end tweaks
274f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
275f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
276f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
277f438a143SAllan Jude    zpool set autoexpand=on ${pool}
278f438a143SAllan Jude    zpool export ${pool}
279f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
280f438a143SAllan Jude    mdconfig -d -u ${md}
281082c6764SWarner Losh}
282082c6764SWarner Losh
283082c6764SWarner Loshmk_nogeli_mbr_zfs_uefi() {
284f438a143SAllan Jude    src=$1
285f438a143SAllan Jude    img=$2
286f438a143SAllan Jude    mntpt=$3
287f438a143SAllan Jude    geli=$4
288f438a143SAllan Jude    scheme=$5
289f438a143SAllan Jude    fs=$6
290f438a143SAllan Jude    bios=$7
291f438a143SAllan Jude    pool=nogeli-mbr-zfs-uefi
292f438a143SAllan Jude
293f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
294f438a143SAllan Jude    md=$(mdconfig -f ${img})
295f438a143SAllan Jude    gpart create -s mbr ${md}
296db8b5613SRebecca Cran    gpart add -t efi -s ${espsize}k ${md}
297f438a143SAllan Jude    gpart add -t freebsd ${md}
298f438a143SAllan Jude    gpart set -a active -i 2 ${md}
299f438a143SAllan Jude    gpart create -s bsd ${md}s2
300f438a143SAllan Jude    gpart add -t freebsd-zfs ${md}s2
301f438a143SAllan Jude    # install-boot will make this bootable
302f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s2a
303f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
304f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
305f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
306f438a143SAllan Jude    cpsys ${src} ${mntpt}
307f438a143SAllan Jude    # need to make a couple of tweaks
308d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
309f438a143SAllan Judezfs_load=YES
310f438a143SAllan Judeopensolaris_load=YES
311f438a143SAllan JudeEOF
312f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
313f438a143SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
314f438a143SAllan Jude    # end tweaks
315f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
316f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
317f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
318f438a143SAllan Jude    zpool set autoexpand=on ${pool}
319f438a143SAllan Jude    zpool export ${pool}
320f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
321f438a143SAllan Jude    mdconfig -d -u ${md}
322082c6764SWarner Losh}
323082c6764SWarner Losh
324082c6764SWarner Loshmk_nogeli_mbr_zfs_both() {
325f438a143SAllan Jude    src=$1
326f438a143SAllan Jude    img=$2
327f438a143SAllan Jude    mntpt=$3
328f438a143SAllan Jude    geli=$4
329f438a143SAllan Jude    scheme=$5
330f438a143SAllan Jude    fs=$6
331f438a143SAllan Jude    bios=$7
332f438a143SAllan Jude    pool=nogeli-mbr-zfs-both
333f438a143SAllan Jude
334f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
335f438a143SAllan Jude    md=$(mdconfig -f ${img})
336f438a143SAllan Jude    gpart create -s mbr ${md}
337db8b5613SRebecca Cran    gpart add -t efi -s  ${espsize}k ${md}
338f438a143SAllan Jude    gpart add -t freebsd ${md}
339f438a143SAllan Jude    gpart set -a active -i 2 ${md}
340f438a143SAllan Jude    gpart create -s bsd ${md}s2
341f438a143SAllan Jude    gpart add -t freebsd-zfs ${md}s2
342f438a143SAllan Jude    # install-boot will make this bootable
343f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s2a
344f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
345f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
346f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
347f438a143SAllan Jude    cpsys ${src} ${mntpt}
348f438a143SAllan Jude    # need to make a couple of tweaks
349d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
350f438a143SAllan Judezfs_load=YES
351f438a143SAllan Judeopensolaris_load=YES
352f438a143SAllan JudeEOF
353f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
354f438a143SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
355f438a143SAllan Jude    # end tweaks
356f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
357f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
358f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
359f438a143SAllan Jude    zpool set autoexpand=on ${pool}
360f438a143SAllan Jude    zpool export ${pool}
361f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
362f438a143SAllan Jude    mdconfig -d -u ${md}
363082c6764SWarner Losh}
364082c6764SWarner Losh
365082c6764SWarner Loshmk_geli_gpt_ufs_legacy() {
366f438a143SAllan Jude    src=$1
367f438a143SAllan Jude    img=$2
368f438a143SAllan Jude    mntpt=$3
369f438a143SAllan Jude    geli=$4
370f438a143SAllan Jude    scheme=$5
371f438a143SAllan Jude    fs=$6
372f438a143SAllan Jude    bios=$7
373f438a143SAllan Jude
374f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
375f438a143SAllan Jude    md=$(mdconfig -f ${img})
376f438a143SAllan Jude    gpart create -s gpt ${md}
377f438a143SAllan Jude    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
378f438a143SAllan Jude    gpart add -t freebsd-ufs -l root $md
379f438a143SAllan Jude    # install-boot will make this bootable
380595deaf7SIan Lepore    echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p2
381595deaf7SIan Lepore    echo ${passphrase} | geli attach -j - ${md}p2
382f438a143SAllan Jude    newfs /dev/${md}p2.eli
383f438a143SAllan Jude    mount /dev/${md}p2.eli ${mntpt}
384f438a143SAllan Jude    cpsys ${src} ${mntpt}
385f438a143SAllan Jude    # need to make a couple of tweaks
386f438a143SAllan Jude    cat > ${mntpt}/boot/loader.conf <<EOF
387f438a143SAllan Judegeom_eli_load=YES
388f438a143SAllan JudeEOF
389f438a143SAllan Jude    cat > ${mntpt}/etc/fstab <<EOF
390f438a143SAllan Jude/dev/ada0p2.eli	/		ufs	rw	1	1
391f438a143SAllan JudeEOF
392f438a143SAllan Jude
393f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
394f438a143SAllan Jude    # end tweaks
395f438a143SAllan Jude    umount -f ${mntpt}
396f438a143SAllan Jude    geli detach ${md}p2
397f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
398f438a143SAllan Jude    mdconfig -d -u ${md}
399082c6764SWarner Losh}
400082c6764SWarner Losh
401082c6764SWarner Loshmk_geli_gpt_ufs_uefi() {
402f438a143SAllan Jude    src=$1
403f438a143SAllan Jude    img=$2
404f438a143SAllan Jude    mntpt=$3
405f438a143SAllan Jude    geli=$4
406f438a143SAllan Jude    scheme=$5
407f438a143SAllan Jude    fs=$6
408f438a143SAllan Jude    bios=$7
409f438a143SAllan Jude
410f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
411f438a143SAllan Jude    md=$(mdconfig -f ${img})
412f438a143SAllan Jude    gpart create -s gpt ${md}
413db8b5613SRebecca Cran    gpart add -t efi -s ${espsize}k -a 4k ${md}
414f438a143SAllan Jude    gpart add -t freebsd-ufs -l root $md
415f438a143SAllan Jude    # install-boot will make this bootable
416595deaf7SIan Lepore    echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p2
417595deaf7SIan Lepore    echo ${passphrase} | geli attach -j - ${md}p2
418f438a143SAllan Jude    newfs /dev/${md}p2.eli
419f438a143SAllan Jude    mount /dev/${md}p2.eli ${mntpt}
420f438a143SAllan Jude    cpsys ${src} ${mntpt}
421f438a143SAllan Jude    # need to make a couple of tweaks
422f438a143SAllan Jude    cat > ${mntpt}/boot/loader.conf <<EOF
423f438a143SAllan Judegeom_eli_load=YES
424f438a143SAllan JudeEOF
425f438a143SAllan Jude    cat > ${mntpt}/etc/fstab <<EOF
426f438a143SAllan Jude/dev/ada0p2.eli	/		ufs	rw	1	1
427f438a143SAllan JudeEOF
428f438a143SAllan Jude
429f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
430f438a143SAllan Jude    # end tweaks
431f438a143SAllan Jude    umount -f ${mntpt}
432f438a143SAllan Jude    geli detach ${md}p2
433f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
434f438a143SAllan Jude    mdconfig -d -u ${md}
435082c6764SWarner Losh}
436082c6764SWarner Losh
437082c6764SWarner Loshmk_geli_gpt_ufs_both() {
438f438a143SAllan Jude    src=$1
439f438a143SAllan Jude    img=$2
440f438a143SAllan Jude    mntpt=$3
441f438a143SAllan Jude    geli=$4
442f438a143SAllan Jude    scheme=$5
443f438a143SAllan Jude    fs=$6
444f438a143SAllan Jude    bios=$7
445f438a143SAllan Jude
446f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
447f438a143SAllan Jude    md=$(mdconfig -f ${img})
448f438a143SAllan Jude    gpart create -s gpt ${md}
449db8b5613SRebecca Cran    gpart add -t efi -s ${espsize}k -a 4k ${md}
450f438a143SAllan Jude    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
451f438a143SAllan Jude    gpart add -t freebsd-ufs -l root $md
452f438a143SAllan Jude    # install-boot will make this bootable
453595deaf7SIan Lepore    echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p3
454595deaf7SIan Lepore    echo ${passphrase} | geli attach -j - ${md}p3
455f438a143SAllan Jude    newfs /dev/${md}p3.eli
456f438a143SAllan Jude    mount /dev/${md}p3.eli ${mntpt}
457f438a143SAllan Jude    cpsys ${src} ${mntpt}
458f438a143SAllan Jude    # need to make a couple of tweaks
459f438a143SAllan Jude    cat > ${mntpt}/boot/loader.conf <<EOF
460f438a143SAllan Judegeom_eli_load=YES
461f438a143SAllan JudeEOF
462f438a143SAllan Jude    cat > ${mntpt}/etc/fstab <<EOF
463f438a143SAllan Jude/dev/ada0p3.eli	/		ufs	rw	1	1
464f438a143SAllan JudeEOF
465f438a143SAllan Jude
466f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
467f438a143SAllan Jude    # end tweaks
468f438a143SAllan Jude    umount -f ${mntpt}
469f438a143SAllan Jude    geli detach ${md}p3
470f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
471f438a143SAllan Jude    mdconfig -d -u ${md}
472082c6764SWarner Losh}
473082c6764SWarner Losh
474082c6764SWarner Loshmk_geli_gpt_zfs_legacy() {
475f438a143SAllan Jude    src=$1
476f438a143SAllan Jude    img=$2
477f438a143SAllan Jude    mntpt=$3
478f438a143SAllan Jude    geli=$4
479f438a143SAllan Jude    scheme=$5
480f438a143SAllan Jude    fs=$6
481f438a143SAllan Jude    bios=$7
482f438a143SAllan Jude    pool=geli-gpt-zfs-legacy
483f438a143SAllan Jude
484f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
485f438a143SAllan Jude    md=$(mdconfig -f ${img})
486f438a143SAllan Jude    gpart create -s gpt ${md}
487f438a143SAllan Jude    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
488f438a143SAllan Jude    gpart add -t freebsd-zfs -l root $md
489f438a143SAllan Jude    # install-boot will make this bootable
490595deaf7SIan Lepore    echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p2
491595deaf7SIan Lepore    echo ${passphrase} | geli attach -j - ${md}p2
492f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2.eli
493f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
494f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
495f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
496f438a143SAllan Jude    cpsys ${src} ${mntpt}
497f438a143SAllan Jude    # need to make a couple of tweaks
498d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
499f438a143SAllan Judezfs_load=YES
500f438a143SAllan Judeopensolaris_load=YES
501f438a143SAllan Judegeom_eli_load=YES
502f438a143SAllan JudeEOF
503f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
504f438a143SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
505f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
506f438a143SAllan Jude    # end tweaks
507f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
508f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
509f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
510f438a143SAllan Jude    zpool set autoexpand=on ${pool}
511f438a143SAllan Jude    zpool export ${pool}
512f438a143SAllan Jude    geli detach ${md}p2
513f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
514f438a143SAllan Jude    mdconfig -d -u ${md}
515082c6764SWarner Losh}
516082c6764SWarner Losh
517082c6764SWarner Loshmk_geli_gpt_zfs_uefi() {
518f438a143SAllan Jude    src=$1
519f438a143SAllan Jude    img=$2
520f438a143SAllan Jude    mntpt=$3
521f438a143SAllan Jude    geli=$4
522f438a143SAllan Jude    scheme=$5
523f438a143SAllan Jude    fs=$6
524f438a143SAllan Jude    bios=$7
525f438a143SAllan Jude    pool=geli-gpt-zfs-uefi
526f438a143SAllan Jude
527f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
528f438a143SAllan Jude    md=$(mdconfig -f ${img})
529f438a143SAllan Jude    gpart create -s gpt ${md}
530db8b5613SRebecca Cran    gpart add -t efi -s ${espsize}k -a 4k ${md}
531f438a143SAllan Jude    gpart add -t freebsd-zfs -l root $md
532f438a143SAllan Jude    # install-boot will make this bootable
533595deaf7SIan Lepore    echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p2
534595deaf7SIan Lepore    echo ${passphrase} | geli attach -j - ${md}p2
535f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2.eli
536f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
537f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
538f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
539f438a143SAllan Jude    cpsys ${src} ${mntpt}
540f438a143SAllan Jude    # need to make a couple of tweaks
541d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
542f438a143SAllan Judezfs_load=YES
543f438a143SAllan Judeopensolaris_load=YES
544f438a143SAllan Judegeom_eli_load=YES
545f438a143SAllan JudeEOF
546f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
547f438a143SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
548f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
549f438a143SAllan Jude    # end tweaks
550f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
551f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
552f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
553f438a143SAllan Jude    zpool set autoexpand=on ${pool}
554f438a143SAllan Jude    zpool export ${pool}
555f438a143SAllan Jude    geli detach ${md}p2
556f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
557f438a143SAllan Jude    mdconfig -d -u ${md}
558082c6764SWarner Losh}
559082c6764SWarner Losh
560082c6764SWarner Loshmk_geli_gpt_zfs_both() {
561f438a143SAllan Jude    src=$1
562f438a143SAllan Jude    img=$2
563f438a143SAllan Jude    mntpt=$3
564f438a143SAllan Jude    geli=$4
565f438a143SAllan Jude    scheme=$5
566f438a143SAllan Jude    fs=$6
567f438a143SAllan Jude    bios=$7
568f438a143SAllan Jude    pool=geli-gpt-zfs-both
569f438a143SAllan Jude
570f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
571f438a143SAllan Jude    md=$(mdconfig -f ${img})
572f438a143SAllan Jude    gpart create -s gpt ${md}
573db8b5613SRebecca Cran    gpart add -t efi -s ${espsize}k -a 4k ${md}
574f438a143SAllan Jude    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
575f438a143SAllan Jude    gpart add -t freebsd-zfs -l root $md
576f438a143SAllan Jude    # install-boot will make this bootable
577595deaf7SIan Lepore    echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p3
578595deaf7SIan Lepore    echo ${passphrase} | geli attach -j - ${md}p3
579f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3.eli
580f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
581f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
582f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
583f438a143SAllan Jude    cpsys ${src} ${mntpt}
584f438a143SAllan Jude    # need to make a couple of tweaks
585f438a143SAllan Jude    cat > ${mntpt}/boot/loader.conf <<EOF
586f438a143SAllan Judezfs_load=YES
587f438a143SAllan Judeopensolaris_load=YES
588f438a143SAllan Judegeom_eli_load=YES
589f438a143SAllan JudeEOF
590f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
591f438a143SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
592f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
593f438a143SAllan Jude    # end tweaks
594f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
595f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
596f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
597f438a143SAllan Jude    zpool set autoexpand=on ${pool}
598f438a143SAllan Jude    zpool export ${pool}
599f438a143SAllan Jude    geli detach ${md}p3
600f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
601f438a143SAllan Jude    mdconfig -d -u ${md}
602082c6764SWarner Losh}
603082c6764SWarner Losh
604f438a143SAllan Jude# GELI+MBR is not a valid configuration
605082c6764SWarner Loshmk_geli_mbr_ufs_legacy() {
606082c6764SWarner Losh}
607082c6764SWarner Losh
608082c6764SWarner Loshmk_geli_mbr_ufs_uefi() {
609082c6764SWarner Losh}
610082c6764SWarner Losh
611082c6764SWarner Loshmk_geli_mbr_ufs_both() {
612082c6764SWarner Losh}
613082c6764SWarner Losh
614082c6764SWarner Loshmk_geli_mbr_zfs_legacy() {
615082c6764SWarner Losh}
616082c6764SWarner Losh
617082c6764SWarner Loshmk_geli_mbr_zfs_uefi() {
618082c6764SWarner Losh}
619082c6764SWarner Losh
620082c6764SWarner Loshmk_geli_mbr_zfs_both() {
621082c6764SWarner Losh}
622082c6764SWarner Losh
623082c6764SWarner Losh# iso
624082c6764SWarner Losh# pxeldr
625082c6764SWarner Losh# u-boot
62622cf6021SWarner Losh# powerpc
62722cf6021SWarner Losh
628ba8d50d0SMarius Stroblmk_sparc64_nogeli_vtoc8_ufs_ofw() {
629ba8d50d0SMarius Strobl    src=$1
630ba8d50d0SMarius Strobl    img=$2
631ba8d50d0SMarius Strobl    mntpt=$3
632ba8d50d0SMarius Strobl    geli=$4
633ba8d50d0SMarius Strobl    scheme=$5
634ba8d50d0SMarius Strobl    fs=$6
635ba8d50d0SMarius Strobl    bios=$7
636ba8d50d0SMarius Strobl
637ba8d50d0SMarius Strobl    cat > ${src}/etc/fstab <<EOF
638ba8d50d0SMarius Strobl/dev/ada0a	/		ufs	rw	1	1
639ba8d50d0SMarius StroblEOF
640ba8d50d0SMarius Strobl    makefs -t ffs -B big -s 200m ${img} ${src}
641ba8d50d0SMarius Strobl    md=$(mdconfig -f ${img})
642ba8d50d0SMarius Strobl    # For non-native builds, ensure that geom_part(4) supports VTOC8.
643ba8d50d0SMarius Strobl    kldload geom_part_vtoc8.ko
644ba8d50d0SMarius Strobl    gpart create -s VTOC8 ${md}
645ba8d50d0SMarius Strobl    gpart add -t freebsd-ufs ${md}
646ba8d50d0SMarius Strobl    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
647ba8d50d0SMarius Strobl    mdconfig -d -u ${md}
648ba8d50d0SMarius Strobl    rm -f ${src}/etc/fstab
649ba8d50d0SMarius Strobl}
650ba8d50d0SMarius Strobl
6517b4b55e5SIan Leporeqser="-serial telnet::4444,server -nographic"
65222cf6021SWarner Losh
65322cf6021SWarner Losh# https://wiki.freebsd.org/QemuRecipes
65422cf6021SWarner Losh# aarch64
65522cf6021SWarner Loshqemu_aarch64_uefi()
65622cf6021SWarner Losh{
65722cf6021SWarner Losh    img=$1
65822cf6021SWarner Losh    sh=$2
65922cf6021SWarner Losh
66022cf6021SWarner Losh    echo "qemu-system-aarch64 -m 4096M -cpu cortex-a57 -M virt  \
66122cf6021SWarner Losh        -bios QEMU_EFI.fd ${qser} \
66222cf6021SWarner Losh        -drive if=none,file=${img},id=hd0 \
66322cf6021SWarner Losh        -device virtio-blk-device,drive=hd0" > $sh
664dfe34ceaSIan Lepore    chmod 755 $sh
66522cf6021SWarner Losh# https://wiki.freebsd.org/arm64/QEMU also has
66622cf6021SWarner Losh#       -device virtio-net-device,netdev=net0
66722cf6021SWarner Losh#       -netdev user,id=net0
66822cf6021SWarner Losh}
66922cf6021SWarner Losh
67022cf6021SWarner Losh# Amd64 qemu
67122cf6021SWarner Loshqemu_amd64_legacy()
67222cf6021SWarner Losh{
67322cf6021SWarner Losh    img=$1
67422cf6021SWarner Losh    sh=$2
67522cf6021SWarner Losh
67648cb46aaSWarner Losh    echo "qemu-system-x86_64 -m 256m --drive file=${img},format=raw ${qser}" > $sh
677dfe34ceaSIan Lepore    chmod 755 $sh
67822cf6021SWarner Losh}
67922cf6021SWarner Losh
68022cf6021SWarner Loshqemu_amd64_uefi()
68122cf6021SWarner Losh{
68222cf6021SWarner Losh    img=$1
68322cf6021SWarner Losh    sh=$2
68422cf6021SWarner Losh
68548cb46aaSWarner Losh    echo "qemu-system-x86_64 -m 256m -bios ~/bios/OVMF-X64.fd --drive file=${img},format=raw ${qser}" > $sh
686dfe34ceaSIan Lepore    chmod 755 $sh
68722cf6021SWarner Losh}
68822cf6021SWarner Losh
68922cf6021SWarner Loshqemu_amd64_both()
69022cf6021SWarner Losh{
69122cf6021SWarner Losh    img=$1
69222cf6021SWarner Losh    sh=$2
69322cf6021SWarner Losh
69448cb46aaSWarner Losh    echo "qemu-system-x86_64 -m 256m --drive file=${img},format=raw ${qser}" > $sh
69548cb46aaSWarner Losh    echo "qemu-system-x86_64 -m 256m -bios ~/bios/OVMF-X64.fd --drive file=${img},format=raw ${qser}" >> $sh
696dfe34ceaSIan Lepore    chmod 755 $sh
69722cf6021SWarner Losh}
69822cf6021SWarner Losh
69922cf6021SWarner Losh# arm
70022cf6021SWarner Losh# nothing listed?
70122cf6021SWarner Losh
70222cf6021SWarner Losh# i386
70322cf6021SWarner Loshqemu_i386_legacy()
70422cf6021SWarner Losh{
70522cf6021SWarner Losh    img=$1
70622cf6021SWarner Losh    sh=$2
70722cf6021SWarner Losh
70822cf6021SWarner Losh    echo "qemu-system-i386 --drive file=${img},format=raw ${qser}" > $sh
709dfe34ceaSIan Lepore    chmod 755 $sh
71022cf6021SWarner Losh}
71122cf6021SWarner Losh
71222cf6021SWarner Losh# Not yet supported
71322cf6021SWarner Loshqemu_i386_uefi()
71422cf6021SWarner Losh{
71522cf6021SWarner Losh    img=$1
71622cf6021SWarner Losh    sh=$2
71722cf6021SWarner Losh
71822cf6021SWarner Losh    echo "qemu-system-i386 -bios ~/bios/OVMF-X32.fd --drive file=${img},format=raw ${qser}" > $sh
719dfe34ceaSIan Lepore    chmod 755 $sh
72022cf6021SWarner Losh}
72122cf6021SWarner Losh
72222cf6021SWarner Losh# Needs UEFI to be supported
72322cf6021SWarner Loshqemu_i386_both()
72422cf6021SWarner Losh{
72522cf6021SWarner Losh    img=$1
72622cf6021SWarner Losh    sh=$2
72722cf6021SWarner Losh
72822cf6021SWarner Losh    echo "qemu-system-i386 --drive file=${img},format=raw ${qser}" > $sh
729712b4ca9SAllan Jude    echo "qemu-system-i386 -bios ~/bios/OVMF-X32.fd --drive file=${img},format=raw ${qser}" >> $sh
730dfe34ceaSIan Lepore    chmod 755 $sh
73122cf6021SWarner Losh}
73222cf6021SWarner Losh
733432b4921SIan Leporemake_one_image()
734432b4921SIan Lepore{
735432b4921SIan Lepore    local arch=${1?}
736432b4921SIan Lepore    local geli=${2?}
737432b4921SIan Lepore    local scheme=${3?}
738432b4921SIan Lepore    local fs=${4?}
739432b4921SIan Lepore    local bios=${5?}
740432b4921SIan Lepore
741432b4921SIan Lepore    # Create sparse file and mount newly created filesystem(s) on it
742432b4921SIan Lepore    img=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.img
743432b4921SIan Lepore    sh=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.sh
744432b4921SIan Lepore    echo "vvvvvvvvvvvvvv   Creating $img  vvvvvvvvvvvvvvv"
745432b4921SIan Lepore    rm -f ${img}*
746432b4921SIan Lepore    eval mk_${geli}_${scheme}_${fs}_${bios} ${DESTDIR} ${img} ${MNTPT} ${geli} ${scheme} ${fs} ${bios}
747432b4921SIan Lepore    eval qemu_${arch}_${bios} ${img} ${sh}
748432b4921SIan Lepore    [ -n "${SUDO_USER}" ] && chown ${SUDO_USER} ${img}*
749432b4921SIan Lepore    echo "^^^^^^^^^^^^^^   Created $img   ^^^^^^^^^^^^^^^"
750432b4921SIan Lepore}
751432b4921SIan Lepore
75222cf6021SWarner Losh# mips
75322cf6021SWarner Losh# qemu-system-mips -kernel /path/to/rootfs/boot/kernel/kernel -nographic -hda /path/to/disk.img -m 2048
75422cf6021SWarner Losh
75522cf6021SWarner Losh# Powerpc -- doesn't work but maybe it would enough for testing -- needs details
75622cf6021SWarner Losh# powerpc64
75722cf6021SWarner Losh# qemu-system-ppc64 -drive file=/path/to/disk.img,format=raw
75822cf6021SWarner Losh
75922cf6021SWarner Losh# sparc64
76022cf6021SWarner Losh# qemu-system-sparc64 -drive file=/path/to/disk.img,format=raw
76122cf6021SWarner Losh
762082c6764SWarner Losh# Misc variables
763082c6764SWarner LoshSRCTOP=$(make -v SRCTOP)
764082c6764SWarner Loshcd ${SRCTOP}/stand
765082c6764SWarner LoshOBJDIR=$(make -v .OBJDIR)
766082c6764SWarner LoshIMGDIR=${OBJDIR}/boot-images
767082c6764SWarner Loshmkdir -p ${IMGDIR}
768082c6764SWarner LoshMNTPT=$(mktemp -d /tmp/stand-test.XXXXXX)
769082c6764SWarner Losh
770082c6764SWarner Losh# Setup the installed tree...
771082c6764SWarner LoshDESTDIR=${OBJDIR}/boot-tree
772082c6764SWarner Loshrm -rf ${DESTDIR}
773082c6764SWarner Loshmkdir -p ${DESTDIR}/boot/defaults
774082c6764SWarner Loshmkdir -p ${DESTDIR}/boot/kernel
775082c6764SWarner Loshcp /boot/kernel/kernel ${DESTDIR}/boot/kernel
776328884aeSWarner Loshecho -h -D -S115200 > ${DESTDIR}/boot.config
777d050cd6bSWarner Loshcat > ${DESTDIR}/boot/loader.conf <<EOF
778d050cd6bSWarner Loshconsole=comconsole
779d050cd6bSWarner Loshcomconsole_speed=115200
7801c70f60eSWarner Loshboot_serial=yes
7811c70f60eSWarner Loshboot_multicons=yes
782d050cd6bSWarner LoshEOF
783082c6764SWarner Losh# XXX
784082c6764SWarner Loshcp /boot/device.hints ${DESTDIR}/boot/device.hints
785082c6764SWarner Losh# Assume we're already built
786082c6764SWarner Loshmake install DESTDIR=${DESTDIR} MK_MAN=no MK_INSTALL_AS_USER=yes
78722cf6021SWarner Losh# Copy init, /bin/sh, minimal libraries and testing /etc/rc
78822cf6021SWarner Loshmkdir -p ${DESTDIR}/sbin ${DESTDIR}/bin \
78922cf6021SWarner Losh      ${DESTDIR}/lib ${DESTDIR}/libexec \
79022cf6021SWarner Losh      ${DESTDIR}/etc ${DESTDIR}/dev
791d050cd6bSWarner 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
792082c6764SWarner Losh    cp $f ${DESTDIR}/$f
793082c6764SWarner Loshdone
79422cf6021SWarner Loshcat > ${DESTDIR}/etc/rc <<EOF
79522cf6021SWarner Losh#!/bin/sh
79622cf6021SWarner Losh
797d050cd6bSWarner Loshsysctl machdep.bootmethod
79822cf6021SWarner Loshecho "RC COMMAND RUNNING -- SUCCESS!!!!!"
79922cf6021SWarner Loshhalt -p
80022cf6021SWarner LoshEOF
801082c6764SWarner Losh
802432b4921SIan Lepore# If we were given exactly 5 args, go make that one image.
803432b4921SIan Lepore
804432b4921SIan Leporeif [ $# -eq 5 ]; then
805432b4921SIan Lepore    make_one_image $*
806432b4921SIan Lepore    exit
807432b4921SIan Leporefi
808432b4921SIan Lepore
809082c6764SWarner Losh# OK. Let the games begin
810082c6764SWarner Losh
81122cf6021SWarner Loshfor arch in amd64; do
812082c6764SWarner Losh    for geli in nogeli geli; do
813082c6764SWarner Losh	for scheme in gpt mbr; do
814082c6764SWarner Losh	    for fs in ufs zfs; do
815082c6764SWarner Losh		for bios in legacy uefi both; do
816432b4921SIan Lepore		    make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
817082c6764SWarner Losh		done
818082c6764SWarner Losh	    done
819082c6764SWarner Losh	done
820082c6764SWarner Losh    done
82122cf6021SWarner Loshdone
822082c6764SWarner Losh
823082c6764SWarner Loshrmdir ${MNTPT}
82422cf6021SWarner Losh
82522cf6021SWarner Loshexit 0
82622cf6021SWarner Losh
82722cf6021SWarner Losh# Notes for the future
82822cf6021SWarner Losh
82922cf6021SWarner Loshfor arch in i386; do
83022cf6021SWarner Losh    for geli in nogeli geli; do
83122cf6021SWarner Losh	for scheme in gpt mbr; do
83222cf6021SWarner Losh	    for fs in ufs zfs; do
83322cf6021SWarner Losh		for bios in legacy; do
834432b4921SIan Lepore		    make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
83522cf6021SWarner Losh		done
83622cf6021SWarner Losh	    done
83722cf6021SWarner Losh	done
83822cf6021SWarner Losh    done
83922cf6021SWarner Loshdone
84022cf6021SWarner Losh
84122cf6021SWarner Loshfor arch in arm aarch64; do
84222cf6021SWarner Losh    for scheme in gpt mbr; do
84322cf6021SWarner Losh	fs=ufs
84422cf6021SWarner Losh	for bios in uboot efi; do
845432b4921SIan Lepore	    make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
84622cf6021SWarner Losh	done
84722cf6021SWarner Losh    done
84822cf6021SWarner Loshdone
84922cf6021SWarner Losh
85022cf6021SWarner Loshfor arch in powerpc powerpc64; do
85122cf6021SWarner Losh    for scheme in ppc-wtf; do
85222cf6021SWarner Losh	fs=ufs
85322cf6021SWarner Losh	for bios in ofw uboot chrp; do
854432b4921SIan Lepore	    make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
85522cf6021SWarner Losh	done
85622cf6021SWarner Losh    done
85722cf6021SWarner Loshdone
85822cf6021SWarner Losh
85922cf6021SWarner Loshfor arch in sparc64; do
860ba8d50d0SMarius Strobl    for geli in nogeli; do
861ba8d50d0SMarius Strobl	for scheme in vtoc8; do
862ba8d50d0SMarius Strobl	    for fs in ufs; do
86322cf6021SWarner Losh		for bios in ofw; do
864432b4921SIan Lepore		    make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
86522cf6021SWarner Losh		done
86622cf6021SWarner Losh	    done
86722cf6021SWarner Losh	done
868ba8d50d0SMarius Strobl    done
869ba8d50d0SMarius Strobldone
870