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