1#!/bin/sh 2 3# $FreeBSD$ 4 5# 6# Builds all the bat-shit crazy combinations we support booting from, 7# at least for amd64. It assume you have a ~sane kernel in /boot/kernel 8# and copies that into the ~150MB root images we create (we create the du 9# size of the kernel + 20MB 10# 11# Sad panda sez: this runs as root, but could be userland if someone 12# creates userland geli and zfs tools. 13# 14# This assumes an external prograam install-boot.sh which will install 15# the appropriate boot files in the appropriate locations. 16# 17# These images assume ada0 will be the root image. We should likely 18# use labels, but we don't. 19# 20# ASsumes you've already rebuilt... maybe bad? Also maybe bad: the env 21# vars should likely be conditionally set to allow better automation. 22# 23 24cpsys() { 25 src=$1 26 dst=$2 27 28 # Copy kernel + boot loader 29 (cd $src ; tar cf - .) | (cd $dst; tar xf -) 30} 31 32mk_nogeli_gpt_ufs_legacy() { 33 src=$1 34 img=$2 35 36 cat > ${src}/etc/fstab <<EOF 37/dev/ada0p2 / ufs rw 1 1 38EOF 39 makefs -t ffs -B little -s 200m ${img}.p2 ${src} 40 mkimg -s gpt -b ${src}/boot/pmbr \ 41 -p freebsd-boot:=${src}/boot/gptboot \ 42 -p freebsd-ufs:=${img}.p2 -o ${img} 43 rm -f ${src}/etc/fstab 44} 45 46mk_nogeli_gpt_ufs_uefi() { 47 src=$1 48 img=$2 49 50 cat > ${src}/etc/fstab <<EOF 51/dev/ada0p2 / ufs rw 1 1 52EOF 53# XXX need to make msdos part for this to work XXXX 54 cp ${src}/boot/boot1.efifat ${img}.p1 55 makefs -t ffs -B little -s 200m ${img}.p2 ${src} 56 mkimg -s gpt \ 57 -p efi:=${img}.p1 \ 58 -p freebsd-ufs:=${img}.p2 -o ${img} 59 rm -f ${src}/etc/fstab 60} 61 62mk_nogeli_gpt_ufs_both() { 63 src=$1 64 img=$2 65 66 cat > ${src}/etc/fstab <<EOF 67/dev/ada0p3 / ufs rw 1 1 68EOF 69 # XXX need to make msdos part for this to work XXXX 70 cp ${src}/boot/boot1.efifat ${img}.p1 71 makefs -t ffs -B little -s 200m ${img}.p3 ${src} 72 # p1 is boot for uefi, p2 is boot for gpt, p3 is / 73 mkimg -b ${src}/boot/pmbr -s gpt \ 74 -p efi:=${src}/boot/boot1.efifat \ 75 -p freebsd-boot:=${src}/boot/gptboot \ 76 -p freebsd-ufs:=${img}.p3 \ 77 -o ${img} 78 rm -f ${src}/etc/fstab 79} 80 81mk_nogeli_gpt_zfs_legacy() { 82 src=$1 83 img=$2 84 mntpt=$3 85 geli=$4 86 scheme=$5 87 fs=$6 88 bios=$7 89 pool=nogeli-gpt-zfs-legacy 90 91 dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512)) 92 md=$(mdconfig -f ${img}) 93 gpart create -s gpt ${md} 94 gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k 95 gpart add -t freebsd-zfs -l root $md 96 # install-boot will make this bootable 97 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2 98 zpool set bootfs=${pool} ${pool} 99 zfs create -po mountpoint=/ ${pool}/ROOT/default 100 # NB: The online guides go nuts customizing /var and other mountpoints here, no need 101 cpsys ${src} ${mntpt} 102 # need to make a couple of tweaks 103 cat > ${mntpt}/boot/loader.conf <<EOF 104zfs_load=YES 105opensolaris_load=YES 106EOF 107 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko 108 cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko 109 # end tweaks 110 zfs umount -f ${pool}/ROOT/default 111 zfs set mountpoint=none ${pool}/ROOT/default 112 zpool set bootfs=${pool}/ROOT/default ${pool} 113 zpool set autoexpand=on ${pool} 114 zpool export ${pool} 115 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md} 116 mdconfig -d -u ${md} 117} 118 119mk_nogeli_gpt_zfs_uefi() { 120 src=$1 121 img=$2 122 mntpt=$3 123 geli=$4 124 scheme=$5 125 fs=$6 126 bios=$7 127 pool=nogeli-gpt-zfs-uefi 128 129 dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512)) 130 md=$(mdconfig -f ${img}) 131 gpart create -s gpt ${md} 132 gpart add -t efi -s 800k -a 4k ${md} 133 gpart add -t freebsd-zfs -l root $md 134 # install-boot will make this bootable 135 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2 136 zpool set bootfs=${pool} ${pool} 137 zfs create -po mountpoint=/ ${pool}/ROOT/default 138 # NB: The online guides go nuts customizing /var and other mountpoints here, no need 139 cpsys ${src} ${mntpt} 140 # need to make a couple of tweaks 141 cat > ${mntpt}/boot/loader.conf <<EOF 142zfs_load=YES 143opensolaris_load=YES 144EOF 145 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko 146 cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko 147 # end tweaks 148 zfs umount -f ${pool}/ROOT/default 149 zfs set mountpoint=none ${pool}/ROOT/default 150 zpool set bootfs=${pool}/ROOT/default ${pool} 151 zpool set autoexpand=on ${pool} 152 zpool export ${pool} 153 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md} 154 mdconfig -d -u ${md} 155} 156 157mk_nogeli_gpt_zfs_both() { 158 src=$1 159 img=$2 160 mntpt=$3 161 geli=$4 162 scheme=$5 163 fs=$6 164 bios=$7 165 pool=nogeli-gpt-zfs-both 166 167 dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512)) 168 md=$(mdconfig -f ${img}) 169 gpart create -s gpt ${md} 170 gpart add -t efi -s 800k -a 4k ${md} 171 gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k 172 gpart add -t freebsd-zfs -l root $md 173 # install-boot will make this bootable 174 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3 175 zpool set bootfs=${pool} ${pool} 176 zfs create -po mountpoint=/ ${pool}/ROOT/default 177 # NB: The online guides go nuts customizing /var and other mountpoints here, no need 178 cpsys ${src} ${mntpt} 179 # need to make a couple of tweaks 180 cat > ${mntpt}/boot/loader.conf <<EOF 181zfs_load=YES 182opensolaris_load=YES 183EOF 184 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko 185 cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko 186 # end tweaks 187 zfs umount -f ${pool}/ROOT/default 188 zfs set mountpoint=none ${pool}/ROOT/default 189 zpool set bootfs=${pool}/ROOT/default ${pool} 190 zpool set autoexpand=on ${pool} 191 zpool export ${pool} 192 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md} 193 mdconfig -d -u ${md} 194} 195 196mk_nogeli_mbr_ufs_legacy() { 197 src=$1 198 img=$2 199 200 cat > ${src}/etc/fstab <<EOF 201/dev/ada0s1a / ufs rw 1 1 202EOF 203 makefs -t ffs -B little -s 200m ${img}.s1a ${src} 204 mkimg -s bsd -b ${src}/boot/boot -p freebsd-ufs:=${img}.s1a -o ${img}.s1 205 mkimg -a 1 -s mbr -b ${src}/boot/boot0sio -p freebsd:=${img}.s1 -o ${img} 206 rm -f ${src}/etc/fstab 207} 208 209mk_nogeli_mbr_ufs_uefi() { 210 src=$1 211 img=$2 212 213 cat > ${src}/etc/fstab <<EOF 214/dev/ada0s1a / ufs rw 1 1 215EOF 216 cp ${src}/boot/boot1.efifat ${img}.s1 217 makefs -t ffs -B little -s 200m ${img}.s2a ${src} 218 mkimg -s bsd -p freebsd-ufs:=${img}.s2a -o ${img}.s2 219 mkimg -a 1 -s mbr -p efi:=${img}.s1 -p freebsd:=${img}.s2 -o ${img} 220 rm -f ${src}/etc/fstab 221} 222 223mk_nogeli_mbr_ufs_both() { 224 src=$1 225 img=$2 226 227 cat > ${src}/etc/fstab <<EOF 228/dev/ada0s1a / ufs rw 1 1 229EOF 230 cp ${src}/boot/boot1.efifat ${img}.s1 231 makefs -t ffs -B little -s 200m ${img}.s2a ${src} 232 mkimg -s bsd -b ${src}/boot/boot -p freebsd-ufs:=${img}.s2a -o ${img}.s2 233 mkimg -a 2 -s mbr -b ${src}/boot/mbr -p efi:=${img}.s1 -p freebsd:=${img}.s2 -o ${img} 234 rm -f ${src}/etc/fstab 235} 236 237mk_nogeli_mbr_zfs_legacy() { 238 src=$1 239 img=$2 240 mntpt=$3 241 geli=$4 242 scheme=$5 243 fs=$6 244 bios=$7 245 pool=nogeli-mbr-zfs-legacy 246 247 dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512)) 248 md=$(mdconfig -f ${img}) 249 gpart create -s mbr ${md} 250 gpart add -t freebsd ${md} 251 gpart set -a active -i 1 ${md} 252 gpart create -s bsd ${md}s1 253 gpart add -t freebsd-zfs ${md}s1 254 # install-boot will make this bootable 255 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s1a 256 zpool set bootfs=${pool} ${pool} 257 zfs create -po mountpoint=/ ${pool}/ROOT/default 258 # NB: The online guides go nuts customizing /var and other mountpoints here, no need 259 cpsys ${src} ${mntpt} 260 # need to make a couple of tweaks 261 cat > ${mntpt}/boot/loader.conf <<EOF 262zfs_load=YES 263opensolaris_load=YES 264EOF 265 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko 266 cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko 267 # end tweaks 268 zfs umount -f ${pool}/ROOT/default 269 zfs set mountpoint=none ${pool}/ROOT/default 270 zpool set bootfs=${pool}/ROOT/default ${pool} 271 zpool set autoexpand=on ${pool} 272 zpool export ${pool} 273 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md} 274 mdconfig -d -u ${md} 275} 276 277mk_nogeli_mbr_zfs_uefi() { 278 src=$1 279 img=$2 280 mntpt=$3 281 geli=$4 282 scheme=$5 283 fs=$6 284 bios=$7 285 pool=nogeli-mbr-zfs-uefi 286 287 dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512)) 288 md=$(mdconfig -f ${img}) 289 gpart create -s mbr ${md} 290 gpart add -t \!239 -s 800k ${md} 291 gpart add -t freebsd ${md} 292 gpart set -a active -i 2 ${md} 293 gpart create -s bsd ${md}s2 294 gpart add -t freebsd-zfs ${md}s2 295 # install-boot will make this bootable 296 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s2a 297 zpool set bootfs=${pool} ${pool} 298 zfs create -po mountpoint=/ ${pool}/ROOT/default 299 # NB: The online guides go nuts customizing /var and other mountpoints here, no need 300 cpsys ${src} ${mntpt} 301 # need to make a couple of tweaks 302 cat > ${mntpt}/boot/loader.conf <<EOF 303zfs_load=YES 304opensolaris_load=YES 305EOF 306 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko 307 cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko 308 # end tweaks 309 zfs umount -f ${pool}/ROOT/default 310 zfs set mountpoint=none ${pool}/ROOT/default 311 zpool set bootfs=${pool}/ROOT/default ${pool} 312 zpool set autoexpand=on ${pool} 313 zpool export ${pool} 314 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md} 315 mdconfig -d -u ${md} 316} 317 318mk_nogeli_mbr_zfs_both() { 319 src=$1 320 img=$2 321 mntpt=$3 322 geli=$4 323 scheme=$5 324 fs=$6 325 bios=$7 326 pool=nogeli-mbr-zfs-both 327 328 dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512)) 329 md=$(mdconfig -f ${img}) 330 gpart create -s mbr ${md} 331 gpart add -t \!239 -s 800k ${md} 332 gpart add -t freebsd ${md} 333 gpart set -a active -i 2 ${md} 334 gpart create -s bsd ${md}s2 335 gpart add -t freebsd-zfs ${md}s2 336 # install-boot will make this bootable 337 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s2a 338 zpool set bootfs=${pool} ${pool} 339 zfs create -po mountpoint=/ ${pool}/ROOT/default 340 # NB: The online guides go nuts customizing /var and other mountpoints here, no need 341 cpsys ${src} ${mntpt} 342 # need to make a couple of tweaks 343 cat > ${mntpt}/boot/loader.conf <<EOF 344zfs_load=YES 345opensolaris_load=YES 346EOF 347 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko 348 cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko 349 # end tweaks 350 zfs umount -f ${pool}/ROOT/default 351 zfs set mountpoint=none ${pool}/ROOT/default 352 zpool set bootfs=${pool}/ROOT/default ${pool} 353 zpool set autoexpand=on ${pool} 354 zpool export ${pool} 355 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md} 356 mdconfig -d -u ${md} 357} 358 359mk_geli_gpt_ufs_legacy() { 360 src=$1 361 img=$2 362 mntpt=$3 363 geli=$4 364 scheme=$5 365 fs=$6 366 bios=$7 367 368 dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 )) 369 md=$(mdconfig -f ${img}) 370 gpart create -s gpt ${md} 371 gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k 372 gpart add -t freebsd-ufs -l root $md 373 # install-boot will make this bootable 374 echo passphrase | geli init -bg -e AES-XTS -i 50000 -J - -l 256 -s 4096 ${md}p2 375 echo passphrase | geli attach -j - ${md}p2 376 newfs /dev/${md}p2.eli 377 mount /dev/${md}p2.eli ${mntpt} 378 cpsys ${src} ${mntpt} 379 # need to make a couple of tweaks 380 cat > ${mntpt}/boot/loader.conf <<EOF 381geom_eli_load=YES 382EOF 383 cat > ${mntpt}/etc/fstab <<EOF 384/dev/ada0p2.eli / ufs rw 1 1 385EOF 386 387 cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko 388 # end tweaks 389 umount -f ${mntpt} 390 geli detach ${md}p2 391 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md} 392 mdconfig -d -u ${md} 393} 394 395mk_geli_gpt_ufs_uefi() { 396 src=$1 397 img=$2 398 mntpt=$3 399 geli=$4 400 scheme=$5 401 fs=$6 402 bios=$7 403 404 dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 )) 405 md=$(mdconfig -f ${img}) 406 gpart create -s gpt ${md} 407 gpart add -t efi -s 800k -a 4k ${md} 408 gpart add -t freebsd-ufs -l root $md 409 # install-boot will make this bootable 410 echo passphrase | geli init -bg -e AES-XTS -i 50000 -J - -l 256 -s 4096 ${md}p2 411 echo passphrase | geli attach -j - ${md}p2 412 newfs /dev/${md}p2.eli 413 mount /dev/${md}p2.eli ${mntpt} 414 cpsys ${src} ${mntpt} 415 # need to make a couple of tweaks 416 cat > ${mntpt}/boot/loader.conf <<EOF 417geom_eli_load=YES 418EOF 419 cat > ${mntpt}/etc/fstab <<EOF 420/dev/ada0p2.eli / ufs rw 1 1 421EOF 422 423 cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko 424 # end tweaks 425 umount -f ${mntpt} 426 geli detach ${md}p2 427 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md} 428 mdconfig -d -u ${md} 429} 430 431mk_geli_gpt_ufs_both() { 432 src=$1 433 img=$2 434 mntpt=$3 435 geli=$4 436 scheme=$5 437 fs=$6 438 bios=$7 439 440 dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 )) 441 md=$(mdconfig -f ${img}) 442 gpart create -s gpt ${md} 443 gpart add -t efi -s 800k -a 4k ${md} 444 gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k 445 gpart add -t freebsd-ufs -l root $md 446 # install-boot will make this bootable 447 echo passphrase | geli init -bg -e AES-XTS -i 50000 -J - -l 256 -s 4096 ${md}p3 448 echo passphrase | geli attach -j - ${md}p3 449 newfs /dev/${md}p3.eli 450 mount /dev/${md}p3.eli ${mntpt} 451 cpsys ${src} ${mntpt} 452 # need to make a couple of tweaks 453 cat > ${mntpt}/boot/loader.conf <<EOF 454geom_eli_load=YES 455EOF 456 cat > ${mntpt}/etc/fstab <<EOF 457/dev/ada0p3.eli / ufs rw 1 1 458EOF 459 460 cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko 461 # end tweaks 462 umount -f ${mntpt} 463 geli detach ${md}p3 464 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md} 465 mdconfig -d -u ${md} 466} 467 468mk_geli_gpt_zfs_legacy() { 469 src=$1 470 img=$2 471 mntpt=$3 472 geli=$4 473 scheme=$5 474 fs=$6 475 bios=$7 476 pool=geli-gpt-zfs-legacy 477 478 dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 )) 479 md=$(mdconfig -f ${img}) 480 gpart create -s gpt ${md} 481 gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k 482 gpart add -t freebsd-zfs -l root $md 483 # install-boot will make this bootable 484 echo passphrase | geli init -bg -e AES-XTS -i 50000 -J - -l 256 -s 4096 ${md}p2 485 echo passphrase | geli attach -j - ${md}p2 486 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2.eli 487 zpool set bootfs=${pool} ${pool} 488 zfs create -po mountpoint=/ ${pool}/ROOT/default 489 # NB: The online guides go nuts customizing /var and other mountpoints here, no need 490 cpsys ${src} ${mntpt} 491 # need to make a couple of tweaks 492 cat > ${mntpt}/boot/loader.conf <<EOF 493zfs_load=YES 494opensolaris_load=YES 495geom_eli_load=YES 496EOF 497 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko 498 cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko 499 cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko 500 # end tweaks 501 zfs umount -f ${pool}/ROOT/default 502 zfs set mountpoint=none ${pool}/ROOT/default 503 zpool set bootfs=${pool}/ROOT/default ${pool} 504 zpool set autoexpand=on ${pool} 505 zpool export ${pool} 506 geli detach ${md}p2 507 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md} 508 mdconfig -d -u ${md} 509} 510 511mk_geli_gpt_zfs_uefi() { 512 src=$1 513 img=$2 514 mntpt=$3 515 geli=$4 516 scheme=$5 517 fs=$6 518 bios=$7 519 pool=geli-gpt-zfs-uefi 520 521 dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 )) 522 md=$(mdconfig -f ${img}) 523 gpart create -s gpt ${md} 524 gpart add -t efi -s 800k -a 4k ${md} 525 gpart add -t freebsd-zfs -l root $md 526 # install-boot will make this bootable 527 echo passphrase | geli init -bg -e AES-XTS -i 50000 -J - -l 256 -s 4096 ${md}p2 528 echo passphrase | geli attach -j - ${md}p2 529 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2.eli 530 zpool set bootfs=${pool} ${pool} 531 zfs create -po mountpoint=/ ${pool}/ROOT/default 532 # NB: The online guides go nuts customizing /var and other mountpoints here, no need 533 cpsys ${src} ${mntpt} 534 # need to make a couple of tweaks 535 cat > ${mntpt}/boot/loader.conf <<EOF 536zfs_load=YES 537opensolaris_load=YES 538geom_eli_load=YES 539EOF 540 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko 541 cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko 542 cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko 543 # end tweaks 544 zfs umount -f ${pool}/ROOT/default 545 zfs set mountpoint=none ${pool}/ROOT/default 546 zpool set bootfs=${pool}/ROOT/default ${pool} 547 zpool set autoexpand=on ${pool} 548 zpool export ${pool} 549 geli detach ${md}p2 550 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md} 551 mdconfig -d -u ${md} 552} 553 554mk_geli_gpt_zfs_both() { 555 src=$1 556 img=$2 557 mntpt=$3 558 geli=$4 559 scheme=$5 560 fs=$6 561 bios=$7 562 pool=geli-gpt-zfs-both 563 564 dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 )) 565 md=$(mdconfig -f ${img}) 566 gpart create -s gpt ${md} 567 gpart add -t efi -s 800k -a 4k ${md} 568 gpart add -t freebsd-boot -s 400k -a 4k ${md} # <= ~540k 569 gpart add -t freebsd-zfs -l root $md 570 # install-boot will make this bootable 571 echo passphrase | geli init -bg -e AES-XTS -i 50000 -J - -l 256 -s 4096 ${md}p3 572 echo passphrase | geli attach -j - ${md}p3 573 zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3.eli 574 zpool set bootfs=${pool} ${pool} 575 zfs create -po mountpoint=/ ${pool}/ROOT/default 576 # NB: The online guides go nuts customizing /var and other mountpoints here, no need 577 cpsys ${src} ${mntpt} 578 # need to make a couple of tweaks 579 cat > ${mntpt}/boot/loader.conf <<EOF 580zfs_load=YES 581opensolaris_load=YES 582geom_eli_load=YES 583EOF 584 cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko 585 cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko 586 cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko 587 # end tweaks 588 zfs umount -f ${pool}/ROOT/default 589 zfs set mountpoint=none ${pool}/ROOT/default 590 zpool set bootfs=${pool}/ROOT/default ${pool} 591 zpool set autoexpand=on ${pool} 592 zpool export ${pool} 593 geli detach ${md}p3 594 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md} 595 mdconfig -d -u ${md} 596} 597 598# GELI+MBR is not a valid configuration 599mk_geli_mbr_ufs_legacy() { 600} 601 602mk_geli_mbr_ufs_uefi() { 603} 604 605mk_geli_mbr_ufs_both() { 606} 607 608mk_geli_mbr_zfs_legacy() { 609} 610 611mk_geli_mbr_zfs_uefi() { 612} 613 614mk_geli_mbr_zfs_both() { 615} 616 617# iso 618# pxeldr 619# u-boot 620# powerpc 621 622mk_sparc64_nogeli_vtoc8_ufs_ofw() { 623 src=$1 624 img=$2 625 mntpt=$3 626 geli=$4 627 scheme=$5 628 fs=$6 629 bios=$7 630 631 cat > ${src}/etc/fstab <<EOF 632/dev/ada0a / ufs rw 1 1 633EOF 634 makefs -t ffs -B big -s 200m ${img} ${src} 635 md=$(mdconfig -f ${img}) 636 # For non-native builds, ensure that geom_part(4) supports VTOC8. 637 kldload geom_part_vtoc8.ko 638 gpart create -s VTOC8 ${md} 639 gpart add -t freebsd-ufs ${md} 640 ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md} 641 mdconfig -d -u ${md} 642 rm -f ${src}/etc/fstab 643} 644 645qser="-serial telnet::4444,server -nographic" 646 647# https://wiki.freebsd.org/QemuRecipes 648# aarch64 649qemu_aarch64_uefi() 650{ 651 img=$1 652 sh=$2 653 654 echo "qemu-system-aarch64 -m 4096M -cpu cortex-a57 -M virt \ 655 -bios QEMU_EFI.fd ${qser} \ 656 -drive if=none,file=${img},id=hd0 \ 657 -device virtio-blk-device,drive=hd0" > $sh 658# https://wiki.freebsd.org/arm64/QEMU also has 659# -device virtio-net-device,netdev=net0 660# -netdev user,id=net0 661} 662 663# Amd64 qemu 664qemu_amd64_legacy() 665{ 666 img=$1 667 sh=$2 668 669 echo "qemu-system-x86_64 -m 256m --drive file=${img},format=raw ${qser}" > $sh 670} 671 672qemu_amd64_uefi() 673{ 674 img=$1 675 sh=$2 676 677 echo "qemu-system-x86_64 -m 256m -bios ~/bios/OVMF-X64.fd --drive file=${img},format=raw ${qser}" > $sh 678} 679 680qemu_amd64_both() 681{ 682 img=$1 683 sh=$2 684 685 echo "qemu-system-x86_64 -m 256m --drive file=${img},format=raw ${qser}" > $sh 686 echo "qemu-system-x86_64 -m 256m -bios ~/bios/OVMF-X64.fd --drive file=${img},format=raw ${qser}" >> $sh 687} 688 689# arm 690# nothing listed? 691 692# i386 693qemu_i386_legacy() 694{ 695 img=$1 696 sh=$2 697 698 echo "qemu-system-i386 --drive file=${img},format=raw ${qser}" > $sh 699} 700 701# Not yet supported 702qemu_i386_uefi() 703{ 704 img=$1 705 sh=$2 706 707 echo "qemu-system-i386 -bios ~/bios/OVMF-X32.fd --drive file=${img},format=raw ${qser}" > $sh 708} 709 710# Needs UEFI to be supported 711qemu_i386_both() 712{ 713 img=$1 714 sh=$2 715 716 echo "qemu-system-i386 --drive file=${img},format=raw ${qser}" > $sh 717 echo "qemu-system-i386 -bios ~/bios/OVMF-X32.fd --drive file=${img},format=raw ${qser}" >> $sh 718} 719 720# mips 721# qemu-system-mips -kernel /path/to/rootfs/boot/kernel/kernel -nographic -hda /path/to/disk.img -m 2048 722 723# Powerpc -- doesn't work but maybe it would enough for testing -- needs details 724# powerpc64 725# qemu-system-ppc64 -drive file=/path/to/disk.img,format=raw 726 727# sparc64 728# qemu-system-sparc64 -drive file=/path/to/disk.img,format=raw 729 730# Misc variables 731SRCTOP=$(make -v SRCTOP) 732cd ${SRCTOP}/stand 733OBJDIR=$(make -v .OBJDIR) 734IMGDIR=${OBJDIR}/boot-images 735mkdir -p ${IMGDIR} 736MNTPT=$(mktemp -d /tmp/stand-test.XXXXXX) 737 738# Setup the installed tree... 739DESTDIR=${OBJDIR}/boot-tree 740rm -rf ${DESTDIR} 741mkdir -p ${DESTDIR}/boot/defaults 742mkdir -p ${DESTDIR}/boot/kernel 743# XXX boot1 exists only on sparc64 744cp /boot/boot1 ${DESTDIR}/boot 745cp /boot/kernel/kernel ${DESTDIR}/boot/kernel 746echo -h -D -S115200 > ${DESTDIR}/boot.config 747# XXX 748cp /boot/device.hints ${DESTDIR}/boot/device.hints 749# Assume we're already built 750make install DESTDIR=${DESTDIR} MK_MAN=no MK_INSTALL_AS_USER=yes 751# Copy init, /bin/sh, minimal libraries and testing /etc/rc 752mkdir -p ${DESTDIR}/sbin ${DESTDIR}/bin \ 753 ${DESTDIR}/lib ${DESTDIR}/libexec \ 754 ${DESTDIR}/etc ${DESTDIR}/dev 755for f in /sbin/halt /sbin/init /bin/sh $(ldd /bin/sh | awk 'NF == 4 { print $3; }') /libexec/ld-elf.so.1; do 756 cp $f ${DESTDIR}/$f 757done 758cat > ${DESTDIR}/etc/rc <<EOF 759#!/bin/sh 760 761echo "RC COMMAND RUNNING -- SUCCESS!!!!!" 762halt -p 763EOF 764 765# OK. Let the games begin 766 767for arch in amd64; do 768 for geli in nogeli geli; do 769 for scheme in gpt mbr; do 770 for fs in ufs zfs; do 771 for bios in legacy uefi both; do 772 # Create sparse file and mount newly created filesystem(s) on it 773 img=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.img 774 sh=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.sh 775 echo "vvvvvvvvvvvvvvvvvvvvvv Creating $img vvvvvvvvvvvvvvvvvvvvvvv" 776 rm -f ${img}* 777 eval mk_${geli}_${scheme}_${fs}_${bios} ${DESTDIR} ${img} ${MNTPT} ${geli} ${scheme} ${fs} ${bios} 778 eval qemu_${arch}_${bios} ${img} ${sh} 779 [ -n "${SUDO_USER}" ] && chown ${SUDO_USER} ${img}* 780 echo "^^^^^^^^^^^^^^^^^^^^^^ Creating $img ^^^^^^^^^^^^^^^^^^^^^^^" 781 done 782 done 783 done 784 done 785done 786 787rmdir ${MNTPT} 788 789exit 0 790 791# Notes for the future 792 793for arch in i386; do 794 for geli in nogeli geli; do 795 for scheme in gpt mbr; do 796 for fs in ufs zfs; do 797 for bios in legacy; do 798 # Create sparse file and mount newly created filesystem(s) on it 799 img=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.img 800 sh=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.sh 801 echo "vvvvvvvvvvvvvvvvvvvvvv Creating $img vvvvvvvvvvvvvvvvvvvvvvv" 802 rm -f ${img}* 803 eval mk_${geli}_${scheme}_${fs}_${bios} ${DESTDIR} ${img} ${MNTPT} ${geli} ${scheme} ${fs} ${bios} 804 eval qemu_${arch}_${bios} ${img} ${sh} 805 [ -n "${SUDO_USER}" ] && chown ${SUDO_USER} ${img}* 806 echo "^^^^^^^^^^^^^^^^^^^^^^ Creating $img ^^^^^^^^^^^^^^^^^^^^^^^" 807 done 808 done 809 done 810 done 811done 812 813for arch in arm aarch64; do 814 for scheme in gpt mbr; do 815 fs=ufs 816 for bios in uboot efi; do 817 # Create sparse file and mount newly created filesystem(s) on it 818 img=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.img 819 sh=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.sh 820 echo "vvvvvvvvvvvvvvvvvvvvvv Creating $img vvvvvvvvvvvvvvvvvvvvvvv" 821 rm -f ${img}* 822 eval mk_${geli}_${scheme}_${fs}_${bios} ${DESTDIR} ${img} ${MNTPT} ${geli} ${scheme} ${fs} ${bios} 823 eval qemu_${arch}_${bios} ${img} ${sh} 824 [ -n "${SUDO_USER}" ] && chown ${SUDO_USER} ${img}* 825 echo "^^^^^^^^^^^^^^^^^^^^^^ Creating $img ^^^^^^^^^^^^^^^^^^^^^^^" 826 done 827 done 828done 829 830for arch in powerpc powerpc64; do 831 for scheme in ppc-wtf; do 832 fs=ufs 833 for bios in ofw uboot chrp; do 834 # Create sparse file and mount newly created filesystem(s) on it 835 img=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.img 836 sh=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.sh 837 echo "vvvvvvvvvvvvvvvvvvvvvv Creating $img vvvvvvvvvvvvvvvvvvvvvvv" 838 rm -f ${img}* 839 eval mk_${geli}_${scheme}_${fs}_${bios} ${DESTDIR} ${img} ${MNTPT} ${geli} ${scheme} ${fs} ${bios} 840 eval qemu_${arch}_${bios} ${img} ${sh} 841 [ -n "${SUDO_USER}" ] && chown ${SUDO_USER} ${img}* 842 echo "^^^^^^^^^^^^^^^^^^^^^^ Creating $img ^^^^^^^^^^^^^^^^^^^^^^^" 843 done 844 done 845done 846 847for arch in sparc64; do 848 for geli in nogeli; do 849 for scheme in vtoc8; do 850 for fs in ufs; do 851 for bios in ofw; do 852 # Create sparse file and mount newly created filesystem(s) on it 853 img=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.img 854 sh=${IMGDIR}/${arch}-${geli}-${scheme}-${fs}-${bios}.sh 855 echo "vvvvvvvvvvvvvvvvvvvvvv Creating $img vvvvvvvvvvvvvvvvvvvvvvv" 856 rm -f ${img}* 857 eval mk_${arch}_${geli}_${scheme}_${fs}_${bios} ${DESTDIR} ${img} ${MNTPT} ${geli} ${scheme} ${fs} ${bios} 858 eval qemu_${arch}_${bios} ${img} ${sh} 859 [ -n "${SUDO_USER}" ] && chown ${SUDO_USER} ${img}* 860 echo "^^^^^^^^^^^^^^^^^^^^^^ Creating $img ^^^^^^^^^^^^^^^^^^^^^^^" 861 done 862 done 863 done 864 done 865done 866