xref: /freebsd/tools/boot/rootgen.sh (revision aff95057bca1dc929996a616b0c39a6ff89a1bbf)
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
104c4e2b3dSWarner Loshdev=vtbd0
11d050cd6bSWarner Losh
12082c6764SWarner Losh#
13082c6764SWarner Losh# Builds all the bat-shit crazy combinations we support booting from,
14082c6764SWarner Losh# at least for amd64. It assume you have a ~sane kernel in /boot/kernel
15082c6764SWarner Losh# and copies that into the ~150MB root images we create (we create the du
16082c6764SWarner Losh# size of the kernel + 20MB
17082c6764SWarner Losh#
18082c6764SWarner Losh# Sad panda sez: this runs as root, but could be userland if someone
19082c6764SWarner Losh# creates userland geli and zfs tools.
20082c6764SWarner Losh#
21db8b5613SRebecca Cran# This assumes an external program install-boot.sh which will install
22082c6764SWarner Losh# the appropriate boot files in the appropriate locations.
23082c6764SWarner Losh#
244c4e2b3dSWarner Losh# These images assume ${dev} will be the root image. We should likely
25082c6764SWarner Losh# use labels, but we don't.
26082c6764SWarner Losh#
27db8b5613SRebecca Cran# Assumes you've already rebuilt... maybe bad? Also maybe bad: the env
28082c6764SWarner Losh# vars should likely be conditionally set to allow better automation.
29082c6764SWarner Losh#
30082c6764SWarner Losh
310661cd79SRebecca Cran. $(dirname $0)/install-boot.sh
320661cd79SRebecca Cran
33082c6764SWarner Loshcpsys() {
34082c6764SWarner Losh    src=$1
35082c6764SWarner Losh    dst=$2
36082c6764SWarner Losh
37082c6764SWarner Losh    # Copy kernel + boot loader
38082c6764SWarner Losh    (cd $src ; tar cf - .) | (cd $dst; tar xf -)
39082c6764SWarner Losh}
40082c6764SWarner Losh
41082c6764SWarner Loshmk_nogeli_gpt_ufs_legacy() {
42082c6764SWarner Losh    src=$1
43082c6764SWarner Losh    img=$2
44082c6764SWarner Losh
4522cf6021SWarner Losh    cat > ${src}/etc/fstab <<EOF
464c4e2b3dSWarner Losh/dev/${dev}p2	/		ufs	rw	1	1
4722cf6021SWarner LoshEOF
48082c6764SWarner Losh    makefs -t ffs -B little -s 200m ${img}.p2 ${src}
49082c6764SWarner Losh    mkimg -s gpt -b ${src}/boot/pmbr \
50082c6764SWarner Losh	  -p freebsd-boot:=${src}/boot/gptboot \
51082c6764SWarner Losh	  -p freebsd-ufs:=${img}.p2 -o ${img}
5222cf6021SWarner Losh    rm -f ${src}/etc/fstab
53082c6764SWarner Losh}
54082c6764SWarner Losh
55082c6764SWarner Loshmk_nogeli_gpt_ufs_uefi() {
56082c6764SWarner Losh    src=$1
57082c6764SWarner Losh    img=$2
58082c6764SWarner Losh
5922cf6021SWarner Losh    cat > ${src}/etc/fstab <<EOF
604c4e2b3dSWarner Losh/dev/${dev}p2	/		ufs	rw	1	1
6122cf6021SWarner LoshEOF
620661cd79SRebecca Cran    make_esp_file ${img}.p1 ${espsize} ${src}/boot/loader.efi
63082c6764SWarner Losh    makefs -t ffs -B little -s 200m ${img}.p2 ${src}
64f438a143SAllan Jude    mkimg -s gpt \
6522cf6021SWarner Losh	  -p efi:=${img}.p1 \
66082c6764SWarner Losh	  -p freebsd-ufs:=${img}.p2 -o ${img}
6722cf6021SWarner Losh    rm -f ${src}/etc/fstab
68082c6764SWarner Losh}
69082c6764SWarner Losh
70082c6764SWarner Loshmk_nogeli_gpt_ufs_both() {
71082c6764SWarner Losh    src=$1
72082c6764SWarner Losh    img=$2
73082c6764SWarner Losh
7422cf6021SWarner Losh    cat > ${src}/etc/fstab <<EOF
754c4e2b3dSWarner Losh/dev/${dev}p3	/		ufs	rw	1	1
7622cf6021SWarner LoshEOF
770661cd79SRebecca Cran    make_esp_file ${img}.p1 ${espsize} ${src}/boot/loader.efi
78082c6764SWarner Losh    makefs -t ffs -B little -s 200m ${img}.p3 ${src}
79082c6764SWarner Losh    # p1 is boot for uefi, p2 is boot for gpt, p3 is /
80082c6764SWarner Losh    mkimg -b ${src}/boot/pmbr -s gpt \
81d050cd6bSWarner Losh	  -p efi:=${img}.p1 \
82082c6764SWarner Losh	  -p freebsd-boot:=${src}/boot/gptboot \
83082c6764SWarner Losh	  -p freebsd-ufs:=${img}.p3 \
84082c6764SWarner Losh	  -o ${img}
8522cf6021SWarner Losh    rm -f ${src}/etc/fstab
86082c6764SWarner Losh}
87082c6764SWarner Losh
88082c6764SWarner Loshmk_nogeli_gpt_zfs_legacy() {
89082c6764SWarner Losh    src=$1
90082c6764SWarner Losh    img=$2
91082c6764SWarner Losh    mntpt=$3
92082c6764SWarner Losh    geli=$4
93082c6764SWarner Losh    scheme=$5
94082c6764SWarner Losh    fs=$6
95082c6764SWarner Losh    bios=$7
96082c6764SWarner Losh    pool=nogeli-gpt-zfs-legacy
97082c6764SWarner Losh
98082c6764SWarner Losh    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
99082c6764SWarner Losh    md=$(mdconfig -f ${img})
100082c6764SWarner Losh    gpart create -s gpt ${md}
101082c6764SWarner Losh    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
102082c6764SWarner Losh    gpart add -t freebsd-zfs -l root $md
103082c6764SWarner Losh    # install-boot will make this bootable
104082c6764SWarner Losh    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2
105082c6764SWarner Losh    zpool set bootfs=${pool} ${pool}
1062145d0ecSAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
107082c6764SWarner Losh    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
108082c6764SWarner Losh    cpsys ${src} ${mntpt}
109082c6764SWarner Losh    # need to make a couple of tweaks
110d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
1119e5787d2SMatt Macycryptodev_load=YES
112082c6764SWarner Loshzfs_load=YES
113082c6764SWarner LoshEOF
114827f1973SIan Lepore    cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
1159e5787d2SMatt Macy    cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko
116082c6764SWarner Losh    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
117082c6764SWarner Losh    # end tweaks
1182145d0ecSAllan Jude    zfs umount -f ${pool}/ROOT/default
1192145d0ecSAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
1202145d0ecSAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
121082c6764SWarner Losh    zpool set autoexpand=on ${pool}
122082c6764SWarner Losh    zpool export ${pool}
123082c6764SWarner Losh    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
124082c6764SWarner Losh    mdconfig -d -u ${md}
125082c6764SWarner Losh}
126082c6764SWarner Losh
127082c6764SWarner Loshmk_nogeli_gpt_zfs_uefi() {
128712b4ca9SAllan Jude    src=$1
129712b4ca9SAllan Jude    img=$2
130712b4ca9SAllan Jude    mntpt=$3
131712b4ca9SAllan Jude    geli=$4
132712b4ca9SAllan Jude    scheme=$5
133712b4ca9SAllan Jude    fs=$6
134712b4ca9SAllan Jude    bios=$7
135712b4ca9SAllan Jude    pool=nogeli-gpt-zfs-uefi
136712b4ca9SAllan Jude
137712b4ca9SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
138712b4ca9SAllan Jude    md=$(mdconfig -f ${img})
139712b4ca9SAllan Jude    gpart create -s gpt ${md}
140db8b5613SRebecca Cran    gpart add -t efi -s ${espsize}k -a 4k ${md}
141712b4ca9SAllan Jude    gpart add -t freebsd-zfs -l root $md
142712b4ca9SAllan Jude    # install-boot will make this bootable
143712b4ca9SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2
144712b4ca9SAllan Jude    zpool set bootfs=${pool} ${pool}
145712b4ca9SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
146712b4ca9SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
147712b4ca9SAllan Jude    cpsys ${src} ${mntpt}
148712b4ca9SAllan Jude    # need to make a couple of tweaks
149d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
1509e5787d2SMatt Macycryptodev_load=YES
151712b4ca9SAllan Judezfs_load=YES
152712b4ca9SAllan JudeEOF
153827f1973SIan Lepore    cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
1549e5787d2SMatt Macy    cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko
155712b4ca9SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
156712b4ca9SAllan Jude    # end tweaks
157712b4ca9SAllan Jude    zfs umount -f ${pool}/ROOT/default
158712b4ca9SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
159712b4ca9SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
160712b4ca9SAllan Jude    zpool set autoexpand=on ${pool}
161712b4ca9SAllan Jude    zpool export ${pool}
162712b4ca9SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
163712b4ca9SAllan Jude    mdconfig -d -u ${md}
164082c6764SWarner Losh}
165082c6764SWarner Losh
166082c6764SWarner Loshmk_nogeli_gpt_zfs_both() {
167712b4ca9SAllan Jude    src=$1
168712b4ca9SAllan Jude    img=$2
169712b4ca9SAllan Jude    mntpt=$3
170712b4ca9SAllan Jude    geli=$4
171712b4ca9SAllan Jude    scheme=$5
172712b4ca9SAllan Jude    fs=$6
173712b4ca9SAllan Jude    bios=$7
174712b4ca9SAllan Jude    pool=nogeli-gpt-zfs-both
175712b4ca9SAllan Jude
176712b4ca9SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
177712b4ca9SAllan Jude    md=$(mdconfig -f ${img})
178712b4ca9SAllan Jude    gpart create -s gpt ${md}
179db8b5613SRebecca Cran    gpart add -t efi -s ${espsize}k -a 4k ${md}
180712b4ca9SAllan Jude    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
181712b4ca9SAllan Jude    gpart add -t freebsd-zfs -l root $md
182712b4ca9SAllan Jude    # install-boot will make this bootable
183712b4ca9SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3
184712b4ca9SAllan Jude    zpool set bootfs=${pool} ${pool}
185712b4ca9SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
186712b4ca9SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
187712b4ca9SAllan Jude    cpsys ${src} ${mntpt}
188712b4ca9SAllan Jude    # need to make a couple of tweaks
189d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
1909e5787d2SMatt Macycryptodev_load=YES
191712b4ca9SAllan Judezfs_load=YES
192712b4ca9SAllan JudeEOF
193827f1973SIan Lepore    cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
1949e5787d2SMatt Macy    cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko
195712b4ca9SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
196712b4ca9SAllan Jude    # end tweaks
197712b4ca9SAllan Jude    zfs umount -f ${pool}/ROOT/default
198712b4ca9SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
199712b4ca9SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
200712b4ca9SAllan Jude    zpool set autoexpand=on ${pool}
201712b4ca9SAllan Jude    zpool export ${pool}
202712b4ca9SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
203712b4ca9SAllan Jude    mdconfig -d -u ${md}
204082c6764SWarner Losh}
205082c6764SWarner Losh
206082c6764SWarner Loshmk_nogeli_mbr_ufs_legacy() {
20722cf6021SWarner Losh    src=$1
20822cf6021SWarner Losh    img=$2
20922cf6021SWarner Losh
21022cf6021SWarner Losh    cat > ${src}/etc/fstab <<EOF
2114c4e2b3dSWarner Losh/dev/${dev}s1a	/		ufs	rw	1	1
21222cf6021SWarner LoshEOF
21322cf6021SWarner Losh    makefs -t ffs -B little -s 200m ${img}.s1a ${src}
21422cf6021SWarner Losh    mkimg -s bsd -b ${src}/boot/boot -p freebsd-ufs:=${img}.s1a -o ${img}.s1
215f438a143SAllan Jude    mkimg -a 1 -s mbr -b ${src}/boot/boot0sio -p freebsd:=${img}.s1 -o ${img}
21622cf6021SWarner Losh    rm -f ${src}/etc/fstab
217082c6764SWarner Losh}
218082c6764SWarner Losh
219082c6764SWarner Loshmk_nogeli_mbr_ufs_uefi() {
220f438a143SAllan Jude    src=$1
221f438a143SAllan Jude    img=$2
222f438a143SAllan Jude
223f438a143SAllan Jude    cat > ${src}/etc/fstab <<EOF
2244c4e2b3dSWarner Losh/dev/${dev}s2a	/		ufs	rw	1	1
225f438a143SAllan JudeEOF
2260661cd79SRebecca Cran    make_esp_file ${img}.s1 ${espsize} ${src}/boot/loader.efi
227f438a143SAllan Jude    makefs -t ffs -B little -s 200m ${img}.s2a ${src}
228f438a143SAllan Jude    mkimg -s bsd -p freebsd-ufs:=${img}.s2a -o ${img}.s2
229f438a143SAllan Jude    mkimg -a 1 -s mbr -p efi:=${img}.s1 -p freebsd:=${img}.s2 -o ${img}
230f438a143SAllan Jude    rm -f ${src}/etc/fstab
231082c6764SWarner Losh}
232082c6764SWarner Losh
233082c6764SWarner Loshmk_nogeli_mbr_ufs_both() {
234f438a143SAllan Jude    src=$1
235f438a143SAllan Jude    img=$2
236f438a143SAllan Jude
237f438a143SAllan Jude    cat > ${src}/etc/fstab <<EOF
2384c4e2b3dSWarner Losh/dev/${dev}s2a	/		ufs	rw	1	1
239f438a143SAllan JudeEOF
2400661cd79SRebecca Cran    make_esp_file ${img}.s1 ${espsize} ${src}/boot/loader.efi
241f438a143SAllan Jude    makefs -t ffs -B little -s 200m ${img}.s2a ${src}
242f438a143SAllan Jude    mkimg -s bsd -b ${src}/boot/boot -p freebsd-ufs:=${img}.s2a -o ${img}.s2
243f438a143SAllan Jude    mkimg -a 2 -s mbr -b ${src}/boot/mbr -p efi:=${img}.s1 -p freebsd:=${img}.s2 -o ${img}
244f438a143SAllan Jude    rm -f ${src}/etc/fstab
245082c6764SWarner Losh}
246082c6764SWarner Losh
247082c6764SWarner Loshmk_nogeli_mbr_zfs_legacy() {
248f438a143SAllan Jude    src=$1
249f438a143SAllan Jude    img=$2
250f438a143SAllan Jude    mntpt=$3
251f438a143SAllan Jude    geli=$4
252f438a143SAllan Jude    scheme=$5
253f438a143SAllan Jude    fs=$6
254f438a143SAllan Jude    bios=$7
255f438a143SAllan Jude    pool=nogeli-mbr-zfs-legacy
256f438a143SAllan Jude
257f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
258f438a143SAllan Jude    md=$(mdconfig -f ${img})
259f438a143SAllan Jude    gpart create -s mbr ${md}
260f438a143SAllan Jude    gpart add -t freebsd ${md}
261f438a143SAllan Jude    gpart set -a active -i 1 ${md}
262f438a143SAllan Jude    gpart create -s bsd ${md}s1
263f438a143SAllan Jude    gpart add -t freebsd-zfs ${md}s1
264f438a143SAllan Jude    # install-boot will make this bootable
265f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s1a
266f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
267f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
268f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
269f438a143SAllan Jude    cpsys ${src} ${mntpt}
270f438a143SAllan Jude    # need to make a couple of tweaks
271d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
2729e5787d2SMatt Macycryptodev_load=YES
273f438a143SAllan Judezfs_load=YES
274f438a143SAllan JudeEOF
275827f1973SIan Lepore    cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
2769e5787d2SMatt Macy    cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko
277f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
278f438a143SAllan Jude    # end tweaks
279f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
280f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
281f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
282f438a143SAllan Jude    zpool set autoexpand=on ${pool}
283f438a143SAllan Jude    zpool export ${pool}
284f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
285f438a143SAllan Jude    mdconfig -d -u ${md}
286082c6764SWarner Losh}
287082c6764SWarner Losh
288082c6764SWarner Loshmk_nogeli_mbr_zfs_uefi() {
289f438a143SAllan Jude    src=$1
290f438a143SAllan Jude    img=$2
291f438a143SAllan Jude    mntpt=$3
292f438a143SAllan Jude    geli=$4
293f438a143SAllan Jude    scheme=$5
294f438a143SAllan Jude    fs=$6
295f438a143SAllan Jude    bios=$7
296f438a143SAllan Jude    pool=nogeli-mbr-zfs-uefi
297f438a143SAllan Jude
298f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
299f438a143SAllan Jude    md=$(mdconfig -f ${img})
300f438a143SAllan Jude    gpart create -s mbr ${md}
301db8b5613SRebecca Cran    gpart add -t efi -s ${espsize}k ${md}
302f438a143SAllan Jude    gpart add -t freebsd ${md}
303f438a143SAllan Jude    gpart set -a active -i 2 ${md}
304f438a143SAllan Jude    gpart create -s bsd ${md}s2
305f438a143SAllan Jude    gpart add -t freebsd-zfs ${md}s2
306f438a143SAllan Jude    # install-boot will make this bootable
307f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s2a
308f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
309f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
310f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
311f438a143SAllan Jude    cpsys ${src} ${mntpt}
312f438a143SAllan Jude    # need to make a couple of tweaks
313d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
3149e5787d2SMatt Macycryptodev_load=YES
315f438a143SAllan Judezfs_load=YES
316f438a143SAllan JudeEOF
317827f1973SIan Lepore    cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
3189e5787d2SMatt Macy    cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko
319f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
320f438a143SAllan Jude    # end tweaks
321f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
322f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
323f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
324f438a143SAllan Jude    zpool set autoexpand=on ${pool}
325f438a143SAllan Jude    zpool export ${pool}
326f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
327f438a143SAllan Jude    mdconfig -d -u ${md}
328082c6764SWarner Losh}
329082c6764SWarner Losh
330082c6764SWarner Loshmk_nogeli_mbr_zfs_both() {
331f438a143SAllan Jude    src=$1
332f438a143SAllan Jude    img=$2
333f438a143SAllan Jude    mntpt=$3
334f438a143SAllan Jude    geli=$4
335f438a143SAllan Jude    scheme=$5
336f438a143SAllan Jude    fs=$6
337f438a143SAllan Jude    bios=$7
338f438a143SAllan Jude    pool=nogeli-mbr-zfs-both
339f438a143SAllan Jude
340f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
341f438a143SAllan Jude    md=$(mdconfig -f ${img})
342f438a143SAllan Jude    gpart create -s mbr ${md}
343db8b5613SRebecca Cran    gpart add -t efi -s  ${espsize}k ${md}
344f438a143SAllan Jude    gpart add -t freebsd ${md}
345f438a143SAllan Jude    gpart set -a active -i 2 ${md}
346f438a143SAllan Jude    gpart create -s bsd ${md}s2
347f438a143SAllan Jude    gpart add -t freebsd-zfs ${md}s2
348f438a143SAllan Jude    # install-boot will make this bootable
349f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s2a
350f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
351f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
352f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
353f438a143SAllan Jude    cpsys ${src} ${mntpt}
354f438a143SAllan Jude    # need to make a couple of tweaks
355d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
3569e5787d2SMatt Macycryptodev_load=YES
357f438a143SAllan Judezfs_load=YES
358f438a143SAllan JudeEOF
359827f1973SIan Lepore    cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
3609e5787d2SMatt Macy    cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko
361f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
362f438a143SAllan Jude    # end tweaks
363f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
364f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
365f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
366f438a143SAllan Jude    zpool set autoexpand=on ${pool}
367f438a143SAllan Jude    zpool export ${pool}
368f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
369f438a143SAllan Jude    mdconfig -d -u ${md}
370082c6764SWarner Losh}
371082c6764SWarner Losh
372082c6764SWarner Loshmk_geli_gpt_ufs_legacy() {
373f438a143SAllan Jude    src=$1
374f438a143SAllan Jude    img=$2
375f438a143SAllan Jude    mntpt=$3
376f438a143SAllan Jude    geli=$4
377f438a143SAllan Jude    scheme=$5
378f438a143SAllan Jude    fs=$6
379f438a143SAllan Jude    bios=$7
380f438a143SAllan Jude
381f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
382f438a143SAllan Jude    md=$(mdconfig -f ${img})
383f438a143SAllan Jude    gpart create -s gpt ${md}
384f438a143SAllan Jude    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
385f438a143SAllan Jude    gpart add -t freebsd-ufs -l root $md
386f438a143SAllan Jude    # install-boot will make this bootable
387595deaf7SIan Lepore    echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p2
388595deaf7SIan Lepore    echo ${passphrase} | geli attach -j - ${md}p2
389f438a143SAllan Jude    newfs /dev/${md}p2.eli
390f438a143SAllan Jude    mount /dev/${md}p2.eli ${mntpt}
391f438a143SAllan Jude    cpsys ${src} ${mntpt}
392f438a143SAllan Jude    # need to make a couple of tweaks
393f438a143SAllan Jude    cat > ${mntpt}/boot/loader.conf <<EOF
394f438a143SAllan Judegeom_eli_load=YES
395f438a143SAllan JudeEOF
396f438a143SAllan Jude    cat > ${mntpt}/etc/fstab <<EOF
3974c4e2b3dSWarner Losh/dev/${dev}p2.eli	/		ufs	rw	1	1
398f438a143SAllan JudeEOF
399f438a143SAllan Jude
400f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
401f438a143SAllan Jude    # end tweaks
402f438a143SAllan Jude    umount -f ${mntpt}
403f438a143SAllan Jude    geli detach ${md}p2
404f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
405f438a143SAllan Jude    mdconfig -d -u ${md}
406082c6764SWarner Losh}
407082c6764SWarner Losh
408082c6764SWarner Loshmk_geli_gpt_ufs_uefi() {
409f438a143SAllan Jude    src=$1
410f438a143SAllan Jude    img=$2
411f438a143SAllan Jude    mntpt=$3
412f438a143SAllan Jude    geli=$4
413f438a143SAllan Jude    scheme=$5
414f438a143SAllan Jude    fs=$6
415f438a143SAllan Jude    bios=$7
416f438a143SAllan Jude
417f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
418f438a143SAllan Jude    md=$(mdconfig -f ${img})
419f438a143SAllan Jude    gpart create -s gpt ${md}
420db8b5613SRebecca Cran    gpart add -t efi -s ${espsize}k -a 4k ${md}
421f438a143SAllan Jude    gpart add -t freebsd-ufs -l root $md
422f438a143SAllan Jude    # install-boot will make this bootable
423595deaf7SIan Lepore    echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p2
424595deaf7SIan Lepore    echo ${passphrase} | geli attach -j - ${md}p2
425f438a143SAllan Jude    newfs /dev/${md}p2.eli
426f438a143SAllan Jude    mount /dev/${md}p2.eli ${mntpt}
427f438a143SAllan Jude    cpsys ${src} ${mntpt}
428f438a143SAllan Jude    # need to make a couple of tweaks
429f438a143SAllan Jude    cat > ${mntpt}/boot/loader.conf <<EOF
430f438a143SAllan Judegeom_eli_load=YES
431f438a143SAllan JudeEOF
432f438a143SAllan Jude    cat > ${mntpt}/etc/fstab <<EOF
4334c4e2b3dSWarner Losh/dev/${dev}p2.eli	/		ufs	rw	1	1
434f438a143SAllan JudeEOF
435f438a143SAllan Jude
436f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
437f438a143SAllan Jude    # end tweaks
438f438a143SAllan Jude    umount -f ${mntpt}
439f438a143SAllan Jude    geli detach ${md}p2
440f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
441f438a143SAllan Jude    mdconfig -d -u ${md}
442082c6764SWarner Losh}
443082c6764SWarner Losh
444082c6764SWarner Loshmk_geli_gpt_ufs_both() {
445f438a143SAllan Jude    src=$1
446f438a143SAllan Jude    img=$2
447f438a143SAllan Jude    mntpt=$3
448f438a143SAllan Jude    geli=$4
449f438a143SAllan Jude    scheme=$5
450f438a143SAllan Jude    fs=$6
451f438a143SAllan Jude    bios=$7
452f438a143SAllan Jude
453f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
454f438a143SAllan Jude    md=$(mdconfig -f ${img})
455f438a143SAllan Jude    gpart create -s gpt ${md}
456db8b5613SRebecca Cran    gpart add -t efi -s ${espsize}k -a 4k ${md}
457f438a143SAllan Jude    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
458f438a143SAllan Jude    gpart add -t freebsd-ufs -l root $md
459f438a143SAllan Jude    # install-boot will make this bootable
460595deaf7SIan Lepore    echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p3
461595deaf7SIan Lepore    echo ${passphrase} | geli attach -j - ${md}p3
462f438a143SAllan Jude    newfs /dev/${md}p3.eli
463f438a143SAllan Jude    mount /dev/${md}p3.eli ${mntpt}
464f438a143SAllan Jude    cpsys ${src} ${mntpt}
465f438a143SAllan Jude    # need to make a couple of tweaks
466f438a143SAllan Jude    cat > ${mntpt}/boot/loader.conf <<EOF
467f438a143SAllan Judegeom_eli_load=YES
468f438a143SAllan JudeEOF
469f438a143SAllan Jude    cat > ${mntpt}/etc/fstab <<EOF
4704c4e2b3dSWarner Losh/dev/${dev}p3.eli	/		ufs	rw	1	1
471f438a143SAllan JudeEOF
472f438a143SAllan Jude
473f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
474f438a143SAllan Jude    # end tweaks
475f438a143SAllan Jude    umount -f ${mntpt}
476f438a143SAllan Jude    geli detach ${md}p3
477f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
478f438a143SAllan Jude    mdconfig -d -u ${md}
479082c6764SWarner Losh}
480082c6764SWarner Losh
481082c6764SWarner Loshmk_geli_gpt_zfs_legacy() {
482f438a143SAllan Jude    src=$1
483f438a143SAllan Jude    img=$2
484f438a143SAllan Jude    mntpt=$3
485f438a143SAllan Jude    geli=$4
486f438a143SAllan Jude    scheme=$5
487f438a143SAllan Jude    fs=$6
488f438a143SAllan Jude    bios=$7
489f438a143SAllan Jude    pool=geli-gpt-zfs-legacy
490f438a143SAllan Jude
4910c0ffba5SIan Lepore    # Note that in this flavor we create an empty p2 ufs partition, and put
4920c0ffba5SIan Lepore    # the bootable zfs stuff on p3, just to test the ability of the zfs probe
4930c0ffba5SIan Lepore    # probe routines to find a pool on a partition other than the first one.
4940c0ffba5SIan Lepore
4950c0ffba5SIan Lepore    dd if=/dev/zero of=${img} count=1 seek=$(( 300 * 1024 * 1024 / 512 ))
496f438a143SAllan Jude    md=$(mdconfig -f ${img})
497f438a143SAllan Jude    gpart create -s gpt ${md}
498f438a143SAllan Jude    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
4990c0ffba5SIan Lepore    gpart add -t freebsd-ufs -s 100m ${md}
500f438a143SAllan Jude    gpart add -t freebsd-zfs -l root $md
501f438a143SAllan Jude    # install-boot will make this bootable
5020c0ffba5SIan Lepore    echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p3
5030c0ffba5SIan Lepore    echo ${passphrase} | geli attach -j - ${md}p3
5040c0ffba5SIan Lepore    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3.eli
505f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
506f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
507f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
508f438a143SAllan Jude    cpsys ${src} ${mntpt}
509f438a143SAllan Jude    # need to make a couple of tweaks
510d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
5119e5787d2SMatt Macycryptodev_load=YES
512f438a143SAllan Judezfs_load=YES
513f438a143SAllan Judegeom_eli_load=YES
514f438a143SAllan JudeEOF
515827f1973SIan Lepore    cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
5169e5787d2SMatt Macy    cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko
517f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
518f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
519f438a143SAllan Jude    # end tweaks
520f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
521f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
522f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
523f438a143SAllan Jude    zpool set autoexpand=on ${pool}
524f438a143SAllan Jude    zpool export ${pool}
5250c0ffba5SIan Lepore    geli detach ${md}p3
526f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
527f438a143SAllan Jude    mdconfig -d -u ${md}
528082c6764SWarner Losh}
529082c6764SWarner Losh
530082c6764SWarner Loshmk_geli_gpt_zfs_uefi() {
531f438a143SAllan Jude    src=$1
532f438a143SAllan Jude    img=$2
533f438a143SAllan Jude    mntpt=$3
534f438a143SAllan Jude    geli=$4
535f438a143SAllan Jude    scheme=$5
536f438a143SAllan Jude    fs=$6
537f438a143SAllan Jude    bios=$7
538f438a143SAllan Jude    pool=geli-gpt-zfs-uefi
539f438a143SAllan Jude
5400c0ffba5SIan Lepore    # Note that in this flavor we create an empty p2 ufs partition, and put
5410c0ffba5SIan Lepore    # the bootable zfs stuff on p3, just to test the ability of the zfs probe
5420c0ffba5SIan Lepore    # probe routines to find a pool on a partition other than the first one.
5430c0ffba5SIan Lepore
5440c0ffba5SIan Lepore    dd if=/dev/zero of=${img} count=1 seek=$(( 300 * 1024 * 1024 / 512 ))
545f438a143SAllan Jude    md=$(mdconfig -f ${img})
546f438a143SAllan Jude    gpart create -s gpt ${md}
547db8b5613SRebecca Cran    gpart add -t efi -s ${espsize}k -a 4k ${md}
5480c0ffba5SIan Lepore    gpart add -t freebsd-ufs -s 100m ${md}
549f438a143SAllan Jude    gpart add -t freebsd-zfs -l root $md
550f438a143SAllan Jude    # install-boot will make this bootable
5510c0ffba5SIan Lepore    echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p3
5520c0ffba5SIan Lepore    echo ${passphrase} | geli attach -j - ${md}p3
5530c0ffba5SIan Lepore    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3.eli
554f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
555f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
556f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
557f438a143SAllan Jude    cpsys ${src} ${mntpt}
558f438a143SAllan Jude    # need to make a couple of tweaks
559d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
5609e5787d2SMatt Macycryptodev_load=YES
561f438a143SAllan Judezfs_load=YES
562f438a143SAllan Judegeom_eli_load=YES
563f438a143SAllan JudeEOF
564827f1973SIan Lepore    cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
5659e5787d2SMatt Macy    cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko
566f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
567f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
568f438a143SAllan Jude    # end tweaks
569f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
570f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
571f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
572f438a143SAllan Jude    zpool set autoexpand=on ${pool}
573f438a143SAllan Jude    zpool export ${pool}
5740c0ffba5SIan Lepore    geli detach ${md}p3
575f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
576f438a143SAllan Jude    mdconfig -d -u ${md}
577082c6764SWarner Losh}
578082c6764SWarner Losh
579082c6764SWarner Loshmk_geli_gpt_zfs_both() {
580f438a143SAllan Jude    src=$1
581f438a143SAllan Jude    img=$2
582f438a143SAllan Jude    mntpt=$3
583f438a143SAllan Jude    geli=$4
584f438a143SAllan Jude    scheme=$5
585f438a143SAllan Jude    fs=$6
586f438a143SAllan Jude    bios=$7
587f438a143SAllan Jude    pool=geli-gpt-zfs-both
588f438a143SAllan Jude
589f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
590f438a143SAllan Jude    md=$(mdconfig -f ${img})
591f438a143SAllan Jude    gpart create -s gpt ${md}
592db8b5613SRebecca Cran    gpart add -t efi -s ${espsize}k -a 4k ${md}
593f438a143SAllan Jude    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
594f438a143SAllan Jude    gpart add -t freebsd-zfs -l root $md
595f438a143SAllan Jude    # install-boot will make this bootable
596595deaf7SIan Lepore    echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p3
597595deaf7SIan Lepore    echo ${passphrase} | geli attach -j - ${md}p3
598f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3.eli
599f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
600f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
601f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
602f438a143SAllan Jude    cpsys ${src} ${mntpt}
603f438a143SAllan Jude    # need to make a couple of tweaks
604f438a143SAllan Jude    cat > ${mntpt}/boot/loader.conf <<EOF
6059e5787d2SMatt Macycryptodev_load=YES
606f438a143SAllan Judezfs_load=YES
607f438a143SAllan Judegeom_eli_load=YES
608f438a143SAllan JudeEOF
609827f1973SIan Lepore    cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
6109e5787d2SMatt Macy    cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko
611f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
612f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
613f438a143SAllan Jude    # end tweaks
614f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
615f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
616f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
617f438a143SAllan Jude    zpool set autoexpand=on ${pool}
618f438a143SAllan Jude    zpool export ${pool}
619f438a143SAllan Jude    geli detach ${md}p3
620f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
621f438a143SAllan Jude    mdconfig -d -u ${md}
622082c6764SWarner Losh}
623082c6764SWarner Losh
624f438a143SAllan Jude# GELI+MBR is not a valid configuration
625082c6764SWarner Loshmk_geli_mbr_ufs_legacy() {
626082c6764SWarner Losh}
627082c6764SWarner Losh
628082c6764SWarner Loshmk_geli_mbr_ufs_uefi() {
629082c6764SWarner Losh}
630082c6764SWarner Losh
631082c6764SWarner Loshmk_geli_mbr_ufs_both() {
632082c6764SWarner Losh}
633082c6764SWarner Losh
634082c6764SWarner Loshmk_geli_mbr_zfs_legacy() {
635082c6764SWarner Losh}
636082c6764SWarner Losh
637082c6764SWarner Loshmk_geli_mbr_zfs_uefi() {
638082c6764SWarner Losh}
639082c6764SWarner Losh
640082c6764SWarner Loshmk_geli_mbr_zfs_both() {
641082c6764SWarner Losh}
642082c6764SWarner Losh
643082c6764SWarner Losh# iso
644082c6764SWarner Losh# pxeldr
645082c6764SWarner Losh# u-boot
64622cf6021SWarner Losh# powerpc
64722cf6021SWarner Losh
6487b4b55e5SIan Leporeqser="-serial telnet::4444,server -nographic"
64922cf6021SWarner Losh
65022cf6021SWarner Losh# https://wiki.freebsd.org/QemuRecipes
65122cf6021SWarner Losh# aarch64
65222cf6021SWarner Loshqemu_aarch64_uefi()
65322cf6021SWarner Losh{
65422cf6021SWarner Losh    img=$1
65522cf6021SWarner Losh    sh=$2
65622cf6021SWarner Losh
65722cf6021SWarner Losh    echo "qemu-system-aarch64 -m 4096M -cpu cortex-a57 -M virt  \
65822cf6021SWarner Losh        -bios QEMU_EFI.fd ${qser} \
65922cf6021SWarner Losh        -drive if=none,file=${img},id=hd0 \
66022cf6021SWarner Losh        -device virtio-blk-device,drive=hd0" > $sh
661dfe34ceaSIan Lepore    chmod 755 $sh
66222cf6021SWarner Losh# https://wiki.freebsd.org/arm64/QEMU also has
66322cf6021SWarner Losh#       -device virtio-net-device,netdev=net0
66422cf6021SWarner Losh#       -netdev user,id=net0
66522cf6021SWarner Losh}
66622cf6021SWarner Losh
66722cf6021SWarner Losh# Amd64 qemu
66822cf6021SWarner Loshqemu_amd64_legacy()
66922cf6021SWarner Losh{
67022cf6021SWarner Losh    img=$1
67122cf6021SWarner Losh    sh=$2
67222cf6021SWarner Losh
67348cb46aaSWarner Losh    echo "qemu-system-x86_64 -m 256m --drive file=${img},format=raw ${qser}" > $sh
674dfe34ceaSIan Lepore    chmod 755 $sh
67522cf6021SWarner Losh}
67622cf6021SWarner Losh
67722cf6021SWarner Loshqemu_amd64_uefi()
67822cf6021SWarner Losh{
67922cf6021SWarner Losh    img=$1
68022cf6021SWarner Losh    sh=$2
68122cf6021SWarner Losh
68248cb46aaSWarner Losh    echo "qemu-system-x86_64 -m 256m -bios ~/bios/OVMF-X64.fd --drive file=${img},format=raw ${qser}" > $sh
683dfe34ceaSIan Lepore    chmod 755 $sh
68422cf6021SWarner Losh}
68522cf6021SWarner Losh
68622cf6021SWarner Loshqemu_amd64_both()
68722cf6021SWarner Losh{
68822cf6021SWarner Losh    img=$1
68922cf6021SWarner Losh    sh=$2
69022cf6021SWarner Losh
69148cb46aaSWarner Losh    echo "qemu-system-x86_64 -m 256m --drive file=${img},format=raw ${qser}" > $sh
69248cb46aaSWarner Losh    echo "qemu-system-x86_64 -m 256m -bios ~/bios/OVMF-X64.fd --drive file=${img},format=raw ${qser}" >> $sh
693dfe34ceaSIan Lepore    chmod 755 $sh
69422cf6021SWarner Losh}
69522cf6021SWarner Losh
69622cf6021SWarner Losh# arm
69722cf6021SWarner Losh# nothing listed?
69822cf6021SWarner Losh
69922cf6021SWarner Losh# i386
70022cf6021SWarner Loshqemu_i386_legacy()
70122cf6021SWarner Losh{
70222cf6021SWarner Losh    img=$1
70322cf6021SWarner Losh    sh=$2
70422cf6021SWarner Losh
70522cf6021SWarner Losh    echo "qemu-system-i386 --drive file=${img},format=raw ${qser}" > $sh
706dfe34ceaSIan Lepore    chmod 755 $sh
70722cf6021SWarner Losh}
70822cf6021SWarner Losh
70922cf6021SWarner Losh# Not yet supported
71022cf6021SWarner Loshqemu_i386_uefi()
71122cf6021SWarner Losh{
71222cf6021SWarner Losh    img=$1
71322cf6021SWarner Losh    sh=$2
71422cf6021SWarner Losh
71522cf6021SWarner Losh    echo "qemu-system-i386 -bios ~/bios/OVMF-X32.fd --drive file=${img},format=raw ${qser}" > $sh
716dfe34ceaSIan Lepore    chmod 755 $sh
71722cf6021SWarner Losh}
71822cf6021SWarner Losh
71922cf6021SWarner Losh# Needs UEFI to be supported
72022cf6021SWarner Loshqemu_i386_both()
72122cf6021SWarner Losh{
72222cf6021SWarner Losh    img=$1
72322cf6021SWarner Losh    sh=$2
72422cf6021SWarner Losh
72522cf6021SWarner Losh    echo "qemu-system-i386 --drive file=${img},format=raw ${qser}" > $sh
726712b4ca9SAllan Jude    echo "qemu-system-i386 -bios ~/bios/OVMF-X32.fd --drive file=${img},format=raw ${qser}" >> $sh
727dfe34ceaSIan Lepore    chmod 755 $sh
72822cf6021SWarner Losh}
72922cf6021SWarner Losh
730432b4921SIan Leporemake_one_image()
731432b4921SIan Lepore{
732432b4921SIan Lepore    local arch=${1?}
733432b4921SIan Lepore    local geli=${2?}
734432b4921SIan Lepore    local scheme=${3?}
735432b4921SIan Lepore    local fs=${4?}
736432b4921SIan Lepore    local bios=${5?}
737432b4921SIan Lepore
738432b4921SIan Lepore    # Create sparse file and mount newly created filesystem(s) on it
739432b4921SIan Lepore    img=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.img
740432b4921SIan Lepore    sh=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.sh
741432b4921SIan Lepore    echo "vvvvvvvvvvvvvv   Creating $img  vvvvvvvvvvvvvvv"
742432b4921SIan Lepore    rm -f ${img}*
743432b4921SIan Lepore    eval mk_${geli}_${scheme}_${fs}_${bios} ${DESTDIR} ${img} ${MNTPT} ${geli} ${scheme} ${fs} ${bios}
744432b4921SIan Lepore    eval qemu_${arch}_${bios} ${img} ${sh}
745432b4921SIan Lepore    [ -n "${SUDO_USER}" ] && chown ${SUDO_USER} ${img}*
746432b4921SIan Lepore    echo "^^^^^^^^^^^^^^   Created $img   ^^^^^^^^^^^^^^^"
747432b4921SIan Lepore}
748432b4921SIan Lepore
74922cf6021SWarner Losh# Powerpc -- doesn't work but maybe it would enough for testing -- needs details
75022cf6021SWarner Losh# powerpc64
75122cf6021SWarner Losh# qemu-system-ppc64 -drive file=/path/to/disk.img,format=raw
75222cf6021SWarner Losh
753082c6764SWarner Losh# Misc variables
754082c6764SWarner LoshSRCTOP=$(make -v SRCTOP)
755082c6764SWarner Loshcd ${SRCTOP}/stand
756082c6764SWarner LoshOBJDIR=$(make -v .OBJDIR)
757082c6764SWarner LoshIMGDIR=${OBJDIR}/boot-images
758082c6764SWarner Loshmkdir -p ${IMGDIR}
759082c6764SWarner LoshMNTPT=$(mktemp -d /tmp/stand-test.XXXXXX)
760082c6764SWarner Losh
761082c6764SWarner Losh# Setup the installed tree...
762082c6764SWarner LoshDESTDIR=${OBJDIR}/boot-tree
763082c6764SWarner Loshrm -rf ${DESTDIR}
764082c6764SWarner Loshmkdir -p ${DESTDIR}/boot/defaults
765082c6764SWarner Loshmkdir -p ${DESTDIR}/boot/kernel
766082c6764SWarner Loshcp /boot/kernel/kernel ${DESTDIR}/boot/kernel
767328884aeSWarner Loshecho -h -D -S115200 > ${DESTDIR}/boot.config
768d050cd6bSWarner Loshcat > ${DESTDIR}/boot/loader.conf <<EOF
769d050cd6bSWarner Loshcomconsole_speed=115200
770d050cd6bSWarner LoshEOF
771082c6764SWarner Losh# XXX
772082c6764SWarner Loshcp /boot/device.hints ${DESTDIR}/boot/device.hints
773082c6764SWarner Losh# Assume we're already built
774f576caacSIan Leporemake install DESTDIR=${DESTDIR} MK_MAN=no MK_INSTALL_AS_USER=yes WITHOUT_DEBUG_FILES=yes
775f576caacSIan Leporeif [ $? -ne 0 ]; then
776f576caacSIan Lepore        echo "make install failed"
777f576caacSIan Lepore        exit 1
778f576caacSIan Leporefi
77922cf6021SWarner Losh# Copy init, /bin/sh, minimal libraries and testing /etc/rc
78022cf6021SWarner Loshmkdir -p ${DESTDIR}/sbin ${DESTDIR}/bin \
78122cf6021SWarner Losh      ${DESTDIR}/lib ${DESTDIR}/libexec \
78222cf6021SWarner Losh      ${DESTDIR}/etc ${DESTDIR}/dev
783d050cd6bSWarner 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
784082c6764SWarner Losh    cp $f ${DESTDIR}/$f
785082c6764SWarner Loshdone
78622cf6021SWarner Loshcat > ${DESTDIR}/etc/rc <<EOF
78722cf6021SWarner Losh#!/bin/sh
78822cf6021SWarner Losh
789d050cd6bSWarner Loshsysctl machdep.bootmethod
79022cf6021SWarner Loshecho "RC COMMAND RUNNING -- SUCCESS!!!!!"
79122cf6021SWarner Loshhalt -p
79222cf6021SWarner LoshEOF
793082c6764SWarner Losh
794432b4921SIan Lepore# If we were given exactly 5 args, go make that one image.
795432b4921SIan Lepore
796432b4921SIan Leporeif [ $# -eq 5 ]; then
797432b4921SIan Lepore    make_one_image $*
798432b4921SIan Lepore    exit
799432b4921SIan Leporefi
800432b4921SIan Lepore
801082c6764SWarner Losh# OK. Let the games begin
802082c6764SWarner Losh
80322cf6021SWarner Loshfor arch in amd64; do
804082c6764SWarner Losh    for geli in nogeli geli; do
805082c6764SWarner Losh	for scheme in gpt mbr; do
806082c6764SWarner Losh	    for fs in ufs zfs; do
807082c6764SWarner Losh		for bios in legacy uefi both; do
808432b4921SIan Lepore		    make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
809082c6764SWarner Losh		done
810082c6764SWarner Losh	    done
811082c6764SWarner Losh	done
812082c6764SWarner Losh    done
81322cf6021SWarner Loshdone
814082c6764SWarner Losh
815082c6764SWarner Loshrmdir ${MNTPT}
81622cf6021SWarner Losh
81722cf6021SWarner Loshexit 0
81822cf6021SWarner Losh
81922cf6021SWarner Losh# Notes for the future
82022cf6021SWarner Losh
82122cf6021SWarner Loshfor arch in i386; do
82222cf6021SWarner Losh    for geli in nogeli geli; do
82322cf6021SWarner Losh	for scheme in gpt mbr; do
82422cf6021SWarner Losh	    for fs in ufs zfs; do
82522cf6021SWarner Losh		for bios in legacy; do
826432b4921SIan Lepore		    make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
82722cf6021SWarner Losh		done
82822cf6021SWarner Losh	    done
82922cf6021SWarner Losh	done
83022cf6021SWarner Losh    done
83122cf6021SWarner Loshdone
83222cf6021SWarner Losh
83322cf6021SWarner Loshfor arch in arm aarch64; do
83422cf6021SWarner Losh    for scheme in gpt mbr; do
83522cf6021SWarner Losh	fs=ufs
836*aff95057SWarner Losh	bios=efi
837432b4921SIan Lepore	make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
83822cf6021SWarner Losh    done
83922cf6021SWarner Loshdone
84022cf6021SWarner Losh
84122cf6021SWarner Loshfor arch in powerpc powerpc64; do
84222cf6021SWarner Losh    for scheme in ppc-wtf; do
84322cf6021SWarner Losh	fs=ufs
84422cf6021SWarner Losh	for bios in ofw uboot chrp; do
845432b4921SIan Lepore	    make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
84622cf6021SWarner Losh	done
84722cf6021SWarner Losh    done
84822cf6021SWarner Loshdone
84922cf6021SWarner Losh
850*aff95057SWarner Loshfor arch in riscv; do
851*aff95057SWarner Losh    geli=nogeli
852*aff95057SWarner Losh    fs=ufs
853*aff95057SWarner Losh    scheme=gpt
854*aff95057SWarner Losh    bios=efi
855432b4921SIan Lepore    make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
85622cf6021SWarner Loshdone
857