xref: /freebsd/tools/boot/rootgen.sh (revision 7b4b55e520fc56562397781361b7ff910676a2d8)
1082c6764SWarner Losh#!/bin/sh
2082c6764SWarner Losh
3082c6764SWarner Losh# $FreeBSD$
4082c6764SWarner Losh
5*7b4b55e5SIan Leporepassphrase=passphrase
6*7b4b55e5SIan Leporeiterations=50000
7595deaf7SIan Lepore
8d050cd6bSWarner Loshdo_boot1_efi=0
9d050cd6bSWarner Losh
10082c6764SWarner Losh#
11082c6764SWarner Losh# Builds all the bat-shit crazy combinations we support booting from,
12082c6764SWarner Losh# at least for amd64. It assume you have a ~sane kernel in /boot/kernel
13082c6764SWarner Losh# and copies that into the ~150MB root images we create (we create the du
14082c6764SWarner Losh# size of the kernel + 20MB
15082c6764SWarner Losh#
16082c6764SWarner Losh# Sad panda sez: this runs as root, but could be userland if someone
17082c6764SWarner Losh# creates userland geli and zfs tools.
18082c6764SWarner Losh#
19082c6764SWarner Losh# This assumes an external prograam install-boot.sh which will install
20082c6764SWarner Losh# the appropriate boot files in the appropriate locations.
21082c6764SWarner Losh#
22082c6764SWarner Losh# These images assume ada0 will be the root image. We should likely
23082c6764SWarner Losh# use labels, but we don't.
24082c6764SWarner Losh#
25082c6764SWarner Losh# ASsumes you've already rebuilt... maybe bad? Also maybe bad: the env
26082c6764SWarner Losh# vars should likely be conditionally set to allow better automation.
27082c6764SWarner Losh#
28082c6764SWarner Losh
29082c6764SWarner Loshcpsys() {
30082c6764SWarner Losh    src=$1
31082c6764SWarner Losh    dst=$2
32082c6764SWarner Losh
33082c6764SWarner Losh    # Copy kernel + boot loader
34082c6764SWarner Losh    (cd $src ; tar cf - .) | (cd $dst; tar xf -)
35082c6764SWarner Losh}
36082c6764SWarner Losh
37d050cd6bSWarner Loshmake_esp()
38d050cd6bSWarner Losh{
39d050cd6bSWarner Losh    local src dst md mntpt
40d050cd6bSWarner Losh    src=$1
41d050cd6bSWarner Losh    dst=$2
42d050cd6bSWarner Losh
43d050cd6bSWarner Losh    if [ "${do_boot1_efi}" -eq 1 ]; then
44d050cd6bSWarner Losh	cp ${src}/boot/boot1.efifat ${dst}
45d050cd6bSWarner Losh    else
46d050cd6bSWarner Losh	dd if=/dev/zero of=${dst} count=1 seek=$((100 * 1024 * 1024 / 512))
47d050cd6bSWarner Losh	md=$(mdconfig -f ${dst})
48d050cd6bSWarner Losh	newfs_msdos -a 32 /dev/${md}
49d050cd6bSWarner Losh	mntpt=$(mktemp -d /tmp/stand-test.XXXXXX)
50d050cd6bSWarner Losh	mount -t msdos /dev/${md} ${mntpt}
51d050cd6bSWarner Losh#	mkdir -p ${mntpt}/efi/freebsd # not yet
52d050cd6bSWarner Losh	mkdir -p ${mntpt}/efi/boot
53d050cd6bSWarner Losh	cp ${src}/boot/loader.efi ${mntpt}/efi/boot/bootx64.efi
54d050cd6bSWarner Losh	umount ${mntpt}
55d050cd6bSWarner Losh	rmdir ${mntpt}
56d050cd6bSWarner Losh	mdconfig -d -u ${md}
57d050cd6bSWarner Losh    fi
58d050cd6bSWarner Losh}
59d050cd6bSWarner Losh
60082c6764SWarner Loshmk_nogeli_gpt_ufs_legacy() {
61082c6764SWarner Losh    src=$1
62082c6764SWarner Losh    img=$2
63082c6764SWarner Losh
6422cf6021SWarner Losh    cat > ${src}/etc/fstab <<EOF
6522cf6021SWarner Losh/dev/ada0p2	/		ufs	rw	1	1
6622cf6021SWarner LoshEOF
67082c6764SWarner Losh    makefs -t ffs -B little -s 200m ${img}.p2 ${src}
68082c6764SWarner Losh    mkimg -s gpt -b ${src}/boot/pmbr \
69082c6764SWarner Losh	  -p freebsd-boot:=${src}/boot/gptboot \
70082c6764SWarner Losh	  -p freebsd-ufs:=${img}.p2 -o ${img}
7122cf6021SWarner Losh    rm -f ${src}/etc/fstab
72082c6764SWarner Losh}
73082c6764SWarner Losh
74082c6764SWarner Loshmk_nogeli_gpt_ufs_uefi() {
75082c6764SWarner Losh    src=$1
76082c6764SWarner Losh    img=$2
77082c6764SWarner Losh
7822cf6021SWarner Losh    cat > ${src}/etc/fstab <<EOF
7922cf6021SWarner Losh/dev/ada0p2	/		ufs	rw	1	1
8022cf6021SWarner LoshEOF
81d050cd6bSWarner Losh    make_esp ${src} ${img}.p1
82082c6764SWarner Losh    makefs -t ffs -B little -s 200m ${img}.p2 ${src}
83f438a143SAllan Jude    mkimg -s gpt \
8422cf6021SWarner Losh	  -p efi:=${img}.p1 \
85082c6764SWarner Losh	  -p freebsd-ufs:=${img}.p2 -o ${img}
8622cf6021SWarner Losh    rm -f ${src}/etc/fstab
87082c6764SWarner Losh}
88082c6764SWarner Losh
89082c6764SWarner Loshmk_nogeli_gpt_ufs_both() {
90082c6764SWarner Losh    src=$1
91082c6764SWarner Losh    img=$2
92082c6764SWarner Losh
9322cf6021SWarner Losh    cat > ${src}/etc/fstab <<EOF
9422cf6021SWarner Losh/dev/ada0p3	/		ufs	rw	1	1
9522cf6021SWarner LoshEOF
96d050cd6bSWarner Losh    make_esp ${src} ${img}.p1
97082c6764SWarner Losh    makefs -t ffs -B little -s 200m ${img}.p3 ${src}
98082c6764SWarner Losh    # p1 is boot for uefi, p2 is boot for gpt, p3 is /
99082c6764SWarner Losh    mkimg -b ${src}/boot/pmbr -s gpt \
100d050cd6bSWarner Losh	  -p efi:=${img}.p1 \
101082c6764SWarner Losh	  -p freebsd-boot:=${src}/boot/gptboot \
102082c6764SWarner Losh	  -p freebsd-ufs:=${img}.p3 \
103082c6764SWarner Losh	  -o ${img}
10422cf6021SWarner Losh    rm -f ${src}/etc/fstab
105082c6764SWarner Losh}
106082c6764SWarner Losh
107082c6764SWarner Loshmk_nogeli_gpt_zfs_legacy() {
108082c6764SWarner Losh    src=$1
109082c6764SWarner Losh    img=$2
110082c6764SWarner Losh    mntpt=$3
111082c6764SWarner Losh    geli=$4
112082c6764SWarner Losh    scheme=$5
113082c6764SWarner Losh    fs=$6
114082c6764SWarner Losh    bios=$7
115082c6764SWarner Losh    pool=nogeli-gpt-zfs-legacy
116082c6764SWarner Losh
117082c6764SWarner Losh    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
118082c6764SWarner Losh    md=$(mdconfig -f ${img})
119082c6764SWarner Losh    gpart create -s gpt ${md}
120082c6764SWarner Losh    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
121082c6764SWarner Losh    gpart add -t freebsd-zfs -l root $md
122082c6764SWarner Losh    # install-boot will make this bootable
123082c6764SWarner Losh    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2
124082c6764SWarner Losh    zpool set bootfs=${pool} ${pool}
1252145d0ecSAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
126082c6764SWarner Losh    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
127082c6764SWarner Losh    cpsys ${src} ${mntpt}
128082c6764SWarner Losh    # need to make a couple of tweaks
129d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
130082c6764SWarner Loshzfs_load=YES
131082c6764SWarner Loshopensolaris_load=YES
132082c6764SWarner LoshEOF
133082c6764SWarner Losh    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
134082c6764SWarner Losh    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
135082c6764SWarner Losh    # end tweaks
1362145d0ecSAllan Jude    zfs umount -f ${pool}/ROOT/default
1372145d0ecSAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
1382145d0ecSAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
139082c6764SWarner Losh    zpool set autoexpand=on ${pool}
140082c6764SWarner Losh    zpool export ${pool}
141082c6764SWarner Losh    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
142082c6764SWarner Losh    mdconfig -d -u ${md}
143082c6764SWarner Losh}
144082c6764SWarner Losh
145082c6764SWarner Loshmk_nogeli_gpt_zfs_uefi() {
146712b4ca9SAllan Jude    src=$1
147712b4ca9SAllan Jude    img=$2
148712b4ca9SAllan Jude    mntpt=$3
149712b4ca9SAllan Jude    geli=$4
150712b4ca9SAllan Jude    scheme=$5
151712b4ca9SAllan Jude    fs=$6
152712b4ca9SAllan Jude    bios=$7
153712b4ca9SAllan Jude    pool=nogeli-gpt-zfs-uefi
154712b4ca9SAllan Jude
155712b4ca9SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
156712b4ca9SAllan Jude    md=$(mdconfig -f ${img})
157712b4ca9SAllan Jude    gpart create -s gpt ${md}
158712b4ca9SAllan Jude    gpart add -t efi -s 800k -a 4k ${md}
159712b4ca9SAllan Jude    gpart add -t freebsd-zfs -l root $md
160712b4ca9SAllan Jude    # install-boot will make this bootable
161712b4ca9SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2
162712b4ca9SAllan Jude    zpool set bootfs=${pool} ${pool}
163712b4ca9SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
164712b4ca9SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
165712b4ca9SAllan Jude    cpsys ${src} ${mntpt}
166712b4ca9SAllan Jude    # need to make a couple of tweaks
167d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
168712b4ca9SAllan Judezfs_load=YES
169712b4ca9SAllan Judeopensolaris_load=YES
170712b4ca9SAllan JudeEOF
171712b4ca9SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
172712b4ca9SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
173712b4ca9SAllan Jude    # end tweaks
174712b4ca9SAllan Jude    zfs umount -f ${pool}/ROOT/default
175712b4ca9SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
176712b4ca9SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
177712b4ca9SAllan Jude    zpool set autoexpand=on ${pool}
178712b4ca9SAllan Jude    zpool export ${pool}
179712b4ca9SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
180712b4ca9SAllan Jude    mdconfig -d -u ${md}
181082c6764SWarner Losh}
182082c6764SWarner Losh
183082c6764SWarner Loshmk_nogeli_gpt_zfs_both() {
184712b4ca9SAllan Jude    src=$1
185712b4ca9SAllan Jude    img=$2
186712b4ca9SAllan Jude    mntpt=$3
187712b4ca9SAllan Jude    geli=$4
188712b4ca9SAllan Jude    scheme=$5
189712b4ca9SAllan Jude    fs=$6
190712b4ca9SAllan Jude    bios=$7
191712b4ca9SAllan Jude    pool=nogeli-gpt-zfs-both
192712b4ca9SAllan Jude
193712b4ca9SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
194712b4ca9SAllan Jude    md=$(mdconfig -f ${img})
195712b4ca9SAllan Jude    gpart create -s gpt ${md}
196712b4ca9SAllan Jude    gpart add -t efi -s 800k -a 4k ${md}
197712b4ca9SAllan Jude    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
198712b4ca9SAllan Jude    gpart add -t freebsd-zfs -l root $md
199712b4ca9SAllan Jude    # install-boot will make this bootable
200712b4ca9SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3
201712b4ca9SAllan Jude    zpool set bootfs=${pool} ${pool}
202712b4ca9SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
203712b4ca9SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
204712b4ca9SAllan Jude    cpsys ${src} ${mntpt}
205712b4ca9SAllan Jude    # need to make a couple of tweaks
206d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
207712b4ca9SAllan Judezfs_load=YES
208712b4ca9SAllan Judeopensolaris_load=YES
209712b4ca9SAllan JudeEOF
210712b4ca9SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
211712b4ca9SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
212712b4ca9SAllan Jude    # end tweaks
213712b4ca9SAllan Jude    zfs umount -f ${pool}/ROOT/default
214712b4ca9SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
215712b4ca9SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
216712b4ca9SAllan Jude    zpool set autoexpand=on ${pool}
217712b4ca9SAllan Jude    zpool export ${pool}
218712b4ca9SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
219712b4ca9SAllan Jude    mdconfig -d -u ${md}
220082c6764SWarner Losh}
221082c6764SWarner Losh
222082c6764SWarner Loshmk_nogeli_mbr_ufs_legacy() {
22322cf6021SWarner Losh    src=$1
22422cf6021SWarner Losh    img=$2
22522cf6021SWarner Losh
22622cf6021SWarner Losh    cat > ${src}/etc/fstab <<EOF
22722cf6021SWarner Losh/dev/ada0s1a	/		ufs	rw	1	1
22822cf6021SWarner LoshEOF
22922cf6021SWarner Losh    makefs -t ffs -B little -s 200m ${img}.s1a ${src}
23022cf6021SWarner Losh    mkimg -s bsd -b ${src}/boot/boot -p freebsd-ufs:=${img}.s1a -o ${img}.s1
231f438a143SAllan Jude    mkimg -a 1 -s mbr -b ${src}/boot/boot0sio -p freebsd:=${img}.s1 -o ${img}
23222cf6021SWarner Losh    rm -f ${src}/etc/fstab
233082c6764SWarner Losh}
234082c6764SWarner Losh
235082c6764SWarner Loshmk_nogeli_mbr_ufs_uefi() {
236f438a143SAllan Jude    src=$1
237f438a143SAllan Jude    img=$2
238f438a143SAllan Jude
239f438a143SAllan Jude    cat > ${src}/etc/fstab <<EOF
240c7940ca2SIan Lepore/dev/ada0s2a	/		ufs	rw	1	1
241f438a143SAllan JudeEOF
242d050cd6bSWarner Losh    make_esp ${src} ${img}.s1
243f438a143SAllan Jude    makefs -t ffs -B little -s 200m ${img}.s2a ${src}
244f438a143SAllan Jude    mkimg -s bsd -p freebsd-ufs:=${img}.s2a -o ${img}.s2
245f438a143SAllan Jude    mkimg -a 1 -s mbr -p efi:=${img}.s1 -p freebsd:=${img}.s2 -o ${img}
246f438a143SAllan Jude    rm -f ${src}/etc/fstab
247082c6764SWarner Losh}
248082c6764SWarner Losh
249082c6764SWarner Loshmk_nogeli_mbr_ufs_both() {
250f438a143SAllan Jude    src=$1
251f438a143SAllan Jude    img=$2
252f438a143SAllan Jude
253f438a143SAllan Jude    cat > ${src}/etc/fstab <<EOF
254c7940ca2SIan Lepore/dev/ada0s2a	/		ufs	rw	1	1
255f438a143SAllan JudeEOF
256d050cd6bSWarner Losh    make_esp ${src} ${img}.s1
257f438a143SAllan Jude    makefs -t ffs -B little -s 200m ${img}.s2a ${src}
258f438a143SAllan Jude    mkimg -s bsd -b ${src}/boot/boot -p freebsd-ufs:=${img}.s2a -o ${img}.s2
259f438a143SAllan Jude    mkimg -a 2 -s mbr -b ${src}/boot/mbr -p efi:=${img}.s1 -p freebsd:=${img}.s2 -o ${img}
260f438a143SAllan Jude    rm -f ${src}/etc/fstab
261082c6764SWarner Losh}
262082c6764SWarner Losh
263082c6764SWarner Loshmk_nogeli_mbr_zfs_legacy() {
264f438a143SAllan Jude    src=$1
265f438a143SAllan Jude    img=$2
266f438a143SAllan Jude    mntpt=$3
267f438a143SAllan Jude    geli=$4
268f438a143SAllan Jude    scheme=$5
269f438a143SAllan Jude    fs=$6
270f438a143SAllan Jude    bios=$7
271f438a143SAllan Jude    pool=nogeli-mbr-zfs-legacy
272f438a143SAllan Jude
273f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
274f438a143SAllan Jude    md=$(mdconfig -f ${img})
275f438a143SAllan Jude    gpart create -s mbr ${md}
276f438a143SAllan Jude    gpart add -t freebsd ${md}
277f438a143SAllan Jude    gpart set -a active -i 1 ${md}
278f438a143SAllan Jude    gpart create -s bsd ${md}s1
279f438a143SAllan Jude    gpart add -t freebsd-zfs ${md}s1
280f438a143SAllan Jude    # install-boot will make this bootable
281f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s1a
282f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
283f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
284f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
285f438a143SAllan Jude    cpsys ${src} ${mntpt}
286f438a143SAllan Jude    # need to make a couple of tweaks
287d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
288f438a143SAllan Judezfs_load=YES
289f438a143SAllan Judeopensolaris_load=YES
290f438a143SAllan JudeEOF
291f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
292f438a143SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
293f438a143SAllan Jude    # end tweaks
294f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
295f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
296f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
297f438a143SAllan Jude    zpool set autoexpand=on ${pool}
298f438a143SAllan Jude    zpool export ${pool}
299f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
300f438a143SAllan Jude    mdconfig -d -u ${md}
301082c6764SWarner Losh}
302082c6764SWarner Losh
303082c6764SWarner Loshmk_nogeli_mbr_zfs_uefi() {
304f438a143SAllan Jude    src=$1
305f438a143SAllan Jude    img=$2
306f438a143SAllan Jude    mntpt=$3
307f438a143SAllan Jude    geli=$4
308f438a143SAllan Jude    scheme=$5
309f438a143SAllan Jude    fs=$6
310f438a143SAllan Jude    bios=$7
311f438a143SAllan Jude    pool=nogeli-mbr-zfs-uefi
312f438a143SAllan Jude
313f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
314f438a143SAllan Jude    md=$(mdconfig -f ${img})
315f438a143SAllan Jude    gpart create -s mbr ${md}
316f438a143SAllan Jude    gpart add -t \!239 -s 800k ${md}
317f438a143SAllan Jude    gpart add -t freebsd ${md}
318f438a143SAllan Jude    gpart set -a active -i 2 ${md}
319f438a143SAllan Jude    gpart create -s bsd ${md}s2
320f438a143SAllan Jude    gpart add -t freebsd-zfs ${md}s2
321f438a143SAllan Jude    # install-boot will make this bootable
322f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s2a
323f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
324f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
325f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
326f438a143SAllan Jude    cpsys ${src} ${mntpt}
327f438a143SAllan Jude    # need to make a couple of tweaks
328d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
329f438a143SAllan Judezfs_load=YES
330f438a143SAllan Judeopensolaris_load=YES
331f438a143SAllan JudeEOF
332f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
333f438a143SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
334f438a143SAllan Jude    # end tweaks
335f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
336f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
337f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
338f438a143SAllan Jude    zpool set autoexpand=on ${pool}
339f438a143SAllan Jude    zpool export ${pool}
340f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
341f438a143SAllan Jude    mdconfig -d -u ${md}
342082c6764SWarner Losh}
343082c6764SWarner Losh
344082c6764SWarner Loshmk_nogeli_mbr_zfs_both() {
345f438a143SAllan Jude    src=$1
346f438a143SAllan Jude    img=$2
347f438a143SAllan Jude    mntpt=$3
348f438a143SAllan Jude    geli=$4
349f438a143SAllan Jude    scheme=$5
350f438a143SAllan Jude    fs=$6
351f438a143SAllan Jude    bios=$7
352f438a143SAllan Jude    pool=nogeli-mbr-zfs-both
353f438a143SAllan Jude
354f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
355f438a143SAllan Jude    md=$(mdconfig -f ${img})
356f438a143SAllan Jude    gpart create -s mbr ${md}
357f438a143SAllan Jude    gpart add -t \!239 -s 800k ${md}
358f438a143SAllan Jude    gpart add -t freebsd ${md}
359f438a143SAllan Jude    gpart set -a active -i 2 ${md}
360f438a143SAllan Jude    gpart create -s bsd ${md}s2
361f438a143SAllan Jude    gpart add -t freebsd-zfs ${md}s2
362f438a143SAllan Jude    # install-boot will make this bootable
363f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s2a
364f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
365f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
366f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
367f438a143SAllan Jude    cpsys ${src} ${mntpt}
368f438a143SAllan Jude    # need to make a couple of tweaks
369d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
370f438a143SAllan Judezfs_load=YES
371f438a143SAllan Judeopensolaris_load=YES
372f438a143SAllan JudeEOF
373f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
374f438a143SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
375f438a143SAllan Jude    # end tweaks
376f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
377f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
378f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
379f438a143SAllan Jude    zpool set autoexpand=on ${pool}
380f438a143SAllan Jude    zpool export ${pool}
381f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
382f438a143SAllan Jude    mdconfig -d -u ${md}
383082c6764SWarner Losh}
384082c6764SWarner Losh
385082c6764SWarner Loshmk_geli_gpt_ufs_legacy() {
386f438a143SAllan Jude    src=$1
387f438a143SAllan Jude    img=$2
388f438a143SAllan Jude    mntpt=$3
389f438a143SAllan Jude    geli=$4
390f438a143SAllan Jude    scheme=$5
391f438a143SAllan Jude    fs=$6
392f438a143SAllan Jude    bios=$7
393f438a143SAllan Jude
394f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
395f438a143SAllan Jude    md=$(mdconfig -f ${img})
396f438a143SAllan Jude    gpart create -s gpt ${md}
397f438a143SAllan Jude    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
398f438a143SAllan Jude    gpart add -t freebsd-ufs -l root $md
399f438a143SAllan Jude    # install-boot will make this bootable
400595deaf7SIan Lepore    echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p2
401595deaf7SIan Lepore    echo ${passphrase} | geli attach -j - ${md}p2
402f438a143SAllan Jude    newfs /dev/${md}p2.eli
403f438a143SAllan Jude    mount /dev/${md}p2.eli ${mntpt}
404f438a143SAllan Jude    cpsys ${src} ${mntpt}
405f438a143SAllan Jude    # need to make a couple of tweaks
406f438a143SAllan Jude    cat > ${mntpt}/boot/loader.conf <<EOF
407f438a143SAllan Judegeom_eli_load=YES
408f438a143SAllan JudeEOF
409f438a143SAllan Jude    cat > ${mntpt}/etc/fstab <<EOF
410f438a143SAllan Jude/dev/ada0p2.eli	/		ufs	rw	1	1
411f438a143SAllan JudeEOF
412f438a143SAllan Jude
413f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
414f438a143SAllan Jude    # end tweaks
415f438a143SAllan Jude    umount -f ${mntpt}
416f438a143SAllan Jude    geli detach ${md}p2
417f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
418f438a143SAllan Jude    mdconfig -d -u ${md}
419082c6764SWarner Losh}
420082c6764SWarner Losh
421082c6764SWarner Loshmk_geli_gpt_ufs_uefi() {
422f438a143SAllan Jude    src=$1
423f438a143SAllan Jude    img=$2
424f438a143SAllan Jude    mntpt=$3
425f438a143SAllan Jude    geli=$4
426f438a143SAllan Jude    scheme=$5
427f438a143SAllan Jude    fs=$6
428f438a143SAllan Jude    bios=$7
429f438a143SAllan Jude
430f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
431f438a143SAllan Jude    md=$(mdconfig -f ${img})
432f438a143SAllan Jude    gpart create -s gpt ${md}
433f438a143SAllan Jude    gpart add -t efi -s 800k -a 4k ${md}
434f438a143SAllan Jude    gpart add -t freebsd-ufs -l root $md
435f438a143SAllan Jude    # install-boot will make this bootable
436595deaf7SIan Lepore    echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p2
437595deaf7SIan Lepore    echo ${passphrase} | geli attach -j - ${md}p2
438f438a143SAllan Jude    newfs /dev/${md}p2.eli
439f438a143SAllan Jude    mount /dev/${md}p2.eli ${mntpt}
440f438a143SAllan Jude    cpsys ${src} ${mntpt}
441f438a143SAllan Jude    # need to make a couple of tweaks
442f438a143SAllan Jude    cat > ${mntpt}/boot/loader.conf <<EOF
443f438a143SAllan Judegeom_eli_load=YES
444f438a143SAllan JudeEOF
445f438a143SAllan Jude    cat > ${mntpt}/etc/fstab <<EOF
446f438a143SAllan Jude/dev/ada0p2.eli	/		ufs	rw	1	1
447f438a143SAllan JudeEOF
448f438a143SAllan Jude
449f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
450f438a143SAllan Jude    # end tweaks
451f438a143SAllan Jude    umount -f ${mntpt}
452f438a143SAllan Jude    geli detach ${md}p2
453f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
454f438a143SAllan Jude    mdconfig -d -u ${md}
455082c6764SWarner Losh}
456082c6764SWarner Losh
457082c6764SWarner Loshmk_geli_gpt_ufs_both() {
458f438a143SAllan Jude    src=$1
459f438a143SAllan Jude    img=$2
460f438a143SAllan Jude    mntpt=$3
461f438a143SAllan Jude    geli=$4
462f438a143SAllan Jude    scheme=$5
463f438a143SAllan Jude    fs=$6
464f438a143SAllan Jude    bios=$7
465f438a143SAllan Jude
466f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
467f438a143SAllan Jude    md=$(mdconfig -f ${img})
468f438a143SAllan Jude    gpart create -s gpt ${md}
469f438a143SAllan Jude    gpart add -t efi -s 800k -a 4k ${md}
470f438a143SAllan Jude    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
471f438a143SAllan Jude    gpart add -t freebsd-ufs -l root $md
472f438a143SAllan Jude    # install-boot will make this bootable
473595deaf7SIan Lepore    echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p3
474595deaf7SIan Lepore    echo ${passphrase} | geli attach -j - ${md}p3
475f438a143SAllan Jude    newfs /dev/${md}p3.eli
476f438a143SAllan Jude    mount /dev/${md}p3.eli ${mntpt}
477f438a143SAllan Jude    cpsys ${src} ${mntpt}
478f438a143SAllan Jude    # need to make a couple of tweaks
479f438a143SAllan Jude    cat > ${mntpt}/boot/loader.conf <<EOF
480f438a143SAllan Judegeom_eli_load=YES
481f438a143SAllan JudeEOF
482f438a143SAllan Jude    cat > ${mntpt}/etc/fstab <<EOF
483f438a143SAllan Jude/dev/ada0p3.eli	/		ufs	rw	1	1
484f438a143SAllan JudeEOF
485f438a143SAllan Jude
486f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
487f438a143SAllan Jude    # end tweaks
488f438a143SAllan Jude    umount -f ${mntpt}
489f438a143SAllan Jude    geli detach ${md}p3
490f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
491f438a143SAllan Jude    mdconfig -d -u ${md}
492082c6764SWarner Losh}
493082c6764SWarner Losh
494082c6764SWarner Loshmk_geli_gpt_zfs_legacy() {
495f438a143SAllan Jude    src=$1
496f438a143SAllan Jude    img=$2
497f438a143SAllan Jude    mntpt=$3
498f438a143SAllan Jude    geli=$4
499f438a143SAllan Jude    scheme=$5
500f438a143SAllan Jude    fs=$6
501f438a143SAllan Jude    bios=$7
502f438a143SAllan Jude    pool=geli-gpt-zfs-legacy
503f438a143SAllan Jude
504f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
505f438a143SAllan Jude    md=$(mdconfig -f ${img})
506f438a143SAllan Jude    gpart create -s gpt ${md}
507f438a143SAllan Jude    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
508f438a143SAllan Jude    gpart add -t freebsd-zfs -l root $md
509f438a143SAllan Jude    # install-boot will make this bootable
510595deaf7SIan Lepore    echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p2
511595deaf7SIan Lepore    echo ${passphrase} | geli attach -j - ${md}p2
512f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2.eli
513f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
514f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
515f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
516f438a143SAllan Jude    cpsys ${src} ${mntpt}
517f438a143SAllan Jude    # need to make a couple of tweaks
518d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
519f438a143SAllan Judezfs_load=YES
520f438a143SAllan Judeopensolaris_load=YES
521f438a143SAllan Judegeom_eli_load=YES
522f438a143SAllan JudeEOF
523f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
524f438a143SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
525f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
526f438a143SAllan Jude    # end tweaks
527f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
528f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
529f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
530f438a143SAllan Jude    zpool set autoexpand=on ${pool}
531f438a143SAllan Jude    zpool export ${pool}
532f438a143SAllan Jude    geli detach ${md}p2
533f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
534f438a143SAllan Jude    mdconfig -d -u ${md}
535082c6764SWarner Losh}
536082c6764SWarner Losh
537082c6764SWarner Loshmk_geli_gpt_zfs_uefi() {
538f438a143SAllan Jude    src=$1
539f438a143SAllan Jude    img=$2
540f438a143SAllan Jude    mntpt=$3
541f438a143SAllan Jude    geli=$4
542f438a143SAllan Jude    scheme=$5
543f438a143SAllan Jude    fs=$6
544f438a143SAllan Jude    bios=$7
545f438a143SAllan Jude    pool=geli-gpt-zfs-uefi
546f438a143SAllan Jude
547f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
548f438a143SAllan Jude    md=$(mdconfig -f ${img})
549f438a143SAllan Jude    gpart create -s gpt ${md}
550f438a143SAllan Jude    gpart add -t efi -s 800k -a 4k ${md}
551f438a143SAllan Jude    gpart add -t freebsd-zfs -l root $md
552f438a143SAllan Jude    # install-boot will make this bootable
553595deaf7SIan Lepore    echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p2
554595deaf7SIan Lepore    echo ${passphrase} | geli attach -j - ${md}p2
555f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2.eli
556f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
557f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
558f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
559f438a143SAllan Jude    cpsys ${src} ${mntpt}
560f438a143SAllan Jude    # need to make a couple of tweaks
561d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
562f438a143SAllan Judezfs_load=YES
563f438a143SAllan Judeopensolaris_load=YES
564f438a143SAllan Judegeom_eli_load=YES
565f438a143SAllan JudeEOF
566f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
567f438a143SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
568f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
569f438a143SAllan Jude    # end tweaks
570f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
571f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
572f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
573f438a143SAllan Jude    zpool set autoexpand=on ${pool}
574f438a143SAllan Jude    zpool export ${pool}
575f438a143SAllan Jude    geli detach ${md}p2
576f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
577f438a143SAllan Jude    mdconfig -d -u ${md}
578082c6764SWarner Losh}
579082c6764SWarner Losh
580082c6764SWarner Loshmk_geli_gpt_zfs_both() {
581f438a143SAllan Jude    src=$1
582f438a143SAllan Jude    img=$2
583f438a143SAllan Jude    mntpt=$3
584f438a143SAllan Jude    geli=$4
585f438a143SAllan Jude    scheme=$5
586f438a143SAllan Jude    fs=$6
587f438a143SAllan Jude    bios=$7
588f438a143SAllan Jude    pool=geli-gpt-zfs-both
589f438a143SAllan Jude
590f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
591f438a143SAllan Jude    md=$(mdconfig -f ${img})
592f438a143SAllan Jude    gpart create -s gpt ${md}
593f438a143SAllan Jude    gpart add -t efi -s 800k -a 4k ${md}
594f438a143SAllan Jude    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
595f438a143SAllan Jude    gpart add -t freebsd-zfs -l root $md
596f438a143SAllan Jude    # install-boot will make this bootable
597595deaf7SIan Lepore    echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p3
598595deaf7SIan Lepore    echo ${passphrase} | geli attach -j - ${md}p3
599f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3.eli
600f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
601f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
602f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
603f438a143SAllan Jude    cpsys ${src} ${mntpt}
604f438a143SAllan Jude    # need to make a couple of tweaks
605f438a143SAllan Jude    cat > ${mntpt}/boot/loader.conf <<EOF
606f438a143SAllan Judezfs_load=YES
607f438a143SAllan Judeopensolaris_load=YES
608f438a143SAllan Judegeom_eli_load=YES
609f438a143SAllan JudeEOF
610f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
611f438a143SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.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
648ba8d50d0SMarius Stroblmk_sparc64_nogeli_vtoc8_ufs_ofw() {
649ba8d50d0SMarius Strobl    src=$1
650ba8d50d0SMarius Strobl    img=$2
651ba8d50d0SMarius Strobl    mntpt=$3
652ba8d50d0SMarius Strobl    geli=$4
653ba8d50d0SMarius Strobl    scheme=$5
654ba8d50d0SMarius Strobl    fs=$6
655ba8d50d0SMarius Strobl    bios=$7
656ba8d50d0SMarius Strobl
657ba8d50d0SMarius Strobl    cat > ${src}/etc/fstab <<EOF
658ba8d50d0SMarius Strobl/dev/ada0a	/		ufs	rw	1	1
659ba8d50d0SMarius StroblEOF
660ba8d50d0SMarius Strobl    makefs -t ffs -B big -s 200m ${img} ${src}
661ba8d50d0SMarius Strobl    md=$(mdconfig -f ${img})
662ba8d50d0SMarius Strobl    # For non-native builds, ensure that geom_part(4) supports VTOC8.
663ba8d50d0SMarius Strobl    kldload geom_part_vtoc8.ko
664ba8d50d0SMarius Strobl    gpart create -s VTOC8 ${md}
665ba8d50d0SMarius Strobl    gpart add -t freebsd-ufs ${md}
666ba8d50d0SMarius Strobl    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
667ba8d50d0SMarius Strobl    mdconfig -d -u ${md}
668ba8d50d0SMarius Strobl    rm -f ${src}/etc/fstab
669ba8d50d0SMarius Strobl}
670ba8d50d0SMarius Strobl
671*7b4b55e5SIan Leporeqser="-serial telnet::4444,server -nographic"
67222cf6021SWarner Losh
67322cf6021SWarner Losh# https://wiki.freebsd.org/QemuRecipes
67422cf6021SWarner Losh# aarch64
67522cf6021SWarner Loshqemu_aarch64_uefi()
67622cf6021SWarner Losh{
67722cf6021SWarner Losh    img=$1
67822cf6021SWarner Losh    sh=$2
67922cf6021SWarner Losh
68022cf6021SWarner Losh    echo "qemu-system-aarch64 -m 4096M -cpu cortex-a57 -M virt  \
68122cf6021SWarner Losh        -bios QEMU_EFI.fd ${qser} \
68222cf6021SWarner Losh        -drive if=none,file=${img},id=hd0 \
68322cf6021SWarner Losh        -device virtio-blk-device,drive=hd0" > $sh
68422cf6021SWarner Losh# https://wiki.freebsd.org/arm64/QEMU also has
68522cf6021SWarner Losh#       -device virtio-net-device,netdev=net0
68622cf6021SWarner Losh#       -netdev user,id=net0
68722cf6021SWarner Losh}
68822cf6021SWarner Losh
68922cf6021SWarner Losh# Amd64 qemu
69022cf6021SWarner Loshqemu_amd64_legacy()
69122cf6021SWarner Losh{
69222cf6021SWarner Losh    img=$1
69322cf6021SWarner Losh    sh=$2
69422cf6021SWarner Losh
69548cb46aaSWarner Losh    echo "qemu-system-x86_64 -m 256m --drive file=${img},format=raw ${qser}" > $sh
69622cf6021SWarner Losh}
69722cf6021SWarner Losh
69822cf6021SWarner Loshqemu_amd64_uefi()
69922cf6021SWarner Losh{
70022cf6021SWarner Losh    img=$1
70122cf6021SWarner Losh    sh=$2
70222cf6021SWarner Losh
70348cb46aaSWarner Losh    echo "qemu-system-x86_64 -m 256m -bios ~/bios/OVMF-X64.fd --drive file=${img},format=raw ${qser}" > $sh
70422cf6021SWarner Losh}
70522cf6021SWarner Losh
70622cf6021SWarner Loshqemu_amd64_both()
70722cf6021SWarner Losh{
70822cf6021SWarner Losh    img=$1
70922cf6021SWarner Losh    sh=$2
71022cf6021SWarner Losh
71148cb46aaSWarner Losh    echo "qemu-system-x86_64 -m 256m --drive file=${img},format=raw ${qser}" > $sh
71248cb46aaSWarner Losh    echo "qemu-system-x86_64 -m 256m -bios ~/bios/OVMF-X64.fd --drive file=${img},format=raw ${qser}" >> $sh
71322cf6021SWarner Losh}
71422cf6021SWarner Losh
71522cf6021SWarner Losh# arm
71622cf6021SWarner Losh# nothing listed?
71722cf6021SWarner Losh
71822cf6021SWarner Losh# i386
71922cf6021SWarner Loshqemu_i386_legacy()
72022cf6021SWarner Losh{
72122cf6021SWarner Losh    img=$1
72222cf6021SWarner Losh    sh=$2
72322cf6021SWarner Losh
72422cf6021SWarner Losh    echo "qemu-system-i386 --drive file=${img},format=raw ${qser}" > $sh
72522cf6021SWarner Losh}
72622cf6021SWarner Losh
72722cf6021SWarner Losh# Not yet supported
72822cf6021SWarner Loshqemu_i386_uefi()
72922cf6021SWarner Losh{
73022cf6021SWarner Losh    img=$1
73122cf6021SWarner Losh    sh=$2
73222cf6021SWarner Losh
73322cf6021SWarner Losh    echo "qemu-system-i386 -bios ~/bios/OVMF-X32.fd --drive file=${img},format=raw ${qser}" > $sh
73422cf6021SWarner Losh}
73522cf6021SWarner Losh
73622cf6021SWarner Losh# Needs UEFI to be supported
73722cf6021SWarner Loshqemu_i386_both()
73822cf6021SWarner Losh{
73922cf6021SWarner Losh    img=$1
74022cf6021SWarner Losh    sh=$2
74122cf6021SWarner Losh
74222cf6021SWarner Losh    echo "qemu-system-i386 --drive file=${img},format=raw ${qser}" > $sh
743712b4ca9SAllan Jude    echo "qemu-system-i386 -bios ~/bios/OVMF-X32.fd --drive file=${img},format=raw ${qser}" >> $sh
74422cf6021SWarner Losh}
74522cf6021SWarner Losh
746432b4921SIan Leporemake_one_image()
747432b4921SIan Lepore{
748432b4921SIan Lepore    local arch=${1?}
749432b4921SIan Lepore    local geli=${2?}
750432b4921SIan Lepore    local scheme=${3?}
751432b4921SIan Lepore    local fs=${4?}
752432b4921SIan Lepore    local bios=${5?}
753432b4921SIan Lepore
754432b4921SIan Lepore    # Create sparse file and mount newly created filesystem(s) on it
755432b4921SIan Lepore    img=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.img
756432b4921SIan Lepore    sh=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.sh
757432b4921SIan Lepore    echo "vvvvvvvvvvvvvv   Creating $img  vvvvvvvvvvvvvvv"
758432b4921SIan Lepore    rm -f ${img}*
759432b4921SIan Lepore    eval mk_${geli}_${scheme}_${fs}_${bios} ${DESTDIR} ${img} ${MNTPT} ${geli} ${scheme} ${fs} ${bios}
760432b4921SIan Lepore    eval qemu_${arch}_${bios} ${img} ${sh}
761432b4921SIan Lepore    [ -n "${SUDO_USER}" ] && chown ${SUDO_USER} ${img}*
762432b4921SIan Lepore    echo "^^^^^^^^^^^^^^   Created $img   ^^^^^^^^^^^^^^^"
763432b4921SIan Lepore}
764432b4921SIan Lepore
76522cf6021SWarner Losh# mips
76622cf6021SWarner Losh# qemu-system-mips -kernel /path/to/rootfs/boot/kernel/kernel -nographic -hda /path/to/disk.img -m 2048
76722cf6021SWarner Losh
76822cf6021SWarner Losh# Powerpc -- doesn't work but maybe it would enough for testing -- needs details
76922cf6021SWarner Losh# powerpc64
77022cf6021SWarner Losh# qemu-system-ppc64 -drive file=/path/to/disk.img,format=raw
77122cf6021SWarner Losh
77222cf6021SWarner Losh# sparc64
77322cf6021SWarner Losh# qemu-system-sparc64 -drive file=/path/to/disk.img,format=raw
77422cf6021SWarner Losh
775082c6764SWarner Losh# Misc variables
776082c6764SWarner LoshSRCTOP=$(make -v SRCTOP)
777082c6764SWarner Loshcd ${SRCTOP}/stand
778082c6764SWarner LoshOBJDIR=$(make -v .OBJDIR)
779082c6764SWarner LoshIMGDIR=${OBJDIR}/boot-images
780082c6764SWarner Loshmkdir -p ${IMGDIR}
781082c6764SWarner LoshMNTPT=$(mktemp -d /tmp/stand-test.XXXXXX)
782082c6764SWarner Losh
783082c6764SWarner Losh# Setup the installed tree...
784082c6764SWarner LoshDESTDIR=${OBJDIR}/boot-tree
785082c6764SWarner Loshrm -rf ${DESTDIR}
786082c6764SWarner Loshmkdir -p ${DESTDIR}/boot/defaults
787082c6764SWarner Loshmkdir -p ${DESTDIR}/boot/kernel
788ba8d50d0SMarius Strobl# XXX boot1 exists only on sparc64
789ba8d50d0SMarius Stroblcp /boot/boot1 ${DESTDIR}/boot
790082c6764SWarner Loshcp /boot/kernel/kernel ${DESTDIR}/boot/kernel
791328884aeSWarner Loshecho -h -D -S115200 > ${DESTDIR}/boot.config
792d050cd6bSWarner Loshcat > ${DESTDIR}/boot/loader.conf <<EOF
793d050cd6bSWarner Loshconsole=comconsole
794d050cd6bSWarner Loshcomconsole_speed=115200
795d050cd6bSWarner Loshboot_serial=-h
796d050cd6bSWarner LoshEOF
797082c6764SWarner Losh# XXX
798082c6764SWarner Loshcp /boot/device.hints ${DESTDIR}/boot/device.hints
799082c6764SWarner Losh# Assume we're already built
800082c6764SWarner Loshmake install DESTDIR=${DESTDIR} MK_MAN=no MK_INSTALL_AS_USER=yes
80122cf6021SWarner Losh# Copy init, /bin/sh, minimal libraries and testing /etc/rc
80222cf6021SWarner Loshmkdir -p ${DESTDIR}/sbin ${DESTDIR}/bin \
80322cf6021SWarner Losh      ${DESTDIR}/lib ${DESTDIR}/libexec \
80422cf6021SWarner Losh      ${DESTDIR}/etc ${DESTDIR}/dev
805d050cd6bSWarner 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
806082c6764SWarner Losh    cp $f ${DESTDIR}/$f
807082c6764SWarner Loshdone
80822cf6021SWarner Loshcat > ${DESTDIR}/etc/rc <<EOF
80922cf6021SWarner Losh#!/bin/sh
81022cf6021SWarner Losh
811d050cd6bSWarner Loshsysctl machdep.bootmethod
81222cf6021SWarner Loshecho "RC COMMAND RUNNING -- SUCCESS!!!!!"
81322cf6021SWarner Loshhalt -p
81422cf6021SWarner LoshEOF
815082c6764SWarner Losh
816432b4921SIan Lepore# If we were given exactly 5 args, go make that one image.
817432b4921SIan Lepore
818432b4921SIan Leporeif [ $# -eq 5 ]; then
819432b4921SIan Lepore    make_one_image $*
820432b4921SIan Lepore    exit
821432b4921SIan Leporefi
822432b4921SIan Lepore
823082c6764SWarner Losh# OK. Let the games begin
824082c6764SWarner Losh
82522cf6021SWarner Loshfor arch in amd64; do
826082c6764SWarner Losh    for geli in nogeli geli; do
827082c6764SWarner Losh	for scheme in gpt mbr; do
828082c6764SWarner Losh	    for fs in ufs zfs; do
829082c6764SWarner Losh		for bios in legacy uefi both; do
830432b4921SIan Lepore		    make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
831082c6764SWarner Losh		done
832082c6764SWarner Losh	    done
833082c6764SWarner Losh	done
834082c6764SWarner Losh    done
83522cf6021SWarner Loshdone
836082c6764SWarner Losh
837082c6764SWarner Loshrmdir ${MNTPT}
83822cf6021SWarner Losh
83922cf6021SWarner Loshexit 0
84022cf6021SWarner Losh
84122cf6021SWarner Losh# Notes for the future
84222cf6021SWarner Losh
84322cf6021SWarner Loshfor arch in i386; do
84422cf6021SWarner Losh    for geli in nogeli geli; do
84522cf6021SWarner Losh	for scheme in gpt mbr; do
84622cf6021SWarner Losh	    for fs in ufs zfs; do
84722cf6021SWarner Losh		for bios in legacy; do
848432b4921SIan Lepore		    make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
84922cf6021SWarner Losh		done
85022cf6021SWarner Losh	    done
85122cf6021SWarner Losh	done
85222cf6021SWarner Losh    done
85322cf6021SWarner Loshdone
85422cf6021SWarner Losh
85522cf6021SWarner Loshfor arch in arm aarch64; do
85622cf6021SWarner Losh    for scheme in gpt mbr; do
85722cf6021SWarner Losh	fs=ufs
85822cf6021SWarner Losh	for bios in uboot efi; do
859432b4921SIan Lepore	    make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
86022cf6021SWarner Losh	done
86122cf6021SWarner Losh    done
86222cf6021SWarner Loshdone
86322cf6021SWarner Losh
86422cf6021SWarner Loshfor arch in powerpc powerpc64; do
86522cf6021SWarner Losh    for scheme in ppc-wtf; do
86622cf6021SWarner Losh	fs=ufs
86722cf6021SWarner Losh	for bios in ofw uboot chrp; do
868432b4921SIan Lepore	    make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
86922cf6021SWarner Losh	done
87022cf6021SWarner Losh    done
87122cf6021SWarner Loshdone
87222cf6021SWarner Losh
87322cf6021SWarner Loshfor arch in sparc64; do
874ba8d50d0SMarius Strobl    for geli in nogeli; do
875ba8d50d0SMarius Strobl	for scheme in vtoc8; do
876ba8d50d0SMarius Strobl	    for fs in ufs; do
87722cf6021SWarner Losh		for bios in ofw; do
878432b4921SIan Lepore		    make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
87922cf6021SWarner Losh		done
88022cf6021SWarner Losh	    done
88122cf6021SWarner Losh	done
882ba8d50d0SMarius Strobl    done
883ba8d50d0SMarius Strobldone
884