xref: /freebsd/tools/boot/rootgen.sh (revision 729c458bf7cc4ff7df616617b6ac5f4b83537dc3)
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
1526a241a0SWarner Losh# size of the kernel + 20MB).
16082c6764SWarner Losh#
17159b158aSWarner Losh# Sad panda sez: this runs as root, but could be any user if someone
18159b158aSWarner Losh# creates userland geli.
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#
23db8b5613SRebecca Cran# Assumes you've already rebuilt... maybe bad? Also maybe bad: the env
24082c6764SWarner Losh# vars should likely be conditionally set to allow better automation.
25082c6764SWarner Losh#
26082c6764SWarner Losh
270661cd79SRebecca Cran. $(dirname $0)/install-boot.sh
280661cd79SRebecca Cran
29082c6764SWarner Loshcpsys() {
30082c6764SWarner Losh    src=$1
31082c6764SWarner Losh    dst=$2
32082c6764SWarner Losh
33082c6764SWarner Losh    # Copy kernel + boot loader
34082c6764SWarner Losh    (cd $src ; tar cf - .) | (cd $dst; tar xf -)
35082c6764SWarner Losh}
36082c6764SWarner Losh
37*729c458bSWarner Loshufs_fstab() {
38082c6764SWarner Losh    src=$1
39082c6764SWarner Losh
4022cf6021SWarner Losh    cat > ${src}/etc/fstab <<EOF
41159b158aSWarner Losh/dev/ufs/root	/		ufs	rw	1	1
4222cf6021SWarner LoshEOF
43*729c458bSWarner Losh}
44*729c458bSWarner Losh
45*729c458bSWarner Loshmk_nogeli_gpt_ufs_legacy() {
46*729c458bSWarner Losh    src=$1
47*729c458bSWarner Losh    img=$2
48*729c458bSWarner Losh
49*729c458bSWarner Losh    ufs_fstab ${src}
50159b158aSWarner Losh    makefs -t ffs -B little -s 200m -o label=root ${img}.p2 ${src}
51082c6764SWarner Losh    mkimg -s gpt -b ${src}/boot/pmbr \
52082c6764SWarner Losh	  -p freebsd-boot:=${src}/boot/gptboot \
53082c6764SWarner Losh	  -p freebsd-ufs:=${img}.p2 -o ${img}
5422cf6021SWarner Losh    rm -f ${src}/etc/fstab
55082c6764SWarner Losh}
56082c6764SWarner Losh
57082c6764SWarner Loshmk_nogeli_gpt_ufs_uefi() {
58082c6764SWarner Losh    src=$1
59082c6764SWarner Losh    img=$2
60082c6764SWarner Losh
61*729c458bSWarner Losh    ufs_fstab ${src}
620661cd79SRebecca Cran    make_esp_file ${img}.p1 ${espsize} ${src}/boot/loader.efi
63159b158aSWarner Losh    makefs -t ffs -B little -s 200m -o label=root ${img}.p2 ${src}
64f438a143SAllan Jude    mkimg -s gpt \
6522cf6021SWarner Losh	  -p efi:=${img}.p1 \
66082c6764SWarner Losh	  -p freebsd-ufs:=${img}.p2 -o ${img}
6722cf6021SWarner Losh    rm -f ${src}/etc/fstab
68082c6764SWarner Losh}
69082c6764SWarner Losh
70082c6764SWarner Loshmk_nogeli_gpt_ufs_both() {
71082c6764SWarner Losh    src=$1
72082c6764SWarner Losh    img=$2
73082c6764SWarner Losh
74*729c458bSWarner Losh    ufs_fstab ${src}
750661cd79SRebecca Cran    make_esp_file ${img}.p1 ${espsize} ${src}/boot/loader.efi
76159b158aSWarner Losh    makefs -t ffs -B little -s 200m -o label=root ${img}.p3 ${src}
77082c6764SWarner Losh    # p1 is boot for uefi, p2 is boot for gpt, p3 is /
78082c6764SWarner Losh    mkimg -b ${src}/boot/pmbr -s gpt \
79d050cd6bSWarner Losh	  -p efi:=${img}.p1 \
80082c6764SWarner Losh	  -p freebsd-boot:=${src}/boot/gptboot \
81082c6764SWarner Losh	  -p freebsd-ufs:=${img}.p3 \
82082c6764SWarner Losh	  -o ${img}
8322cf6021SWarner Losh    rm -f ${src}/etc/fstab
84082c6764SWarner Losh}
85082c6764SWarner Losh
86082c6764SWarner Loshmk_nogeli_gpt_zfs_legacy() {
87082c6764SWarner Losh    src=$1
88082c6764SWarner Losh    img=$2
89082c6764SWarner Losh    mntpt=$3
90082c6764SWarner Losh    geli=$4
91082c6764SWarner Losh    scheme=$5
92082c6764SWarner Losh    fs=$6
93082c6764SWarner Losh    bios=$7
94082c6764SWarner Losh    pool=nogeli-gpt-zfs-legacy
95082c6764SWarner Losh
96082c6764SWarner Losh    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
97082c6764SWarner Losh    md=$(mdconfig -f ${img})
98082c6764SWarner Losh    gpart create -s gpt ${md}
99082c6764SWarner Losh    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
100082c6764SWarner Losh    gpart add -t freebsd-zfs -l root $md
101082c6764SWarner Losh    # install-boot will make this bootable
102082c6764SWarner Losh    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2
103082c6764SWarner Losh    zpool set bootfs=${pool} ${pool}
1042145d0ecSAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
105082c6764SWarner Losh    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
106082c6764SWarner Losh    cpsys ${src} ${mntpt}
107082c6764SWarner Losh    # need to make a couple of tweaks
108d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
1099e5787d2SMatt Macycryptodev_load=YES
110082c6764SWarner Loshzfs_load=YES
111082c6764SWarner LoshEOF
112827f1973SIan Lepore    cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
1139e5787d2SMatt Macy    cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko
114082c6764SWarner Losh    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
115082c6764SWarner Losh    # end tweaks
1162145d0ecSAllan Jude    zfs umount -f ${pool}/ROOT/default
1172145d0ecSAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
1182145d0ecSAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
119082c6764SWarner Losh    zpool set autoexpand=on ${pool}
120082c6764SWarner Losh    zpool export ${pool}
121082c6764SWarner Losh    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
122082c6764SWarner Losh    mdconfig -d -u ${md}
123082c6764SWarner Losh}
124082c6764SWarner Losh
125082c6764SWarner Loshmk_nogeli_gpt_zfs_uefi() {
126712b4ca9SAllan Jude    src=$1
127712b4ca9SAllan Jude    img=$2
128712b4ca9SAllan Jude    mntpt=$3
129712b4ca9SAllan Jude    geli=$4
130712b4ca9SAllan Jude    scheme=$5
131712b4ca9SAllan Jude    fs=$6
132712b4ca9SAllan Jude    bios=$7
133712b4ca9SAllan Jude    pool=nogeli-gpt-zfs-uefi
134712b4ca9SAllan Jude
135712b4ca9SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
136712b4ca9SAllan Jude    md=$(mdconfig -f ${img})
137712b4ca9SAllan Jude    gpart create -s gpt ${md}
138db8b5613SRebecca Cran    gpart add -t efi -s ${espsize}k -a 4k ${md}
139712b4ca9SAllan Jude    gpart add -t freebsd-zfs -l root $md
140712b4ca9SAllan Jude    # install-boot will make this bootable
141712b4ca9SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2
142712b4ca9SAllan Jude    zpool set bootfs=${pool} ${pool}
143712b4ca9SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
144712b4ca9SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
145712b4ca9SAllan Jude    cpsys ${src} ${mntpt}
146712b4ca9SAllan Jude    # need to make a couple of tweaks
147d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
1489e5787d2SMatt Macycryptodev_load=YES
149712b4ca9SAllan Judezfs_load=YES
150712b4ca9SAllan JudeEOF
151827f1973SIan Lepore    cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
1529e5787d2SMatt Macy    cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko
153712b4ca9SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
154712b4ca9SAllan Jude    # end tweaks
155712b4ca9SAllan Jude    zfs umount -f ${pool}/ROOT/default
156712b4ca9SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
157712b4ca9SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
158712b4ca9SAllan Jude    zpool set autoexpand=on ${pool}
159712b4ca9SAllan Jude    zpool export ${pool}
160712b4ca9SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
161712b4ca9SAllan Jude    mdconfig -d -u ${md}
162082c6764SWarner Losh}
163082c6764SWarner Losh
164082c6764SWarner Loshmk_nogeli_gpt_zfs_both() {
165712b4ca9SAllan Jude    src=$1
166712b4ca9SAllan Jude    img=$2
167712b4ca9SAllan Jude    mntpt=$3
168712b4ca9SAllan Jude    geli=$4
169712b4ca9SAllan Jude    scheme=$5
170712b4ca9SAllan Jude    fs=$6
171712b4ca9SAllan Jude    bios=$7
172712b4ca9SAllan Jude    pool=nogeli-gpt-zfs-both
173712b4ca9SAllan Jude
174712b4ca9SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
175712b4ca9SAllan Jude    md=$(mdconfig -f ${img})
176712b4ca9SAllan Jude    gpart create -s gpt ${md}
177db8b5613SRebecca Cran    gpart add -t efi -s ${espsize}k -a 4k ${md}
178712b4ca9SAllan Jude    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
179712b4ca9SAllan Jude    gpart add -t freebsd-zfs -l root $md
180712b4ca9SAllan Jude    # install-boot will make this bootable
181712b4ca9SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3
182712b4ca9SAllan Jude    zpool set bootfs=${pool} ${pool}
183712b4ca9SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
184712b4ca9SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
185712b4ca9SAllan Jude    cpsys ${src} ${mntpt}
186712b4ca9SAllan Jude    # need to make a couple of tweaks
187d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
1889e5787d2SMatt Macycryptodev_load=YES
189712b4ca9SAllan Judezfs_load=YES
190712b4ca9SAllan JudeEOF
191827f1973SIan Lepore    cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
1929e5787d2SMatt Macy    cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko
193712b4ca9SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
194712b4ca9SAllan Jude    # end tweaks
195712b4ca9SAllan Jude    zfs umount -f ${pool}/ROOT/default
196712b4ca9SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
197712b4ca9SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
198712b4ca9SAllan Jude    zpool set autoexpand=on ${pool}
199712b4ca9SAllan Jude    zpool export ${pool}
200712b4ca9SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
201712b4ca9SAllan Jude    mdconfig -d -u ${md}
202082c6764SWarner Losh}
203082c6764SWarner Losh
204082c6764SWarner Loshmk_nogeli_mbr_ufs_legacy() {
20522cf6021SWarner Losh    src=$1
20622cf6021SWarner Losh    img=$2
20722cf6021SWarner Losh
208*729c458bSWarner Losh    ufs_fstab ${src}
209159b158aSWarner Losh    makefs -t ffs -B little -s 200m -o label=root ${img}.s1a ${src}
21022cf6021SWarner Losh    mkimg -s bsd -b ${src}/boot/boot -p freebsd-ufs:=${img}.s1a -o ${img}.s1
211f438a143SAllan Jude    mkimg -a 1 -s mbr -b ${src}/boot/boot0sio -p freebsd:=${img}.s1 -o ${img}
21222cf6021SWarner Losh    rm -f ${src}/etc/fstab
213082c6764SWarner Losh}
214082c6764SWarner Losh
215082c6764SWarner Loshmk_nogeli_mbr_ufs_uefi() {
216f438a143SAllan Jude    src=$1
217f438a143SAllan Jude    img=$2
218f438a143SAllan Jude
219*729c458bSWarner Losh    ufs_fstab ${src}
2200661cd79SRebecca Cran    make_esp_file ${img}.s1 ${espsize} ${src}/boot/loader.efi
221159b158aSWarner Losh    makefs -t ffs -B little -s 200m -o label=root ${img}.s2a ${src}
222f438a143SAllan Jude    mkimg -s bsd -p freebsd-ufs:=${img}.s2a -o ${img}.s2
223f438a143SAllan Jude    mkimg -a 1 -s mbr -p efi:=${img}.s1 -p freebsd:=${img}.s2 -o ${img}
224f438a143SAllan Jude    rm -f ${src}/etc/fstab
225082c6764SWarner Losh}
226082c6764SWarner Losh
227082c6764SWarner Loshmk_nogeli_mbr_ufs_both() {
228f438a143SAllan Jude    src=$1
229f438a143SAllan Jude    img=$2
230f438a143SAllan Jude
231*729c458bSWarner Losh    ufs_fstab ${src}
2320661cd79SRebecca Cran    make_esp_file ${img}.s1 ${espsize} ${src}/boot/loader.efi
233159b158aSWarner Losh    makefs -t ffs -B little -s 200m -o label=root ${img}.s2a ${src}
234f438a143SAllan Jude    mkimg -s bsd -b ${src}/boot/boot -p freebsd-ufs:=${img}.s2a -o ${img}.s2
235f438a143SAllan Jude    mkimg -a 2 -s mbr -b ${src}/boot/mbr -p efi:=${img}.s1 -p freebsd:=${img}.s2 -o ${img}
236f438a143SAllan Jude    rm -f ${src}/etc/fstab
237082c6764SWarner Losh}
238082c6764SWarner Losh
239082c6764SWarner Loshmk_nogeli_mbr_zfs_legacy() {
240f438a143SAllan Jude    src=$1
241f438a143SAllan Jude    img=$2
242f438a143SAllan Jude    mntpt=$3
243f438a143SAllan Jude    geli=$4
244f438a143SAllan Jude    scheme=$5
245f438a143SAllan Jude    fs=$6
246f438a143SAllan Jude    bios=$7
247f438a143SAllan Jude    pool=nogeli-mbr-zfs-legacy
248f438a143SAllan Jude
249f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
250f438a143SAllan Jude    md=$(mdconfig -f ${img})
251f438a143SAllan Jude    gpart create -s mbr ${md}
252f438a143SAllan Jude    gpart add -t freebsd ${md}
253f438a143SAllan Jude    gpart set -a active -i 1 ${md}
254f438a143SAllan Jude    gpart create -s bsd ${md}s1
255f438a143SAllan Jude    gpart add -t freebsd-zfs ${md}s1
256f438a143SAllan Jude    # install-boot will make this bootable
257f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s1a
258f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
259f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
260f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
261f438a143SAllan Jude    cpsys ${src} ${mntpt}
262f438a143SAllan Jude    # need to make a couple of tweaks
263d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
2649e5787d2SMatt Macycryptodev_load=YES
265f438a143SAllan Judezfs_load=YES
266f438a143SAllan JudeEOF
267827f1973SIan Lepore    cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
2689e5787d2SMatt Macy    cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko
269f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
270f438a143SAllan Jude    # end tweaks
271f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
272f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
273f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
274f438a143SAllan Jude    zpool set autoexpand=on ${pool}
275f438a143SAllan Jude    zpool export ${pool}
276f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
277f438a143SAllan Jude    mdconfig -d -u ${md}
278082c6764SWarner Losh}
279082c6764SWarner Losh
280082c6764SWarner Loshmk_nogeli_mbr_zfs_uefi() {
281f438a143SAllan Jude    src=$1
282f438a143SAllan Jude    img=$2
283f438a143SAllan Jude    mntpt=$3
284f438a143SAllan Jude    geli=$4
285f438a143SAllan Jude    scheme=$5
286f438a143SAllan Jude    fs=$6
287f438a143SAllan Jude    bios=$7
288f438a143SAllan Jude    pool=nogeli-mbr-zfs-uefi
289f438a143SAllan Jude
290f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
291f438a143SAllan Jude    md=$(mdconfig -f ${img})
292f438a143SAllan Jude    gpart create -s mbr ${md}
293db8b5613SRebecca Cran    gpart add -t efi -s ${espsize}k ${md}
294f438a143SAllan Jude    gpart add -t freebsd ${md}
295f438a143SAllan Jude    gpart set -a active -i 2 ${md}
296f438a143SAllan Jude    gpart create -s bsd ${md}s2
297f438a143SAllan Jude    gpart add -t freebsd-zfs ${md}s2
298f438a143SAllan Jude    # install-boot will make this bootable
299f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s2a
300f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
301f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
302f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
303f438a143SAllan Jude    cpsys ${src} ${mntpt}
304f438a143SAllan Jude    # need to make a couple of tweaks
305d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
3069e5787d2SMatt Macycryptodev_load=YES
307f438a143SAllan Judezfs_load=YES
308f438a143SAllan JudeEOF
309827f1973SIan Lepore    cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
3109e5787d2SMatt Macy    cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko
311f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
312f438a143SAllan Jude    # end tweaks
313f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
314f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
315f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
316f438a143SAllan Jude    zpool set autoexpand=on ${pool}
317f438a143SAllan Jude    zpool export ${pool}
318f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
319f438a143SAllan Jude    mdconfig -d -u ${md}
320082c6764SWarner Losh}
321082c6764SWarner Losh
322082c6764SWarner Loshmk_nogeli_mbr_zfs_both() {
323f438a143SAllan Jude    src=$1
324f438a143SAllan Jude    img=$2
325f438a143SAllan Jude    mntpt=$3
326f438a143SAllan Jude    geli=$4
327f438a143SAllan Jude    scheme=$5
328f438a143SAllan Jude    fs=$6
329f438a143SAllan Jude    bios=$7
330f438a143SAllan Jude    pool=nogeli-mbr-zfs-both
331f438a143SAllan Jude
332f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
333f438a143SAllan Jude    md=$(mdconfig -f ${img})
334f438a143SAllan Jude    gpart create -s mbr ${md}
335db8b5613SRebecca Cran    gpart add -t efi -s  ${espsize}k ${md}
336f438a143SAllan Jude    gpart add -t freebsd ${md}
337f438a143SAllan Jude    gpart set -a active -i 2 ${md}
338f438a143SAllan Jude    gpart create -s bsd ${md}s2
339f438a143SAllan Jude    gpart add -t freebsd-zfs ${md}s2
340f438a143SAllan Jude    # install-boot will make this bootable
341f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s2a
342f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
343f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
344f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
345f438a143SAllan Jude    cpsys ${src} ${mntpt}
346f438a143SAllan Jude    # need to make a couple of tweaks
347d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
3489e5787d2SMatt Macycryptodev_load=YES
349f438a143SAllan Judezfs_load=YES
350f438a143SAllan JudeEOF
351827f1973SIan Lepore    cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
3529e5787d2SMatt Macy    cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko
353f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
354f438a143SAllan Jude    # end tweaks
355f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
356f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
357f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
358f438a143SAllan Jude    zpool set autoexpand=on ${pool}
359f438a143SAllan Jude    zpool export ${pool}
360f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
361f438a143SAllan Jude    mdconfig -d -u ${md}
362082c6764SWarner Losh}
363082c6764SWarner Losh
364082c6764SWarner Loshmk_geli_gpt_ufs_legacy() {
365f438a143SAllan Jude    src=$1
366f438a143SAllan Jude    img=$2
367f438a143SAllan Jude    mntpt=$3
368f438a143SAllan Jude    geli=$4
369f438a143SAllan Jude    scheme=$5
370f438a143SAllan Jude    fs=$6
371f438a143SAllan Jude    bios=$7
372f438a143SAllan Jude
373f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
374f438a143SAllan Jude    md=$(mdconfig -f ${img})
375f438a143SAllan Jude    gpart create -s gpt ${md}
376f438a143SAllan Jude    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
377f438a143SAllan Jude    gpart add -t freebsd-ufs -l root $md
378f438a143SAllan Jude    # install-boot will make this bootable
379595deaf7SIan Lepore    echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p2
380595deaf7SIan Lepore    echo ${passphrase} | geli attach -j - ${md}p2
38126a241a0SWarner Losh    newfs -L root /dev/${md}p2.eli
382f438a143SAllan Jude    mount /dev/${md}p2.eli ${mntpt}
383f438a143SAllan Jude    cpsys ${src} ${mntpt}
384f438a143SAllan Jude    # need to make a couple of tweaks
385f438a143SAllan Jude    cat > ${mntpt}/boot/loader.conf <<EOF
386f438a143SAllan Judegeom_eli_load=YES
387f438a143SAllan JudeEOF
388*729c458bSWarner Losh    ufs_fstab ${mntpt}
389f438a143SAllan Jude
390f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
391f438a143SAllan Jude    # end tweaks
392f438a143SAllan Jude    umount -f ${mntpt}
393f438a143SAllan Jude    geli detach ${md}p2
394f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
395f438a143SAllan Jude    mdconfig -d -u ${md}
396082c6764SWarner Losh}
397082c6764SWarner Losh
398082c6764SWarner Loshmk_geli_gpt_ufs_uefi() {
399f438a143SAllan Jude    src=$1
400f438a143SAllan Jude    img=$2
401f438a143SAllan Jude    mntpt=$3
402f438a143SAllan Jude    geli=$4
403f438a143SAllan Jude    scheme=$5
404f438a143SAllan Jude    fs=$6
405f438a143SAllan Jude    bios=$7
406f438a143SAllan Jude
407f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
408f438a143SAllan Jude    md=$(mdconfig -f ${img})
409f438a143SAllan Jude    gpart create -s gpt ${md}
410db8b5613SRebecca Cran    gpart add -t efi -s ${espsize}k -a 4k ${md}
411f438a143SAllan Jude    gpart add -t freebsd-ufs -l root $md
412f438a143SAllan Jude    # install-boot will make this bootable
413595deaf7SIan Lepore    echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p2
414595deaf7SIan Lepore    echo ${passphrase} | geli attach -j - ${md}p2
41526a241a0SWarner Losh    newfs -L root /dev/${md}p2.eli
416f438a143SAllan Jude    mount /dev/${md}p2.eli ${mntpt}
417f438a143SAllan Jude    cpsys ${src} ${mntpt}
418f438a143SAllan Jude    # need to make a couple of tweaks
419f438a143SAllan Jude    cat > ${mntpt}/boot/loader.conf <<EOF
420f438a143SAllan Judegeom_eli_load=YES
421f438a143SAllan JudeEOF
422*729c458bSWarner Losh    ufs_fstab ${mntpt}
423f438a143SAllan Jude
424f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
425f438a143SAllan Jude    # end tweaks
426f438a143SAllan Jude    umount -f ${mntpt}
427f438a143SAllan Jude    geli detach ${md}p2
428f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
429f438a143SAllan Jude    mdconfig -d -u ${md}
430082c6764SWarner Losh}
431082c6764SWarner Losh
432082c6764SWarner Loshmk_geli_gpt_ufs_both() {
433f438a143SAllan Jude    src=$1
434f438a143SAllan Jude    img=$2
435f438a143SAllan Jude    mntpt=$3
436f438a143SAllan Jude    geli=$4
437f438a143SAllan Jude    scheme=$5
438f438a143SAllan Jude    fs=$6
439f438a143SAllan Jude    bios=$7
440f438a143SAllan Jude
441f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
442f438a143SAllan Jude    md=$(mdconfig -f ${img})
443f438a143SAllan Jude    gpart create -s gpt ${md}
444db8b5613SRebecca Cran    gpart add -t efi -s ${espsize}k -a 4k ${md}
445f438a143SAllan Jude    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
446f438a143SAllan Jude    gpart add -t freebsd-ufs -l root $md
447f438a143SAllan Jude    # install-boot will make this bootable
448595deaf7SIan Lepore    echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p3
449595deaf7SIan Lepore    echo ${passphrase} | geli attach -j - ${md}p3
45026a241a0SWarner Losh    newfs -L root /dev/${md}p3.eli
451f438a143SAllan Jude    mount /dev/${md}p3.eli ${mntpt}
452f438a143SAllan Jude    cpsys ${src} ${mntpt}
453f438a143SAllan Jude    # need to make a couple of tweaks
454f438a143SAllan Jude    cat > ${mntpt}/boot/loader.conf <<EOF
455f438a143SAllan Judegeom_eli_load=YES
456f438a143SAllan JudeEOF
457*729c458bSWarner Losh    ufs_fstab ${mntpt}
458f438a143SAllan Jude
459f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
460f438a143SAllan Jude    # end tweaks
461f438a143SAllan Jude    umount -f ${mntpt}
462f438a143SAllan Jude    geli detach ${md}p3
463f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
464f438a143SAllan Jude    mdconfig -d -u ${md}
465082c6764SWarner Losh}
466082c6764SWarner Losh
467082c6764SWarner Loshmk_geli_gpt_zfs_legacy() {
468f438a143SAllan Jude    src=$1
469f438a143SAllan Jude    img=$2
470f438a143SAllan Jude    mntpt=$3
471f438a143SAllan Jude    geli=$4
472f438a143SAllan Jude    scheme=$5
473f438a143SAllan Jude    fs=$6
474f438a143SAllan Jude    bios=$7
475f438a143SAllan Jude    pool=geli-gpt-zfs-legacy
476f438a143SAllan Jude
4770c0ffba5SIan Lepore    # Note that in this flavor we create an empty p2 ufs partition, and put
4780c0ffba5SIan Lepore    # the bootable zfs stuff on p3, just to test the ability of the zfs probe
4790c0ffba5SIan Lepore    # probe routines to find a pool on a partition other than the first one.
4800c0ffba5SIan Lepore
4810c0ffba5SIan Lepore    dd if=/dev/zero of=${img} count=1 seek=$(( 300 * 1024 * 1024 / 512 ))
482f438a143SAllan Jude    md=$(mdconfig -f ${img})
483f438a143SAllan Jude    gpart create -s gpt ${md}
484f438a143SAllan Jude    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
4850c0ffba5SIan Lepore    gpart add -t freebsd-ufs -s 100m ${md}
486f438a143SAllan Jude    gpart add -t freebsd-zfs -l root $md
487f438a143SAllan Jude    # install-boot will make this bootable
4880c0ffba5SIan Lepore    echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p3
4890c0ffba5SIan Lepore    echo ${passphrase} | geli attach -j - ${md}p3
4900c0ffba5SIan Lepore    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3.eli
491f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
492f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
493f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
494f438a143SAllan Jude    cpsys ${src} ${mntpt}
495f438a143SAllan Jude    # need to make a couple of tweaks
496d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
4979e5787d2SMatt Macycryptodev_load=YES
498f438a143SAllan Judezfs_load=YES
499f438a143SAllan Judegeom_eli_load=YES
500f438a143SAllan JudeEOF
501827f1973SIan Lepore    cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
5029e5787d2SMatt Macy    cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko
503f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
504f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
505f438a143SAllan Jude    # end tweaks
506f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
507f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
508f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
509f438a143SAllan Jude    zpool set autoexpand=on ${pool}
510f438a143SAllan Jude    zpool export ${pool}
5110c0ffba5SIan Lepore    geli detach ${md}p3
512f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
513f438a143SAllan Jude    mdconfig -d -u ${md}
514082c6764SWarner Losh}
515082c6764SWarner Losh
516082c6764SWarner Loshmk_geli_gpt_zfs_uefi() {
517f438a143SAllan Jude    src=$1
518f438a143SAllan Jude    img=$2
519f438a143SAllan Jude    mntpt=$3
520f438a143SAllan Jude    geli=$4
521f438a143SAllan Jude    scheme=$5
522f438a143SAllan Jude    fs=$6
523f438a143SAllan Jude    bios=$7
524f438a143SAllan Jude    pool=geli-gpt-zfs-uefi
525f438a143SAllan Jude
5260c0ffba5SIan Lepore    # Note that in this flavor we create an empty p2 ufs partition, and put
5270c0ffba5SIan Lepore    # the bootable zfs stuff on p3, just to test the ability of the zfs probe
5280c0ffba5SIan Lepore    # probe routines to find a pool on a partition other than the first one.
5290c0ffba5SIan Lepore
5300c0ffba5SIan Lepore    dd if=/dev/zero of=${img} count=1 seek=$(( 300 * 1024 * 1024 / 512 ))
531f438a143SAllan Jude    md=$(mdconfig -f ${img})
532f438a143SAllan Jude    gpart create -s gpt ${md}
533db8b5613SRebecca Cran    gpart add -t efi -s ${espsize}k -a 4k ${md}
5340c0ffba5SIan Lepore    gpart add -t freebsd-ufs -s 100m ${md}
535f438a143SAllan Jude    gpart add -t freebsd-zfs -l root $md
536f438a143SAllan Jude    # install-boot will make this bootable
5370c0ffba5SIan Lepore    echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p3
5380c0ffba5SIan Lepore    echo ${passphrase} | geli attach -j - ${md}p3
5390c0ffba5SIan Lepore    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3.eli
540f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
541f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
542f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
543f438a143SAllan Jude    cpsys ${src} ${mntpt}
544f438a143SAllan Jude    # need to make a couple of tweaks
545d050cd6bSWarner Losh    cat >> ${mntpt}/boot/loader.conf <<EOF
5469e5787d2SMatt Macycryptodev_load=YES
547f438a143SAllan Judezfs_load=YES
548f438a143SAllan Judegeom_eli_load=YES
549f438a143SAllan JudeEOF
550827f1973SIan Lepore    cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
5519e5787d2SMatt Macy    cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko
552f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
553f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
554f438a143SAllan Jude    # end tweaks
555f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
556f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
557f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
558f438a143SAllan Jude    zpool set autoexpand=on ${pool}
559f438a143SAllan Jude    zpool export ${pool}
5600c0ffba5SIan Lepore    geli detach ${md}p3
561f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
562f438a143SAllan Jude    mdconfig -d -u ${md}
563082c6764SWarner Losh}
564082c6764SWarner Losh
565082c6764SWarner Loshmk_geli_gpt_zfs_both() {
566f438a143SAllan Jude    src=$1
567f438a143SAllan Jude    img=$2
568f438a143SAllan Jude    mntpt=$3
569f438a143SAllan Jude    geli=$4
570f438a143SAllan Jude    scheme=$5
571f438a143SAllan Jude    fs=$6
572f438a143SAllan Jude    bios=$7
573f438a143SAllan Jude    pool=geli-gpt-zfs-both
574f438a143SAllan Jude
575f438a143SAllan Jude    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
576f438a143SAllan Jude    md=$(mdconfig -f ${img})
577f438a143SAllan Jude    gpart create -s gpt ${md}
578db8b5613SRebecca Cran    gpart add -t efi -s ${espsize}k -a 4k ${md}
579f438a143SAllan Jude    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
580f438a143SAllan Jude    gpart add -t freebsd-zfs -l root $md
581f438a143SAllan Jude    # install-boot will make this bootable
582595deaf7SIan Lepore    echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p3
583595deaf7SIan Lepore    echo ${passphrase} | geli attach -j - ${md}p3
584f438a143SAllan Jude    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3.eli
585f438a143SAllan Jude    zpool set bootfs=${pool} ${pool}
586f438a143SAllan Jude    zfs create -po mountpoint=/ ${pool}/ROOT/default
587f438a143SAllan Jude    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
588f438a143SAllan Jude    cpsys ${src} ${mntpt}
589f438a143SAllan Jude    # need to make a couple of tweaks
590f438a143SAllan Jude    cat > ${mntpt}/boot/loader.conf <<EOF
5919e5787d2SMatt Macycryptodev_load=YES
592f438a143SAllan Judezfs_load=YES
593f438a143SAllan Judegeom_eli_load=YES
594f438a143SAllan JudeEOF
595827f1973SIan Lepore    cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko
5969e5787d2SMatt Macy    cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko
597f438a143SAllan Jude    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
598f438a143SAllan Jude    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
599f438a143SAllan Jude    # end tweaks
600f438a143SAllan Jude    zfs umount -f ${pool}/ROOT/default
601f438a143SAllan Jude    zfs set mountpoint=none ${pool}/ROOT/default
602f438a143SAllan Jude    zpool set bootfs=${pool}/ROOT/default ${pool}
603f438a143SAllan Jude    zpool set autoexpand=on ${pool}
604f438a143SAllan Jude    zpool export ${pool}
605f438a143SAllan Jude    geli detach ${md}p3
606f438a143SAllan Jude    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
607f438a143SAllan Jude    mdconfig -d -u ${md}
608082c6764SWarner Losh}
609082c6764SWarner Losh
610f438a143SAllan Jude# GELI+MBR is not a valid configuration
611082c6764SWarner Loshmk_geli_mbr_ufs_legacy() {
612082c6764SWarner Losh}
613082c6764SWarner Losh
614082c6764SWarner Loshmk_geli_mbr_ufs_uefi() {
615082c6764SWarner Losh}
616082c6764SWarner Losh
617082c6764SWarner Loshmk_geli_mbr_ufs_both() {
618082c6764SWarner Losh}
619082c6764SWarner Losh
620082c6764SWarner Loshmk_geli_mbr_zfs_legacy() {
621082c6764SWarner Losh}
622082c6764SWarner Losh
623082c6764SWarner Loshmk_geli_mbr_zfs_uefi() {
624082c6764SWarner Losh}
625082c6764SWarner Losh
626082c6764SWarner Loshmk_geli_mbr_zfs_both() {
627082c6764SWarner Losh}
628082c6764SWarner Losh
629082c6764SWarner Losh# iso
630082c6764SWarner Losh# pxeldr
631082c6764SWarner Losh# u-boot
63222cf6021SWarner Losh# powerpc
63322cf6021SWarner Losh
6347b4b55e5SIan Leporeqser="-serial telnet::4444,server -nographic"
63522cf6021SWarner Losh
63622cf6021SWarner Losh# https://wiki.freebsd.org/QemuRecipes
63722cf6021SWarner Losh# aarch64
63822cf6021SWarner Loshqemu_aarch64_uefi()
63922cf6021SWarner Losh{
64022cf6021SWarner Losh    img=$1
64122cf6021SWarner Losh    sh=$2
64222cf6021SWarner Losh
64322cf6021SWarner Losh    echo "qemu-system-aarch64 -m 4096M -cpu cortex-a57 -M virt  \
64422cf6021SWarner Losh        -bios QEMU_EFI.fd ${qser} \
64522cf6021SWarner Losh        -drive if=none,file=${img},id=hd0 \
64622cf6021SWarner Losh        -device virtio-blk-device,drive=hd0" > $sh
647dfe34ceaSIan Lepore    chmod 755 $sh
64822cf6021SWarner Losh# https://wiki.freebsd.org/arm64/QEMU also has
64922cf6021SWarner Losh#       -device virtio-net-device,netdev=net0
65022cf6021SWarner Losh#       -netdev user,id=net0
65122cf6021SWarner Losh}
65222cf6021SWarner Losh
65322cf6021SWarner Losh# Amd64 qemu
65422cf6021SWarner Loshqemu_amd64_legacy()
65522cf6021SWarner Losh{
65622cf6021SWarner Losh    img=$1
65722cf6021SWarner Losh    sh=$2
65822cf6021SWarner Losh
65948cb46aaSWarner Losh    echo "qemu-system-x86_64 -m 256m --drive file=${img},format=raw ${qser}" > $sh
660dfe34ceaSIan Lepore    chmod 755 $sh
66122cf6021SWarner Losh}
66222cf6021SWarner Losh
66322cf6021SWarner Loshqemu_amd64_uefi()
66422cf6021SWarner Losh{
66522cf6021SWarner Losh    img=$1
66622cf6021SWarner Losh    sh=$2
66722cf6021SWarner Losh
66848cb46aaSWarner Losh    echo "qemu-system-x86_64 -m 256m -bios ~/bios/OVMF-X64.fd --drive file=${img},format=raw ${qser}" > $sh
669dfe34ceaSIan Lepore    chmod 755 $sh
67022cf6021SWarner Losh}
67122cf6021SWarner Losh
67222cf6021SWarner Loshqemu_amd64_both()
67322cf6021SWarner Losh{
67422cf6021SWarner Losh    img=$1
67522cf6021SWarner Losh    sh=$2
67622cf6021SWarner Losh
67748cb46aaSWarner Losh    echo "qemu-system-x86_64 -m 256m --drive file=${img},format=raw ${qser}" > $sh
67848cb46aaSWarner Losh    echo "qemu-system-x86_64 -m 256m -bios ~/bios/OVMF-X64.fd --drive file=${img},format=raw ${qser}" >> $sh
679dfe34ceaSIan Lepore    chmod 755 $sh
68022cf6021SWarner Losh}
68122cf6021SWarner Losh
68222cf6021SWarner Losh# arm
68322cf6021SWarner Losh# nothing listed?
68422cf6021SWarner Losh
68522cf6021SWarner Losh# i386
68622cf6021SWarner Loshqemu_i386_legacy()
68722cf6021SWarner Losh{
68822cf6021SWarner Losh    img=$1
68922cf6021SWarner Losh    sh=$2
69022cf6021SWarner Losh
69122cf6021SWarner Losh    echo "qemu-system-i386 --drive file=${img},format=raw ${qser}" > $sh
692dfe34ceaSIan Lepore    chmod 755 $sh
69322cf6021SWarner Losh}
69422cf6021SWarner Losh
69522cf6021SWarner Losh# Not yet supported
69622cf6021SWarner Loshqemu_i386_uefi()
69722cf6021SWarner Losh{
69822cf6021SWarner Losh    img=$1
69922cf6021SWarner Losh    sh=$2
70022cf6021SWarner Losh
70122cf6021SWarner Losh    echo "qemu-system-i386 -bios ~/bios/OVMF-X32.fd --drive file=${img},format=raw ${qser}" > $sh
702dfe34ceaSIan Lepore    chmod 755 $sh
70322cf6021SWarner Losh}
70422cf6021SWarner Losh
70522cf6021SWarner Losh# Needs UEFI to be supported
70622cf6021SWarner Loshqemu_i386_both()
70722cf6021SWarner Losh{
70822cf6021SWarner Losh    img=$1
70922cf6021SWarner Losh    sh=$2
71022cf6021SWarner Losh
71122cf6021SWarner Losh    echo "qemu-system-i386 --drive file=${img},format=raw ${qser}" > $sh
712712b4ca9SAllan Jude    echo "qemu-system-i386 -bios ~/bios/OVMF-X32.fd --drive file=${img},format=raw ${qser}" >> $sh
713dfe34ceaSIan Lepore    chmod 755 $sh
71422cf6021SWarner Losh}
71522cf6021SWarner Losh
716432b4921SIan Leporemake_one_image()
717432b4921SIan Lepore{
718432b4921SIan Lepore    local arch=${1?}
719432b4921SIan Lepore    local geli=${2?}
720432b4921SIan Lepore    local scheme=${3?}
721432b4921SIan Lepore    local fs=${4?}
722432b4921SIan Lepore    local bios=${5?}
723432b4921SIan Lepore
724432b4921SIan Lepore    # Create sparse file and mount newly created filesystem(s) on it
725432b4921SIan Lepore    img=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.img
726432b4921SIan Lepore    sh=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.sh
727432b4921SIan Lepore    echo "vvvvvvvvvvvvvv   Creating $img  vvvvvvvvvvvvvvv"
728432b4921SIan Lepore    rm -f ${img}*
729432b4921SIan Lepore    eval mk_${geli}_${scheme}_${fs}_${bios} ${DESTDIR} ${img} ${MNTPT} ${geli} ${scheme} ${fs} ${bios}
730432b4921SIan Lepore    eval qemu_${arch}_${bios} ${img} ${sh}
731432b4921SIan Lepore    [ -n "${SUDO_USER}" ] && chown ${SUDO_USER} ${img}*
732432b4921SIan Lepore    echo "^^^^^^^^^^^^^^   Created $img   ^^^^^^^^^^^^^^^"
733432b4921SIan Lepore}
734432b4921SIan Lepore
73522cf6021SWarner Losh# Powerpc -- doesn't work but maybe it would enough for testing -- needs details
73622cf6021SWarner Losh# powerpc64
73722cf6021SWarner Losh# qemu-system-ppc64 -drive file=/path/to/disk.img,format=raw
73822cf6021SWarner Losh
739082c6764SWarner Losh# Misc variables
740082c6764SWarner LoshSRCTOP=$(make -v SRCTOP)
741082c6764SWarner Loshcd ${SRCTOP}/stand
742082c6764SWarner LoshOBJDIR=$(make -v .OBJDIR)
743082c6764SWarner LoshIMGDIR=${OBJDIR}/boot-images
744082c6764SWarner Loshmkdir -p ${IMGDIR}
745082c6764SWarner LoshMNTPT=$(mktemp -d /tmp/stand-test.XXXXXX)
746082c6764SWarner Losh
747082c6764SWarner Losh# Setup the installed tree...
748082c6764SWarner LoshDESTDIR=${OBJDIR}/boot-tree
749082c6764SWarner Loshrm -rf ${DESTDIR}
750082c6764SWarner Loshmkdir -p ${DESTDIR}/boot/defaults
751082c6764SWarner Loshmkdir -p ${DESTDIR}/boot/kernel
752082c6764SWarner Loshcp /boot/kernel/kernel ${DESTDIR}/boot/kernel
753328884aeSWarner Loshecho -h -D -S115200 > ${DESTDIR}/boot.config
754d050cd6bSWarner Loshcat > ${DESTDIR}/boot/loader.conf <<EOF
755d050cd6bSWarner Loshcomconsole_speed=115200
756d050cd6bSWarner LoshEOF
757082c6764SWarner Losh# XXX
758082c6764SWarner Loshcp /boot/device.hints ${DESTDIR}/boot/device.hints
759082c6764SWarner Losh# Assume we're already built
760f576caacSIan Leporemake install DESTDIR=${DESTDIR} MK_MAN=no MK_INSTALL_AS_USER=yes WITHOUT_DEBUG_FILES=yes
761f576caacSIan Leporeif [ $? -ne 0 ]; then
762f576caacSIan Lepore        echo "make install failed"
763f576caacSIan Lepore        exit 1
764f576caacSIan Leporefi
76522cf6021SWarner Losh# Copy init, /bin/sh, minimal libraries and testing /etc/rc
76622cf6021SWarner Loshmkdir -p ${DESTDIR}/sbin ${DESTDIR}/bin \
76722cf6021SWarner Losh      ${DESTDIR}/lib ${DESTDIR}/libexec \
76822cf6021SWarner Losh      ${DESTDIR}/etc ${DESTDIR}/dev
769d050cd6bSWarner 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
770082c6764SWarner Losh    cp $f ${DESTDIR}/$f
771082c6764SWarner Loshdone
77222cf6021SWarner Loshcat > ${DESTDIR}/etc/rc <<EOF
77322cf6021SWarner Losh#!/bin/sh
77422cf6021SWarner Losh
775d050cd6bSWarner Loshsysctl machdep.bootmethod
77622cf6021SWarner Loshecho "RC COMMAND RUNNING -- SUCCESS!!!!!"
77722cf6021SWarner Loshhalt -p
77822cf6021SWarner LoshEOF
779082c6764SWarner Losh
780432b4921SIan Lepore# If we were given exactly 5 args, go make that one image.
781432b4921SIan Lepore
782432b4921SIan Leporeif [ $# -eq 5 ]; then
783432b4921SIan Lepore    make_one_image $*
784432b4921SIan Lepore    exit
785432b4921SIan Leporefi
786432b4921SIan Lepore
787082c6764SWarner Losh# OK. Let the games begin
788082c6764SWarner Losh
78922cf6021SWarner Loshfor arch in amd64; do
790082c6764SWarner Losh    for geli in nogeli geli; do
791082c6764SWarner Losh	for scheme in gpt mbr; do
792082c6764SWarner Losh	    for fs in ufs zfs; do
793082c6764SWarner Losh		for bios in legacy uefi both; do
794432b4921SIan Lepore		    make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
795082c6764SWarner Losh		done
796082c6764SWarner Losh	    done
797082c6764SWarner Losh	done
798082c6764SWarner Losh    done
79922cf6021SWarner Loshdone
800082c6764SWarner Losh
801082c6764SWarner Loshrmdir ${MNTPT}
80222cf6021SWarner Losh
80322cf6021SWarner Loshexit 0
80422cf6021SWarner Losh
80522cf6021SWarner Losh# Notes for the future
80622cf6021SWarner Losh
80722cf6021SWarner Loshfor arch in i386; do
80822cf6021SWarner Losh    for geli in nogeli geli; do
80922cf6021SWarner Losh	for scheme in gpt mbr; do
81022cf6021SWarner Losh	    for fs in ufs zfs; do
81122cf6021SWarner Losh		for bios in legacy; do
812432b4921SIan Lepore		    make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
81322cf6021SWarner Losh		done
81422cf6021SWarner Losh	    done
81522cf6021SWarner Losh	done
81622cf6021SWarner Losh    done
81722cf6021SWarner Loshdone
81822cf6021SWarner Losh
81922cf6021SWarner Loshfor arch in arm aarch64; do
82022cf6021SWarner Losh    for scheme in gpt mbr; do
82122cf6021SWarner Losh	fs=ufs
822aff95057SWarner Losh	bios=efi
823432b4921SIan Lepore	make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
82422cf6021SWarner Losh    done
82522cf6021SWarner Loshdone
82622cf6021SWarner Losh
82722cf6021SWarner Loshfor arch in powerpc powerpc64; do
82822cf6021SWarner Losh    for scheme in ppc-wtf; do
82922cf6021SWarner Losh	fs=ufs
83022cf6021SWarner Losh	for bios in ofw uboot chrp; do
831432b4921SIan Lepore	    make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
83222cf6021SWarner Losh	done
83322cf6021SWarner Losh    done
83422cf6021SWarner Loshdone
83522cf6021SWarner Losh
836aff95057SWarner Loshfor arch in riscv; do
837aff95057SWarner Losh    geli=nogeli
838aff95057SWarner Losh    fs=ufs
839aff95057SWarner Losh    scheme=gpt
840aff95057SWarner Losh    bios=efi
841432b4921SIan Lepore    make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios}
84222cf6021SWarner Loshdone
843