xref: /freebsd/tools/boot/rootgen.sh (revision 432b49211cd5af20f2fe5fabe711e90e08148d2d)
1082c6764SWarner Losh#!/bin/sh
2082c6764SWarner Losh
3082c6764SWarner Losh# $FreeBSD$
4082c6764SWarner Losh
5d050cd6bSWarner Loshdo_boot1_efi=0
6d050cd6bSWarner Losh
7082c6764SWarner Losh#
8082c6764SWarner Losh# Builds all the bat-shit crazy combinations we support booting from,
9082c6764SWarner Losh# at least for amd64. It assume you have a ~sane kernel in /boot/kernel
10082c6764SWarner Losh# and copies that into the ~150MB root images we create (we create the du
11082c6764SWarner Losh# size of the kernel + 20MB
12082c6764SWarner Losh#
13082c6764SWarner Losh# Sad panda sez: this runs as root, but could be userland if someone
14082c6764SWarner Losh# creates userland geli and zfs tools.
15082c6764SWarner Losh#
16082c6764SWarner Losh# This assumes an external prograam install-boot.sh which will install
17082c6764SWarner Losh# the appropriate boot files in the appropriate locations.
18082c6764SWarner Losh#
19082c6764SWarner Losh# These images assume ada0 will be the root image. We should likely
20082c6764SWarner Losh# use labels, but we don't.
21082c6764SWarner Losh#
22082c6764SWarner Losh# ASsumes you've already rebuilt... maybe bad? Also maybe bad: the env
23082c6764SWarner Losh# vars should likely be conditionally set to allow better automation.
24082c6764SWarner Losh#
25082c6764SWarner Losh
26082c6764SWarner Loshcpsys() {
27082c6764SWarner Losh    src=$1
28082c6764SWarner Losh    dst=$2
29082c6764SWarner Losh
30082c6764SWarner Losh    # Copy kernel + boot loader
31082c6764SWarner Losh    (cd $src ; tar cf - .) | (cd $dst; tar xf -)
32082c6764SWarner Losh}
33082c6764SWarner Losh
34d050cd6bSWarner Loshmake_esp()
35d050cd6bSWarner Losh{
36d050cd6bSWarner Losh    local src dst md mntpt
37d050cd6bSWarner Losh    src=$1
38d050cd6bSWarner Losh    dst=$2
39d050cd6bSWarner Losh
40d050cd6bSWarner Losh    if [ "${do_boot1_efi}" -eq 1 ]; then
41d050cd6bSWarner Losh	cp ${src}/boot/boot1.efifat ${dst}
42d050cd6bSWarner Losh    else
43d050cd6bSWarner Losh	dd if=/dev/zero of=${dst} count=1 seek=$((100 * 1024 * 1024 / 512))
44d050cd6bSWarner Losh	md=$(mdconfig -f ${dst})
45d050cd6bSWarner Losh	newfs_msdos -a 32 /dev/${md}
46d050cd6bSWarner Losh	mntpt=$(mktemp -d /tmp/stand-test.XXXXXX)
47d050cd6bSWarner Losh	mount -t msdos /dev/${md} ${mntpt}
48d050cd6bSWarner Losh#	mkdir -p ${mntpt}/efi/freebsd # not yet
49d050cd6bSWarner Losh	mkdir -p ${mntpt}/efi/boot
50d050cd6bSWarner Losh	cp ${src}/boot/loader.efi ${mntpt}/efi/boot/bootx64.efi
51d050cd6bSWarner Losh	umount ${mntpt}
52d050cd6bSWarner Losh	rmdir ${mntpt}
53d050cd6bSWarner Losh	mdconfig -d -u ${md}
54d050cd6bSWarner Losh    fi
55d050cd6bSWarner Losh}
56d050cd6bSWarner Losh
57082c6764SWarner Loshmk_nogeli_gpt_ufs_legacy() {
58082c6764SWarner Losh    src=$1
59082c6764SWarner Losh    img=$2
60082c6764SWarner Losh
6122cf6021SWarner Losh    cat > ${src}/etc/fstab <<EOF
6222cf6021SWarner Losh/dev/ada0p2	/		ufs	rw	1	1
6322cf6021SWarner LoshEOF
64082c6764SWarner Losh    makefs -t ffs -B little -s 200m ${img}.p2 ${src}
65082c6764SWarner Losh    mkimg -s gpt -b ${src}/boot/pmbr \
66082c6764SWarner Losh	  -p freebsd-boot:=${src}/boot/gptboot \
67082c6764SWarner Losh	  -p freebsd-ufs:=${img}.p2 -o ${img}
6822cf6021SWarner Losh    rm -f ${src}/etc/fstab
69082c6764SWarner Losh}
70082c6764SWarner Losh
71082c6764SWarner Loshmk_nogeli_gpt_ufs_uefi() {
72082c6764SWarner Losh    src=$1
73082c6764SWarner Losh    img=$2
74082c6764SWarner Losh
7522cf6021SWarner Losh    cat > ${src}/etc/fstab <<EOF
7622cf6021SWarner Losh/dev/ada0p2	/		ufs	rw	1	1
7722cf6021SWarner LoshEOF
78d050cd6bSWarner Losh    make_esp ${src} ${img}.p1
79082c6764SWarner Losh    makefs -t ffs -B little -s 200m ${img}.p2 ${src}
80f438a143SAllan Jude    mkimg -s gpt \
8122cf6021SWarner Losh	  -p efi:=${img}.p1 \
82082c6764SWarner Losh	  -p freebsd-ufs:=${img}.p2 -o ${img}
8322cf6021SWarner Losh    rm -f ${src}/etc/fstab
84082c6764SWarner Losh}
85082c6764SWarner Losh
86082c6764SWarner Loshmk_nogeli_gpt_ufs_both() {
87082c6764SWarner Losh    src=$1
88082c6764SWarner Losh    img=$2
89082c6764SWarner Losh
9022cf6021SWarner Losh    cat > ${src}/etc/fstab <<EOF
9122cf6021SWarner Losh/dev/ada0p3	/		ufs	rw	1	1
9222cf6021SWarner LoshEOF
93d050cd6bSWarner Losh    make_esp ${src} ${img}.p1
94082c6764SWarner Losh    makefs -t ffs -B little -s 200m ${img}.p3 ${src}
95082c6764SWarner Losh    # p1 is boot for uefi, p2 is boot for gpt, p3 is /
96082c6764SWarner Losh    mkimg -b ${src}/boot/pmbr -s gpt \
97d050cd6bSWarner Losh	  -p efi:=${img}.p1 \
98082c6764SWarner Losh	  -p freebsd-boot:=${src}/boot/gptboot \
99082c6764SWarner Losh	  -p freebsd-ufs:=${img}.p3 \
100082c6764SWarner Losh	  -o ${img}
10122cf6021SWarner Losh    rm -f ${src}/etc/fstab
102082c6764SWarner Losh}
103082c6764SWarner Losh
104082c6764SWarner Loshmk_nogeli_gpt_zfs_legacy() {
105082c6764SWarner Losh    src=$1
106082c6764SWarner Losh    img=$2
107082c6764SWarner Losh    mntpt=$3
108082c6764SWarner Losh    geli=$4
109082c6764SWarner Losh    scheme=$5
110082c6764SWarner Losh    fs=$6
111082c6764SWarner Losh    bios=$7
112082c6764SWarner Losh    pool=nogeli-gpt-zfs-legacy
113082c6764SWarner Losh
114082c6764SWarner Losh    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
115082c6764SWarner Losh    md=$(mdconfig -f ${img})
116082c6764SWarner Losh    gpart create -s gpt ${md}
117082c6764SWarner Losh    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
118082c6764SWarner Losh    gpart add -t freebsd-zfs -l root $md
119082c6764SWarner Losh    # install-boot will make this bootable
120082c6764SWarner Losh    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2
121082c6764SWarner Losh    zpool set bootfs=${pool} ${pool}
1222145d0ecSAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
123082c6764SWarner Losh    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
124082c6764SWarner Losh    cpsys ${src} ${mntpt}
125082c6764SWarner Losh    # need to make a couple of tweaks
126d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
127082c6764SWarner Loshzfs_load=YES
128082c6764SWarner Loshopensolaris_load=YES
129082c6764SWarner LoshEOF
130082c6764SWarner Losh    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
131082c6764SWarner Losh    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
132082c6764SWarner Losh    # end tweaks
1332145d0ecSAllan Jude    zfs umount -f ${pool}/ROOT/default
1342145d0ecSAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
1352145d0ecSAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
136082c6764SWarner Losh    zpool set autoexpand=on ${pool}
137082c6764SWarner Losh    zpool export ${pool}
138082c6764SWarner Losh    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
139082c6764SWarner Losh    mdconfig -d -u ${md}
140082c6764SWarner Losh}
141082c6764SWarner Losh
142082c6764SWarner Loshmk_nogeli_gpt_zfs_uefi() {
143712b4ca9SAllan Jude    src=$1
144712b4ca9SAllan Jude    img=$2
145712b4ca9SAllan Jude    mntpt=$3
146712b4ca9SAllan Jude    geli=$4
147712b4ca9SAllan Jude    scheme=$5
148712b4ca9SAllan Jude    fs=$6
149712b4ca9SAllan Jude    bios=$7
150712b4ca9SAllan Jude    pool=nogeli-gpt-zfs-uefi
151712b4ca9SAllan Jude
152712b4ca9SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
153712b4ca9SAllan Jude    md=$(mdconfig -f ${img})
154712b4ca9SAllan Jude    gpart create -s gpt ${md}
155712b4ca9SAllan Jude    gpart add -t efi -s 800k -a 4k ${md}
156712b4ca9SAllan Jude    gpart add -t freebsd-zfs -l root $md
157712b4ca9SAllan Jude    # install-boot will make this bootable
158712b4ca9SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2
159712b4ca9SAllan Jude    zpool set bootfs=${pool} ${pool}
160712b4ca9SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
161712b4ca9SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
162712b4ca9SAllan Jude    cpsys ${src} ${mntpt}
163712b4ca9SAllan Jude    # need to make a couple of tweaks
164d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
165712b4ca9SAllan Judezfs_load=YES
166712b4ca9SAllan Judeopensolaris_load=YES
167712b4ca9SAllan JudeEOF
168712b4ca9SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
169712b4ca9SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
170712b4ca9SAllan Jude    # end tweaks
171712b4ca9SAllan Jude    zfs umount -f ${pool}/ROOT/default
172712b4ca9SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
173712b4ca9SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
174712b4ca9SAllan Jude    zpool set autoexpand=on ${pool}
175712b4ca9SAllan Jude    zpool export ${pool}
176712b4ca9SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
177712b4ca9SAllan Jude    mdconfig -d -u ${md}
178082c6764SWarner Losh}
179082c6764SWarner Losh
180082c6764SWarner Loshmk_nogeli_gpt_zfs_both() {
181712b4ca9SAllan Jude    src=$1
182712b4ca9SAllan Jude    img=$2
183712b4ca9SAllan Jude    mntpt=$3
184712b4ca9SAllan Jude    geli=$4
185712b4ca9SAllan Jude    scheme=$5
186712b4ca9SAllan Jude    fs=$6
187712b4ca9SAllan Jude    bios=$7
188712b4ca9SAllan Jude    pool=nogeli-gpt-zfs-both
189712b4ca9SAllan Jude
190712b4ca9SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
191712b4ca9SAllan Jude    md=$(mdconfig -f ${img})
192712b4ca9SAllan Jude    gpart create -s gpt ${md}
193712b4ca9SAllan Jude    gpart add -t efi -s 800k -a 4k ${md}
194712b4ca9SAllan Jude    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
195712b4ca9SAllan Jude    gpart add -t freebsd-zfs -l root $md
196712b4ca9SAllan Jude    # install-boot will make this bootable
197712b4ca9SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3
198712b4ca9SAllan Jude    zpool set bootfs=${pool} ${pool}
199712b4ca9SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
200712b4ca9SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
201712b4ca9SAllan Jude    cpsys ${src} ${mntpt}
202712b4ca9SAllan Jude    # need to make a couple of tweaks
203d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
204712b4ca9SAllan Judezfs_load=YES
205712b4ca9SAllan Judeopensolaris_load=YES
206712b4ca9SAllan JudeEOF
207712b4ca9SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
208712b4ca9SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
209712b4ca9SAllan Jude    # end tweaks
210712b4ca9SAllan Jude    zfs umount -f ${pool}/ROOT/default
211712b4ca9SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
212712b4ca9SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
213712b4ca9SAllan Jude    zpool set autoexpand=on ${pool}
214712b4ca9SAllan Jude    zpool export ${pool}
215712b4ca9SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
216712b4ca9SAllan Jude    mdconfig -d -u ${md}
217082c6764SWarner Losh}
218082c6764SWarner Losh
219082c6764SWarner Loshmk_nogeli_mbr_ufs_legacy() {
22022cf6021SWarner Losh    src=$1
22122cf6021SWarner Losh    img=$2
22222cf6021SWarner Losh
22322cf6021SWarner Losh    cat > ${src}/etc/fstab <<EOF
22422cf6021SWarner Losh/dev/ada0s1a	/		ufs	rw	1	1
22522cf6021SWarner LoshEOF
22622cf6021SWarner Losh    makefs -t ffs -B little -s 200m ${img}.s1a ${src}
22722cf6021SWarner Losh    mkimg -s bsd -b ${src}/boot/boot -p freebsd-ufs:=${img}.s1a -o ${img}.s1
228f438a143SAllan Jude    mkimg -a 1 -s mbr -b ${src}/boot/boot0sio -p freebsd:=${img}.s1 -o ${img}
22922cf6021SWarner Losh    rm -f ${src}/etc/fstab
230082c6764SWarner Losh}
231082c6764SWarner Losh
232082c6764SWarner Loshmk_nogeli_mbr_ufs_uefi() {
233f438a143SAllan Jude    src=$1
234f438a143SAllan Jude    img=$2
235f438a143SAllan Jude
236f438a143SAllan Jude    cat > ${src}/etc/fstab <<EOF
237f438a143SAllan Jude/dev/ada0s1a	/		ufs	rw	1	1
238f438a143SAllan JudeEOF
239d050cd6bSWarner Losh    make_esp ${src} ${img}.s1
240f438a143SAllan Jude    makefs -t ffs -B little -s 200m ${img}.s2a ${src}
241f438a143SAllan Jude    mkimg -s bsd -p freebsd-ufs:=${img}.s2a -o ${img}.s2
242f438a143SAllan Jude    mkimg -a 1 -s mbr -p efi:=${img}.s1 -p freebsd:=${img}.s2 -o ${img}
243f438a143SAllan Jude    rm -f ${src}/etc/fstab
244082c6764SWarner Losh}
245082c6764SWarner Losh
246082c6764SWarner Loshmk_nogeli_mbr_ufs_both() {
247f438a143SAllan Jude    src=$1
248f438a143SAllan Jude    img=$2
249f438a143SAllan Jude
250f438a143SAllan Jude    cat > ${src}/etc/fstab <<EOF
251f438a143SAllan Jude/dev/ada0s1a	/		ufs	rw	1	1
252f438a143SAllan JudeEOF
253d050cd6bSWarner Losh    make_esp ${src} ${img}.s1
254f438a143SAllan Jude    makefs -t ffs -B little -s 200m ${img}.s2a ${src}
255f438a143SAllan Jude    mkimg -s bsd -b ${src}/boot/boot -p freebsd-ufs:=${img}.s2a -o ${img}.s2
256f438a143SAllan Jude    mkimg -a 2 -s mbr -b ${src}/boot/mbr -p efi:=${img}.s1 -p freebsd:=${img}.s2 -o ${img}
257f438a143SAllan Jude    rm -f ${src}/etc/fstab
258082c6764SWarner Losh}
259082c6764SWarner Losh
260082c6764SWarner Loshmk_nogeli_mbr_zfs_legacy() {
261f438a143SAllan Jude    src=$1
262f438a143SAllan Jude    img=$2
263f438a143SAllan Jude    mntpt=$3
264f438a143SAllan Jude    geli=$4
265f438a143SAllan Jude    scheme=$5
266f438a143SAllan Jude    fs=$6
267f438a143SAllan Jude    bios=$7
268f438a143SAllan Jude    pool=nogeli-mbr-zfs-legacy
269f438a143SAllan Jude
270f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
271f438a143SAllan Jude    md=$(mdconfig -f ${img})
272f438a143SAllan Jude    gpart create -s mbr ${md}
273f438a143SAllan Jude    gpart add -t freebsd ${md}
274f438a143SAllan Jude    gpart set -a active -i 1 ${md}
275f438a143SAllan Jude    gpart create -s bsd ${md}s1
276f438a143SAllan Jude    gpart add -t freebsd-zfs ${md}s1
277f438a143SAllan Jude    # install-boot will make this bootable
278f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s1a
279f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
280f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
281f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
282f438a143SAllan Jude    cpsys ${src} ${mntpt}
283f438a143SAllan Jude    # need to make a couple of tweaks
284d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
285f438a143SAllan Judezfs_load=YES
286f438a143SAllan Judeopensolaris_load=YES
287f438a143SAllan JudeEOF
288f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
289f438a143SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
290f438a143SAllan Jude    # end tweaks
291f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
292f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
293f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
294f438a143SAllan Jude    zpool set autoexpand=on ${pool}
295f438a143SAllan Jude    zpool export ${pool}
296f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
297f438a143SAllan Jude    mdconfig -d -u ${md}
298082c6764SWarner Losh}
299082c6764SWarner Losh
300082c6764SWarner Loshmk_nogeli_mbr_zfs_uefi() {
301f438a143SAllan Jude    src=$1
302f438a143SAllan Jude    img=$2
303f438a143SAllan Jude    mntpt=$3
304f438a143SAllan Jude    geli=$4
305f438a143SAllan Jude    scheme=$5
306f438a143SAllan Jude    fs=$6
307f438a143SAllan Jude    bios=$7
308f438a143SAllan Jude    pool=nogeli-mbr-zfs-uefi
309f438a143SAllan Jude
310f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
311f438a143SAllan Jude    md=$(mdconfig -f ${img})
312f438a143SAllan Jude    gpart create -s mbr ${md}
313f438a143SAllan Jude    gpart add -t \!239 -s 800k ${md}
314f438a143SAllan Jude    gpart add -t freebsd ${md}
315f438a143SAllan Jude    gpart set -a active -i 2 ${md}
316f438a143SAllan Jude    gpart create -s bsd ${md}s2
317f438a143SAllan Jude    gpart add -t freebsd-zfs ${md}s2
318f438a143SAllan Jude    # install-boot will make this bootable
319f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s2a
320f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
321f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
322f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
323f438a143SAllan Jude    cpsys ${src} ${mntpt}
324f438a143SAllan Jude    # need to make a couple of tweaks
325d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
326f438a143SAllan Judezfs_load=YES
327f438a143SAllan Judeopensolaris_load=YES
328f438a143SAllan JudeEOF
329f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
330f438a143SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
331f438a143SAllan Jude    # end tweaks
332f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
333f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
334f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
335f438a143SAllan Jude    zpool set autoexpand=on ${pool}
336f438a143SAllan Jude    zpool export ${pool}
337f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
338f438a143SAllan Jude    mdconfig -d -u ${md}
339082c6764SWarner Losh}
340082c6764SWarner Losh
341082c6764SWarner Loshmk_nogeli_mbr_zfs_both() {
342f438a143SAllan Jude    src=$1
343f438a143SAllan Jude    img=$2
344f438a143SAllan Jude    mntpt=$3
345f438a143SAllan Jude    geli=$4
346f438a143SAllan Jude    scheme=$5
347f438a143SAllan Jude    fs=$6
348f438a143SAllan Jude    bios=$7
349f438a143SAllan Jude    pool=nogeli-mbr-zfs-both
350f438a143SAllan Jude
351f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
352f438a143SAllan Jude    md=$(mdconfig -f ${img})
353f438a143SAllan Jude    gpart create -s mbr ${md}
354f438a143SAllan Jude    gpart add -t \!239 -s 800k ${md}
355f438a143SAllan Jude    gpart add -t freebsd ${md}
356f438a143SAllan Jude    gpart set -a active -i 2 ${md}
357f438a143SAllan Jude    gpart create -s bsd ${md}s2
358f438a143SAllan Jude    gpart add -t freebsd-zfs ${md}s2
359f438a143SAllan Jude    # install-boot will make this bootable
360f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s2a
361f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
362f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
363f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
364f438a143SAllan Jude    cpsys ${src} ${mntpt}
365f438a143SAllan Jude    # need to make a couple of tweaks
366d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
367f438a143SAllan Judezfs_load=YES
368f438a143SAllan Judeopensolaris_load=YES
369f438a143SAllan JudeEOF
370f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
371f438a143SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
372f438a143SAllan Jude    # end tweaks
373f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
374f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
375f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
376f438a143SAllan Jude    zpool set autoexpand=on ${pool}
377f438a143SAllan Jude    zpool export ${pool}
378f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
379f438a143SAllan Jude    mdconfig -d -u ${md}
380082c6764SWarner Losh}
381082c6764SWarner Losh
382082c6764SWarner Loshmk_geli_gpt_ufs_legacy() {
383f438a143SAllan Jude    src=$1
384f438a143SAllan Jude    img=$2
385f438a143SAllan Jude    mntpt=$3
386f438a143SAllan Jude    geli=$4
387f438a143SAllan Jude    scheme=$5
388f438a143SAllan Jude    fs=$6
389f438a143SAllan Jude    bios=$7
390f438a143SAllan Jude
391f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
392f438a143SAllan Jude    md=$(mdconfig -f ${img})
393f438a143SAllan Jude    gpart create -s gpt ${md}
394f438a143SAllan Jude    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
395f438a143SAllan Jude    gpart add -t freebsd-ufs -l root $md
396f438a143SAllan Jude    # install-boot will make this bootable
397f438a143SAllan Jude    echo passphrase | geli init -bg -e AES-XTS -i 50000 -J - -l 256 -s 4096 ${md}p2
398f438a143SAllan Jude    echo passphrase | geli attach -j - ${md}p2
399f438a143SAllan Jude    newfs /dev/${md}p2.eli
400f438a143SAllan Jude    mount /dev/${md}p2.eli ${mntpt}
401f438a143SAllan Jude    cpsys ${src} ${mntpt}
402f438a143SAllan Jude    # need to make a couple of tweaks
403f438a143SAllan Jude    cat > ${mntpt}/boot/loader.conf <<EOF
404f438a143SAllan Judegeom_eli_load=YES
405f438a143SAllan JudeEOF
406f438a143SAllan Jude    cat > ${mntpt}/etc/fstab <<EOF
407f438a143SAllan Jude/dev/ada0p2.eli	/		ufs	rw	1	1
408f438a143SAllan JudeEOF
409f438a143SAllan Jude
410f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
411f438a143SAllan Jude    # end tweaks
412f438a143SAllan Jude    umount -f ${mntpt}
413f438a143SAllan Jude    geli detach ${md}p2
414f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
415f438a143SAllan Jude    mdconfig -d -u ${md}
416082c6764SWarner Losh}
417082c6764SWarner Losh
418082c6764SWarner Loshmk_geli_gpt_ufs_uefi() {
419f438a143SAllan Jude    src=$1
420f438a143SAllan Jude    img=$2
421f438a143SAllan Jude    mntpt=$3
422f438a143SAllan Jude    geli=$4
423f438a143SAllan Jude    scheme=$5
424f438a143SAllan Jude    fs=$6
425f438a143SAllan Jude    bios=$7
426f438a143SAllan Jude
427f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
428f438a143SAllan Jude    md=$(mdconfig -f ${img})
429f438a143SAllan Jude    gpart create -s gpt ${md}
430f438a143SAllan Jude    gpart add -t efi -s 800k -a 4k ${md}
431f438a143SAllan Jude    gpart add -t freebsd-ufs -l root $md
432f438a143SAllan Jude    # install-boot will make this bootable
433f438a143SAllan Jude    echo passphrase | geli init -bg -e AES-XTS -i 50000 -J - -l 256 -s 4096 ${md}p2
434f438a143SAllan Jude    echo passphrase | geli attach -j - ${md}p2
435f438a143SAllan Jude    newfs /dev/${md}p2.eli
436f438a143SAllan Jude    mount /dev/${md}p2.eli ${mntpt}
437f438a143SAllan Jude    cpsys ${src} ${mntpt}
438f438a143SAllan Jude    # need to make a couple of tweaks
439f438a143SAllan Jude    cat > ${mntpt}/boot/loader.conf <<EOF
440f438a143SAllan Judegeom_eli_load=YES
441f438a143SAllan JudeEOF
442f438a143SAllan Jude    cat > ${mntpt}/etc/fstab <<EOF
443f438a143SAllan Jude/dev/ada0p2.eli	/		ufs	rw	1	1
444f438a143SAllan JudeEOF
445f438a143SAllan Jude
446f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
447f438a143SAllan Jude    # end tweaks
448f438a143SAllan Jude    umount -f ${mntpt}
449f438a143SAllan Jude    geli detach ${md}p2
450f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
451f438a143SAllan Jude    mdconfig -d -u ${md}
452082c6764SWarner Losh}
453082c6764SWarner Losh
454082c6764SWarner Loshmk_geli_gpt_ufs_both() {
455f438a143SAllan Jude    src=$1
456f438a143SAllan Jude    img=$2
457f438a143SAllan Jude    mntpt=$3
458f438a143SAllan Jude    geli=$4
459f438a143SAllan Jude    scheme=$5
460f438a143SAllan Jude    fs=$6
461f438a143SAllan Jude    bios=$7
462f438a143SAllan Jude
463f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
464f438a143SAllan Jude    md=$(mdconfig -f ${img})
465f438a143SAllan Jude    gpart create -s gpt ${md}
466f438a143SAllan Jude    gpart add -t efi -s 800k -a 4k ${md}
467f438a143SAllan Jude    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
468f438a143SAllan Jude    gpart add -t freebsd-ufs -l root $md
469f438a143SAllan Jude    # install-boot will make this bootable
470f438a143SAllan Jude    echo passphrase | geli init -bg -e AES-XTS -i 50000 -J - -l 256 -s 4096 ${md}p3
471f438a143SAllan Jude    echo passphrase | geli attach -j - ${md}p3
472f438a143SAllan Jude    newfs /dev/${md}p3.eli
473f438a143SAllan Jude    mount /dev/${md}p3.eli ${mntpt}
474f438a143SAllan Jude    cpsys ${src} ${mntpt}
475f438a143SAllan Jude    # need to make a couple of tweaks
476f438a143SAllan Jude    cat > ${mntpt}/boot/loader.conf <<EOF
477f438a143SAllan Judegeom_eli_load=YES
478f438a143SAllan JudeEOF
479f438a143SAllan Jude    cat > ${mntpt}/etc/fstab <<EOF
480f438a143SAllan Jude/dev/ada0p3.eli	/		ufs	rw	1	1
481f438a143SAllan JudeEOF
482f438a143SAllan Jude
483f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
484f438a143SAllan Jude    # end tweaks
485f438a143SAllan Jude    umount -f ${mntpt}
486f438a143SAllan Jude    geli detach ${md}p3
487f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
488f438a143SAllan Jude    mdconfig -d -u ${md}
489082c6764SWarner Losh}
490082c6764SWarner Losh
491082c6764SWarner Loshmk_geli_gpt_zfs_legacy() {
492f438a143SAllan Jude    src=$1
493f438a143SAllan Jude    img=$2
494f438a143SAllan Jude    mntpt=$3
495f438a143SAllan Jude    geli=$4
496f438a143SAllan Jude    scheme=$5
497f438a143SAllan Jude    fs=$6
498f438a143SAllan Jude    bios=$7
499f438a143SAllan Jude    pool=geli-gpt-zfs-legacy
500f438a143SAllan Jude
501f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
502f438a143SAllan Jude    md=$(mdconfig -f ${img})
503f438a143SAllan Jude    gpart create -s gpt ${md}
504f438a143SAllan Jude    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
505f438a143SAllan Jude    gpart add -t freebsd-zfs -l root $md
506f438a143SAllan Jude    # install-boot will make this bootable
507f438a143SAllan Jude    echo passphrase | geli init -bg -e AES-XTS -i 50000 -J - -l 256 -s 4096 ${md}p2
508f438a143SAllan Jude    echo passphrase | geli attach -j - ${md}p2
509f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2.eli
510f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
511f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
512f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
513f438a143SAllan Jude    cpsys ${src} ${mntpt}
514f438a143SAllan Jude    # need to make a couple of tweaks
515d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
516f438a143SAllan Judezfs_load=YES
517f438a143SAllan Judeopensolaris_load=YES
518f438a143SAllan Judegeom_eli_load=YES
519f438a143SAllan JudeEOF
520f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
521f438a143SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
522f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
523f438a143SAllan Jude    # end tweaks
524f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
525f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
526f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
527f438a143SAllan Jude    zpool set autoexpand=on ${pool}
528f438a143SAllan Jude    zpool export ${pool}
529f438a143SAllan Jude    geli detach ${md}p2
530f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
531f438a143SAllan Jude    mdconfig -d -u ${md}
532082c6764SWarner Losh}
533082c6764SWarner Losh
534082c6764SWarner Loshmk_geli_gpt_zfs_uefi() {
535f438a143SAllan Jude    src=$1
536f438a143SAllan Jude    img=$2
537f438a143SAllan Jude    mntpt=$3
538f438a143SAllan Jude    geli=$4
539f438a143SAllan Jude    scheme=$5
540f438a143SAllan Jude    fs=$6
541f438a143SAllan Jude    bios=$7
542f438a143SAllan Jude    pool=geli-gpt-zfs-uefi
543f438a143SAllan Jude
544f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
545f438a143SAllan Jude    md=$(mdconfig -f ${img})
546f438a143SAllan Jude    gpart create -s gpt ${md}
547f438a143SAllan Jude    gpart add -t efi -s 800k -a 4k ${md}
548f438a143SAllan Jude    gpart add -t freebsd-zfs -l root $md
549f438a143SAllan Jude    # install-boot will make this bootable
550f438a143SAllan Jude    echo passphrase | geli init -bg -e AES-XTS -i 50000 -J - -l 256 -s 4096 ${md}p2
551f438a143SAllan Jude    echo passphrase | geli attach -j - ${md}p2
552f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2.eli
553f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
554f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
555f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
556f438a143SAllan Jude    cpsys ${src} ${mntpt}
557f438a143SAllan Jude    # need to make a couple of tweaks
558d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
559f438a143SAllan Judezfs_load=YES
560f438a143SAllan Judeopensolaris_load=YES
561f438a143SAllan Judegeom_eli_load=YES
562f438a143SAllan JudeEOF
563f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
564f438a143SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
565f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
566f438a143SAllan Jude    # end tweaks
567f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
568f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
569f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
570f438a143SAllan Jude    zpool set autoexpand=on ${pool}
571f438a143SAllan Jude    zpool export ${pool}
572f438a143SAllan Jude    geli detach ${md}p2
573f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
574f438a143SAllan Jude    mdconfig -d -u ${md}
575082c6764SWarner Losh}
576082c6764SWarner Losh
577082c6764SWarner Loshmk_geli_gpt_zfs_both() {
578f438a143SAllan Jude    src=$1
579f438a143SAllan Jude    img=$2
580f438a143SAllan Jude    mntpt=$3
581f438a143SAllan Jude    geli=$4
582f438a143SAllan Jude    scheme=$5
583f438a143SAllan Jude    fs=$6
584f438a143SAllan Jude    bios=$7
585f438a143SAllan Jude    pool=geli-gpt-zfs-both
586f438a143SAllan Jude
587f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
588f438a143SAllan Jude    md=$(mdconfig -f ${img})
589f438a143SAllan Jude    gpart create -s gpt ${md}
590f438a143SAllan Jude    gpart add -t efi -s 800k -a 4k ${md}
591f438a143SAllan Jude    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
592f438a143SAllan Jude    gpart add -t freebsd-zfs -l root $md
593f438a143SAllan Jude    # install-boot will make this bootable
594f438a143SAllan Jude    echo passphrase | geli init -bg -e AES-XTS -i 50000 -J - -l 256 -s 4096 ${md}p3
595f438a143SAllan Jude    echo passphrase | geli attach -j - ${md}p3
596f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3.eli
597f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
598f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
599f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
600f438a143SAllan Jude    cpsys ${src} ${mntpt}
601f438a143SAllan Jude    # need to make a couple of tweaks
602f438a143SAllan Jude    cat > ${mntpt}/boot/loader.conf <<EOF
603f438a143SAllan Judezfs_load=YES
604f438a143SAllan Judeopensolaris_load=YES
605f438a143SAllan Judegeom_eli_load=YES
606f438a143SAllan JudeEOF
607f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
608f438a143SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
609f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
610f438a143SAllan Jude    # end tweaks
611f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
612f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
613f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
614f438a143SAllan Jude    zpool set autoexpand=on ${pool}
615f438a143SAllan Jude    zpool export ${pool}
616f438a143SAllan Jude    geli detach ${md}p3
617f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
618f438a143SAllan Jude    mdconfig -d -u ${md}
619082c6764SWarner Losh}
620082c6764SWarner Losh
621f438a143SAllan Jude# GELI+MBR is not a valid configuration
622082c6764SWarner Loshmk_geli_mbr_ufs_legacy() {
623082c6764SWarner Losh}
624082c6764SWarner Losh
625082c6764SWarner Loshmk_geli_mbr_ufs_uefi() {
626082c6764SWarner Losh}
627082c6764SWarner Losh
628082c6764SWarner Loshmk_geli_mbr_ufs_both() {
629082c6764SWarner Losh}
630082c6764SWarner Losh
631082c6764SWarner Loshmk_geli_mbr_zfs_legacy() {
632082c6764SWarner Losh}
633082c6764SWarner Losh
634082c6764SWarner Loshmk_geli_mbr_zfs_uefi() {
635082c6764SWarner Losh}
636082c6764SWarner Losh
637082c6764SWarner Loshmk_geli_mbr_zfs_both() {
638082c6764SWarner Losh}
639082c6764SWarner Losh
640082c6764SWarner Losh# iso
641082c6764SWarner Losh# pxeldr
642082c6764SWarner Losh# u-boot
64322cf6021SWarner Losh# powerpc
64422cf6021SWarner Losh
645ba8d50d0SMarius Stroblmk_sparc64_nogeli_vtoc8_ufs_ofw() {
646ba8d50d0SMarius Strobl    src=$1
647ba8d50d0SMarius Strobl    img=$2
648ba8d50d0SMarius Strobl    mntpt=$3
649ba8d50d0SMarius Strobl    geli=$4
650ba8d50d0SMarius Strobl    scheme=$5
651ba8d50d0SMarius Strobl    fs=$6
652ba8d50d0SMarius Strobl    bios=$7
653ba8d50d0SMarius Strobl
654ba8d50d0SMarius Strobl    cat > ${src}/etc/fstab <<EOF
655ba8d50d0SMarius Strobl/dev/ada0a	/		ufs	rw	1	1
656ba8d50d0SMarius StroblEOF
657ba8d50d0SMarius Strobl    makefs -t ffs -B big -s 200m ${img} ${src}
658ba8d50d0SMarius Strobl    md=$(mdconfig -f ${img})
659ba8d50d0SMarius Strobl    # For non-native builds, ensure that geom_part(4) supports VTOC8.
660ba8d50d0SMarius Strobl    kldload geom_part_vtoc8.ko
661ba8d50d0SMarius Strobl    gpart create -s VTOC8 ${md}
662ba8d50d0SMarius Strobl    gpart add -t freebsd-ufs ${md}
663ba8d50d0SMarius Strobl    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
664ba8d50d0SMarius Strobl    mdconfig -d -u ${md}
665ba8d50d0SMarius Strobl    rm -f ${src}/etc/fstab
666ba8d50d0SMarius Strobl}
667ba8d50d0SMarius Strobl
66822cf6021SWarner Loshqser="-serial telnet::4444,server -nographic"
66922cf6021SWarner Losh
67022cf6021SWarner Losh# https://wiki.freebsd.org/QemuRecipes
67122cf6021SWarner Losh# aarch64
67222cf6021SWarner Loshqemu_aarch64_uefi()
67322cf6021SWarner Losh{
67422cf6021SWarner Losh    img=$1
67522cf6021SWarner Losh    sh=$2
67622cf6021SWarner Losh
67722cf6021SWarner Losh    echo "qemu-system-aarch64 -m 4096M -cpu cortex-a57 -M virt  \
67822cf6021SWarner Losh        -bios QEMU_EFI.fd ${qser} \
67922cf6021SWarner Losh        -drive if=none,file=${img},id=hd0 \
68022cf6021SWarner Losh        -device virtio-blk-device,drive=hd0" > $sh
68122cf6021SWarner Losh# https://wiki.freebsd.org/arm64/QEMU also has
68222cf6021SWarner Losh#       -device virtio-net-device,netdev=net0
68322cf6021SWarner Losh#       -netdev user,id=net0
68422cf6021SWarner Losh}
68522cf6021SWarner Losh
68622cf6021SWarner Losh# Amd64 qemu
68722cf6021SWarner Loshqemu_amd64_legacy()
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
69322cf6021SWarner Losh}
69422cf6021SWarner Losh
69522cf6021SWarner Loshqemu_amd64_uefi()
69622cf6021SWarner Losh{
69722cf6021SWarner Losh    img=$1
69822cf6021SWarner Losh    sh=$2
69922cf6021SWarner Losh
70048cb46aaSWarner Losh    echo "qemu-system-x86_64 -m 256m -bios ~/bios/OVMF-X64.fd --drive file=${img},format=raw ${qser}" > $sh
70122cf6021SWarner Losh}
70222cf6021SWarner Losh
70322cf6021SWarner Loshqemu_amd64_both()
70422cf6021SWarner Losh{
70522cf6021SWarner Losh    img=$1
70622cf6021SWarner Losh    sh=$2
70722cf6021SWarner Losh
70848cb46aaSWarner Losh    echo "qemu-system-x86_64 -m 256m --drive file=${img},format=raw ${qser}" > $sh
70948cb46aaSWarner Losh    echo "qemu-system-x86_64 -m 256m -bios ~/bios/OVMF-X64.fd --drive file=${img},format=raw ${qser}" >> $sh
71022cf6021SWarner Losh}
71122cf6021SWarner Losh
71222cf6021SWarner Losh# arm
71322cf6021SWarner Losh# nothing listed?
71422cf6021SWarner Losh
71522cf6021SWarner Losh# i386
71622cf6021SWarner Loshqemu_i386_legacy()
71722cf6021SWarner Losh{
71822cf6021SWarner Losh    img=$1
71922cf6021SWarner Losh    sh=$2
72022cf6021SWarner Losh
72122cf6021SWarner Losh    echo "qemu-system-i386 --drive file=${img},format=raw ${qser}" > $sh
72222cf6021SWarner Losh}
72322cf6021SWarner Losh
72422cf6021SWarner Losh# Not yet supported
72522cf6021SWarner Loshqemu_i386_uefi()
72622cf6021SWarner Losh{
72722cf6021SWarner Losh    img=$1
72822cf6021SWarner Losh    sh=$2
72922cf6021SWarner Losh
73022cf6021SWarner Losh    echo "qemu-system-i386 -bios ~/bios/OVMF-X32.fd --drive file=${img},format=raw ${qser}" > $sh
73122cf6021SWarner Losh}
73222cf6021SWarner Losh
73322cf6021SWarner Losh# Needs UEFI to be supported
73422cf6021SWarner Loshqemu_i386_both()
73522cf6021SWarner Losh{
73622cf6021SWarner Losh    img=$1
73722cf6021SWarner Losh    sh=$2
73822cf6021SWarner Losh
73922cf6021SWarner Losh    echo "qemu-system-i386 --drive file=${img},format=raw ${qser}" > $sh
740712b4ca9SAllan Jude    echo "qemu-system-i386 -bios ~/bios/OVMF-X32.fd --drive file=${img},format=raw ${qser}" >> $sh
74122cf6021SWarner Losh}
74222cf6021SWarner Losh
743*432b4921SIan Leporemake_one_image()
744*432b4921SIan Lepore{
745*432b4921SIan Lepore    local arch=${1?}
746*432b4921SIan Lepore    local geli=${2?}
747*432b4921SIan Lepore    local scheme=${3?}
748*432b4921SIan Lepore    local fs=${4?}
749*432b4921SIan Lepore    local bios=${5?}
750*432b4921SIan Lepore
751*432b4921SIan Lepore    # Create sparse file and mount newly created filesystem(s) on it
752*432b4921SIan Lepore    img=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.img
753*432b4921SIan Lepore    sh=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.sh
754*432b4921SIan Lepore    echo "vvvvvvvvvvvvvv   Creating $img  vvvvvvvvvvvvvvv"
755*432b4921SIan Lepore    rm -f ${img}*
756*432b4921SIan Lepore    eval mk_${geli}_${scheme}_${fs}_${bios} ${DESTDIR} ${img} ${MNTPT} ${geli} ${scheme} ${fs} ${bios}
757*432b4921SIan Lepore    eval qemu_${arch}_${bios} ${img} ${sh}
758*432b4921SIan Lepore    [ -n "${SUDO_USER}" ] && chown ${SUDO_USER} ${img}*
759*432b4921SIan Lepore    echo "^^^^^^^^^^^^^^   Created $img   ^^^^^^^^^^^^^^^"
760*432b4921SIan Lepore}
761*432b4921SIan Lepore
76222cf6021SWarner Losh# mips
76322cf6021SWarner Losh# qemu-system-mips -kernel /path/to/rootfs/boot/kernel/kernel -nographic -hda /path/to/disk.img -m 2048
76422cf6021SWarner Losh
76522cf6021SWarner Losh# Powerpc -- doesn't work but maybe it would enough for testing -- needs details
76622cf6021SWarner Losh# powerpc64
76722cf6021SWarner Losh# qemu-system-ppc64 -drive file=/path/to/disk.img,format=raw
76822cf6021SWarner Losh
76922cf6021SWarner Losh# sparc64
77022cf6021SWarner Losh# qemu-system-sparc64 -drive file=/path/to/disk.img,format=raw
77122cf6021SWarner Losh
772082c6764SWarner Losh# Misc variables
773082c6764SWarner LoshSRCTOP=$(make -v SRCTOP)
774082c6764SWarner Loshcd ${SRCTOP}/stand
775082c6764SWarner LoshOBJDIR=$(make -v .OBJDIR)
776082c6764SWarner LoshIMGDIR=${OBJDIR}/boot-images
777082c6764SWarner Loshmkdir -p ${IMGDIR}
778082c6764SWarner LoshMNTPT=$(mktemp -d /tmp/stand-test.XXXXXX)
779082c6764SWarner Losh
780082c6764SWarner Losh# Setup the installed tree...
781082c6764SWarner LoshDESTDIR=${OBJDIR}/boot-tree
782082c6764SWarner Loshrm -rf ${DESTDIR}
783082c6764SWarner Loshmkdir -p ${DESTDIR}/boot/defaults
784082c6764SWarner Loshmkdir -p ${DESTDIR}/boot/kernel
785ba8d50d0SMarius Strobl# XXX boot1 exists only on sparc64
786ba8d50d0SMarius Stroblcp /boot/boot1 ${DESTDIR}/boot
787082c6764SWarner Loshcp /boot/kernel/kernel ${DESTDIR}/boot/kernel
788328884aeSWarner Loshecho -h -D -S115200 > ${DESTDIR}/boot.config
789d050cd6bSWarner Loshcat > ${DESTDIR}/boot/loader.conf <<EOF
790d050cd6bSWarner Loshconsole=comconsole
791d050cd6bSWarner Loshcomconsole_speed=115200
792d050cd6bSWarner Loshboot_serial=-h
793d050cd6bSWarner LoshEOF
794082c6764SWarner Losh# XXX
795082c6764SWarner Loshcp /boot/device.hints ${DESTDIR}/boot/device.hints
796082c6764SWarner Losh# Assume we're already built
797082c6764SWarner Loshmake install DESTDIR=${DESTDIR} MK_MAN=no MK_INSTALL_AS_USER=yes
79822cf6021SWarner Losh# Copy init, /bin/sh, minimal libraries and testing /etc/rc
79922cf6021SWarner Loshmkdir -p ${DESTDIR}/sbin ${DESTDIR}/bin \
80022cf6021SWarner Losh      ${DESTDIR}/lib ${DESTDIR}/libexec \
80122cf6021SWarner Losh      ${DESTDIR}/etc ${DESTDIR}/dev
802d050cd6bSWarner 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
803082c6764SWarner Losh    cp $f ${DESTDIR}/$f
804082c6764SWarner Loshdone
80522cf6021SWarner Loshcat > ${DESTDIR}/etc/rc <<EOF
80622cf6021SWarner Losh#!/bin/sh
80722cf6021SWarner Losh
808d050cd6bSWarner Loshsysctl machdep.bootmethod
80922cf6021SWarner Loshecho "RC COMMAND RUNNING -- SUCCESS!!!!!"
81022cf6021SWarner Loshhalt -p
81122cf6021SWarner LoshEOF
812082c6764SWarner Losh
813*432b4921SIan Lepore# If we were given exactly 5 args, go make that one image.
814*432b4921SIan Lepore
815*432b4921SIan Leporeif [ $# -eq 5 ]; then
816*432b4921SIan Lepore    make_one_image $*
817*432b4921SIan Lepore    exit
818*432b4921SIan Leporefi
819*432b4921SIan Lepore
820082c6764SWarner Losh# OK. Let the games begin
821082c6764SWarner Losh
82222cf6021SWarner Loshfor arch in amd64; do
823082c6764SWarner Losh    for geli in nogeli geli; do
824082c6764SWarner Losh	for scheme in gpt mbr; do
825082c6764SWarner Losh	    for fs in ufs zfs; do
826082c6764SWarner Losh		for bios in legacy uefi both; do
827*432b4921SIan Lepore		    make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
828082c6764SWarner Losh		done
829082c6764SWarner Losh	    done
830082c6764SWarner Losh	done
831082c6764SWarner Losh    done
83222cf6021SWarner Loshdone
833082c6764SWarner Losh
834082c6764SWarner Loshrmdir ${MNTPT}
83522cf6021SWarner Losh
83622cf6021SWarner Loshexit 0
83722cf6021SWarner Losh
83822cf6021SWarner Losh# Notes for the future
83922cf6021SWarner Losh
84022cf6021SWarner Loshfor arch in i386; do
84122cf6021SWarner Losh    for geli in nogeli geli; do
84222cf6021SWarner Losh	for scheme in gpt mbr; do
84322cf6021SWarner Losh	    for fs in ufs zfs; do
84422cf6021SWarner Losh		for bios in legacy; do
845*432b4921SIan Lepore		    make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
84622cf6021SWarner Losh		done
84722cf6021SWarner Losh	    done
84822cf6021SWarner Losh	done
84922cf6021SWarner Losh    done
85022cf6021SWarner Loshdone
85122cf6021SWarner Losh
85222cf6021SWarner Loshfor arch in arm aarch64; do
85322cf6021SWarner Losh    for scheme in gpt mbr; do
85422cf6021SWarner Losh	fs=ufs
85522cf6021SWarner Losh	for bios in uboot efi; do
856*432b4921SIan Lepore	    make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
85722cf6021SWarner Losh	done
85822cf6021SWarner Losh    done
85922cf6021SWarner Loshdone
86022cf6021SWarner Losh
86122cf6021SWarner Loshfor arch in powerpc powerpc64; do
86222cf6021SWarner Losh    for scheme in ppc-wtf; do
86322cf6021SWarner Losh	fs=ufs
86422cf6021SWarner Losh	for bios in ofw uboot chrp; do
865*432b4921SIan Lepore	    make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
86622cf6021SWarner Losh	done
86722cf6021SWarner Losh    done
86822cf6021SWarner Loshdone
86922cf6021SWarner Losh
87022cf6021SWarner Loshfor arch in sparc64; do
871ba8d50d0SMarius Strobl    for geli in nogeli; do
872ba8d50d0SMarius Strobl	for scheme in vtoc8; do
873ba8d50d0SMarius Strobl	    for fs in ufs; do
87422cf6021SWarner Losh		for bios in ofw; do
875*432b4921SIan Lepore		    make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
87622cf6021SWarner Losh		done
87722cf6021SWarner Losh	    done
87822cf6021SWarner Losh	done
879ba8d50d0SMarius Strobl    done
880ba8d50d0SMarius Strobldone
881