xref: /freebsd/tools/boot/rootgen.sh (revision 0c0ffba5d64b6d3a2e0e874f6e11bded03375313)
1082c6764SWarner Losh#!/bin/sh
2082c6764SWarner Losh
3082c6764SWarner Losh# $FreeBSD$
4082c6764SWarner Losh
57b4b55e5SIan Leporepassphrase=passphrase
67b4b55e5SIan Leporeiterations=50000
7595deaf7SIan Lepore
8db8b5613SRebecca Cran# The smallest FAT32 filesystem is 33292 KB
9db8b5613SRebecca Cranespsize=33292
10d050cd6bSWarner Losh
11082c6764SWarner Losh#
12082c6764SWarner Losh# Builds all the bat-shit crazy combinations we support booting from,
13082c6764SWarner Losh# at least for amd64. It assume you have a ~sane kernel in /boot/kernel
14082c6764SWarner Losh# and copies that into the ~150MB root images we create (we create the du
15082c6764SWarner Losh# size of the kernel + 20MB
16082c6764SWarner Losh#
17082c6764SWarner Losh# Sad panda sez: this runs as root, but could be userland if someone
18082c6764SWarner Losh# creates userland geli and zfs tools.
19082c6764SWarner Losh#
20db8b5613SRebecca Cran# This assumes an external program install-boot.sh which will install
21082c6764SWarner Losh# the appropriate boot files in the appropriate locations.
22082c6764SWarner Losh#
23082c6764SWarner Losh# These images assume ada0 will be the root image. We should likely
24082c6764SWarner Losh# use labels, but we don't.
25082c6764SWarner Losh#
26db8b5613SRebecca Cran# Assumes you've already rebuilt... maybe bad? Also maybe bad: the env
27082c6764SWarner Losh# vars should likely be conditionally set to allow better automation.
28082c6764SWarner Losh#
29082c6764SWarner Losh
300661cd79SRebecca Cran. $(dirname $0)/install-boot.sh
310661cd79SRebecca Cran
32082c6764SWarner Loshcpsys() {
33082c6764SWarner Losh    src=$1
34082c6764SWarner Losh    dst=$2
35082c6764SWarner Losh
36082c6764SWarner Losh    # Copy kernel + boot loader
37082c6764SWarner Losh    (cd $src ; tar cf - .) | (cd $dst; tar xf -)
38082c6764SWarner Losh}
39082c6764SWarner Losh
40082c6764SWarner Loshmk_nogeli_gpt_ufs_legacy() {
41082c6764SWarner Losh    src=$1
42082c6764SWarner Losh    img=$2
43082c6764SWarner Losh
4422cf6021SWarner Losh    cat > ${src}/etc/fstab <<EOF
4522cf6021SWarner Losh/dev/ada0p2	/		ufs	rw	1	1
4622cf6021SWarner LoshEOF
47082c6764SWarner Losh    makefs -t ffs -B little -s 200m ${img}.p2 ${src}
48082c6764SWarner Losh    mkimg -s gpt -b ${src}/boot/pmbr \
49082c6764SWarner Losh	  -p freebsd-boot:=${src}/boot/gptboot \
50082c6764SWarner Losh	  -p freebsd-ufs:=${img}.p2 -o ${img}
5122cf6021SWarner Losh    rm -f ${src}/etc/fstab
52082c6764SWarner Losh}
53082c6764SWarner Losh
54082c6764SWarner Loshmk_nogeli_gpt_ufs_uefi() {
55082c6764SWarner Losh    src=$1
56082c6764SWarner Losh    img=$2
57082c6764SWarner Losh
5822cf6021SWarner Losh    cat > ${src}/etc/fstab <<EOF
5922cf6021SWarner Losh/dev/ada0p2	/		ufs	rw	1	1
6022cf6021SWarner LoshEOF
610661cd79SRebecca Cran    make_esp_file ${img}.p1 ${espsize} ${src}/boot/loader.efi
62082c6764SWarner Losh    makefs -t ffs -B little -s 200m ${img}.p2 ${src}
63f438a143SAllan Jude    mkimg -s gpt \
6422cf6021SWarner Losh	  -p efi:=${img}.p1 \
65082c6764SWarner Losh	  -p freebsd-ufs:=${img}.p2 -o ${img}
6622cf6021SWarner Losh    rm -f ${src}/etc/fstab
67082c6764SWarner Losh}
68082c6764SWarner Losh
69082c6764SWarner Loshmk_nogeli_gpt_ufs_both() {
70082c6764SWarner Losh    src=$1
71082c6764SWarner Losh    img=$2
72082c6764SWarner Losh
7322cf6021SWarner Losh    cat > ${src}/etc/fstab <<EOF
7422cf6021SWarner Losh/dev/ada0p3	/		ufs	rw	1	1
7522cf6021SWarner LoshEOF
760661cd79SRebecca Cran    make_esp_file ${img}.p1 ${espsize} ${src}/boot/loader.efi
77082c6764SWarner Losh    makefs -t ffs -B little -s 200m ${img}.p3 ${src}
78082c6764SWarner Losh    # p1 is boot for uefi, p2 is boot for gpt, p3 is /
79082c6764SWarner Losh    mkimg -b ${src}/boot/pmbr -s gpt \
80d050cd6bSWarner Losh	  -p efi:=${img}.p1 \
81082c6764SWarner Losh	  -p freebsd-boot:=${src}/boot/gptboot \
82082c6764SWarner Losh	  -p freebsd-ufs:=${img}.p3 \
83082c6764SWarner Losh	  -o ${img}
8422cf6021SWarner Losh    rm -f ${src}/etc/fstab
85082c6764SWarner Losh}
86082c6764SWarner Losh
87082c6764SWarner Loshmk_nogeli_gpt_zfs_legacy() {
88082c6764SWarner Losh    src=$1
89082c6764SWarner Losh    img=$2
90082c6764SWarner Losh    mntpt=$3
91082c6764SWarner Losh    geli=$4
92082c6764SWarner Losh    scheme=$5
93082c6764SWarner Losh    fs=$6
94082c6764SWarner Losh    bios=$7
95082c6764SWarner Losh    pool=nogeli-gpt-zfs-legacy
96082c6764SWarner Losh
97082c6764SWarner Losh    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
98082c6764SWarner Losh    md=$(mdconfig -f ${img})
99082c6764SWarner Losh    gpart create -s gpt ${md}
100082c6764SWarner Losh    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
101082c6764SWarner Losh    gpart add -t freebsd-zfs -l root $md
102082c6764SWarner Losh    # install-boot will make this bootable
103082c6764SWarner Losh    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2
104082c6764SWarner Losh    zpool set bootfs=${pool} ${pool}
1052145d0ecSAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
106082c6764SWarner Losh    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
107082c6764SWarner Losh    cpsys ${src} ${mntpt}
108082c6764SWarner Losh    # need to make a couple of tweaks
109d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
110082c6764SWarner Loshzfs_load=YES
111082c6764SWarner Loshopensolaris_load=YES
112082c6764SWarner LoshEOF
113827f1973SIan Lepore    cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
114082c6764SWarner Losh    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
115082c6764SWarner Losh    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
116082c6764SWarner Losh    # end tweaks
1172145d0ecSAllan Jude    zfs umount -f ${pool}/ROOT/default
1182145d0ecSAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
1192145d0ecSAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
120082c6764SWarner Losh    zpool set autoexpand=on ${pool}
121082c6764SWarner Losh    zpool export ${pool}
122082c6764SWarner Losh    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
123082c6764SWarner Losh    mdconfig -d -u ${md}
124082c6764SWarner Losh}
125082c6764SWarner Losh
126082c6764SWarner Loshmk_nogeli_gpt_zfs_uefi() {
127712b4ca9SAllan Jude    src=$1
128712b4ca9SAllan Jude    img=$2
129712b4ca9SAllan Jude    mntpt=$3
130712b4ca9SAllan Jude    geli=$4
131712b4ca9SAllan Jude    scheme=$5
132712b4ca9SAllan Jude    fs=$6
133712b4ca9SAllan Jude    bios=$7
134712b4ca9SAllan Jude    pool=nogeli-gpt-zfs-uefi
135712b4ca9SAllan Jude
136712b4ca9SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
137712b4ca9SAllan Jude    md=$(mdconfig -f ${img})
138712b4ca9SAllan Jude    gpart create -s gpt ${md}
139db8b5613SRebecca Cran    gpart add -t efi -s ${espsize}k -a 4k ${md}
140712b4ca9SAllan Jude    gpart add -t freebsd-zfs -l root $md
141712b4ca9SAllan Jude    # install-boot will make this bootable
142712b4ca9SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2
143712b4ca9SAllan Jude    zpool set bootfs=${pool} ${pool}
144712b4ca9SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
145712b4ca9SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
146712b4ca9SAllan Jude    cpsys ${src} ${mntpt}
147712b4ca9SAllan Jude    # need to make a couple of tweaks
148d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
149712b4ca9SAllan Judezfs_load=YES
150712b4ca9SAllan Judeopensolaris_load=YES
151712b4ca9SAllan JudeEOF
152827f1973SIan Lepore    cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
153712b4ca9SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
154712b4ca9SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
155712b4ca9SAllan Jude    # end tweaks
156712b4ca9SAllan Jude    zfs umount -f ${pool}/ROOT/default
157712b4ca9SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
158712b4ca9SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
159712b4ca9SAllan Jude    zpool set autoexpand=on ${pool}
160712b4ca9SAllan Jude    zpool export ${pool}
161712b4ca9SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
162712b4ca9SAllan Jude    mdconfig -d -u ${md}
163082c6764SWarner Losh}
164082c6764SWarner Losh
165082c6764SWarner Loshmk_nogeli_gpt_zfs_both() {
166712b4ca9SAllan Jude    src=$1
167712b4ca9SAllan Jude    img=$2
168712b4ca9SAllan Jude    mntpt=$3
169712b4ca9SAllan Jude    geli=$4
170712b4ca9SAllan Jude    scheme=$5
171712b4ca9SAllan Jude    fs=$6
172712b4ca9SAllan Jude    bios=$7
173712b4ca9SAllan Jude    pool=nogeli-gpt-zfs-both
174712b4ca9SAllan Jude
175712b4ca9SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
176712b4ca9SAllan Jude    md=$(mdconfig -f ${img})
177712b4ca9SAllan Jude    gpart create -s gpt ${md}
178db8b5613SRebecca Cran    gpart add -t efi -s ${espsize}k -a 4k ${md}
179712b4ca9SAllan Jude    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
180712b4ca9SAllan Jude    gpart add -t freebsd-zfs -l root $md
181712b4ca9SAllan Jude    # install-boot will make this bootable
182712b4ca9SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3
183712b4ca9SAllan Jude    zpool set bootfs=${pool} ${pool}
184712b4ca9SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
185712b4ca9SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
186712b4ca9SAllan Jude    cpsys ${src} ${mntpt}
187712b4ca9SAllan Jude    # need to make a couple of tweaks
188d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
189712b4ca9SAllan Judezfs_load=YES
190712b4ca9SAllan Judeopensolaris_load=YES
191712b4ca9SAllan JudeEOF
192827f1973SIan Lepore    cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
193712b4ca9SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
194712b4ca9SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
195712b4ca9SAllan Jude    # end tweaks
196712b4ca9SAllan Jude    zfs umount -f ${pool}/ROOT/default
197712b4ca9SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
198712b4ca9SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
199712b4ca9SAllan Jude    zpool set autoexpand=on ${pool}
200712b4ca9SAllan Jude    zpool export ${pool}
201712b4ca9SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
202712b4ca9SAllan Jude    mdconfig -d -u ${md}
203082c6764SWarner Losh}
204082c6764SWarner Losh
205082c6764SWarner Loshmk_nogeli_mbr_ufs_legacy() {
20622cf6021SWarner Losh    src=$1
20722cf6021SWarner Losh    img=$2
20822cf6021SWarner Losh
20922cf6021SWarner Losh    cat > ${src}/etc/fstab <<EOF
21022cf6021SWarner Losh/dev/ada0s1a	/		ufs	rw	1	1
21122cf6021SWarner LoshEOF
21222cf6021SWarner Losh    makefs -t ffs -B little -s 200m ${img}.s1a ${src}
21322cf6021SWarner Losh    mkimg -s bsd -b ${src}/boot/boot -p freebsd-ufs:=${img}.s1a -o ${img}.s1
214f438a143SAllan Jude    mkimg -a 1 -s mbr -b ${src}/boot/boot0sio -p freebsd:=${img}.s1 -o ${img}
21522cf6021SWarner Losh    rm -f ${src}/etc/fstab
216082c6764SWarner Losh}
217082c6764SWarner Losh
218082c6764SWarner Loshmk_nogeli_mbr_ufs_uefi() {
219f438a143SAllan Jude    src=$1
220f438a143SAllan Jude    img=$2
221f438a143SAllan Jude
222f438a143SAllan Jude    cat > ${src}/etc/fstab <<EOF
223c7940ca2SIan Lepore/dev/ada0s2a	/		ufs	rw	1	1
224f438a143SAllan JudeEOF
2250661cd79SRebecca Cran    make_esp_file ${img}.s1 ${espsize} ${src}/boot/loader.efi
226f438a143SAllan Jude    makefs -t ffs -B little -s 200m ${img}.s2a ${src}
227f438a143SAllan Jude    mkimg -s bsd -p freebsd-ufs:=${img}.s2a -o ${img}.s2
228f438a143SAllan Jude    mkimg -a 1 -s mbr -p efi:=${img}.s1 -p freebsd:=${img}.s2 -o ${img}
229f438a143SAllan Jude    rm -f ${src}/etc/fstab
230082c6764SWarner Losh}
231082c6764SWarner Losh
232082c6764SWarner Loshmk_nogeli_mbr_ufs_both() {
233f438a143SAllan Jude    src=$1
234f438a143SAllan Jude    img=$2
235f438a143SAllan Jude
236f438a143SAllan Jude    cat > ${src}/etc/fstab <<EOF
237c7940ca2SIan Lepore/dev/ada0s2a	/		ufs	rw	1	1
238f438a143SAllan JudeEOF
2390661cd79SRebecca Cran    make_esp_file ${img}.s1 ${espsize} ${src}/boot/loader.efi
240f438a143SAllan Jude    makefs -t ffs -B little -s 200m ${img}.s2a ${src}
241f438a143SAllan Jude    mkimg -s bsd -b ${src}/boot/boot -p freebsd-ufs:=${img}.s2a -o ${img}.s2
242f438a143SAllan Jude    mkimg -a 2 -s mbr -b ${src}/boot/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_zfs_legacy() {
247f438a143SAllan Jude    src=$1
248f438a143SAllan Jude    img=$2
249f438a143SAllan Jude    mntpt=$3
250f438a143SAllan Jude    geli=$4
251f438a143SAllan Jude    scheme=$5
252f438a143SAllan Jude    fs=$6
253f438a143SAllan Jude    bios=$7
254f438a143SAllan Jude    pool=nogeli-mbr-zfs-legacy
255f438a143SAllan Jude
256f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
257f438a143SAllan Jude    md=$(mdconfig -f ${img})
258f438a143SAllan Jude    gpart create -s mbr ${md}
259f438a143SAllan Jude    gpart add -t freebsd ${md}
260f438a143SAllan Jude    gpart set -a active -i 1 ${md}
261f438a143SAllan Jude    gpart create -s bsd ${md}s1
262f438a143SAllan Jude    gpart add -t freebsd-zfs ${md}s1
263f438a143SAllan Jude    # install-boot will make this bootable
264f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s1a
265f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
266f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
267f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
268f438a143SAllan Jude    cpsys ${src} ${mntpt}
269f438a143SAllan Jude    # need to make a couple of tweaks
270d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
271f438a143SAllan Judezfs_load=YES
272f438a143SAllan Judeopensolaris_load=YES
273f438a143SAllan JudeEOF
274827f1973SIan Lepore    cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
275f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
276f438a143SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
277f438a143SAllan Jude    # end tweaks
278f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
279f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
280f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
281f438a143SAllan Jude    zpool set autoexpand=on ${pool}
282f438a143SAllan Jude    zpool export ${pool}
283f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
284f438a143SAllan Jude    mdconfig -d -u ${md}
285082c6764SWarner Losh}
286082c6764SWarner Losh
287082c6764SWarner Loshmk_nogeli_mbr_zfs_uefi() {
288f438a143SAllan Jude    src=$1
289f438a143SAllan Jude    img=$2
290f438a143SAllan Jude    mntpt=$3
291f438a143SAllan Jude    geli=$4
292f438a143SAllan Jude    scheme=$5
293f438a143SAllan Jude    fs=$6
294f438a143SAllan Jude    bios=$7
295f438a143SAllan Jude    pool=nogeli-mbr-zfs-uefi
296f438a143SAllan Jude
297f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
298f438a143SAllan Jude    md=$(mdconfig -f ${img})
299f438a143SAllan Jude    gpart create -s mbr ${md}
300db8b5613SRebecca Cran    gpart add -t efi -s ${espsize}k ${md}
301f438a143SAllan Jude    gpart add -t freebsd ${md}
302f438a143SAllan Jude    gpart set -a active -i 2 ${md}
303f438a143SAllan Jude    gpart create -s bsd ${md}s2
304f438a143SAllan Jude    gpart add -t freebsd-zfs ${md}s2
305f438a143SAllan Jude    # install-boot will make this bootable
306f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s2a
307f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
308f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
309f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
310f438a143SAllan Jude    cpsys ${src} ${mntpt}
311f438a143SAllan Jude    # need to make a couple of tweaks
312d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
313f438a143SAllan Judezfs_load=YES
314f438a143SAllan Judeopensolaris_load=YES
315f438a143SAllan JudeEOF
316827f1973SIan Lepore    cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
317f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
318f438a143SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
319f438a143SAllan Jude    # end tweaks
320f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
321f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
322f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
323f438a143SAllan Jude    zpool set autoexpand=on ${pool}
324f438a143SAllan Jude    zpool export ${pool}
325f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
326f438a143SAllan Jude    mdconfig -d -u ${md}
327082c6764SWarner Losh}
328082c6764SWarner Losh
329082c6764SWarner Loshmk_nogeli_mbr_zfs_both() {
330f438a143SAllan Jude    src=$1
331f438a143SAllan Jude    img=$2
332f438a143SAllan Jude    mntpt=$3
333f438a143SAllan Jude    geli=$4
334f438a143SAllan Jude    scheme=$5
335f438a143SAllan Jude    fs=$6
336f438a143SAllan Jude    bios=$7
337f438a143SAllan Jude    pool=nogeli-mbr-zfs-both
338f438a143SAllan Jude
339f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
340f438a143SAllan Jude    md=$(mdconfig -f ${img})
341f438a143SAllan Jude    gpart create -s mbr ${md}
342db8b5613SRebecca Cran    gpart add -t efi -s  ${espsize}k ${md}
343f438a143SAllan Jude    gpart add -t freebsd ${md}
344f438a143SAllan Jude    gpart set -a active -i 2 ${md}
345f438a143SAllan Jude    gpart create -s bsd ${md}s2
346f438a143SAllan Jude    gpart add -t freebsd-zfs ${md}s2
347f438a143SAllan Jude    # install-boot will make this bootable
348f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s2a
349f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
350f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
351f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
352f438a143SAllan Jude    cpsys ${src} ${mntpt}
353f438a143SAllan Jude    # need to make a couple of tweaks
354d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
355f438a143SAllan Judezfs_load=YES
356f438a143SAllan Judeopensolaris_load=YES
357f438a143SAllan JudeEOF
358827f1973SIan Lepore    cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
359f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
360f438a143SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
361f438a143SAllan Jude    # end tweaks
362f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
363f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
364f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
365f438a143SAllan Jude    zpool set autoexpand=on ${pool}
366f438a143SAllan Jude    zpool export ${pool}
367f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
368f438a143SAllan Jude    mdconfig -d -u ${md}
369082c6764SWarner Losh}
370082c6764SWarner Losh
371082c6764SWarner Loshmk_geli_gpt_ufs_legacy() {
372f438a143SAllan Jude    src=$1
373f438a143SAllan Jude    img=$2
374f438a143SAllan Jude    mntpt=$3
375f438a143SAllan Jude    geli=$4
376f438a143SAllan Jude    scheme=$5
377f438a143SAllan Jude    fs=$6
378f438a143SAllan Jude    bios=$7
379f438a143SAllan Jude
380f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
381f438a143SAllan Jude    md=$(mdconfig -f ${img})
382f438a143SAllan Jude    gpart create -s gpt ${md}
383f438a143SAllan Jude    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
384f438a143SAllan Jude    gpart add -t freebsd-ufs -l root $md
385f438a143SAllan Jude    # install-boot will make this bootable
386595deaf7SIan Lepore    echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p2
387595deaf7SIan Lepore    echo ${passphrase} | geli attach -j - ${md}p2
388f438a143SAllan Jude    newfs /dev/${md}p2.eli
389f438a143SAllan Jude    mount /dev/${md}p2.eli ${mntpt}
390f438a143SAllan Jude    cpsys ${src} ${mntpt}
391f438a143SAllan Jude    # need to make a couple of tweaks
392f438a143SAllan Jude    cat > ${mntpt}/boot/loader.conf <<EOF
393f438a143SAllan Judegeom_eli_load=YES
394f438a143SAllan JudeEOF
395f438a143SAllan Jude    cat > ${mntpt}/etc/fstab <<EOF
396f438a143SAllan Jude/dev/ada0p2.eli	/		ufs	rw	1	1
397f438a143SAllan JudeEOF
398f438a143SAllan Jude
399f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
400f438a143SAllan Jude    # end tweaks
401f438a143SAllan Jude    umount -f ${mntpt}
402f438a143SAllan Jude    geli detach ${md}p2
403f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
404f438a143SAllan Jude    mdconfig -d -u ${md}
405082c6764SWarner Losh}
406082c6764SWarner Losh
407082c6764SWarner Loshmk_geli_gpt_ufs_uefi() {
408f438a143SAllan Jude    src=$1
409f438a143SAllan Jude    img=$2
410f438a143SAllan Jude    mntpt=$3
411f438a143SAllan Jude    geli=$4
412f438a143SAllan Jude    scheme=$5
413f438a143SAllan Jude    fs=$6
414f438a143SAllan Jude    bios=$7
415f438a143SAllan Jude
416f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
417f438a143SAllan Jude    md=$(mdconfig -f ${img})
418f438a143SAllan Jude    gpart create -s gpt ${md}
419db8b5613SRebecca Cran    gpart add -t efi -s ${espsize}k -a 4k ${md}
420f438a143SAllan Jude    gpart add -t freebsd-ufs -l root $md
421f438a143SAllan Jude    # install-boot will make this bootable
422595deaf7SIan Lepore    echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p2
423595deaf7SIan Lepore    echo ${passphrase} | geli attach -j - ${md}p2
424f438a143SAllan Jude    newfs /dev/${md}p2.eli
425f438a143SAllan Jude    mount /dev/${md}p2.eli ${mntpt}
426f438a143SAllan Jude    cpsys ${src} ${mntpt}
427f438a143SAllan Jude    # need to make a couple of tweaks
428f438a143SAllan Jude    cat > ${mntpt}/boot/loader.conf <<EOF
429f438a143SAllan Judegeom_eli_load=YES
430f438a143SAllan JudeEOF
431f438a143SAllan Jude    cat > ${mntpt}/etc/fstab <<EOF
432f438a143SAllan Jude/dev/ada0p2.eli	/		ufs	rw	1	1
433f438a143SAllan JudeEOF
434f438a143SAllan Jude
435f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
436f438a143SAllan Jude    # end tweaks
437f438a143SAllan Jude    umount -f ${mntpt}
438f438a143SAllan Jude    geli detach ${md}p2
439f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
440f438a143SAllan Jude    mdconfig -d -u ${md}
441082c6764SWarner Losh}
442082c6764SWarner Losh
443082c6764SWarner Loshmk_geli_gpt_ufs_both() {
444f438a143SAllan Jude    src=$1
445f438a143SAllan Jude    img=$2
446f438a143SAllan Jude    mntpt=$3
447f438a143SAllan Jude    geli=$4
448f438a143SAllan Jude    scheme=$5
449f438a143SAllan Jude    fs=$6
450f438a143SAllan Jude    bios=$7
451f438a143SAllan Jude
452f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
453f438a143SAllan Jude    md=$(mdconfig -f ${img})
454f438a143SAllan Jude    gpart create -s gpt ${md}
455db8b5613SRebecca Cran    gpart add -t efi -s ${espsize}k -a 4k ${md}
456f438a143SAllan Jude    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
457f438a143SAllan Jude    gpart add -t freebsd-ufs -l root $md
458f438a143SAllan Jude    # install-boot will make this bootable
459595deaf7SIan Lepore    echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p3
460595deaf7SIan Lepore    echo ${passphrase} | geli attach -j - ${md}p3
461f438a143SAllan Jude    newfs /dev/${md}p3.eli
462f438a143SAllan Jude    mount /dev/${md}p3.eli ${mntpt}
463f438a143SAllan Jude    cpsys ${src} ${mntpt}
464f438a143SAllan Jude    # need to make a couple of tweaks
465f438a143SAllan Jude    cat > ${mntpt}/boot/loader.conf <<EOF
466f438a143SAllan Judegeom_eli_load=YES
467f438a143SAllan JudeEOF
468f438a143SAllan Jude    cat > ${mntpt}/etc/fstab <<EOF
469f438a143SAllan Jude/dev/ada0p3.eli	/		ufs	rw	1	1
470f438a143SAllan JudeEOF
471f438a143SAllan Jude
472f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
473f438a143SAllan Jude    # end tweaks
474f438a143SAllan Jude    umount -f ${mntpt}
475f438a143SAllan Jude    geli detach ${md}p3
476f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
477f438a143SAllan Jude    mdconfig -d -u ${md}
478082c6764SWarner Losh}
479082c6764SWarner Losh
480082c6764SWarner Loshmk_geli_gpt_zfs_legacy() {
481f438a143SAllan Jude    src=$1
482f438a143SAllan Jude    img=$2
483f438a143SAllan Jude    mntpt=$3
484f438a143SAllan Jude    geli=$4
485f438a143SAllan Jude    scheme=$5
486f438a143SAllan Jude    fs=$6
487f438a143SAllan Jude    bios=$7
488f438a143SAllan Jude    pool=geli-gpt-zfs-legacy
489f438a143SAllan Jude
490*0c0ffba5SIan Lepore    # Note that in this flavor we create an empty p2 ufs partition, and put
491*0c0ffba5SIan Lepore    # the bootable zfs stuff on p3, just to test the ability of the zfs probe
492*0c0ffba5SIan Lepore    # probe routines to find a pool on a partition other than the first one.
493*0c0ffba5SIan Lepore
494*0c0ffba5SIan Lepore    dd if=/dev/zero of=${img} count=1 seek=$(( 300 * 1024 * 1024 / 512 ))
495f438a143SAllan Jude    md=$(mdconfig -f ${img})
496f438a143SAllan Jude    gpart create -s gpt ${md}
497f438a143SAllan Jude    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
498*0c0ffba5SIan Lepore    gpart add -t freebsd-ufs -s 100m ${md}
499f438a143SAllan Jude    gpart add -t freebsd-zfs -l root $md
500f438a143SAllan Jude    # install-boot will make this bootable
501*0c0ffba5SIan Lepore    echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p3
502*0c0ffba5SIan Lepore    echo ${passphrase} | geli attach -j - ${md}p3
503*0c0ffba5SIan Lepore    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3.eli
504f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
505f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
506f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
507f438a143SAllan Jude    cpsys ${src} ${mntpt}
508f438a143SAllan Jude    # need to make a couple of tweaks
509d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
510f438a143SAllan Judezfs_load=YES
511f438a143SAllan Judeopensolaris_load=YES
512f438a143SAllan Judegeom_eli_load=YES
513f438a143SAllan JudeEOF
514827f1973SIan Lepore    cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
515f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
516f438a143SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
517f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
518f438a143SAllan Jude    # end tweaks
519f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
520f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
521f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
522f438a143SAllan Jude    zpool set autoexpand=on ${pool}
523f438a143SAllan Jude    zpool export ${pool}
524*0c0ffba5SIan Lepore    geli detach ${md}p3
525f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
526f438a143SAllan Jude    mdconfig -d -u ${md}
527082c6764SWarner Losh}
528082c6764SWarner Losh
529082c6764SWarner Loshmk_geli_gpt_zfs_uefi() {
530f438a143SAllan Jude    src=$1
531f438a143SAllan Jude    img=$2
532f438a143SAllan Jude    mntpt=$3
533f438a143SAllan Jude    geli=$4
534f438a143SAllan Jude    scheme=$5
535f438a143SAllan Jude    fs=$6
536f438a143SAllan Jude    bios=$7
537f438a143SAllan Jude    pool=geli-gpt-zfs-uefi
538f438a143SAllan Jude
539*0c0ffba5SIan Lepore    # Note that in this flavor we create an empty p2 ufs partition, and put
540*0c0ffba5SIan Lepore    # the bootable zfs stuff on p3, just to test the ability of the zfs probe
541*0c0ffba5SIan Lepore    # probe routines to find a pool on a partition other than the first one.
542*0c0ffba5SIan Lepore
543*0c0ffba5SIan Lepore    dd if=/dev/zero of=${img} count=1 seek=$(( 300 * 1024 * 1024 / 512 ))
544f438a143SAllan Jude    md=$(mdconfig -f ${img})
545f438a143SAllan Jude    gpart create -s gpt ${md}
546db8b5613SRebecca Cran    gpart add -t efi -s ${espsize}k -a 4k ${md}
547*0c0ffba5SIan Lepore    gpart add -t freebsd-ufs -s 100m ${md}
548f438a143SAllan Jude    gpart add -t freebsd-zfs -l root $md
549f438a143SAllan Jude    # install-boot will make this bootable
550*0c0ffba5SIan Lepore    echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p3
551*0c0ffba5SIan Lepore    echo ${passphrase} | geli attach -j - ${md}p3
552*0c0ffba5SIan Lepore    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3.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
563827f1973SIan Lepore    cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
564f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
565f438a143SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
566f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
567f438a143SAllan Jude    # end tweaks
568f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
569f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
570f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
571f438a143SAllan Jude    zpool set autoexpand=on ${pool}
572f438a143SAllan Jude    zpool export ${pool}
573*0c0ffba5SIan Lepore    geli detach ${md}p3
574f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
575f438a143SAllan Jude    mdconfig -d -u ${md}
576082c6764SWarner Losh}
577082c6764SWarner Losh
578082c6764SWarner Loshmk_geli_gpt_zfs_both() {
579f438a143SAllan Jude    src=$1
580f438a143SAllan Jude    img=$2
581f438a143SAllan Jude    mntpt=$3
582f438a143SAllan Jude    geli=$4
583f438a143SAllan Jude    scheme=$5
584f438a143SAllan Jude    fs=$6
585f438a143SAllan Jude    bios=$7
586f438a143SAllan Jude    pool=geli-gpt-zfs-both
587f438a143SAllan Jude
588f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
589f438a143SAllan Jude    md=$(mdconfig -f ${img})
590f438a143SAllan Jude    gpart create -s gpt ${md}
591db8b5613SRebecca Cran    gpart add -t efi -s ${espsize}k -a 4k ${md}
592f438a143SAllan Jude    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
593f438a143SAllan Jude    gpart add -t freebsd-zfs -l root $md
594f438a143SAllan Jude    # install-boot will make this bootable
595595deaf7SIan Lepore    echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p3
596595deaf7SIan Lepore    echo ${passphrase} | geli attach -j - ${md}p3
597f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3.eli
598f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
599f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
600f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
601f438a143SAllan Jude    cpsys ${src} ${mntpt}
602f438a143SAllan Jude    # need to make a couple of tweaks
603f438a143SAllan Jude    cat > ${mntpt}/boot/loader.conf <<EOF
604f438a143SAllan Judezfs_load=YES
605f438a143SAllan Judeopensolaris_load=YES
606f438a143SAllan Judegeom_eli_load=YES
607f438a143SAllan JudeEOF
608827f1973SIan Lepore    cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
609f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
610f438a143SAllan Jude    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
611f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
612f438a143SAllan Jude    # end tweaks
613f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
614f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
615f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
616f438a143SAllan Jude    zpool set autoexpand=on ${pool}
617f438a143SAllan Jude    zpool export ${pool}
618f438a143SAllan Jude    geli detach ${md}p3
619f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
620f438a143SAllan Jude    mdconfig -d -u ${md}
621082c6764SWarner Losh}
622082c6764SWarner Losh
623f438a143SAllan Jude# GELI+MBR is not a valid configuration
624082c6764SWarner Loshmk_geli_mbr_ufs_legacy() {
625082c6764SWarner Losh}
626082c6764SWarner Losh
627082c6764SWarner Loshmk_geli_mbr_ufs_uefi() {
628082c6764SWarner Losh}
629082c6764SWarner Losh
630082c6764SWarner Loshmk_geli_mbr_ufs_both() {
631082c6764SWarner Losh}
632082c6764SWarner Losh
633082c6764SWarner Loshmk_geli_mbr_zfs_legacy() {
634082c6764SWarner Losh}
635082c6764SWarner Losh
636082c6764SWarner Loshmk_geli_mbr_zfs_uefi() {
637082c6764SWarner Losh}
638082c6764SWarner Losh
639082c6764SWarner Loshmk_geli_mbr_zfs_both() {
640082c6764SWarner Losh}
641082c6764SWarner Losh
642082c6764SWarner Losh# iso
643082c6764SWarner Losh# pxeldr
644082c6764SWarner Losh# u-boot
64522cf6021SWarner Losh# powerpc
64622cf6021SWarner Losh
647ba8d50d0SMarius Stroblmk_sparc64_nogeli_vtoc8_ufs_ofw() {
648ba8d50d0SMarius Strobl    src=$1
649ba8d50d0SMarius Strobl    img=$2
650ba8d50d0SMarius Strobl    mntpt=$3
651ba8d50d0SMarius Strobl    geli=$4
652ba8d50d0SMarius Strobl    scheme=$5
653ba8d50d0SMarius Strobl    fs=$6
654ba8d50d0SMarius Strobl    bios=$7
655ba8d50d0SMarius Strobl
656ba8d50d0SMarius Strobl    cat > ${src}/etc/fstab <<EOF
657ba8d50d0SMarius Strobl/dev/ada0a	/		ufs	rw	1	1
658ba8d50d0SMarius StroblEOF
659ba8d50d0SMarius Strobl    makefs -t ffs -B big -s 200m ${img} ${src}
660ba8d50d0SMarius Strobl    md=$(mdconfig -f ${img})
661ba8d50d0SMarius Strobl    # For non-native builds, ensure that geom_part(4) supports VTOC8.
662ba8d50d0SMarius Strobl    kldload geom_part_vtoc8.ko
663ba8d50d0SMarius Strobl    gpart create -s VTOC8 ${md}
664ba8d50d0SMarius Strobl    gpart add -t freebsd-ufs ${md}
665ba8d50d0SMarius Strobl    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
666ba8d50d0SMarius Strobl    mdconfig -d -u ${md}
667ba8d50d0SMarius Strobl    rm -f ${src}/etc/fstab
668ba8d50d0SMarius Strobl}
669ba8d50d0SMarius Strobl
6707b4b55e5SIan Leporeqser="-serial telnet::4444,server -nographic"
67122cf6021SWarner Losh
67222cf6021SWarner Losh# https://wiki.freebsd.org/QemuRecipes
67322cf6021SWarner Losh# aarch64
67422cf6021SWarner Loshqemu_aarch64_uefi()
67522cf6021SWarner Losh{
67622cf6021SWarner Losh    img=$1
67722cf6021SWarner Losh    sh=$2
67822cf6021SWarner Losh
67922cf6021SWarner Losh    echo "qemu-system-aarch64 -m 4096M -cpu cortex-a57 -M virt  \
68022cf6021SWarner Losh        -bios QEMU_EFI.fd ${qser} \
68122cf6021SWarner Losh        -drive if=none,file=${img},id=hd0 \
68222cf6021SWarner Losh        -device virtio-blk-device,drive=hd0" > $sh
683dfe34ceaSIan Lepore    chmod 755 $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
696dfe34ceaSIan Lepore    chmod 755 $sh
69722cf6021SWarner Losh}
69822cf6021SWarner Losh
69922cf6021SWarner Loshqemu_amd64_uefi()
70022cf6021SWarner Losh{
70122cf6021SWarner Losh    img=$1
70222cf6021SWarner Losh    sh=$2
70322cf6021SWarner Losh
70448cb46aaSWarner Losh    echo "qemu-system-x86_64 -m 256m -bios ~/bios/OVMF-X64.fd --drive file=${img},format=raw ${qser}" > $sh
705dfe34ceaSIan Lepore    chmod 755 $sh
70622cf6021SWarner Losh}
70722cf6021SWarner Losh
70822cf6021SWarner Loshqemu_amd64_both()
70922cf6021SWarner Losh{
71022cf6021SWarner Losh    img=$1
71122cf6021SWarner Losh    sh=$2
71222cf6021SWarner Losh
71348cb46aaSWarner Losh    echo "qemu-system-x86_64 -m 256m --drive file=${img},format=raw ${qser}" > $sh
71448cb46aaSWarner Losh    echo "qemu-system-x86_64 -m 256m -bios ~/bios/OVMF-X64.fd --drive file=${img},format=raw ${qser}" >> $sh
715dfe34ceaSIan Lepore    chmod 755 $sh
71622cf6021SWarner Losh}
71722cf6021SWarner Losh
71822cf6021SWarner Losh# arm
71922cf6021SWarner Losh# nothing listed?
72022cf6021SWarner Losh
72122cf6021SWarner Losh# i386
72222cf6021SWarner Loshqemu_i386_legacy()
72322cf6021SWarner Losh{
72422cf6021SWarner Losh    img=$1
72522cf6021SWarner Losh    sh=$2
72622cf6021SWarner Losh
72722cf6021SWarner Losh    echo "qemu-system-i386 --drive file=${img},format=raw ${qser}" > $sh
728dfe34ceaSIan Lepore    chmod 755 $sh
72922cf6021SWarner Losh}
73022cf6021SWarner Losh
73122cf6021SWarner Losh# Not yet supported
73222cf6021SWarner Loshqemu_i386_uefi()
73322cf6021SWarner Losh{
73422cf6021SWarner Losh    img=$1
73522cf6021SWarner Losh    sh=$2
73622cf6021SWarner Losh
73722cf6021SWarner Losh    echo "qemu-system-i386 -bios ~/bios/OVMF-X32.fd --drive file=${img},format=raw ${qser}" > $sh
738dfe34ceaSIan Lepore    chmod 755 $sh
73922cf6021SWarner Losh}
74022cf6021SWarner Losh
74122cf6021SWarner Losh# Needs UEFI to be supported
74222cf6021SWarner Loshqemu_i386_both()
74322cf6021SWarner Losh{
74422cf6021SWarner Losh    img=$1
74522cf6021SWarner Losh    sh=$2
74622cf6021SWarner Losh
74722cf6021SWarner Losh    echo "qemu-system-i386 --drive file=${img},format=raw ${qser}" > $sh
748712b4ca9SAllan Jude    echo "qemu-system-i386 -bios ~/bios/OVMF-X32.fd --drive file=${img},format=raw ${qser}" >> $sh
749dfe34ceaSIan Lepore    chmod 755 $sh
75022cf6021SWarner Losh}
75122cf6021SWarner Losh
752432b4921SIan Leporemake_one_image()
753432b4921SIan Lepore{
754432b4921SIan Lepore    local arch=${1?}
755432b4921SIan Lepore    local geli=${2?}
756432b4921SIan Lepore    local scheme=${3?}
757432b4921SIan Lepore    local fs=${4?}
758432b4921SIan Lepore    local bios=${5?}
759432b4921SIan Lepore
760432b4921SIan Lepore    # Create sparse file and mount newly created filesystem(s) on it
761432b4921SIan Lepore    img=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.img
762432b4921SIan Lepore    sh=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.sh
763432b4921SIan Lepore    echo "vvvvvvvvvvvvvv   Creating $img  vvvvvvvvvvvvvvv"
764432b4921SIan Lepore    rm -f ${img}*
765432b4921SIan Lepore    eval mk_${geli}_${scheme}_${fs}_${bios} ${DESTDIR} ${img} ${MNTPT} ${geli} ${scheme} ${fs} ${bios}
766432b4921SIan Lepore    eval qemu_${arch}_${bios} ${img} ${sh}
767432b4921SIan Lepore    [ -n "${SUDO_USER}" ] && chown ${SUDO_USER} ${img}*
768432b4921SIan Lepore    echo "^^^^^^^^^^^^^^   Created $img   ^^^^^^^^^^^^^^^"
769432b4921SIan Lepore}
770432b4921SIan Lepore
77122cf6021SWarner Losh# mips
77222cf6021SWarner Losh# qemu-system-mips -kernel /path/to/rootfs/boot/kernel/kernel -nographic -hda /path/to/disk.img -m 2048
77322cf6021SWarner Losh
77422cf6021SWarner Losh# Powerpc -- doesn't work but maybe it would enough for testing -- needs details
77522cf6021SWarner Losh# powerpc64
77622cf6021SWarner Losh# qemu-system-ppc64 -drive file=/path/to/disk.img,format=raw
77722cf6021SWarner Losh
77822cf6021SWarner Losh# sparc64
77922cf6021SWarner Losh# qemu-system-sparc64 -drive file=/path/to/disk.img,format=raw
78022cf6021SWarner Losh
781082c6764SWarner Losh# Misc variables
782082c6764SWarner LoshSRCTOP=$(make -v SRCTOP)
783082c6764SWarner Loshcd ${SRCTOP}/stand
784082c6764SWarner LoshOBJDIR=$(make -v .OBJDIR)
785082c6764SWarner LoshIMGDIR=${OBJDIR}/boot-images
786082c6764SWarner Loshmkdir -p ${IMGDIR}
787082c6764SWarner LoshMNTPT=$(mktemp -d /tmp/stand-test.XXXXXX)
788082c6764SWarner Losh
789082c6764SWarner Losh# Setup the installed tree...
790082c6764SWarner LoshDESTDIR=${OBJDIR}/boot-tree
791082c6764SWarner Loshrm -rf ${DESTDIR}
792082c6764SWarner Loshmkdir -p ${DESTDIR}/boot/defaults
793082c6764SWarner Loshmkdir -p ${DESTDIR}/boot/kernel
794082c6764SWarner Loshcp /boot/kernel/kernel ${DESTDIR}/boot/kernel
795328884aeSWarner Loshecho -h -D -S115200 > ${DESTDIR}/boot.config
796d050cd6bSWarner Loshcat > ${DESTDIR}/boot/loader.conf <<EOF
797d050cd6bSWarner Loshconsole=comconsole
798d050cd6bSWarner Loshcomconsole_speed=115200
7991c70f60eSWarner Loshboot_serial=yes
8001c70f60eSWarner Loshboot_multicons=yes
801d050cd6bSWarner LoshEOF
802082c6764SWarner Losh# XXX
803082c6764SWarner Loshcp /boot/device.hints ${DESTDIR}/boot/device.hints
804082c6764SWarner Losh# Assume we're already built
805f576caacSIan Leporemake install DESTDIR=${DESTDIR} MK_MAN=no MK_INSTALL_AS_USER=yes WITHOUT_DEBUG_FILES=yes
806f576caacSIan Leporeif [ $? -ne 0 ]; then
807f576caacSIan Lepore        echo "make install failed"
808f576caacSIan Lepore        exit 1
809f576caacSIan Leporefi
81022cf6021SWarner Losh# Copy init, /bin/sh, minimal libraries and testing /etc/rc
81122cf6021SWarner Loshmkdir -p ${DESTDIR}/sbin ${DESTDIR}/bin \
81222cf6021SWarner Losh      ${DESTDIR}/lib ${DESTDIR}/libexec \
81322cf6021SWarner Losh      ${DESTDIR}/etc ${DESTDIR}/dev
814d050cd6bSWarner 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
815082c6764SWarner Losh    cp $f ${DESTDIR}/$f
816082c6764SWarner Loshdone
81722cf6021SWarner Loshcat > ${DESTDIR}/etc/rc <<EOF
81822cf6021SWarner Losh#!/bin/sh
81922cf6021SWarner Losh
820d050cd6bSWarner Loshsysctl machdep.bootmethod
82122cf6021SWarner Loshecho "RC COMMAND RUNNING -- SUCCESS!!!!!"
82222cf6021SWarner Loshhalt -p
82322cf6021SWarner LoshEOF
824082c6764SWarner Losh
825432b4921SIan Lepore# If we were given exactly 5 args, go make that one image.
826432b4921SIan Lepore
827432b4921SIan Leporeif [ $# -eq 5 ]; then
828432b4921SIan Lepore    make_one_image $*
829432b4921SIan Lepore    exit
830432b4921SIan Leporefi
831432b4921SIan Lepore
832082c6764SWarner Losh# OK. Let the games begin
833082c6764SWarner Losh
83422cf6021SWarner Loshfor arch in amd64; do
835082c6764SWarner Losh    for geli in nogeli geli; do
836082c6764SWarner Losh	for scheme in gpt mbr; do
837082c6764SWarner Losh	    for fs in ufs zfs; do
838082c6764SWarner Losh		for bios in legacy uefi both; do
839432b4921SIan Lepore		    make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
840082c6764SWarner Losh		done
841082c6764SWarner Losh	    done
842082c6764SWarner Losh	done
843082c6764SWarner Losh    done
84422cf6021SWarner Loshdone
845082c6764SWarner Losh
846082c6764SWarner Loshrmdir ${MNTPT}
84722cf6021SWarner Losh
84822cf6021SWarner Loshexit 0
84922cf6021SWarner Losh
85022cf6021SWarner Losh# Notes for the future
85122cf6021SWarner Losh
85222cf6021SWarner Loshfor arch in i386; do
85322cf6021SWarner Losh    for geli in nogeli geli; do
85422cf6021SWarner Losh	for scheme in gpt mbr; do
85522cf6021SWarner Losh	    for fs in ufs zfs; do
85622cf6021SWarner Losh		for bios in legacy; do
857432b4921SIan Lepore		    make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
85822cf6021SWarner Losh		done
85922cf6021SWarner Losh	    done
86022cf6021SWarner Losh	done
86122cf6021SWarner Losh    done
86222cf6021SWarner Loshdone
86322cf6021SWarner Losh
86422cf6021SWarner Loshfor arch in arm aarch64; do
86522cf6021SWarner Losh    for scheme in gpt mbr; do
86622cf6021SWarner Losh	fs=ufs
86722cf6021SWarner Losh	for bios in uboot efi; 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 powerpc powerpc64; do
87422cf6021SWarner Losh    for scheme in ppc-wtf; do
87522cf6021SWarner Losh	fs=ufs
87622cf6021SWarner Losh	for bios in ofw uboot chrp; do
877432b4921SIan Lepore	    make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
87822cf6021SWarner Losh	done
87922cf6021SWarner Losh    done
88022cf6021SWarner Loshdone
88122cf6021SWarner Losh
88222cf6021SWarner Loshfor arch in sparc64; do
883ba8d50d0SMarius Strobl    for geli in nogeli; do
884ba8d50d0SMarius Strobl	for scheme in vtoc8; do
885ba8d50d0SMarius Strobl	    for fs in ufs; do
88622cf6021SWarner Losh		for bios in ofw; do
887432b4921SIan Lepore		    make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
88822cf6021SWarner Losh		done
88922cf6021SWarner Losh	    done
89022cf6021SWarner Losh	done
891ba8d50d0SMarius Strobl    done
892ba8d50d0SMarius Strobldone
893