xref: /freebsd/tools/boot/rootgen.sh (revision f438a1434e88199dc2db9b88db0879792ce6017b)
1082c6764SWarner Losh#!/bin/sh
2082c6764SWarner Losh
3082c6764SWarner Losh# $FreeBSD$
4082c6764SWarner Losh
5082c6764SWarner Losh#
6082c6764SWarner Losh# Builds all the bat-shit crazy combinations we support booting from,
7082c6764SWarner Losh# at least for amd64. It assume you have a ~sane kernel in /boot/kernel
8082c6764SWarner Losh# and copies that into the ~150MB root images we create (we create the du
9082c6764SWarner Losh# size of the kernel + 20MB
10082c6764SWarner Losh#
11082c6764SWarner Losh# Sad panda sez: this runs as root, but could be userland if someone
12082c6764SWarner Losh# creates userland geli and zfs tools.
13082c6764SWarner Losh#
14082c6764SWarner Losh# This assumes an external prograam install-boot.sh which will install
15082c6764SWarner Losh# the appropriate boot files in the appropriate locations.
16082c6764SWarner Losh#
17082c6764SWarner Losh# These images assume ada0 will be the root image. We should likely
18082c6764SWarner Losh# use labels, but we don't.
19082c6764SWarner Losh#
20082c6764SWarner Losh# ASsumes you've already rebuilt... maybe bad? Also maybe bad: the env
21082c6764SWarner Losh# vars should likely be conditionally set to allow better automation.
22082c6764SWarner Losh#
23082c6764SWarner Losh
24082c6764SWarner Loshcpsys() {
25082c6764SWarner Losh    src=$1
26082c6764SWarner Losh    dst=$2
27082c6764SWarner Losh
28082c6764SWarner Losh    # Copy kernel + boot loader
29082c6764SWarner Losh    (cd $src ; tar cf - .) | (cd $dst; tar xf -)
30082c6764SWarner Losh}
31082c6764SWarner Losh
32082c6764SWarner Loshmk_nogeli_gpt_ufs_legacy() {
33082c6764SWarner Losh    src=$1
34082c6764SWarner Losh    img=$2
35082c6764SWarner Losh
3622cf6021SWarner Losh    cat > ${src}/etc/fstab <<EOF
3722cf6021SWarner Losh/dev/ada0p2	/		ufs	rw	1	1
3822cf6021SWarner LoshEOF
39082c6764SWarner Losh    makefs -t ffs -B little -s 200m ${img}.p2 ${src}
40082c6764SWarner Losh    mkimg -s gpt -b ${src}/boot/pmbr \
41082c6764SWarner Losh	  -p freebsd-boot:=${src}/boot/gptboot \
42082c6764SWarner Losh	  -p freebsd-ufs:=${img}.p2 -o ${img}
4322cf6021SWarner Losh    rm -f ${src}/etc/fstab
44082c6764SWarner Losh}
45082c6764SWarner Losh
46082c6764SWarner Loshmk_nogeli_gpt_ufs_uefi() {
47082c6764SWarner Losh    src=$1
48082c6764SWarner Losh    img=$2
49082c6764SWarner Losh
5022cf6021SWarner Losh    cat > ${src}/etc/fstab <<EOF
5122cf6021SWarner Losh/dev/ada0p2	/		ufs	rw	1	1
5222cf6021SWarner LoshEOF
5322cf6021SWarner Losh# XXX need to make msdos part for this to work XXXX
54*f438a143SAllan Jude    cp ${src}/boot/boot1.efifat ${img}.p1
55082c6764SWarner Losh    makefs -t ffs -B little -s 200m ${img}.p2 ${src}
56*f438a143SAllan Jude    mkimg -s gpt \
5722cf6021SWarner Losh	  -p efi:=${img}.p1 \
58082c6764SWarner Losh	  -p freebsd-ufs:=${img}.p2 -o ${img}
5922cf6021SWarner Losh    rm -f ${src}/etc/fstab
60082c6764SWarner Losh}
61082c6764SWarner Losh
62082c6764SWarner Loshmk_nogeli_gpt_ufs_both() {
63082c6764SWarner Losh    src=$1
64082c6764SWarner Losh    img=$2
65082c6764SWarner Losh
6622cf6021SWarner Losh    cat > ${src}/etc/fstab <<EOF
6722cf6021SWarner Losh/dev/ada0p3	/		ufs	rw	1	1
6822cf6021SWarner LoshEOF
6922cf6021SWarner Losh    # XXX need to make msdos part for this to work XXXX
70*f438a143SAllan Jude    cp ${src}/boot/boot1.efifat ${img}.p1
71082c6764SWarner Losh    makefs -t ffs -B little -s 200m ${img}.p3 ${src}
72082c6764SWarner Losh    # p1 is boot for uefi, p2 is boot for gpt, p3 is /
73082c6764SWarner Losh    mkimg -b ${src}/boot/pmbr -s gpt \
74082c6764SWarner Losh	  -p efi:=${src}/boot/boot1.efifat \
75082c6764SWarner Losh	  -p freebsd-boot:=${src}/boot/gptboot \
76082c6764SWarner Losh	  -p freebsd-ufs:=${img}.p3 \
77082c6764SWarner Losh	  -o ${img}
7822cf6021SWarner Losh    rm -f ${src}/etc/fstab
79082c6764SWarner Losh}
80082c6764SWarner Losh
81082c6764SWarner Loshmk_nogeli_gpt_zfs_legacy() {
82082c6764SWarner Losh    src=$1
83082c6764SWarner Losh    img=$2
84082c6764SWarner Losh    mntpt=$3
85082c6764SWarner Losh    geli=$4
86082c6764SWarner Losh    scheme=$5
87082c6764SWarner Losh    fs=$6
88082c6764SWarner Losh    bios=$7
89082c6764SWarner Losh    pool=nogeli-gpt-zfs-legacy
90082c6764SWarner Losh
91082c6764SWarner Losh    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
92082c6764SWarner Losh    md=$(mdconfig -f ${img})
93082c6764SWarner Losh    gpart create -s gpt ${md}
94082c6764SWarner Losh    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
95082c6764SWarner Losh    gpart add -t freebsd-zfs -l root $md
96082c6764SWarner Losh    # install-boot will make this bootable
97082c6764SWarner Losh    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2
98082c6764SWarner Losh    zpool set bootfs=${pool} ${pool}
992145d0ecSAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
100082c6764SWarner Losh    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
101082c6764SWarner Losh    cpsys ${src} ${mntpt}
102082c6764SWarner Losh    # need to make a couple of tweaks
103082c6764SWarner Losh    cat > ${mntpt}/boot/loader.conf <<EOF
104082c6764SWarner Loshzfs_load=YES
105082c6764SWarner Loshopensolaris_load=YES
106082c6764SWarner LoshEOF
107082c6764SWarner Losh    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
108082c6764SWarner Losh    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
109082c6764SWarner Losh    # end tweaks
1102145d0ecSAllan Jude    zfs umount -f ${pool}/ROOT/default
1112145d0ecSAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
1122145d0ecSAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
113082c6764SWarner Losh    zpool set autoexpand=on ${pool}
114082c6764SWarner Losh    zpool export ${pool}
115082c6764SWarner Losh    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
116082c6764SWarner Losh    mdconfig -d -u ${md}
117082c6764SWarner Losh}
118082c6764SWarner Losh
119082c6764SWarner Loshmk_nogeli_gpt_zfs_uefi() {
120712b4ca9SAllan Jude    src=$1
121712b4ca9SAllan Jude    img=$2
122712b4ca9SAllan Jude    mntpt=$3
123712b4ca9SAllan Jude    geli=$4
124712b4ca9SAllan Jude    scheme=$5
125712b4ca9SAllan Jude    fs=$6
126712b4ca9SAllan Jude    bios=$7
127712b4ca9SAllan Jude    pool=nogeli-gpt-zfs-uefi
128712b4ca9SAllan Jude
129712b4ca9SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
130712b4ca9SAllan Jude    md=$(mdconfig -f ${img})
131712b4ca9SAllan Jude    gpart create -s gpt ${md}
132712b4ca9SAllan Jude    gpart add -t efi -s 800k -a 4k ${md}
133712b4ca9SAllan Jude    gpart add -t freebsd-zfs -l root $md
134712b4ca9SAllan Jude    # install-boot will make this bootable
135712b4ca9SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2
136712b4ca9SAllan Jude    zpool set bootfs=${pool} ${pool}
137712b4ca9SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
138712b4ca9SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
139712b4ca9SAllan Jude    cpsys ${src} ${mntpt}
140712b4ca9SAllan Jude    # need to make a couple of tweaks
141712b4ca9SAllan Jude    cat > ${mntpt}/boot/loader.conf <<EOF
142712b4ca9SAllan Judezfs_load=YES
143712b4ca9SAllan Judeopensolaris_load=YES
144712b4ca9SAllan JudeEOF
145712b4ca9SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
146712b4ca9SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
147712b4ca9SAllan Jude    # end tweaks
148712b4ca9SAllan Jude    zfs umount -f ${pool}/ROOT/default
149712b4ca9SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
150712b4ca9SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
151712b4ca9SAllan Jude    zpool set autoexpand=on ${pool}
152712b4ca9SAllan Jude    zpool export ${pool}
153712b4ca9SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
154712b4ca9SAllan Jude    mdconfig -d -u ${md}
155082c6764SWarner Losh}
156082c6764SWarner Losh
157082c6764SWarner Loshmk_nogeli_gpt_zfs_both() {
158712b4ca9SAllan Jude    src=$1
159712b4ca9SAllan Jude    img=$2
160712b4ca9SAllan Jude    mntpt=$3
161712b4ca9SAllan Jude    geli=$4
162712b4ca9SAllan Jude    scheme=$5
163712b4ca9SAllan Jude    fs=$6
164712b4ca9SAllan Jude    bios=$7
165712b4ca9SAllan Jude    pool=nogeli-gpt-zfs-both
166712b4ca9SAllan Jude
167712b4ca9SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
168712b4ca9SAllan Jude    md=$(mdconfig -f ${img})
169712b4ca9SAllan Jude    gpart create -s gpt ${md}
170712b4ca9SAllan Jude    gpart add -t efi -s 800k -a 4k ${md}
171712b4ca9SAllan Jude    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
172712b4ca9SAllan Jude    gpart add -t freebsd-zfs -l root $md
173712b4ca9SAllan Jude    # install-boot will make this bootable
174712b4ca9SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3
175712b4ca9SAllan Jude    zpool set bootfs=${pool} ${pool}
176712b4ca9SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
177712b4ca9SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
178712b4ca9SAllan Jude    cpsys ${src} ${mntpt}
179712b4ca9SAllan Jude    # need to make a couple of tweaks
180712b4ca9SAllan Jude    cat > ${mntpt}/boot/loader.conf <<EOF
181712b4ca9SAllan Judezfs_load=YES
182712b4ca9SAllan Judeopensolaris_load=YES
183712b4ca9SAllan JudeEOF
184712b4ca9SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
185712b4ca9SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
186712b4ca9SAllan Jude    # end tweaks
187712b4ca9SAllan Jude    zfs umount -f ${pool}/ROOT/default
188712b4ca9SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
189712b4ca9SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
190712b4ca9SAllan Jude    zpool set autoexpand=on ${pool}
191712b4ca9SAllan Jude    zpool export ${pool}
192712b4ca9SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
193712b4ca9SAllan Jude    mdconfig -d -u ${md}
194082c6764SWarner Losh}
195082c6764SWarner Losh
196082c6764SWarner Loshmk_nogeli_mbr_ufs_legacy() {
19722cf6021SWarner Losh    src=$1
19822cf6021SWarner Losh    img=$2
19922cf6021SWarner Losh
20022cf6021SWarner Losh    cat > ${src}/etc/fstab <<EOF
20122cf6021SWarner Losh/dev/ada0s1a	/		ufs	rw	1	1
20222cf6021SWarner LoshEOF
20322cf6021SWarner Losh    makefs -t ffs -B little -s 200m ${img}.s1a ${src}
20422cf6021SWarner Losh    mkimg -s bsd -b ${src}/boot/boot -p freebsd-ufs:=${img}.s1a -o ${img}.s1
205*f438a143SAllan Jude    mkimg -a 1 -s mbr -b ${src}/boot/boot0sio -p freebsd:=${img}.s1 -o ${img}
20622cf6021SWarner Losh    rm -f ${src}/etc/fstab
207082c6764SWarner Losh}
208082c6764SWarner Losh
209082c6764SWarner Loshmk_nogeli_mbr_ufs_uefi() {
210*f438a143SAllan Jude    src=$1
211*f438a143SAllan Jude    img=$2
212*f438a143SAllan Jude
213*f438a143SAllan Jude    cat > ${src}/etc/fstab <<EOF
214*f438a143SAllan Jude/dev/ada0s1a	/		ufs	rw	1	1
215*f438a143SAllan JudeEOF
216*f438a143SAllan Jude    cp ${src}/boot/boot1.efifat ${img}.s1
217*f438a143SAllan Jude    makefs -t ffs -B little -s 200m ${img}.s2a ${src}
218*f438a143SAllan Jude    mkimg -s bsd -p freebsd-ufs:=${img}.s2a -o ${img}.s2
219*f438a143SAllan Jude    mkimg -a 1 -s mbr -p efi:=${img}.s1 -p freebsd:=${img}.s2 -o ${img}
220*f438a143SAllan Jude    rm -f ${src}/etc/fstab
221082c6764SWarner Losh}
222082c6764SWarner Losh
223082c6764SWarner Loshmk_nogeli_mbr_ufs_both() {
224*f438a143SAllan Jude    src=$1
225*f438a143SAllan Jude    img=$2
226*f438a143SAllan Jude
227*f438a143SAllan Jude    cat > ${src}/etc/fstab <<EOF
228*f438a143SAllan Jude/dev/ada0s1a	/		ufs	rw	1	1
229*f438a143SAllan JudeEOF
230*f438a143SAllan Jude    cp ${src}/boot/boot1.efifat ${img}.s1
231*f438a143SAllan Jude    makefs -t ffs -B little -s 200m ${img}.s2a ${src}
232*f438a143SAllan Jude    mkimg -s bsd -b ${src}/boot/boot -p freebsd-ufs:=${img}.s2a -o ${img}.s2
233*f438a143SAllan Jude    mkimg -a 2 -s mbr -b ${src}/boot/mbr -p efi:=${img}.s1 -p freebsd:=${img}.s2 -o ${img}
234*f438a143SAllan Jude    rm -f ${src}/etc/fstab
235082c6764SWarner Losh}
236082c6764SWarner Losh
237082c6764SWarner Loshmk_nogeli_mbr_zfs_legacy() {
238*f438a143SAllan Jude    src=$1
239*f438a143SAllan Jude    img=$2
240*f438a143SAllan Jude    mntpt=$3
241*f438a143SAllan Jude    geli=$4
242*f438a143SAllan Jude    scheme=$5
243*f438a143SAllan Jude    fs=$6
244*f438a143SAllan Jude    bios=$7
245*f438a143SAllan Jude    pool=nogeli-mbr-zfs-legacy
246*f438a143SAllan Jude
247*f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
248*f438a143SAllan Jude    md=$(mdconfig -f ${img})
249*f438a143SAllan Jude    gpart create -s mbr ${md}
250*f438a143SAllan Jude    gpart add -t freebsd ${md}
251*f438a143SAllan Jude    gpart set -a active -i 1 ${md}
252*f438a143SAllan Jude    gpart create -s bsd ${md}s1
253*f438a143SAllan Jude    gpart add -t freebsd-zfs ${md}s1
254*f438a143SAllan Jude    # install-boot will make this bootable
255*f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s1a
256*f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
257*f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
258*f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
259*f438a143SAllan Jude    cpsys ${src} ${mntpt}
260*f438a143SAllan Jude    # need to make a couple of tweaks
261*f438a143SAllan Jude    cat > ${mntpt}/boot/loader.conf <<EOF
262*f438a143SAllan Judezfs_load=YES
263*f438a143SAllan Judeopensolaris_load=YES
264*f438a143SAllan JudeEOF
265*f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
266*f438a143SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
267*f438a143SAllan Jude    # end tweaks
268*f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
269*f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
270*f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
271*f438a143SAllan Jude    zpool set autoexpand=on ${pool}
272*f438a143SAllan Jude    zpool export ${pool}
273*f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
274*f438a143SAllan Jude    mdconfig -d -u ${md}
275082c6764SWarner Losh}
276082c6764SWarner Losh
277082c6764SWarner Loshmk_nogeli_mbr_zfs_uefi() {
278*f438a143SAllan Jude    src=$1
279*f438a143SAllan Jude    img=$2
280*f438a143SAllan Jude    mntpt=$3
281*f438a143SAllan Jude    geli=$4
282*f438a143SAllan Jude    scheme=$5
283*f438a143SAllan Jude    fs=$6
284*f438a143SAllan Jude    bios=$7
285*f438a143SAllan Jude    pool=nogeli-mbr-zfs-uefi
286*f438a143SAllan Jude
287*f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
288*f438a143SAllan Jude    md=$(mdconfig -f ${img})
289*f438a143SAllan Jude    gpart create -s mbr ${md}
290*f438a143SAllan Jude    gpart add -t \!239 -s 800k ${md}
291*f438a143SAllan Jude    gpart add -t freebsd ${md}
292*f438a143SAllan Jude    gpart set -a active -i 2 ${md}
293*f438a143SAllan Jude    gpart create -s bsd ${md}s2
294*f438a143SAllan Jude    gpart add -t freebsd-zfs ${md}s2
295*f438a143SAllan Jude    # install-boot will make this bootable
296*f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s2a
297*f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
298*f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
299*f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
300*f438a143SAllan Jude    cpsys ${src} ${mntpt}
301*f438a143SAllan Jude    # need to make a couple of tweaks
302*f438a143SAllan Jude    cat > ${mntpt}/boot/loader.conf <<EOF
303*f438a143SAllan Judezfs_load=YES
304*f438a143SAllan Judeopensolaris_load=YES
305*f438a143SAllan JudeEOF
306*f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
307*f438a143SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
308*f438a143SAllan Jude    # end tweaks
309*f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
310*f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
311*f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
312*f438a143SAllan Jude    zpool set autoexpand=on ${pool}
313*f438a143SAllan Jude    zpool export ${pool}
314*f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
315*f438a143SAllan Jude    mdconfig -d -u ${md}
316082c6764SWarner Losh}
317082c6764SWarner Losh
318082c6764SWarner Loshmk_nogeli_mbr_zfs_both() {
319*f438a143SAllan Jude    src=$1
320*f438a143SAllan Jude    img=$2
321*f438a143SAllan Jude    mntpt=$3
322*f438a143SAllan Jude    geli=$4
323*f438a143SAllan Jude    scheme=$5
324*f438a143SAllan Jude    fs=$6
325*f438a143SAllan Jude    bios=$7
326*f438a143SAllan Jude    pool=nogeli-mbr-zfs-both
327*f438a143SAllan Jude
328*f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
329*f438a143SAllan Jude    md=$(mdconfig -f ${img})
330*f438a143SAllan Jude    gpart create -s mbr ${md}
331*f438a143SAllan Jude    gpart add -t \!239 -s 800k ${md}
332*f438a143SAllan Jude    gpart add -t freebsd ${md}
333*f438a143SAllan Jude    gpart set -a active -i 2 ${md}
334*f438a143SAllan Jude    gpart create -s bsd ${md}s2
335*f438a143SAllan Jude    gpart add -t freebsd-zfs ${md}s2
336*f438a143SAllan Jude    # install-boot will make this bootable
337*f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s2a
338*f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
339*f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
340*f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
341*f438a143SAllan Jude    cpsys ${src} ${mntpt}
342*f438a143SAllan Jude    # need to make a couple of tweaks
343*f438a143SAllan Jude    cat > ${mntpt}/boot/loader.conf <<EOF
344*f438a143SAllan Judezfs_load=YES
345*f438a143SAllan Judeopensolaris_load=YES
346*f438a143SAllan JudeEOF
347*f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
348*f438a143SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
349*f438a143SAllan Jude    # end tweaks
350*f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
351*f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
352*f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
353*f438a143SAllan Jude    zpool set autoexpand=on ${pool}
354*f438a143SAllan Jude    zpool export ${pool}
355*f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
356*f438a143SAllan Jude    mdconfig -d -u ${md}
357082c6764SWarner Losh}
358082c6764SWarner Losh
359082c6764SWarner Loshmk_geli_gpt_ufs_legacy() {
360*f438a143SAllan Jude    src=$1
361*f438a143SAllan Jude    img=$2
362*f438a143SAllan Jude    mntpt=$3
363*f438a143SAllan Jude    geli=$4
364*f438a143SAllan Jude    scheme=$5
365*f438a143SAllan Jude    fs=$6
366*f438a143SAllan Jude    bios=$7
367*f438a143SAllan Jude
368*f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
369*f438a143SAllan Jude    md=$(mdconfig -f ${img})
370*f438a143SAllan Jude    gpart create -s gpt ${md}
371*f438a143SAllan Jude    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
372*f438a143SAllan Jude    gpart add -t freebsd-ufs -l root $md
373*f438a143SAllan Jude    # install-boot will make this bootable
374*f438a143SAllan Jude    echo passphrase | geli init -bg -e AES-XTS -i 50000 -J - -l 256 -s 4096 ${md}p2
375*f438a143SAllan Jude    echo passphrase | geli attach -j - ${md}p2
376*f438a143SAllan Jude    newfs /dev/${md}p2.eli
377*f438a143SAllan Jude    mount /dev/${md}p2.eli ${mntpt}
378*f438a143SAllan Jude    cpsys ${src} ${mntpt}
379*f438a143SAllan Jude    # need to make a couple of tweaks
380*f438a143SAllan Jude    cat > ${mntpt}/boot/loader.conf <<EOF
381*f438a143SAllan Judegeom_eli_load=YES
382*f438a143SAllan JudeEOF
383*f438a143SAllan Jude    cat > ${mntpt}/etc/fstab <<EOF
384*f438a143SAllan Jude/dev/ada0p2.eli	/		ufs	rw	1	1
385*f438a143SAllan JudeEOF
386*f438a143SAllan Jude
387*f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
388*f438a143SAllan Jude    # end tweaks
389*f438a143SAllan Jude    umount -f ${mntpt}
390*f438a143SAllan Jude    geli detach ${md}p2
391*f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
392*f438a143SAllan Jude    mdconfig -d -u ${md}
393082c6764SWarner Losh}
394082c6764SWarner Losh
395082c6764SWarner Loshmk_geli_gpt_ufs_uefi() {
396*f438a143SAllan Jude    src=$1
397*f438a143SAllan Jude    img=$2
398*f438a143SAllan Jude    mntpt=$3
399*f438a143SAllan Jude    geli=$4
400*f438a143SAllan Jude    scheme=$5
401*f438a143SAllan Jude    fs=$6
402*f438a143SAllan Jude    bios=$7
403*f438a143SAllan Jude
404*f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
405*f438a143SAllan Jude    md=$(mdconfig -f ${img})
406*f438a143SAllan Jude    gpart create -s gpt ${md}
407*f438a143SAllan Jude    gpart add -t efi -s 800k -a 4k ${md}
408*f438a143SAllan Jude    gpart add -t freebsd-ufs -l root $md
409*f438a143SAllan Jude    # install-boot will make this bootable
410*f438a143SAllan Jude    echo passphrase | geli init -bg -e AES-XTS -i 50000 -J - -l 256 -s 4096 ${md}p2
411*f438a143SAllan Jude    echo passphrase | geli attach -j - ${md}p2
412*f438a143SAllan Jude    newfs /dev/${md}p2.eli
413*f438a143SAllan Jude    mount /dev/${md}p2.eli ${mntpt}
414*f438a143SAllan Jude    cpsys ${src} ${mntpt}
415*f438a143SAllan Jude    # need to make a couple of tweaks
416*f438a143SAllan Jude    cat > ${mntpt}/boot/loader.conf <<EOF
417*f438a143SAllan Judegeom_eli_load=YES
418*f438a143SAllan JudeEOF
419*f438a143SAllan Jude    cat > ${mntpt}/etc/fstab <<EOF
420*f438a143SAllan Jude/dev/ada0p2.eli	/		ufs	rw	1	1
421*f438a143SAllan JudeEOF
422*f438a143SAllan Jude
423*f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
424*f438a143SAllan Jude    # end tweaks
425*f438a143SAllan Jude    umount -f ${mntpt}
426*f438a143SAllan Jude    geli detach ${md}p2
427*f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
428*f438a143SAllan Jude    mdconfig -d -u ${md}
429082c6764SWarner Losh}
430082c6764SWarner Losh
431082c6764SWarner Loshmk_geli_gpt_ufs_both() {
432*f438a143SAllan Jude    src=$1
433*f438a143SAllan Jude    img=$2
434*f438a143SAllan Jude    mntpt=$3
435*f438a143SAllan Jude    geli=$4
436*f438a143SAllan Jude    scheme=$5
437*f438a143SAllan Jude    fs=$6
438*f438a143SAllan Jude    bios=$7
439*f438a143SAllan Jude
440*f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
441*f438a143SAllan Jude    md=$(mdconfig -f ${img})
442*f438a143SAllan Jude    gpart create -s gpt ${md}
443*f438a143SAllan Jude    gpart add -t efi -s 800k -a 4k ${md}
444*f438a143SAllan Jude    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
445*f438a143SAllan Jude    gpart add -t freebsd-ufs -l root $md
446*f438a143SAllan Jude    # install-boot will make this bootable
447*f438a143SAllan Jude    echo passphrase | geli init -bg -e AES-XTS -i 50000 -J - -l 256 -s 4096 ${md}p3
448*f438a143SAllan Jude    echo passphrase | geli attach -j - ${md}p3
449*f438a143SAllan Jude    newfs /dev/${md}p3.eli
450*f438a143SAllan Jude    mount /dev/${md}p3.eli ${mntpt}
451*f438a143SAllan Jude    cpsys ${src} ${mntpt}
452*f438a143SAllan Jude    # need to make a couple of tweaks
453*f438a143SAllan Jude    cat > ${mntpt}/boot/loader.conf <<EOF
454*f438a143SAllan Judegeom_eli_load=YES
455*f438a143SAllan JudeEOF
456*f438a143SAllan Jude    cat > ${mntpt}/etc/fstab <<EOF
457*f438a143SAllan Jude/dev/ada0p3.eli	/		ufs	rw	1	1
458*f438a143SAllan JudeEOF
459*f438a143SAllan Jude
460*f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
461*f438a143SAllan Jude    # end tweaks
462*f438a143SAllan Jude    umount -f ${mntpt}
463*f438a143SAllan Jude    geli detach ${md}p3
464*f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
465*f438a143SAllan Jude    mdconfig -d -u ${md}
466082c6764SWarner Losh}
467082c6764SWarner Losh
468082c6764SWarner Loshmk_geli_gpt_zfs_legacy() {
469*f438a143SAllan Jude    src=$1
470*f438a143SAllan Jude    img=$2
471*f438a143SAllan Jude    mntpt=$3
472*f438a143SAllan Jude    geli=$4
473*f438a143SAllan Jude    scheme=$5
474*f438a143SAllan Jude    fs=$6
475*f438a143SAllan Jude    bios=$7
476*f438a143SAllan Jude    pool=geli-gpt-zfs-legacy
477*f438a143SAllan Jude
478*f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
479*f438a143SAllan Jude    md=$(mdconfig -f ${img})
480*f438a143SAllan Jude    gpart create -s gpt ${md}
481*f438a143SAllan Jude    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
482*f438a143SAllan Jude    gpart add -t freebsd-zfs -l root $md
483*f438a143SAllan Jude    # install-boot will make this bootable
484*f438a143SAllan Jude    echo passphrase | geli init -bg -e AES-XTS -i 50000 -J - -l 256 -s 4096 ${md}p2
485*f438a143SAllan Jude    echo passphrase | geli attach -j - ${md}p2
486*f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2.eli
487*f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
488*f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
489*f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
490*f438a143SAllan Jude    cpsys ${src} ${mntpt}
491*f438a143SAllan Jude    # need to make a couple of tweaks
492*f438a143SAllan Jude    cat > ${mntpt}/boot/loader.conf <<EOF
493*f438a143SAllan Judezfs_load=YES
494*f438a143SAllan Judeopensolaris_load=YES
495*f438a143SAllan Judegeom_eli_load=YES
496*f438a143SAllan JudeEOF
497*f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
498*f438a143SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
499*f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
500*f438a143SAllan Jude    # end tweaks
501*f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
502*f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
503*f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
504*f438a143SAllan Jude    zpool set autoexpand=on ${pool}
505*f438a143SAllan Jude    zpool export ${pool}
506*f438a143SAllan Jude    geli detach ${md}p2
507*f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
508*f438a143SAllan Jude    mdconfig -d -u ${md}
509082c6764SWarner Losh}
510082c6764SWarner Losh
511082c6764SWarner Loshmk_geli_gpt_zfs_uefi() {
512*f438a143SAllan Jude    src=$1
513*f438a143SAllan Jude    img=$2
514*f438a143SAllan Jude    mntpt=$3
515*f438a143SAllan Jude    geli=$4
516*f438a143SAllan Jude    scheme=$5
517*f438a143SAllan Jude    fs=$6
518*f438a143SAllan Jude    bios=$7
519*f438a143SAllan Jude    pool=geli-gpt-zfs-uefi
520*f438a143SAllan Jude
521*f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
522*f438a143SAllan Jude    md=$(mdconfig -f ${img})
523*f438a143SAllan Jude    gpart create -s gpt ${md}
524*f438a143SAllan Jude    gpart add -t efi -s 800k -a 4k ${md}
525*f438a143SAllan Jude    gpart add -t freebsd-zfs -l root $md
526*f438a143SAllan Jude    # install-boot will make this bootable
527*f438a143SAllan Jude    echo passphrase | geli init -bg -e AES-XTS -i 50000 -J - -l 256 -s 4096 ${md}p2
528*f438a143SAllan Jude    echo passphrase | geli attach -j - ${md}p2
529*f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2.eli
530*f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
531*f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
532*f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
533*f438a143SAllan Jude    cpsys ${src} ${mntpt}
534*f438a143SAllan Jude    # need to make a couple of tweaks
535*f438a143SAllan Jude    cat > ${mntpt}/boot/loader.conf <<EOF
536*f438a143SAllan Judezfs_load=YES
537*f438a143SAllan Judeopensolaris_load=YES
538*f438a143SAllan Judegeom_eli_load=YES
539*f438a143SAllan JudeEOF
540*f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
541*f438a143SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
542*f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
543*f438a143SAllan Jude    # end tweaks
544*f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
545*f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
546*f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
547*f438a143SAllan Jude    zpool set autoexpand=on ${pool}
548*f438a143SAllan Jude    zpool export ${pool}
549*f438a143SAllan Jude    geli detach ${md}p2
550*f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
551*f438a143SAllan Jude    mdconfig -d -u ${md}
552082c6764SWarner Losh}
553082c6764SWarner Losh
554082c6764SWarner Loshmk_geli_gpt_zfs_both() {
555*f438a143SAllan Jude    src=$1
556*f438a143SAllan Jude    img=$2
557*f438a143SAllan Jude    mntpt=$3
558*f438a143SAllan Jude    geli=$4
559*f438a143SAllan Jude    scheme=$5
560*f438a143SAllan Jude    fs=$6
561*f438a143SAllan Jude    bios=$7
562*f438a143SAllan Jude    pool=geli-gpt-zfs-both
563*f438a143SAllan Jude
564*f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
565*f438a143SAllan Jude    md=$(mdconfig -f ${img})
566*f438a143SAllan Jude    gpart create -s gpt ${md}
567*f438a143SAllan Jude    gpart add -t efi -s 800k -a 4k ${md}
568*f438a143SAllan Jude    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
569*f438a143SAllan Jude    gpart add -t freebsd-zfs -l root $md
570*f438a143SAllan Jude    # install-boot will make this bootable
571*f438a143SAllan Jude    echo passphrase | geli init -bg -e AES-XTS -i 50000 -J - -l 256 -s 4096 ${md}p3
572*f438a143SAllan Jude    echo passphrase | geli attach -j - ${md}p3
573*f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3.eli
574*f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
575*f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
576*f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
577*f438a143SAllan Jude    cpsys ${src} ${mntpt}
578*f438a143SAllan Jude    # need to make a couple of tweaks
579*f438a143SAllan Jude    cat > ${mntpt}/boot/loader.conf <<EOF
580*f438a143SAllan Judezfs_load=YES
581*f438a143SAllan Judeopensolaris_load=YES
582*f438a143SAllan Judegeom_eli_load=YES
583*f438a143SAllan JudeEOF
584*f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
585*f438a143SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
586*f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
587*f438a143SAllan Jude    # end tweaks
588*f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
589*f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
590*f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
591*f438a143SAllan Jude    zpool set autoexpand=on ${pool}
592*f438a143SAllan Jude    zpool export ${pool}
593*f438a143SAllan Jude    geli detach ${md}p3
594*f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
595*f438a143SAllan Jude    mdconfig -d -u ${md}
596082c6764SWarner Losh}
597082c6764SWarner Losh
598*f438a143SAllan Jude# GELI+MBR is not a valid configuration
599082c6764SWarner Loshmk_geli_mbr_ufs_legacy() {
600082c6764SWarner Losh}
601082c6764SWarner Losh
602082c6764SWarner Loshmk_geli_mbr_ufs_uefi() {
603082c6764SWarner Losh}
604082c6764SWarner Losh
605082c6764SWarner Loshmk_geli_mbr_ufs_both() {
606082c6764SWarner Losh}
607082c6764SWarner Losh
608082c6764SWarner Loshmk_geli_mbr_zfs_legacy() {
609082c6764SWarner Losh}
610082c6764SWarner Losh
611082c6764SWarner Loshmk_geli_mbr_zfs_uefi() {
612082c6764SWarner Losh}
613082c6764SWarner Losh
614082c6764SWarner Loshmk_geli_mbr_zfs_both() {
615082c6764SWarner Losh}
616082c6764SWarner Losh
617082c6764SWarner Losh# iso
618082c6764SWarner Losh# pxeldr
619082c6764SWarner Losh# u-boot
62022cf6021SWarner Losh# powerpc
62122cf6021SWarner Losh
622ba8d50d0SMarius Stroblmk_sparc64_nogeli_vtoc8_ufs_ofw() {
623ba8d50d0SMarius Strobl    src=$1
624ba8d50d0SMarius Strobl    img=$2
625ba8d50d0SMarius Strobl    mntpt=$3
626ba8d50d0SMarius Strobl    geli=$4
627ba8d50d0SMarius Strobl    scheme=$5
628ba8d50d0SMarius Strobl    fs=$6
629ba8d50d0SMarius Strobl    bios=$7
630ba8d50d0SMarius Strobl
631ba8d50d0SMarius Strobl    cat > ${src}/etc/fstab <<EOF
632ba8d50d0SMarius Strobl/dev/ada0a	/		ufs	rw	1	1
633ba8d50d0SMarius StroblEOF
634ba8d50d0SMarius Strobl    makefs -t ffs -B big -s 200m ${img} ${src}
635ba8d50d0SMarius Strobl    md=$(mdconfig -f ${img})
636ba8d50d0SMarius Strobl    # For non-native builds, ensure that geom_part(4) supports VTOC8.
637ba8d50d0SMarius Strobl    kldload geom_part_vtoc8.ko
638ba8d50d0SMarius Strobl    gpart create -s VTOC8 ${md}
639ba8d50d0SMarius Strobl    gpart add -t freebsd-ufs ${md}
640ba8d50d0SMarius Strobl    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
641ba8d50d0SMarius Strobl    mdconfig -d -u ${md}
642ba8d50d0SMarius Strobl    rm -f ${src}/etc/fstab
643ba8d50d0SMarius Strobl}
644ba8d50d0SMarius Strobl
64522cf6021SWarner Loshqser="-serial telnet::4444,server -nographic"
64622cf6021SWarner Losh
64722cf6021SWarner Losh# https://wiki.freebsd.org/QemuRecipes
64822cf6021SWarner Losh# aarch64
64922cf6021SWarner Loshqemu_aarch64_uefi()
65022cf6021SWarner Losh{
65122cf6021SWarner Losh    img=$1
65222cf6021SWarner Losh    sh=$2
65322cf6021SWarner Losh
65422cf6021SWarner Losh    echo "qemu-system-aarch64 -m 4096M -cpu cortex-a57 -M virt  \
65522cf6021SWarner Losh        -bios QEMU_EFI.fd ${qser} \
65622cf6021SWarner Losh        -drive if=none,file=${img},id=hd0 \
65722cf6021SWarner Losh        -device virtio-blk-device,drive=hd0" > $sh
65822cf6021SWarner Losh# https://wiki.freebsd.org/arm64/QEMU also has
65922cf6021SWarner Losh#       -device virtio-net-device,netdev=net0
66022cf6021SWarner Losh#       -netdev user,id=net0
66122cf6021SWarner Losh}
66222cf6021SWarner Losh
66322cf6021SWarner Losh# Amd64 qemu
66422cf6021SWarner Loshqemu_amd64_legacy()
66522cf6021SWarner Losh{
66622cf6021SWarner Losh    img=$1
66722cf6021SWarner Losh    sh=$2
66822cf6021SWarner Losh
66948cb46aaSWarner Losh    echo "qemu-system-x86_64 -m 256m --drive file=${img},format=raw ${qser}" > $sh
67022cf6021SWarner Losh}
67122cf6021SWarner Losh
67222cf6021SWarner Loshqemu_amd64_uefi()
67322cf6021SWarner Losh{
67422cf6021SWarner Losh    img=$1
67522cf6021SWarner Losh    sh=$2
67622cf6021SWarner Losh
67748cb46aaSWarner Losh    echo "qemu-system-x86_64 -m 256m -bios ~/bios/OVMF-X64.fd --drive file=${img},format=raw ${qser}" > $sh
67822cf6021SWarner Losh}
67922cf6021SWarner Losh
68022cf6021SWarner Loshqemu_amd64_both()
68122cf6021SWarner Losh{
68222cf6021SWarner Losh    img=$1
68322cf6021SWarner Losh    sh=$2
68422cf6021SWarner Losh
68548cb46aaSWarner Losh    echo "qemu-system-x86_64 -m 256m --drive file=${img},format=raw ${qser}" > $sh
68648cb46aaSWarner Losh    echo "qemu-system-x86_64 -m 256m -bios ~/bios/OVMF-X64.fd --drive file=${img},format=raw ${qser}" >> $sh
68722cf6021SWarner Losh}
68822cf6021SWarner Losh
68922cf6021SWarner Losh# arm
69022cf6021SWarner Losh# nothing listed?
69122cf6021SWarner Losh
69222cf6021SWarner Losh# i386
69322cf6021SWarner Loshqemu_i386_legacy()
69422cf6021SWarner Losh{
69522cf6021SWarner Losh    img=$1
69622cf6021SWarner Losh    sh=$2
69722cf6021SWarner Losh
69822cf6021SWarner Losh    echo "qemu-system-i386 --drive file=${img},format=raw ${qser}" > $sh
69922cf6021SWarner Losh}
70022cf6021SWarner Losh
70122cf6021SWarner Losh# Not yet supported
70222cf6021SWarner Loshqemu_i386_uefi()
70322cf6021SWarner Losh{
70422cf6021SWarner Losh    img=$1
70522cf6021SWarner Losh    sh=$2
70622cf6021SWarner Losh
70722cf6021SWarner Losh    echo "qemu-system-i386 -bios ~/bios/OVMF-X32.fd --drive file=${img},format=raw ${qser}" > $sh
70822cf6021SWarner Losh}
70922cf6021SWarner Losh
71022cf6021SWarner Losh# Needs UEFI to be supported
71122cf6021SWarner Loshqemu_i386_both()
71222cf6021SWarner Losh{
71322cf6021SWarner Losh    img=$1
71422cf6021SWarner Losh    sh=$2
71522cf6021SWarner Losh
71622cf6021SWarner Losh    echo "qemu-system-i386 --drive file=${img},format=raw ${qser}" > $sh
717712b4ca9SAllan Jude    echo "qemu-system-i386 -bios ~/bios/OVMF-X32.fd --drive file=${img},format=raw ${qser}" >> $sh
71822cf6021SWarner Losh}
71922cf6021SWarner Losh
72022cf6021SWarner Losh# mips
72122cf6021SWarner Losh# qemu-system-mips -kernel /path/to/rootfs/boot/kernel/kernel -nographic -hda /path/to/disk.img -m 2048
72222cf6021SWarner Losh
72322cf6021SWarner Losh# Powerpc -- doesn't work but maybe it would enough for testing -- needs details
72422cf6021SWarner Losh# powerpc64
72522cf6021SWarner Losh# qemu-system-ppc64 -drive file=/path/to/disk.img,format=raw
72622cf6021SWarner Losh
72722cf6021SWarner Losh# sparc64
72822cf6021SWarner Losh# qemu-system-sparc64 -drive file=/path/to/disk.img,format=raw
72922cf6021SWarner Losh
730082c6764SWarner Losh# Misc variables
731082c6764SWarner LoshSRCTOP=$(make -v SRCTOP)
732082c6764SWarner Loshcd ${SRCTOP}/stand
733082c6764SWarner LoshOBJDIR=$(make -v .OBJDIR)
734082c6764SWarner LoshIMGDIR=${OBJDIR}/boot-images
735082c6764SWarner Loshmkdir -p ${IMGDIR}
736082c6764SWarner LoshMNTPT=$(mktemp -d /tmp/stand-test.XXXXXX)
737082c6764SWarner Losh
738082c6764SWarner Losh# Setup the installed tree...
739082c6764SWarner LoshDESTDIR=${OBJDIR}/boot-tree
740082c6764SWarner Loshrm -rf ${DESTDIR}
741082c6764SWarner Loshmkdir -p ${DESTDIR}/boot/defaults
742082c6764SWarner Loshmkdir -p ${DESTDIR}/boot/kernel
743ba8d50d0SMarius Strobl# XXX boot1 exists only on sparc64
744ba8d50d0SMarius Stroblcp /boot/boot1 ${DESTDIR}/boot
745082c6764SWarner Loshcp /boot/kernel/kernel ${DESTDIR}/boot/kernel
746328884aeSWarner Loshecho -h -D -S115200 > ${DESTDIR}/boot.config
747082c6764SWarner Losh# XXX
748082c6764SWarner Loshcp /boot/device.hints ${DESTDIR}/boot/device.hints
749082c6764SWarner Losh# Assume we're already built
750082c6764SWarner Loshmake install DESTDIR=${DESTDIR} MK_MAN=no MK_INSTALL_AS_USER=yes
75122cf6021SWarner Losh# Copy init, /bin/sh, minimal libraries and testing /etc/rc
75222cf6021SWarner Loshmkdir -p ${DESTDIR}/sbin ${DESTDIR}/bin \
75322cf6021SWarner Losh      ${DESTDIR}/lib ${DESTDIR}/libexec \
75422cf6021SWarner Losh      ${DESTDIR}/etc ${DESTDIR}/dev
75522cf6021SWarner Loshfor f in /sbin/halt /sbin/init /bin/sh $(ldd /bin/sh | awk 'NF == 4 { print $3; }') /libexec/ld-elf.so.1; do
756082c6764SWarner Losh    cp $f ${DESTDIR}/$f
757082c6764SWarner Loshdone
75822cf6021SWarner Loshcat > ${DESTDIR}/etc/rc <<EOF
75922cf6021SWarner Losh#!/bin/sh
76022cf6021SWarner Losh
76122cf6021SWarner Loshecho "RC COMMAND RUNNING -- SUCCESS!!!!!"
76222cf6021SWarner Loshhalt -p
76322cf6021SWarner LoshEOF
764082c6764SWarner Losh
765082c6764SWarner Losh# OK. Let the games begin
766082c6764SWarner Losh
76722cf6021SWarner Loshfor arch in amd64; do
768082c6764SWarner Losh    for geli in nogeli geli; do
769082c6764SWarner Losh	for scheme in gpt mbr; do
770082c6764SWarner Losh	    for fs in ufs zfs; do
771082c6764SWarner Losh		for bios in legacy uefi both; do
772082c6764SWarner Losh		    # Create sparse file and mount newly created filesystem(s) on it
77322cf6021SWarner Losh		    img=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.img
77422cf6021SWarner Losh		    sh=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.sh
775082c6764SWarner Losh		    echo "vvvvvvvvvvvvvvvvvvvvvv   Creating $img  vvvvvvvvvvvvvvvvvvvvvvv"
77622cf6021SWarner Losh		    rm -f ${img}*
777082c6764SWarner Losh		    eval mk_${geli}_${scheme}_${fs}_${bios} ${DESTDIR} ${img} ${MNTPT} ${geli} ${scheme} ${fs} ${bios}
77822cf6021SWarner Losh		    eval qemu_${arch}_${bios} ${img} ${sh}
77922cf6021SWarner Losh		    [ -n "${SUDO_USER}" ] && chown ${SUDO_USER} ${img}*
780082c6764SWarner Losh		    echo "^^^^^^^^^^^^^^^^^^^^^^   Creating $img  ^^^^^^^^^^^^^^^^^^^^^^^"
781082c6764SWarner Losh		done
782082c6764SWarner Losh	    done
783082c6764SWarner Losh	done
784082c6764SWarner Losh    done
78522cf6021SWarner Loshdone
786082c6764SWarner Losh
787082c6764SWarner Loshrmdir ${MNTPT}
78822cf6021SWarner Losh
78922cf6021SWarner Loshexit 0
79022cf6021SWarner Losh
79122cf6021SWarner Losh# Notes for the future
79222cf6021SWarner Losh
79322cf6021SWarner Loshfor arch in i386; do
79422cf6021SWarner Losh    for geli in nogeli geli; do
79522cf6021SWarner Losh	for scheme in gpt mbr; do
79622cf6021SWarner Losh	    for fs in ufs zfs; do
79722cf6021SWarner Losh		for bios in legacy; do
79822cf6021SWarner Losh		    # Create sparse file and mount newly created filesystem(s) on it
79922cf6021SWarner Losh		    img=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.img
80022cf6021SWarner Losh		    sh=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.sh
80122cf6021SWarner Losh		    echo "vvvvvvvvvvvvvvvvvvvvvv   Creating $img  vvvvvvvvvvvvvvvvvvvvvvv"
80222cf6021SWarner Losh		    rm -f ${img}*
80322cf6021SWarner Losh		    eval mk_${geli}_${scheme}_${fs}_${bios} ${DESTDIR} ${img} ${MNTPT} ${geli} ${scheme} ${fs} ${bios}
80422cf6021SWarner Losh		    eval qemu_${arch}_${bios} ${img} ${sh}
80522cf6021SWarner Losh		    [ -n "${SUDO_USER}" ] && chown ${SUDO_USER} ${img}*
80622cf6021SWarner Losh		    echo "^^^^^^^^^^^^^^^^^^^^^^   Creating $img  ^^^^^^^^^^^^^^^^^^^^^^^"
80722cf6021SWarner Losh		done
80822cf6021SWarner Losh	    done
80922cf6021SWarner Losh	done
81022cf6021SWarner Losh    done
81122cf6021SWarner Loshdone
81222cf6021SWarner Losh
81322cf6021SWarner Loshfor arch in arm aarch64; do
81422cf6021SWarner Losh    for scheme in gpt mbr; do
81522cf6021SWarner Losh	fs=ufs
81622cf6021SWarner Losh	for bios in uboot efi; do
81722cf6021SWarner Losh	    # Create sparse file and mount newly created filesystem(s) on it
81822cf6021SWarner Losh	    img=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.img
81922cf6021SWarner Losh	    sh=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.sh
82022cf6021SWarner Losh	    echo "vvvvvvvvvvvvvvvvvvvvvv   Creating $img  vvvvvvvvvvvvvvvvvvvvvvv"
82122cf6021SWarner Losh	    rm -f ${img}*
82222cf6021SWarner Losh	    eval mk_${geli}_${scheme}_${fs}_${bios} ${DESTDIR} ${img} ${MNTPT} ${geli} ${scheme} ${fs} ${bios}
82322cf6021SWarner Losh	    eval qemu_${arch}_${bios} ${img} ${sh}
82422cf6021SWarner Losh	    [ -n "${SUDO_USER}" ] && chown ${SUDO_USER} ${img}*
82522cf6021SWarner Losh	    echo "^^^^^^^^^^^^^^^^^^^^^^   Creating $img  ^^^^^^^^^^^^^^^^^^^^^^^"
82622cf6021SWarner Losh	done
82722cf6021SWarner Losh    done
82822cf6021SWarner Loshdone
82922cf6021SWarner Losh
83022cf6021SWarner Loshfor arch in powerpc powerpc64; do
83122cf6021SWarner Losh    for scheme in ppc-wtf; do
83222cf6021SWarner Losh	fs=ufs
83322cf6021SWarner Losh	for bios in ofw uboot chrp; do
83422cf6021SWarner Losh	    # Create sparse file and mount newly created filesystem(s) on it
83522cf6021SWarner Losh	    img=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.img
83622cf6021SWarner Losh	    sh=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.sh
83722cf6021SWarner Losh	    echo "vvvvvvvvvvvvvvvvvvvvvv   Creating $img  vvvvvvvvvvvvvvvvvvvvvvv"
83822cf6021SWarner Losh	    rm -f ${img}*
83922cf6021SWarner Losh	    eval mk_${geli}_${scheme}_${fs}_${bios} ${DESTDIR} ${img} ${MNTPT} ${geli} ${scheme} ${fs} ${bios}
84022cf6021SWarner Losh	    eval qemu_${arch}_${bios} ${img} ${sh}
84122cf6021SWarner Losh	    [ -n "${SUDO_USER}" ] && chown ${SUDO_USER} ${img}*
84222cf6021SWarner Losh	    echo "^^^^^^^^^^^^^^^^^^^^^^   Creating $img  ^^^^^^^^^^^^^^^^^^^^^^^"
84322cf6021SWarner Losh	done
84422cf6021SWarner Losh    done
84522cf6021SWarner Loshdone
84622cf6021SWarner Losh
84722cf6021SWarner Loshfor arch in sparc64; do
848ba8d50d0SMarius Strobl    for geli in nogeli; do
849ba8d50d0SMarius Strobl	for scheme in vtoc8; do
850ba8d50d0SMarius Strobl	    for fs in ufs; do
85122cf6021SWarner Losh		for bios in ofw; do
85222cf6021SWarner Losh		    # Create sparse file and mount newly created filesystem(s) on it
85322cf6021SWarner Losh		    img=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.img
85422cf6021SWarner Losh		    sh=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.sh
85522cf6021SWarner Losh		    echo "vvvvvvvvvvvvvvvvvvvvvv   Creating $img  vvvvvvvvvvvvvvvvvvvvvvv"
85622cf6021SWarner Losh		    rm -f ${img}*
857ba8d50d0SMarius Strobl		    eval mk_${arch}_${geli}_${scheme}_${fs}_${bios} ${DESTDIR} ${img} ${MNTPT} ${geli} ${scheme} ${fs} ${bios}
85822cf6021SWarner Losh		    eval qemu_${arch}_${bios} ${img} ${sh}
85922cf6021SWarner Losh		    [ -n "${SUDO_USER}" ] && chown ${SUDO_USER} ${img}*
86022cf6021SWarner Losh		    echo "^^^^^^^^^^^^^^^^^^^^^^   Creating $img  ^^^^^^^^^^^^^^^^^^^^^^^"
86122cf6021SWarner Losh		done
86222cf6021SWarner Losh	    done
86322cf6021SWarner Losh	done
864ba8d50d0SMarius Strobl    done
865ba8d50d0SMarius Strobldone
866