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 104c4e2b3dSWarner Loshdev=vtbd0 11d050cd6bSWarner Losh 12082c6764SWarner Losh# 13082c6764SWarner Losh# Builds all the bat-shit crazy combinations we support booting from, 14082c6764SWarner Losh# at least for amd64. It assume you have a ~sane kernel in /boot/kernel 15082c6764SWarner Losh# and copies that into the ~150MB root images we create (we create the du 16082c6764SWarner Losh# size of the kernel + 20MB 17082c6764SWarner Losh# 18082c6764SWarner Losh# Sad panda sez: this runs as root, but could be userland if someone 19082c6764SWarner Losh# creates userland geli and zfs tools. 20082c6764SWarner Losh# 21db8b5613SRebecca Cran# This assumes an external program install-boot.sh which will install 22082c6764SWarner Losh# the appropriate boot files in the appropriate locations. 23082c6764SWarner Losh# 244c4e2b3dSWarner Losh# These images assume ${dev} will be the root image. We should likely 25082c6764SWarner Losh# use labels, but we don't. 26082c6764SWarner Losh# 27db8b5613SRebecca Cran# Assumes you've already rebuilt... maybe bad? Also maybe bad: the env 28082c6764SWarner Losh# vars should likely be conditionally set to allow better automation. 29082c6764SWarner Losh# 30082c6764SWarner Losh 310661cd79SRebecca Cran. $(dirname $0)/install-boot.sh 320661cd79SRebecca Cran 33082c6764SWarner Loshcpsys() { 34082c6764SWarner Losh src=$1 35082c6764SWarner Losh dst=$2 36082c6764SWarner Losh 37082c6764SWarner Losh # Copy kernel + boot loader 38082c6764SWarner Losh (cd $src ; tar cf - .) | (cd $dst; tar xf -) 39082c6764SWarner Losh} 40082c6764SWarner Losh 41082c6764SWarner Loshmk_nogeli_gpt_ufs_legacy() { 42082c6764SWarner Losh src=$1 43082c6764SWarner Losh img=$2 44082c6764SWarner Losh 4522cf6021SWarner Losh cat > ${src}/etc/fstab <<EOF 464c4e2b3dSWarner Losh/dev/${dev}p2 / ufs rw 1 1 4722cf6021SWarner LoshEOF 48082c6764SWarner Losh makefs -t ffs -B little -s 200m ${img}.p2 ${src} 49082c6764SWarner Losh mkimg -s gpt -b ${src}/boot/pmbr \ 50082c6764SWarner Losh -p freebsd-boot:=${src}/boot/gptboot \ 51082c6764SWarner Losh -p freebsd-ufs:=${img}.p2 -o ${img} 5222cf6021SWarner Losh rm -f ${src}/etc/fstab 53082c6764SWarner Losh} 54082c6764SWarner Losh 55082c6764SWarner Loshmk_nogeli_gpt_ufs_uefi() { 56082c6764SWarner Losh src=$1 57082c6764SWarner Losh img=$2 58082c6764SWarner Losh 5922cf6021SWarner Losh cat > ${src}/etc/fstab <<EOF 604c4e2b3dSWarner Losh/dev/${dev}p2 / ufs rw 1 1 6122cf6021SWarner LoshEOF 620661cd79SRebecca Cran make_esp_file ${img}.p1 ${espsize} ${src}/boot/loader.efi 63082c6764SWarner Losh makefs -t ffs -B little -s 200m ${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 7422cf6021SWarner Losh cat > ${src}/etc/fstab <<EOF 754c4e2b3dSWarner Losh/dev/${dev}p3 / ufs rw 1 1 7622cf6021SWarner LoshEOF 770661cd79SRebecca Cran make_esp_file ${img}.p1 ${espsize} ${src}/boot/loader.efi 78082c6764SWarner Losh makefs -t ffs -B little -s 200m ${img}.p3 ${src} 79082c6764SWarner Losh # p1 is boot for uefi, p2 is boot for gpt, p3 is / 80082c6764SWarner Losh mkimg -b ${src}/boot/pmbr -s gpt \ 81d050cd6bSWarner Losh -p efi:=${img}.p1 \ 82082c6764SWarner Losh -p freebsd-boot:=${src}/boot/gptboot \ 83082c6764SWarner Losh -p freebsd-ufs:=${img}.p3 \ 84082c6764SWarner Losh -o ${img} 8522cf6021SWarner Losh rm -f ${src}/etc/fstab 86082c6764SWarner Losh} 87082c6764SWarner Losh 88082c6764SWarner Loshmk_nogeli_gpt_zfs_legacy() { 89082c6764SWarner Losh src=$1 90082c6764SWarner Losh img=$2 91082c6764SWarner Losh mntpt=$3 92082c6764SWarner Losh geli=$4 93082c6764SWarner Losh scheme=$5 94082c6764SWarner Losh fs=$6 95082c6764SWarner Losh bios=$7 96082c6764SWarner Losh pool=nogeli-gpt-zfs-legacy 97082c6764SWarner Losh 98082c6764SWarner Losh dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512)) 99082c6764SWarner Losh md=$(mdconfig -f ${img}) 100082c6764SWarner Losh gpart create -s gpt ${md} 101082c6764SWarner Losh gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k 102082c6764SWarner Losh gpart add -t freebsd-zfs -l root $md 103082c6764SWarner Losh # install-boot will make this bootable 104082c6764SWarner Losh zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2 105082c6764SWarner Losh zpool set bootfs=${pool} ${pool} 1062145d0ecSAllan Jude zfs create -po mountpoint=/ ${pool}/ROOT/default 107082c6764SWarner Losh # NB: The online guides go nuts customizing /var and other mountpoints here, no need 108082c6764SWarner Losh cpsys ${src} ${mntpt} 109082c6764SWarner Losh # need to make a couple of tweaks 110d050cd6bSWarner Losh cat >> ${mntpt}/boot/loader.conf <<EOF 1119e5787d2SMatt Macycryptodev_load=YES 112082c6764SWarner Loshzfs_load=YES 113082c6764SWarner LoshEOF 114827f1973SIan Lepore cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko 1159e5787d2SMatt Macy cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko 116082c6764SWarner Losh cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko 117082c6764SWarner Losh # end tweaks 1182145d0ecSAllan Jude zfs umount -f ${pool}/ROOT/default 1192145d0ecSAllan Jude zfs set mountpoint=none ${pool}/ROOT/default 1202145d0ecSAllan Jude zpool set bootfs=${pool}/ROOT/default ${pool} 121082c6764SWarner Losh zpool set autoexpand=on ${pool} 122082c6764SWarner Losh zpool export ${pool} 123082c6764SWarner Losh ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md} 124082c6764SWarner Losh mdconfig -d -u ${md} 125082c6764SWarner Losh} 126082c6764SWarner Losh 127082c6764SWarner Loshmk_nogeli_gpt_zfs_uefi() { 128712b4ca9SAllan Jude src=$1 129712b4ca9SAllan Jude img=$2 130712b4ca9SAllan Jude mntpt=$3 131712b4ca9SAllan Jude geli=$4 132712b4ca9SAllan Jude scheme=$5 133712b4ca9SAllan Jude fs=$6 134712b4ca9SAllan Jude bios=$7 135712b4ca9SAllan Jude pool=nogeli-gpt-zfs-uefi 136712b4ca9SAllan Jude 137712b4ca9SAllan Jude dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512)) 138712b4ca9SAllan Jude md=$(mdconfig -f ${img}) 139712b4ca9SAllan Jude gpart create -s gpt ${md} 140db8b5613SRebecca Cran gpart add -t efi -s ${espsize}k -a 4k ${md} 141712b4ca9SAllan Jude gpart add -t freebsd-zfs -l root $md 142712b4ca9SAllan Jude # install-boot will make this bootable 143712b4ca9SAllan Jude zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2 144712b4ca9SAllan Jude zpool set bootfs=${pool} ${pool} 145712b4ca9SAllan Jude zfs create -po mountpoint=/ ${pool}/ROOT/default 146712b4ca9SAllan Jude # NB: The online guides go nuts customizing /var and other mountpoints here, no need 147712b4ca9SAllan Jude cpsys ${src} ${mntpt} 148712b4ca9SAllan Jude # need to make a couple of tweaks 149d050cd6bSWarner Losh cat >> ${mntpt}/boot/loader.conf <<EOF 1509e5787d2SMatt Macycryptodev_load=YES 151712b4ca9SAllan Judezfs_load=YES 152712b4ca9SAllan JudeEOF 153827f1973SIan Lepore cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko 1549e5787d2SMatt Macy cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko 155712b4ca9SAllan Jude cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko 156712b4ca9SAllan Jude # end tweaks 157712b4ca9SAllan Jude zfs umount -f ${pool}/ROOT/default 158712b4ca9SAllan Jude zfs set mountpoint=none ${pool}/ROOT/default 159712b4ca9SAllan Jude zpool set bootfs=${pool}/ROOT/default ${pool} 160712b4ca9SAllan Jude zpool set autoexpand=on ${pool} 161712b4ca9SAllan Jude zpool export ${pool} 162712b4ca9SAllan Jude ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md} 163712b4ca9SAllan Jude mdconfig -d -u ${md} 164082c6764SWarner Losh} 165082c6764SWarner Losh 166082c6764SWarner Loshmk_nogeli_gpt_zfs_both() { 167712b4ca9SAllan Jude src=$1 168712b4ca9SAllan Jude img=$2 169712b4ca9SAllan Jude mntpt=$3 170712b4ca9SAllan Jude geli=$4 171712b4ca9SAllan Jude scheme=$5 172712b4ca9SAllan Jude fs=$6 173712b4ca9SAllan Jude bios=$7 174712b4ca9SAllan Jude pool=nogeli-gpt-zfs-both 175712b4ca9SAllan Jude 176712b4ca9SAllan Jude dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512)) 177712b4ca9SAllan Jude md=$(mdconfig -f ${img}) 178712b4ca9SAllan Jude gpart create -s gpt ${md} 179db8b5613SRebecca Cran gpart add -t efi -s ${espsize}k -a 4k ${md} 180712b4ca9SAllan Jude gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k 181712b4ca9SAllan Jude gpart add -t freebsd-zfs -l root $md 182712b4ca9SAllan Jude # install-boot will make this bootable 183712b4ca9SAllan Jude zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3 184712b4ca9SAllan Jude zpool set bootfs=${pool} ${pool} 185712b4ca9SAllan Jude zfs create -po mountpoint=/ ${pool}/ROOT/default 186712b4ca9SAllan Jude # NB: The online guides go nuts customizing /var and other mountpoints here, no need 187712b4ca9SAllan Jude cpsys ${src} ${mntpt} 188712b4ca9SAllan Jude # need to make a couple of tweaks 189d050cd6bSWarner Losh cat >> ${mntpt}/boot/loader.conf <<EOF 1909e5787d2SMatt Macycryptodev_load=YES 191712b4ca9SAllan Judezfs_load=YES 192712b4ca9SAllan JudeEOF 193827f1973SIan Lepore cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko 1949e5787d2SMatt Macy cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko 195712b4ca9SAllan Jude cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko 196712b4ca9SAllan Jude # end tweaks 197712b4ca9SAllan Jude zfs umount -f ${pool}/ROOT/default 198712b4ca9SAllan Jude zfs set mountpoint=none ${pool}/ROOT/default 199712b4ca9SAllan Jude zpool set bootfs=${pool}/ROOT/default ${pool} 200712b4ca9SAllan Jude zpool set autoexpand=on ${pool} 201712b4ca9SAllan Jude zpool export ${pool} 202712b4ca9SAllan Jude ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md} 203712b4ca9SAllan Jude mdconfig -d -u ${md} 204082c6764SWarner Losh} 205082c6764SWarner Losh 206082c6764SWarner Loshmk_nogeli_mbr_ufs_legacy() { 20722cf6021SWarner Losh src=$1 20822cf6021SWarner Losh img=$2 20922cf6021SWarner Losh 21022cf6021SWarner Losh cat > ${src}/etc/fstab <<EOF 2114c4e2b3dSWarner Losh/dev/${dev}s1a / ufs rw 1 1 21222cf6021SWarner LoshEOF 21322cf6021SWarner Losh makefs -t ffs -B little -s 200m ${img}.s1a ${src} 21422cf6021SWarner Losh mkimg -s bsd -b ${src}/boot/boot -p freebsd-ufs:=${img}.s1a -o ${img}.s1 215f438a143SAllan Jude mkimg -a 1 -s mbr -b ${src}/boot/boot0sio -p freebsd:=${img}.s1 -o ${img} 21622cf6021SWarner Losh rm -f ${src}/etc/fstab 217082c6764SWarner Losh} 218082c6764SWarner Losh 219082c6764SWarner Loshmk_nogeli_mbr_ufs_uefi() { 220f438a143SAllan Jude src=$1 221f438a143SAllan Jude img=$2 222f438a143SAllan Jude 223f438a143SAllan Jude cat > ${src}/etc/fstab <<EOF 2244c4e2b3dSWarner Losh/dev/${dev}s2a / ufs rw 1 1 225f438a143SAllan JudeEOF 2260661cd79SRebecca Cran make_esp_file ${img}.s1 ${espsize} ${src}/boot/loader.efi 227f438a143SAllan Jude makefs -t ffs -B little -s 200m ${img}.s2a ${src} 228f438a143SAllan Jude mkimg -s bsd -p freebsd-ufs:=${img}.s2a -o ${img}.s2 229f438a143SAllan Jude mkimg -a 1 -s mbr -p efi:=${img}.s1 -p freebsd:=${img}.s2 -o ${img} 230f438a143SAllan Jude rm -f ${src}/etc/fstab 231082c6764SWarner Losh} 232082c6764SWarner Losh 233082c6764SWarner Loshmk_nogeli_mbr_ufs_both() { 234f438a143SAllan Jude src=$1 235f438a143SAllan Jude img=$2 236f438a143SAllan Jude 237f438a143SAllan Jude cat > ${src}/etc/fstab <<EOF 2384c4e2b3dSWarner Losh/dev/${dev}s2a / ufs rw 1 1 239f438a143SAllan JudeEOF 2400661cd79SRebecca Cran make_esp_file ${img}.s1 ${espsize} ${src}/boot/loader.efi 241f438a143SAllan Jude makefs -t ffs -B little -s 200m ${img}.s2a ${src} 242f438a143SAllan Jude mkimg -s bsd -b ${src}/boot/boot -p freebsd-ufs:=${img}.s2a -o ${img}.s2 243f438a143SAllan Jude mkimg -a 2 -s mbr -b ${src}/boot/mbr -p efi:=${img}.s1 -p freebsd:=${img}.s2 -o ${img} 244f438a143SAllan Jude rm -f ${src}/etc/fstab 245082c6764SWarner Losh} 246082c6764SWarner Losh 247082c6764SWarner Loshmk_nogeli_mbr_zfs_legacy() { 248f438a143SAllan Jude src=$1 249f438a143SAllan Jude img=$2 250f438a143SAllan Jude mntpt=$3 251f438a143SAllan Jude geli=$4 252f438a143SAllan Jude scheme=$5 253f438a143SAllan Jude fs=$6 254f438a143SAllan Jude bios=$7 255f438a143SAllan Jude pool=nogeli-mbr-zfs-legacy 256f438a143SAllan Jude 257f438a143SAllan Jude dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512)) 258f438a143SAllan Jude md=$(mdconfig -f ${img}) 259f438a143SAllan Jude gpart create -s mbr ${md} 260f438a143SAllan Jude gpart add -t freebsd ${md} 261f438a143SAllan Jude gpart set -a active -i 1 ${md} 262f438a143SAllan Jude gpart create -s bsd ${md}s1 263f438a143SAllan Jude gpart add -t freebsd-zfs ${md}s1 264f438a143SAllan Jude # install-boot will make this bootable 265f438a143SAllan Jude zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s1a 266f438a143SAllan Jude zpool set bootfs=${pool} ${pool} 267f438a143SAllan Jude zfs create -po mountpoint=/ ${pool}/ROOT/default 268f438a143SAllan Jude # NB: The online guides go nuts customizing /var and other mountpoints here, no need 269f438a143SAllan Jude cpsys ${src} ${mntpt} 270f438a143SAllan Jude # need to make a couple of tweaks 271d050cd6bSWarner Losh cat >> ${mntpt}/boot/loader.conf <<EOF 2729e5787d2SMatt Macycryptodev_load=YES 273f438a143SAllan Judezfs_load=YES 274f438a143SAllan JudeEOF 275827f1973SIan Lepore cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko 2769e5787d2SMatt Macy cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko 277f438a143SAllan Jude cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko 278f438a143SAllan Jude # end tweaks 279f438a143SAllan Jude zfs umount -f ${pool}/ROOT/default 280f438a143SAllan Jude zfs set mountpoint=none ${pool}/ROOT/default 281f438a143SAllan Jude zpool set bootfs=${pool}/ROOT/default ${pool} 282f438a143SAllan Jude zpool set autoexpand=on ${pool} 283f438a143SAllan Jude zpool export ${pool} 284f438a143SAllan Jude ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md} 285f438a143SAllan Jude mdconfig -d -u ${md} 286082c6764SWarner Losh} 287082c6764SWarner Losh 288082c6764SWarner Loshmk_nogeli_mbr_zfs_uefi() { 289f438a143SAllan Jude src=$1 290f438a143SAllan Jude img=$2 291f438a143SAllan Jude mntpt=$3 292f438a143SAllan Jude geli=$4 293f438a143SAllan Jude scheme=$5 294f438a143SAllan Jude fs=$6 295f438a143SAllan Jude bios=$7 296f438a143SAllan Jude pool=nogeli-mbr-zfs-uefi 297f438a143SAllan Jude 298f438a143SAllan Jude dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512)) 299f438a143SAllan Jude md=$(mdconfig -f ${img}) 300f438a143SAllan Jude gpart create -s mbr ${md} 301db8b5613SRebecca Cran gpart add -t efi -s ${espsize}k ${md} 302f438a143SAllan Jude gpart add -t freebsd ${md} 303f438a143SAllan Jude gpart set -a active -i 2 ${md} 304f438a143SAllan Jude gpart create -s bsd ${md}s2 305f438a143SAllan Jude gpart add -t freebsd-zfs ${md}s2 306f438a143SAllan Jude # install-boot will make this bootable 307f438a143SAllan Jude zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s2a 308f438a143SAllan Jude zpool set bootfs=${pool} ${pool} 309f438a143SAllan Jude zfs create -po mountpoint=/ ${pool}/ROOT/default 310f438a143SAllan Jude # NB: The online guides go nuts customizing /var and other mountpoints here, no need 311f438a143SAllan Jude cpsys ${src} ${mntpt} 312f438a143SAllan Jude # need to make a couple of tweaks 313d050cd6bSWarner Losh cat >> ${mntpt}/boot/loader.conf <<EOF 3149e5787d2SMatt Macycryptodev_load=YES 315f438a143SAllan Judezfs_load=YES 316f438a143SAllan JudeEOF 317827f1973SIan Lepore cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko 3189e5787d2SMatt Macy cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko 319f438a143SAllan Jude cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko 320f438a143SAllan Jude # end tweaks 321f438a143SAllan Jude zfs umount -f ${pool}/ROOT/default 322f438a143SAllan Jude zfs set mountpoint=none ${pool}/ROOT/default 323f438a143SAllan Jude zpool set bootfs=${pool}/ROOT/default ${pool} 324f438a143SAllan Jude zpool set autoexpand=on ${pool} 325f438a143SAllan Jude zpool export ${pool} 326f438a143SAllan Jude ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md} 327f438a143SAllan Jude mdconfig -d -u ${md} 328082c6764SWarner Losh} 329082c6764SWarner Losh 330082c6764SWarner Loshmk_nogeli_mbr_zfs_both() { 331f438a143SAllan Jude src=$1 332f438a143SAllan Jude img=$2 333f438a143SAllan Jude mntpt=$3 334f438a143SAllan Jude geli=$4 335f438a143SAllan Jude scheme=$5 336f438a143SAllan Jude fs=$6 337f438a143SAllan Jude bios=$7 338f438a143SAllan Jude pool=nogeli-mbr-zfs-both 339f438a143SAllan Jude 340f438a143SAllan Jude dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512)) 341f438a143SAllan Jude md=$(mdconfig -f ${img}) 342f438a143SAllan Jude gpart create -s mbr ${md} 343db8b5613SRebecca Cran gpart add -t efi -s ${espsize}k ${md} 344f438a143SAllan Jude gpart add -t freebsd ${md} 345f438a143SAllan Jude gpart set -a active -i 2 ${md} 346f438a143SAllan Jude gpart create -s bsd ${md}s2 347f438a143SAllan Jude gpart add -t freebsd-zfs ${md}s2 348f438a143SAllan Jude # install-boot will make this bootable 349f438a143SAllan Jude zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s2a 350f438a143SAllan Jude zpool set bootfs=${pool} ${pool} 351f438a143SAllan Jude zfs create -po mountpoint=/ ${pool}/ROOT/default 352f438a143SAllan Jude # NB: The online guides go nuts customizing /var and other mountpoints here, no need 353f438a143SAllan Jude cpsys ${src} ${mntpt} 354f438a143SAllan Jude # need to make a couple of tweaks 355d050cd6bSWarner Losh cat >> ${mntpt}/boot/loader.conf <<EOF 3569e5787d2SMatt Macycryptodev_load=YES 357f438a143SAllan Judezfs_load=YES 358f438a143SAllan JudeEOF 359827f1973SIan Lepore cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko 3609e5787d2SMatt Macy cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko 361f438a143SAllan Jude cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko 362f438a143SAllan Jude # end tweaks 363f438a143SAllan Jude zfs umount -f ${pool}/ROOT/default 364f438a143SAllan Jude zfs set mountpoint=none ${pool}/ROOT/default 365f438a143SAllan Jude zpool set bootfs=${pool}/ROOT/default ${pool} 366f438a143SAllan Jude zpool set autoexpand=on ${pool} 367f438a143SAllan Jude zpool export ${pool} 368f438a143SAllan Jude ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md} 369f438a143SAllan Jude mdconfig -d -u ${md} 370082c6764SWarner Losh} 371082c6764SWarner Losh 372082c6764SWarner Loshmk_geli_gpt_ufs_legacy() { 373f438a143SAllan Jude src=$1 374f438a143SAllan Jude img=$2 375f438a143SAllan Jude mntpt=$3 376f438a143SAllan Jude geli=$4 377f438a143SAllan Jude scheme=$5 378f438a143SAllan Jude fs=$6 379f438a143SAllan Jude bios=$7 380f438a143SAllan Jude 381f438a143SAllan Jude dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 )) 382f438a143SAllan Jude md=$(mdconfig -f ${img}) 383f438a143SAllan Jude gpart create -s gpt ${md} 384f438a143SAllan Jude gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k 385f438a143SAllan Jude gpart add -t freebsd-ufs -l root $md 386f438a143SAllan Jude # install-boot will make this bootable 387595deaf7SIan Lepore echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p2 388595deaf7SIan Lepore echo ${passphrase} | geli attach -j - ${md}p2 389f438a143SAllan Jude newfs /dev/${md}p2.eli 390f438a143SAllan Jude mount /dev/${md}p2.eli ${mntpt} 391f438a143SAllan Jude cpsys ${src} ${mntpt} 392f438a143SAllan Jude # need to make a couple of tweaks 393f438a143SAllan Jude cat > ${mntpt}/boot/loader.conf <<EOF 394f438a143SAllan Judegeom_eli_load=YES 395f438a143SAllan JudeEOF 396f438a143SAllan Jude cat > ${mntpt}/etc/fstab <<EOF 3974c4e2b3dSWarner Losh/dev/${dev}p2.eli / ufs rw 1 1 398f438a143SAllan JudeEOF 399f438a143SAllan Jude 400f438a143SAllan Jude cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko 401f438a143SAllan Jude # end tweaks 402f438a143SAllan Jude umount -f ${mntpt} 403f438a143SAllan Jude geli detach ${md}p2 404f438a143SAllan Jude ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md} 405f438a143SAllan Jude mdconfig -d -u ${md} 406082c6764SWarner Losh} 407082c6764SWarner Losh 408082c6764SWarner Loshmk_geli_gpt_ufs_uefi() { 409f438a143SAllan Jude src=$1 410f438a143SAllan Jude img=$2 411f438a143SAllan Jude mntpt=$3 412f438a143SAllan Jude geli=$4 413f438a143SAllan Jude scheme=$5 414f438a143SAllan Jude fs=$6 415f438a143SAllan Jude bios=$7 416f438a143SAllan Jude 417f438a143SAllan Jude dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 )) 418f438a143SAllan Jude md=$(mdconfig -f ${img}) 419f438a143SAllan Jude gpart create -s gpt ${md} 420db8b5613SRebecca Cran gpart add -t efi -s ${espsize}k -a 4k ${md} 421f438a143SAllan Jude gpart add -t freebsd-ufs -l root $md 422f438a143SAllan Jude # install-boot will make this bootable 423595deaf7SIan Lepore echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p2 424595deaf7SIan Lepore echo ${passphrase} | geli attach -j - ${md}p2 425f438a143SAllan Jude newfs /dev/${md}p2.eli 426f438a143SAllan Jude mount /dev/${md}p2.eli ${mntpt} 427f438a143SAllan Jude cpsys ${src} ${mntpt} 428f438a143SAllan Jude # need to make a couple of tweaks 429f438a143SAllan Jude cat > ${mntpt}/boot/loader.conf <<EOF 430f438a143SAllan Judegeom_eli_load=YES 431f438a143SAllan JudeEOF 432f438a143SAllan Jude cat > ${mntpt}/etc/fstab <<EOF 4334c4e2b3dSWarner Losh/dev/${dev}p2.eli / ufs rw 1 1 434f438a143SAllan JudeEOF 435f438a143SAllan Jude 436f438a143SAllan Jude cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko 437f438a143SAllan Jude # end tweaks 438f438a143SAllan Jude umount -f ${mntpt} 439f438a143SAllan Jude geli detach ${md}p2 440f438a143SAllan Jude ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md} 441f438a143SAllan Jude mdconfig -d -u ${md} 442082c6764SWarner Losh} 443082c6764SWarner Losh 444082c6764SWarner Loshmk_geli_gpt_ufs_both() { 445f438a143SAllan Jude src=$1 446f438a143SAllan Jude img=$2 447f438a143SAllan Jude mntpt=$3 448f438a143SAllan Jude geli=$4 449f438a143SAllan Jude scheme=$5 450f438a143SAllan Jude fs=$6 451f438a143SAllan Jude bios=$7 452f438a143SAllan Jude 453f438a143SAllan Jude dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 )) 454f438a143SAllan Jude md=$(mdconfig -f ${img}) 455f438a143SAllan Jude gpart create -s gpt ${md} 456db8b5613SRebecca Cran gpart add -t efi -s ${espsize}k -a 4k ${md} 457f438a143SAllan Jude gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k 458f438a143SAllan Jude gpart add -t freebsd-ufs -l root $md 459f438a143SAllan Jude # install-boot will make this bootable 460595deaf7SIan Lepore echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p3 461595deaf7SIan Lepore echo ${passphrase} | geli attach -j - ${md}p3 462f438a143SAllan Jude newfs /dev/${md}p3.eli 463f438a143SAllan Jude mount /dev/${md}p3.eli ${mntpt} 464f438a143SAllan Jude cpsys ${src} ${mntpt} 465f438a143SAllan Jude # need to make a couple of tweaks 466f438a143SAllan Jude cat > ${mntpt}/boot/loader.conf <<EOF 467f438a143SAllan Judegeom_eli_load=YES 468f438a143SAllan JudeEOF 469f438a143SAllan Jude cat > ${mntpt}/etc/fstab <<EOF 4704c4e2b3dSWarner Losh/dev/${dev}p3.eli / ufs rw 1 1 471f438a143SAllan JudeEOF 472f438a143SAllan Jude 473f438a143SAllan Jude cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko 474f438a143SAllan Jude # end tweaks 475f438a143SAllan Jude umount -f ${mntpt} 476f438a143SAllan Jude geli detach ${md}p3 477f438a143SAllan Jude ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md} 478f438a143SAllan Jude mdconfig -d -u ${md} 479082c6764SWarner Losh} 480082c6764SWarner Losh 481082c6764SWarner Loshmk_geli_gpt_zfs_legacy() { 482f438a143SAllan Jude src=$1 483f438a143SAllan Jude img=$2 484f438a143SAllan Jude mntpt=$3 485f438a143SAllan Jude geli=$4 486f438a143SAllan Jude scheme=$5 487f438a143SAllan Jude fs=$6 488f438a143SAllan Jude bios=$7 489f438a143SAllan Jude pool=geli-gpt-zfs-legacy 490f438a143SAllan Jude 4910c0ffba5SIan Lepore # Note that in this flavor we create an empty p2 ufs partition, and put 4920c0ffba5SIan Lepore # the bootable zfs stuff on p3, just to test the ability of the zfs probe 4930c0ffba5SIan Lepore # probe routines to find a pool on a partition other than the first one. 4940c0ffba5SIan Lepore 4950c0ffba5SIan Lepore dd if=/dev/zero of=${img} count=1 seek=$(( 300 * 1024 * 1024 / 512 )) 496f438a143SAllan Jude md=$(mdconfig -f ${img}) 497f438a143SAllan Jude gpart create -s gpt ${md} 498f438a143SAllan Jude gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k 4990c0ffba5SIan Lepore gpart add -t freebsd-ufs -s 100m ${md} 500f438a143SAllan Jude gpart add -t freebsd-zfs -l root $md 501f438a143SAllan Jude # install-boot will make this bootable 5020c0ffba5SIan Lepore echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p3 5030c0ffba5SIan Lepore echo ${passphrase} | geli attach -j - ${md}p3 5040c0ffba5SIan Lepore zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3.eli 505f438a143SAllan Jude zpool set bootfs=${pool} ${pool} 506f438a143SAllan Jude zfs create -po mountpoint=/ ${pool}/ROOT/default 507f438a143SAllan Jude # NB: The online guides go nuts customizing /var and other mountpoints here, no need 508f438a143SAllan Jude cpsys ${src} ${mntpt} 509f438a143SAllan Jude # need to make a couple of tweaks 510d050cd6bSWarner Losh cat >> ${mntpt}/boot/loader.conf <<EOF 5119e5787d2SMatt Macycryptodev_load=YES 512f438a143SAllan Judezfs_load=YES 513f438a143SAllan Judegeom_eli_load=YES 514f438a143SAllan JudeEOF 515827f1973SIan Lepore cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko 5169e5787d2SMatt Macy cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko 517f438a143SAllan Jude cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko 518f438a143SAllan Jude cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko 519f438a143SAllan Jude # end tweaks 520f438a143SAllan Jude zfs umount -f ${pool}/ROOT/default 521f438a143SAllan Jude zfs set mountpoint=none ${pool}/ROOT/default 522f438a143SAllan Jude zpool set bootfs=${pool}/ROOT/default ${pool} 523f438a143SAllan Jude zpool set autoexpand=on ${pool} 524f438a143SAllan Jude zpool export ${pool} 5250c0ffba5SIan Lepore geli detach ${md}p3 526f438a143SAllan Jude ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md} 527f438a143SAllan Jude mdconfig -d -u ${md} 528082c6764SWarner Losh} 529082c6764SWarner Losh 530082c6764SWarner Loshmk_geli_gpt_zfs_uefi() { 531f438a143SAllan Jude src=$1 532f438a143SAllan Jude img=$2 533f438a143SAllan Jude mntpt=$3 534f438a143SAllan Jude geli=$4 535f438a143SAllan Jude scheme=$5 536f438a143SAllan Jude fs=$6 537f438a143SAllan Jude bios=$7 538f438a143SAllan Jude pool=geli-gpt-zfs-uefi 539f438a143SAllan Jude 5400c0ffba5SIan Lepore # Note that in this flavor we create an empty p2 ufs partition, and put 5410c0ffba5SIan Lepore # the bootable zfs stuff on p3, just to test the ability of the zfs probe 5420c0ffba5SIan Lepore # probe routines to find a pool on a partition other than the first one. 5430c0ffba5SIan Lepore 5440c0ffba5SIan Lepore dd if=/dev/zero of=${img} count=1 seek=$(( 300 * 1024 * 1024 / 512 )) 545f438a143SAllan Jude md=$(mdconfig -f ${img}) 546f438a143SAllan Jude gpart create -s gpt ${md} 547db8b5613SRebecca Cran gpart add -t efi -s ${espsize}k -a 4k ${md} 5480c0ffba5SIan Lepore gpart add -t freebsd-ufs -s 100m ${md} 549f438a143SAllan Jude gpart add -t freebsd-zfs -l root $md 550f438a143SAllan Jude # install-boot will make this bootable 5510c0ffba5SIan Lepore echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p3 5520c0ffba5SIan Lepore echo ${passphrase} | geli attach -j - ${md}p3 5530c0ffba5SIan Lepore zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3.eli 554f438a143SAllan Jude zpool set bootfs=${pool} ${pool} 555f438a143SAllan Jude zfs create -po mountpoint=/ ${pool}/ROOT/default 556f438a143SAllan Jude # NB: The online guides go nuts customizing /var and other mountpoints here, no need 557f438a143SAllan Jude cpsys ${src} ${mntpt} 558f438a143SAllan Jude # need to make a couple of tweaks 559d050cd6bSWarner Losh cat >> ${mntpt}/boot/loader.conf <<EOF 5609e5787d2SMatt Macycryptodev_load=YES 561f438a143SAllan Judezfs_load=YES 562f438a143SAllan Judegeom_eli_load=YES 563f438a143SAllan JudeEOF 564827f1973SIan Lepore cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko 5659e5787d2SMatt Macy cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko 566f438a143SAllan Jude cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko 567f438a143SAllan Jude cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko 568f438a143SAllan Jude # end tweaks 569f438a143SAllan Jude zfs umount -f ${pool}/ROOT/default 570f438a143SAllan Jude zfs set mountpoint=none ${pool}/ROOT/default 571f438a143SAllan Jude zpool set bootfs=${pool}/ROOT/default ${pool} 572f438a143SAllan Jude zpool set autoexpand=on ${pool} 573f438a143SAllan Jude zpool export ${pool} 5740c0ffba5SIan Lepore geli detach ${md}p3 575f438a143SAllan Jude ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md} 576f438a143SAllan Jude mdconfig -d -u ${md} 577082c6764SWarner Losh} 578082c6764SWarner Losh 579082c6764SWarner Loshmk_geli_gpt_zfs_both() { 580f438a143SAllan Jude src=$1 581f438a143SAllan Jude img=$2 582f438a143SAllan Jude mntpt=$3 583f438a143SAllan Jude geli=$4 584f438a143SAllan Jude scheme=$5 585f438a143SAllan Jude fs=$6 586f438a143SAllan Jude bios=$7 587f438a143SAllan Jude pool=geli-gpt-zfs-both 588f438a143SAllan Jude 589f438a143SAllan Jude dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 )) 590f438a143SAllan Jude md=$(mdconfig -f ${img}) 591f438a143SAllan Jude gpart create -s gpt ${md} 592db8b5613SRebecca Cran gpart add -t efi -s ${espsize}k -a 4k ${md} 593f438a143SAllan Jude gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k 594f438a143SAllan Jude gpart add -t freebsd-zfs -l root $md 595f438a143SAllan Jude # install-boot will make this bootable 596595deaf7SIan Lepore echo ${passphrase} | geli init -bg -e AES-XTS -i ${iterations} -J - -l 256 -s 4096 ${md}p3 597595deaf7SIan Lepore echo ${passphrase} | geli attach -j - ${md}p3 598f438a143SAllan Jude zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3.eli 599f438a143SAllan Jude zpool set bootfs=${pool} ${pool} 600f438a143SAllan Jude zfs create -po mountpoint=/ ${pool}/ROOT/default 601f438a143SAllan Jude # NB: The online guides go nuts customizing /var and other mountpoints here, no need 602f438a143SAllan Jude cpsys ${src} ${mntpt} 603f438a143SAllan Jude # need to make a couple of tweaks 604f438a143SAllan Jude cat > ${mntpt}/boot/loader.conf <<EOF 6059e5787d2SMatt Macycryptodev_load=YES 606f438a143SAllan Judezfs_load=YES 607f438a143SAllan Judegeom_eli_load=YES 608f438a143SAllan JudeEOF 609827f1973SIan Lepore cp /boot/kernel/acl_nfs4.ko ${mntpt}/boot/kernel/acl_nfs4.ko 6109e5787d2SMatt Macy cp /boot/kernel/cryptodev.ko ${mntpt}/boot/kernel/cryptodev.ko 611f438a143SAllan Jude cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko 612f438a143SAllan Jude cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko 613f438a143SAllan Jude # end tweaks 614f438a143SAllan Jude zfs umount -f ${pool}/ROOT/default 615f438a143SAllan Jude zfs set mountpoint=none ${pool}/ROOT/default 616f438a143SAllan Jude zpool set bootfs=${pool}/ROOT/default ${pool} 617f438a143SAllan Jude zpool set autoexpand=on ${pool} 618f438a143SAllan Jude zpool export ${pool} 619f438a143SAllan Jude geli detach ${md}p3 620f438a143SAllan Jude ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md} 621f438a143SAllan Jude mdconfig -d -u ${md} 622082c6764SWarner Losh} 623082c6764SWarner Losh 624f438a143SAllan Jude# GELI+MBR is not a valid configuration 625082c6764SWarner Loshmk_geli_mbr_ufs_legacy() { 626082c6764SWarner Losh} 627082c6764SWarner Losh 628082c6764SWarner Loshmk_geli_mbr_ufs_uefi() { 629082c6764SWarner Losh} 630082c6764SWarner Losh 631082c6764SWarner Loshmk_geli_mbr_ufs_both() { 632082c6764SWarner Losh} 633082c6764SWarner Losh 634082c6764SWarner Loshmk_geli_mbr_zfs_legacy() { 635082c6764SWarner Losh} 636082c6764SWarner Losh 637082c6764SWarner Loshmk_geli_mbr_zfs_uefi() { 638082c6764SWarner Losh} 639082c6764SWarner Losh 640082c6764SWarner Loshmk_geli_mbr_zfs_both() { 641082c6764SWarner Losh} 642082c6764SWarner Losh 643082c6764SWarner Losh# iso 644082c6764SWarner Losh# pxeldr 645082c6764SWarner Losh# u-boot 64622cf6021SWarner Losh# powerpc 64722cf6021SWarner Losh 6487b4b55e5SIan Leporeqser="-serial telnet::4444,server -nographic" 64922cf6021SWarner Losh 65022cf6021SWarner Losh# https://wiki.freebsd.org/QemuRecipes 65122cf6021SWarner Losh# aarch64 65222cf6021SWarner Loshqemu_aarch64_uefi() 65322cf6021SWarner Losh{ 65422cf6021SWarner Losh img=$1 65522cf6021SWarner Losh sh=$2 65622cf6021SWarner Losh 65722cf6021SWarner Losh echo "qemu-system-aarch64 -m 4096M -cpu cortex-a57 -M virt \ 65822cf6021SWarner Losh -bios QEMU_EFI.fd ${qser} \ 65922cf6021SWarner Losh -drive if=none,file=${img},id=hd0 \ 66022cf6021SWarner Losh -device virtio-blk-device,drive=hd0" > $sh 661dfe34ceaSIan Lepore chmod 755 $sh 66222cf6021SWarner Losh# https://wiki.freebsd.org/arm64/QEMU also has 66322cf6021SWarner Losh# -device virtio-net-device,netdev=net0 66422cf6021SWarner Losh# -netdev user,id=net0 66522cf6021SWarner Losh} 66622cf6021SWarner Losh 66722cf6021SWarner Losh# Amd64 qemu 66822cf6021SWarner Loshqemu_amd64_legacy() 66922cf6021SWarner Losh{ 67022cf6021SWarner Losh img=$1 67122cf6021SWarner Losh sh=$2 67222cf6021SWarner Losh 67348cb46aaSWarner Losh echo "qemu-system-x86_64 -m 256m --drive file=${img},format=raw ${qser}" > $sh 674dfe34ceaSIan Lepore chmod 755 $sh 67522cf6021SWarner Losh} 67622cf6021SWarner Losh 67722cf6021SWarner Loshqemu_amd64_uefi() 67822cf6021SWarner Losh{ 67922cf6021SWarner Losh img=$1 68022cf6021SWarner Losh sh=$2 68122cf6021SWarner Losh 68248cb46aaSWarner Losh echo "qemu-system-x86_64 -m 256m -bios ~/bios/OVMF-X64.fd --drive file=${img},format=raw ${qser}" > $sh 683dfe34ceaSIan Lepore chmod 755 $sh 68422cf6021SWarner Losh} 68522cf6021SWarner Losh 68622cf6021SWarner Loshqemu_amd64_both() 68722cf6021SWarner Losh{ 68822cf6021SWarner Losh img=$1 68922cf6021SWarner Losh sh=$2 69022cf6021SWarner Losh 69148cb46aaSWarner Losh echo "qemu-system-x86_64 -m 256m --drive file=${img},format=raw ${qser}" > $sh 69248cb46aaSWarner Losh echo "qemu-system-x86_64 -m 256m -bios ~/bios/OVMF-X64.fd --drive file=${img},format=raw ${qser}" >> $sh 693dfe34ceaSIan Lepore chmod 755 $sh 69422cf6021SWarner Losh} 69522cf6021SWarner Losh 69622cf6021SWarner Losh# arm 69722cf6021SWarner Losh# nothing listed? 69822cf6021SWarner Losh 69922cf6021SWarner Losh# i386 70022cf6021SWarner Loshqemu_i386_legacy() 70122cf6021SWarner Losh{ 70222cf6021SWarner Losh img=$1 70322cf6021SWarner Losh sh=$2 70422cf6021SWarner Losh 70522cf6021SWarner Losh echo "qemu-system-i386 --drive file=${img},format=raw ${qser}" > $sh 706dfe34ceaSIan Lepore chmod 755 $sh 70722cf6021SWarner Losh} 70822cf6021SWarner Losh 70922cf6021SWarner Losh# Not yet supported 71022cf6021SWarner Loshqemu_i386_uefi() 71122cf6021SWarner Losh{ 71222cf6021SWarner Losh img=$1 71322cf6021SWarner Losh sh=$2 71422cf6021SWarner Losh 71522cf6021SWarner Losh echo "qemu-system-i386 -bios ~/bios/OVMF-X32.fd --drive file=${img},format=raw ${qser}" > $sh 716dfe34ceaSIan Lepore chmod 755 $sh 71722cf6021SWarner Losh} 71822cf6021SWarner Losh 71922cf6021SWarner Losh# Needs UEFI to be supported 72022cf6021SWarner Loshqemu_i386_both() 72122cf6021SWarner Losh{ 72222cf6021SWarner Losh img=$1 72322cf6021SWarner Losh sh=$2 72422cf6021SWarner Losh 72522cf6021SWarner Losh echo "qemu-system-i386 --drive file=${img},format=raw ${qser}" > $sh 726712b4ca9SAllan Jude echo "qemu-system-i386 -bios ~/bios/OVMF-X32.fd --drive file=${img},format=raw ${qser}" >> $sh 727dfe34ceaSIan Lepore chmod 755 $sh 72822cf6021SWarner Losh} 72922cf6021SWarner Losh 730432b4921SIan Leporemake_one_image() 731432b4921SIan Lepore{ 732432b4921SIan Lepore local arch=${1?} 733432b4921SIan Lepore local geli=${2?} 734432b4921SIan Lepore local scheme=${3?} 735432b4921SIan Lepore local fs=${4?} 736432b4921SIan Lepore local bios=${5?} 737432b4921SIan Lepore 738432b4921SIan Lepore # Create sparse file and mount newly created filesystem(s) on it 739432b4921SIan Lepore img=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.img 740432b4921SIan Lepore sh=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.sh 741432b4921SIan Lepore echo "vvvvvvvvvvvvvv Creating $img vvvvvvvvvvvvvvv" 742432b4921SIan Lepore rm -f ${img}* 743432b4921SIan Lepore eval mk_${geli}_${scheme}_${fs}_${bios} ${DESTDIR} ${img} ${MNTPT} ${geli} ${scheme} ${fs} ${bios} 744432b4921SIan Lepore eval qemu_${arch}_${bios} ${img} ${sh} 745432b4921SIan Lepore [ -n "${SUDO_USER}" ] && chown ${SUDO_USER} ${img}* 746432b4921SIan Lepore echo "^^^^^^^^^^^^^^ Created $img ^^^^^^^^^^^^^^^" 747432b4921SIan Lepore} 748432b4921SIan Lepore 74922cf6021SWarner Losh# Powerpc -- doesn't work but maybe it would enough for testing -- needs details 75022cf6021SWarner Losh# powerpc64 75122cf6021SWarner Losh# qemu-system-ppc64 -drive file=/path/to/disk.img,format=raw 75222cf6021SWarner Losh 753082c6764SWarner Losh# Misc variables 754082c6764SWarner LoshSRCTOP=$(make -v SRCTOP) 755082c6764SWarner Loshcd ${SRCTOP}/stand 756082c6764SWarner LoshOBJDIR=$(make -v .OBJDIR) 757082c6764SWarner LoshIMGDIR=${OBJDIR}/boot-images 758082c6764SWarner Loshmkdir -p ${IMGDIR} 759082c6764SWarner LoshMNTPT=$(mktemp -d /tmp/stand-test.XXXXXX) 760082c6764SWarner Losh 761082c6764SWarner Losh# Setup the installed tree... 762082c6764SWarner LoshDESTDIR=${OBJDIR}/boot-tree 763082c6764SWarner Loshrm -rf ${DESTDIR} 764082c6764SWarner Loshmkdir -p ${DESTDIR}/boot/defaults 765082c6764SWarner Loshmkdir -p ${DESTDIR}/boot/kernel 766082c6764SWarner Loshcp /boot/kernel/kernel ${DESTDIR}/boot/kernel 767328884aeSWarner Loshecho -h -D -S115200 > ${DESTDIR}/boot.config 768d050cd6bSWarner Loshcat > ${DESTDIR}/boot/loader.conf <<EOF 769d050cd6bSWarner Loshcomconsole_speed=115200 770d050cd6bSWarner LoshEOF 771082c6764SWarner Losh# XXX 772082c6764SWarner Loshcp /boot/device.hints ${DESTDIR}/boot/device.hints 773082c6764SWarner Losh# Assume we're already built 774f576caacSIan Leporemake install DESTDIR=${DESTDIR} MK_MAN=no MK_INSTALL_AS_USER=yes WITHOUT_DEBUG_FILES=yes 775f576caacSIan Leporeif [ $? -ne 0 ]; then 776f576caacSIan Lepore echo "make install failed" 777f576caacSIan Lepore exit 1 778f576caacSIan Leporefi 77922cf6021SWarner Losh# Copy init, /bin/sh, minimal libraries and testing /etc/rc 78022cf6021SWarner Loshmkdir -p ${DESTDIR}/sbin ${DESTDIR}/bin \ 78122cf6021SWarner Losh ${DESTDIR}/lib ${DESTDIR}/libexec \ 78222cf6021SWarner Losh ${DESTDIR}/etc ${DESTDIR}/dev 783d050cd6bSWarner 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 784082c6764SWarner Losh cp $f ${DESTDIR}/$f 785082c6764SWarner Loshdone 78622cf6021SWarner Loshcat > ${DESTDIR}/etc/rc <<EOF 78722cf6021SWarner Losh#!/bin/sh 78822cf6021SWarner Losh 789d050cd6bSWarner Loshsysctl machdep.bootmethod 79022cf6021SWarner Loshecho "RC COMMAND RUNNING -- SUCCESS!!!!!" 79122cf6021SWarner Loshhalt -p 79222cf6021SWarner LoshEOF 793082c6764SWarner Losh 794432b4921SIan Lepore# If we were given exactly 5 args, go make that one image. 795432b4921SIan Lepore 796432b4921SIan Leporeif [ $# -eq 5 ]; then 797432b4921SIan Lepore make_one_image $* 798432b4921SIan Lepore exit 799432b4921SIan Leporefi 800432b4921SIan Lepore 801082c6764SWarner Losh# OK. Let the games begin 802082c6764SWarner Losh 80322cf6021SWarner Loshfor arch in amd64; do 804082c6764SWarner Losh for geli in nogeli geli; do 805082c6764SWarner Losh for scheme in gpt mbr; do 806082c6764SWarner Losh for fs in ufs zfs; do 807082c6764SWarner Losh for bios in legacy uefi both; do 808432b4921SIan Lepore make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios} 809082c6764SWarner Losh done 810082c6764SWarner Losh done 811082c6764SWarner Losh done 812082c6764SWarner Losh done 81322cf6021SWarner Loshdone 814082c6764SWarner Losh 815082c6764SWarner Loshrmdir ${MNTPT} 81622cf6021SWarner Losh 81722cf6021SWarner Loshexit 0 81822cf6021SWarner Losh 81922cf6021SWarner Losh# Notes for the future 82022cf6021SWarner Losh 82122cf6021SWarner Loshfor arch in i386; do 82222cf6021SWarner Losh for geli in nogeli geli; do 82322cf6021SWarner Losh for scheme in gpt mbr; do 82422cf6021SWarner Losh for fs in ufs zfs; do 82522cf6021SWarner Losh for bios in legacy; do 826432b4921SIan Lepore make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios} 82722cf6021SWarner Losh done 82822cf6021SWarner Losh done 82922cf6021SWarner Losh done 83022cf6021SWarner Losh done 83122cf6021SWarner Loshdone 83222cf6021SWarner Losh 83322cf6021SWarner Loshfor arch in arm aarch64; do 83422cf6021SWarner Losh for scheme in gpt mbr; do 83522cf6021SWarner Losh fs=ufs 836*aff95057SWarner Losh bios=efi 837432b4921SIan Lepore make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios} 83822cf6021SWarner Losh done 83922cf6021SWarner Loshdone 84022cf6021SWarner Losh 84122cf6021SWarner Loshfor arch in powerpc powerpc64; do 84222cf6021SWarner Losh for scheme in ppc-wtf; do 84322cf6021SWarner Losh fs=ufs 84422cf6021SWarner Losh for bios in ofw uboot chrp; do 845432b4921SIan Lepore make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios} 84622cf6021SWarner Losh done 84722cf6021SWarner Losh done 84822cf6021SWarner Loshdone 84922cf6021SWarner Losh 850*aff95057SWarner Loshfor arch in riscv; do 851*aff95057SWarner Losh geli=nogeli 852*aff95057SWarner Losh fs=ufs 853*aff95057SWarner Losh scheme=gpt 854*aff95057SWarner Losh bios=efi 855432b4921SIan Lepore make_one_image ${arch} ${geli} ${scheme} ${fs} ${bios} 85622cf6021SWarner Loshdone 857