svn commit: r335279 - head/tools/boot

Allan Jude allanjude at FreeBSD.org
Sun Jun 17 05:55:33 UTC 2018


Author: allanjude
Date: Sun Jun 17 05:55:31 2018
New Revision: 335279
URL: https://svnweb.freebsd.org/changeset/base/335279

Log:
  rootgen.sh: complete all profiles except GELI+MBR (not supported)
  
  This extends the test suite to generate images for every combination of:
  amd64: mbr/gpt geli/nogeli ufs/zfs legacy/uefi/both
  
  Except for mbr+geli, which is not currently possible.
  
  Reviewed by:	imp (previous version)
  Sponsored by:	Klara Systems
  Differential Revision:	https://reviews.freebsd.org/D15846

Modified:
  head/tools/boot/install-boot.sh
  head/tools/boot/rootgen.sh

Modified: head/tools/boot/install-boot.sh
==============================================================================
--- head/tools/boot/install-boot.sh	Sun Jun 17 05:14:50 2018	(r335278)
+++ head/tools/boot/install-boot.sh	Sun Jun 17 05:55:31 2018	(r335279)
@@ -27,7 +27,7 @@ find-part() {
     gpart show $dev | tail +2 | awk '$4 == "'$part'" { print $3; }'
 }
 
-boot_nogeli_gpt_zfs_legacy() {
+boot_nogeli_gpt_ufs_legacy() {
     dev=$1
     dst=$2
 
@@ -35,20 +35,34 @@ boot_nogeli_gpt_zfs_legacy() {
     if [ -z "$idx" ] ; then
 	die "No freebsd-boot partition found"
     fi
-    doit gpart bootcode -b ${gpt0} -p ${gptzfs2} -i $idx $dev
-    exit 0
+    doit gpart bootcode -b ${gpt0} -p ${gpt2} -i $idx $dev
 }
 
-boot_nogeli_gpt_ufs_legacy() {
+boot_nogeli_gpt_ufs_uefi() {
     dev=$1
     dst=$2
 
+    idx=$(find-part $dev "efi")
+    if [ -z "$idx" ] ; then
+	die "No ESP partition found"
+    fi
+    doit gpart bootcode -p ${efi2} -i $idx $dev
+}
+
+boot_nogeli_gpt_ufs_both() {
+    boot_nogeli_gpt_ufs_legacy $1 $2 $3
+    boot_nogeli_gpt_ufs_uefi $1 $2 $3
+}
+
+boot_nogeli_gpt_zfs_legacy() {
+    dev=$1
+    dst=$2
+
     idx=$(find-part $dev "freebsd-boot")
     if [ -z "$idx" ] ; then
 	die "No freebsd-boot partition found"
     fi
-    doit gpart bootcode -b ${gpt0} -p ${gpt2} -i $idx $dev
-    exit 0
+    doit gpart bootcode -b ${gpt0} -p ${gptzfs2} -i $idx $dev
 }
 
 boot_nogeli_gpt_zfs_uefi() {
@@ -57,64 +71,132 @@ boot_nogeli_gpt_zfs_uefi() {
 
     idx=$(find-part $dev "efi")
     if [ -z "$idx" ] ; then
-	die "No efi ESP partition found"
+	die "No ESP partition found"
     fi
     doit gpart bootcode -p ${efi2} -i $idx $dev
-    exit 0
 }
 
 boot_nogeli_gpt_zfs_both() {
+    boot_nogeli_gpt_zfs_legacy $1 $2 $3
+    boot_nogeli_gpt_zfs_uefi $1 $2 $3
+}
+
+boot_nogeli_mbr_ufs_legacy() {
     dev=$1
     dst=$2
 
-    # XXX: Should this be copy/pasted, or should it call both _uefi and _legacy
-    idx=$(find-part $dev "efi")
-    if [ -z "$idx" ] ; then
-	die "No efi ESP partition found"
+    doit gpart bootcode -b ${mbr0} ${dev}
+    s=$(find-part $dev "freebsd")
+    if [ -z "$s" ] ; then
+	die "No freebsd slice found"
     fi
-    doit gpart bootcode -p ${efi2} -i $idx $dev
+    doit gpart bootcode -p ${mbr2} ${dev}s${s}
+}
 
-    idx=$(find-part $dev "freebsd-boot")
-    if [ -z "$idx" ] ; then
-	die "No freebsd-boot partition found"
+boot_nogeli_mbr_ufs_uefi() {
+    dev=$1
+    dst=$2
+
+    s=$(find-part ${dev} "!239")
+    if [ -z "$s" ] ; then
+	die "No ESP slice found"
     fi
-    doit gpart bootcode -b ${gpt0} -p ${gptzfs2} -i $idx $dev
-    exit 0
+    doit gpart bootcode -p ${efi2} -i ${s} ${dev}
 }
 
+boot_nogeli_mbr_ufs_both() {
+    boot_nogeli_mbr_ufs_legacy $1 $2 $3
+    boot_nogeli_mbr_ufs_uefi $1 $2 $3
+}
+
 boot_nogeli_mbr_zfs_legacy() {
     dev=$1
     dst=$2
 
     # search to find the BSD slice
-    s=$(findpart $dev "freebsd-zfs")
+    s=$(find-part $dev "freebsd")
     if [ -z "$s" ] ; then
+	die "No BSD slice found"
+    fi
+    idx=$(find-part ${dev}s${s} "freebsd-zfs")
+    if [ -z "$idx" ] ; then
 	die "No freebsd-zfs slice found"
     fi
     # search to find the freebsd-zfs partition within the slice
     # Or just assume it is 'a' because it has to be since it fails otherwise
+    doit gpart bootcode -b ${dst}/boot/mbr ${dev}
     dd if=${dst}/boot/zfsboot of=/tmp/zfsboot1 count=1
-    doit gpart bootcode -b /tmp/zfsboo1 ${dev}s${s}	# Put boot1 into the start of part
+    doit gpart bootcode -b /tmp/zfsboot1 ${dev}s${s}	# Put boot1 into the start of part
     sysctl kern.geom.debugflags=0x10		# Put boot2 into ZFS boot slot
-    doit dd if=${dst}/boot/zfsboot of=/dev/${dev}s${s} iseek=1 seek=1024
+    doit dd if=${dst}/boot/zfsboot of=/dev/${dev}s${s}a skip=1 seek=1024
     sysctl kern.geom.debugflags=0x0
-
-    exit 0
 }
 
-boot_nogeli_mbr_ufs_legacy() {
+boot_nogeli_mbr_zfs_uefi() {
     dev=$1
     dst=$2
 
-    doit gpart bootcode -b ${mbr0} ${dev}
-    s=$(findpart $dev "freebsd-ufs")
+    s=$(find-part $dev "!239")
     if [ -z "$s" ] ; then
-	die "No freebsd-ufs slice found"
+	die "No ESP slice found"
     fi
-    doit gpart bootcode -p ${mbr2} ${dev}s${s}
-    exit 0
+    doit gpart bootcode -p ${efi2} -i ${s} ${dev}
 }
 
+boot_nogeli_mbr_zfs_both() {
+    boot_nogeli_mbr_zfs_legacy $1 $2 $3
+    boot_nogeli_mbr_zfs_uefi $1 $2 $3
+}
+
+boot_geli_gpt_ufs_legacy() {
+    boot_nogeli_gpt_ufs_legacy $1 $2 $3
+}
+
+boot_geli_gpt_ufs_uefi() {
+    boot_nogeli_gpt_ufs_uefi $1 $2 $3
+}
+
+boot_geli_gpt_ufs_both() {
+    boot_nogeli_gpt_ufs_both $1 $2 $3
+}
+
+boot_geli_gpt_zfs_legacy() {
+    boot_nogeli_gpt_zfs_legacy $1 $2 $3
+}
+
+boot_geli_gpt_zfs_uefi() {
+    boot_nogeli_gpt_zfs_uefi $1 $2 $3
+}
+
+boot_geli_gpt_zfs_both() {
+    boot_nogeli_gpt_zfs_both $1 $2 $3
+}
+
+# GELI+MBR is not a valid configuration
+boot_geli_mbr_ufs_legacy() {
+    exit 1
+}
+
+boot_geli_mbr_ufs_uefi() {
+    exit 1
+}
+
+boot_geli_mbr_ufs_both() {
+    exit 1
+}
+
+boot_geli_mbr_zfs_legacy() {
+    exit 1
+}
+
+boot_geli_mbr_zfs_uefi() {
+    exit 1
+}
+
+boot_geli_mbr_zfs_both() {
+    exit 1
+}
+
 boot_nogeli_vtoc8_ufs_ofw() {
     dev=$1
     dst=$2
@@ -122,7 +204,6 @@ boot_nogeli_vtoc8_ufs_ofw() {
     # For non-native builds, ensure that geom_part(4) supports VTOC8.
     kldload geom_part_vtoc8.ko
     doit gpart bootcode -p ${vtoc8} ${dev}
-    exit 0
 }
 
 DESTDIR=/
@@ -166,11 +247,12 @@ gpt2=${DESTDIR}/boot/gptboot
 gptzfs2=${DESTDIR}/boot/gptzfsboot
 
 # For gpt + EFI we install the ESP
-# XXX This should use newfs or makefs, but it deosn't yet
+# XXX This should use newfs or makefs, but it doesn't yet
+efi1=${DESTDIR}/boot/boot1.efi
 efi2=${DESTDIR}/boot/boot1.efifat
 
-# For MBR, we have lots of choices, but select boot0
-mbr0=${DESTDIR}/boot/boot0
+# For MBR, we have lots of choices, but select mbr, boot0 has issues with UEFI
+mbr0=${DESTDIR}/boot/mbr
 mbr2=${DESTDIR}/boot/boot
 
 # VTOC8

Modified: head/tools/boot/rootgen.sh
==============================================================================
--- head/tools/boot/rootgen.sh	Sun Jun 17 05:14:50 2018	(r335278)
+++ head/tools/boot/rootgen.sh	Sun Jun 17 05:55:31 2018	(r335279)
@@ -51,9 +51,9 @@ mk_nogeli_gpt_ufs_uefi() {
 /dev/ada0p2	/		ufs	rw	1	1
 EOF
 # XXX need to make msdos part for this to work XXXX
-    cp ${src}/boot/boot.efifat ${img}.p1
+    cp ${src}/boot/boot1.efifat ${img}.p1
     makefs -t ffs -B little -s 200m ${img}.p2 ${src}
-    mkimg -s gpt -b ${src}/boot/pmbr \
+    mkimg -s gpt \
 	  -p efi:=${img}.p1 \
 	  -p freebsd-ufs:=${img}.p2 -o ${img}
     rm -f ${src}/etc/fstab
@@ -67,7 +67,7 @@ mk_nogeli_gpt_ufs_both() {
 /dev/ada0p3	/		ufs	rw	1	1
 EOF
     # XXX need to make msdos part for this to work XXXX
-    cp ${src}/boot/boot.efifat ${img}.p1
+    cp ${src}/boot/boot1.efifat ${img}.p1
     makefs -t ffs -B little -s 200m ${img}.p3 ${src}
     # p1 is boot for uefi, p2 is boot for gpt, p3 is /
     mkimg -b ${src}/boot/pmbr -s gpt \
@@ -99,7 +99,6 @@ mk_nogeli_gpt_zfs_legacy() {
     zfs create -po mountpoint=/ ${pool}/ROOT/default
     # NB: The online guides go nuts customizing /var and other mountpoints here, no need
     cpsys ${src} ${mntpt}
-    df
     # need to make a couple of tweaks
     cat > ${mntpt}/boot/loader.conf <<EOF
 zfs_load=YES
@@ -107,7 +106,6 @@ opensolaris_load=YES
 EOF
     cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
     cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
-    ls -las ${mntpt}/boot
     # end tweaks
     zfs umount -f ${pool}/ROOT/default
     zfs set mountpoint=none ${pool}/ROOT/default
@@ -139,7 +137,6 @@ mk_nogeli_gpt_zfs_uefi() {
     zfs create -po mountpoint=/ ${pool}/ROOT/default
     # NB: The online guides go nuts customizing /var and other mountpoints here, no need
     cpsys ${src} ${mntpt}
-    df
     # need to make a couple of tweaks
     cat > ${mntpt}/boot/loader.conf <<EOF
 zfs_load=YES
@@ -147,7 +144,6 @@ opensolaris_load=YES
 EOF
     cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
     cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
-    ls -las ${mntpt}/boot
     # end tweaks
     zfs umount -f ${pool}/ROOT/default
     zfs set mountpoint=none ${pool}/ROOT/default
@@ -180,7 +176,6 @@ mk_nogeli_gpt_zfs_both() {
     zfs create -po mountpoint=/ ${pool}/ROOT/default
     # NB: The online guides go nuts customizing /var and other mountpoints here, no need
     cpsys ${src} ${mntpt}
-    df
     # need to make a couple of tweaks
     cat > ${mntpt}/boot/loader.conf <<EOF
 zfs_load=YES
@@ -188,7 +183,6 @@ opensolaris_load=YES
 EOF
     cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
     cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
-    ls -las ${mntpt}/boot
     # end tweaks
     zfs umount -f ${pool}/ROOT/default
     zfs set mountpoint=none ${pool}/ROOT/default
@@ -208,43 +202,400 @@ mk_nogeli_mbr_ufs_legacy() {
 EOF
     makefs -t ffs -B little -s 200m ${img}.s1a ${src}
     mkimg -s bsd -b ${src}/boot/boot -p freebsd-ufs:=${img}.s1a -o ${img}.s1
-    mkimg -a 1 ${bootmbr} -s mbr -b ${src}/boot/boot0sio -p freebsd:=${img}.s1 -o ${img}
+    mkimg -a 1 -s mbr -b ${src}/boot/boot0sio -p freebsd:=${img}.s1 -o ${img}
     rm -f ${src}/etc/fstab
 }
 
 mk_nogeli_mbr_ufs_uefi() {
+    src=$1
+    img=$2
+
+    cat > ${src}/etc/fstab <<EOF
+/dev/ada0s1a	/		ufs	rw	1	1
+EOF
+    cp ${src}/boot/boot1.efifat ${img}.s1
+    makefs -t ffs -B little -s 200m ${img}.s2a ${src}
+    mkimg -s bsd -p freebsd-ufs:=${img}.s2a -o ${img}.s2
+    mkimg -a 1 -s mbr -p efi:=${img}.s1 -p freebsd:=${img}.s2 -o ${img}
+    rm -f ${src}/etc/fstab
 }
 
 mk_nogeli_mbr_ufs_both() {
+    src=$1
+    img=$2
+
+    cat > ${src}/etc/fstab <<EOF
+/dev/ada0s1a	/		ufs	rw	1	1
+EOF
+    cp ${src}/boot/boot1.efifat ${img}.s1
+    makefs -t ffs -B little -s 200m ${img}.s2a ${src}
+    mkimg -s bsd -b ${src}/boot/boot -p freebsd-ufs:=${img}.s2a -o ${img}.s2
+    mkimg -a 2 -s mbr -b ${src}/boot/mbr -p efi:=${img}.s1 -p freebsd:=${img}.s2 -o ${img}
+    rm -f ${src}/etc/fstab
 }
 
 mk_nogeli_mbr_zfs_legacy() {
+    src=$1
+    img=$2
+    mntpt=$3
+    geli=$4
+    scheme=$5
+    fs=$6
+    bios=$7
+    pool=nogeli-mbr-zfs-legacy
+
+    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
+    md=$(mdconfig -f ${img})
+    gpart create -s mbr ${md}
+    gpart add -t freebsd ${md}
+    gpart set -a active -i 1 ${md}
+    gpart create -s bsd ${md}s1
+    gpart add -t freebsd-zfs ${md}s1
+    # install-boot will make this bootable
+    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s1a
+    zpool set bootfs=${pool} ${pool}
+    zfs create -po mountpoint=/ ${pool}/ROOT/default
+    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
+    cpsys ${src} ${mntpt}
+    # need to make a couple of tweaks
+    cat > ${mntpt}/boot/loader.conf <<EOF
+zfs_load=YES
+opensolaris_load=YES
+EOF
+    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
+    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
+    # end tweaks
+    zfs umount -f ${pool}/ROOT/default
+    zfs set mountpoint=none ${pool}/ROOT/default
+    zpool set bootfs=${pool}/ROOT/default ${pool}
+    zpool set autoexpand=on ${pool}
+    zpool export ${pool}
+    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
+    mdconfig -d -u ${md}
 }
 
 mk_nogeli_mbr_zfs_uefi() {
+    src=$1
+    img=$2
+    mntpt=$3
+    geli=$4
+    scheme=$5
+    fs=$6
+    bios=$7
+    pool=nogeli-mbr-zfs-uefi
+
+    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
+    md=$(mdconfig -f ${img})
+    gpart create -s mbr ${md}
+    gpart add -t \!239 -s 800k ${md}
+    gpart add -t freebsd ${md}
+    gpart set -a active -i 2 ${md}
+    gpart create -s bsd ${md}s2
+    gpart add -t freebsd-zfs ${md}s2
+    # install-boot will make this bootable
+    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s2a
+    zpool set bootfs=${pool} ${pool}
+    zfs create -po mountpoint=/ ${pool}/ROOT/default
+    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
+    cpsys ${src} ${mntpt}
+    # need to make a couple of tweaks
+    cat > ${mntpt}/boot/loader.conf <<EOF
+zfs_load=YES
+opensolaris_load=YES
+EOF
+    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
+    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
+    # end tweaks
+    zfs umount -f ${pool}/ROOT/default
+    zfs set mountpoint=none ${pool}/ROOT/default
+    zpool set bootfs=${pool}/ROOT/default ${pool}
+    zpool set autoexpand=on ${pool}
+    zpool export ${pool}
+    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
+    mdconfig -d -u ${md}
 }
 
 mk_nogeli_mbr_zfs_both() {
+    src=$1
+    img=$2
+    mntpt=$3
+    geli=$4
+    scheme=$5
+    fs=$6
+    bios=$7
+    pool=nogeli-mbr-zfs-both
+
+    dd if=/dev/zero of=${img} count=1 seek=$((200 * 1024 * 1024 / 512))
+    md=$(mdconfig -f ${img})
+    gpart create -s mbr ${md}
+    gpart add -t \!239 -s 800k ${md}
+    gpart add -t freebsd ${md}
+    gpart set -a active -i 2 ${md}
+    gpart create -s bsd ${md}s2
+    gpart add -t freebsd-zfs ${md}s2
+    # install-boot will make this bootable
+    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}s2a
+    zpool set bootfs=${pool} ${pool}
+    zfs create -po mountpoint=/ ${pool}/ROOT/default
+    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
+    cpsys ${src} ${mntpt}
+    # need to make a couple of tweaks
+    cat > ${mntpt}/boot/loader.conf <<EOF
+zfs_load=YES
+opensolaris_load=YES
+EOF
+    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
+    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
+    # end tweaks
+    zfs umount -f ${pool}/ROOT/default
+    zfs set mountpoint=none ${pool}/ROOT/default
+    zpool set bootfs=${pool}/ROOT/default ${pool}
+    zpool set autoexpand=on ${pool}
+    zpool export ${pool}
+    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
+    mdconfig -d -u ${md}
 }
 
 mk_geli_gpt_ufs_legacy() {
+    src=$1
+    img=$2
+    mntpt=$3
+    geli=$4
+    scheme=$5
+    fs=$6
+    bios=$7
+
+    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
+    md=$(mdconfig -f ${img})
+    gpart create -s gpt ${md}
+    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
+    gpart add -t freebsd-ufs -l root $md
+    # install-boot will make this bootable
+    echo passphrase | geli init -bg -e AES-XTS -i 50000 -J - -l 256 -s 4096 ${md}p2
+    echo passphrase | geli attach -j - ${md}p2
+    newfs /dev/${md}p2.eli
+    mount /dev/${md}p2.eli ${mntpt}
+    cpsys ${src} ${mntpt}
+    # need to make a couple of tweaks
+    cat > ${mntpt}/boot/loader.conf <<EOF
+geom_eli_load=YES
+EOF
+    cat > ${mntpt}/etc/fstab <<EOF
+/dev/ada0p2.eli	/		ufs	rw	1	1
+EOF
+
+    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
+    # end tweaks
+    umount -f ${mntpt}
+    geli detach ${md}p2
+    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
+    mdconfig -d -u ${md}
 }
 
 mk_geli_gpt_ufs_uefi() {
+    src=$1
+    img=$2
+    mntpt=$3
+    geli=$4
+    scheme=$5
+    fs=$6
+    bios=$7
+
+    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
+    md=$(mdconfig -f ${img})
+    gpart create -s gpt ${md}
+    gpart add -t efi -s 800k -a 4k ${md}
+    gpart add -t freebsd-ufs -l root $md
+    # install-boot will make this bootable
+    echo passphrase | geli init -bg -e AES-XTS -i 50000 -J - -l 256 -s 4096 ${md}p2
+    echo passphrase | geli attach -j - ${md}p2
+    newfs /dev/${md}p2.eli
+    mount /dev/${md}p2.eli ${mntpt}
+    cpsys ${src} ${mntpt}
+    # need to make a couple of tweaks
+    cat > ${mntpt}/boot/loader.conf <<EOF
+geom_eli_load=YES
+EOF
+    cat > ${mntpt}/etc/fstab <<EOF
+/dev/ada0p2.eli	/		ufs	rw	1	1
+EOF
+
+    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
+    # end tweaks
+    umount -f ${mntpt}
+    geli detach ${md}p2
+    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
+    mdconfig -d -u ${md}
 }
 
 mk_geli_gpt_ufs_both() {
+    src=$1
+    img=$2
+    mntpt=$3
+    geli=$4
+    scheme=$5
+    fs=$6
+    bios=$7
+
+    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
+    md=$(mdconfig -f ${img})
+    gpart create -s gpt ${md}
+    gpart add -t efi -s 800k -a 4k ${md}
+    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
+    gpart add -t freebsd-ufs -l root $md
+    # install-boot will make this bootable
+    echo passphrase | geli init -bg -e AES-XTS -i 50000 -J - -l 256 -s 4096 ${md}p3
+    echo passphrase | geli attach -j - ${md}p3
+    newfs /dev/${md}p3.eli
+    mount /dev/${md}p3.eli ${mntpt}
+    cpsys ${src} ${mntpt}
+    # need to make a couple of tweaks
+    cat > ${mntpt}/boot/loader.conf <<EOF
+geom_eli_load=YES
+EOF
+    cat > ${mntpt}/etc/fstab <<EOF
+/dev/ada0p3.eli	/		ufs	rw	1	1
+EOF
+
+    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
+    # end tweaks
+    umount -f ${mntpt}
+    geli detach ${md}p3
+    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
+    mdconfig -d -u ${md}
 }
 
 mk_geli_gpt_zfs_legacy() {
+    src=$1
+    img=$2
+    mntpt=$3
+    geli=$4
+    scheme=$5
+    fs=$6
+    bios=$7
+    pool=geli-gpt-zfs-legacy
+
+    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
+    md=$(mdconfig -f ${img})
+    gpart create -s gpt ${md}
+    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
+    gpart add -t freebsd-zfs -l root $md
+    # install-boot will make this bootable
+    echo passphrase | geli init -bg -e AES-XTS -i 50000 -J - -l 256 -s 4096 ${md}p2
+    echo passphrase | geli attach -j - ${md}p2
+    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2.eli
+    zpool set bootfs=${pool} ${pool}
+    zfs create -po mountpoint=/ ${pool}/ROOT/default
+    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
+    cpsys ${src} ${mntpt}
+    # need to make a couple of tweaks
+    cat > ${mntpt}/boot/loader.conf <<EOF
+zfs_load=YES
+opensolaris_load=YES
+geom_eli_load=YES
+EOF
+    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
+    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
+    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
+    # end tweaks
+    zfs umount -f ${pool}/ROOT/default
+    zfs set mountpoint=none ${pool}/ROOT/default
+    zpool set bootfs=${pool}/ROOT/default ${pool}
+    zpool set autoexpand=on ${pool}
+    zpool export ${pool}
+    geli detach ${md}p2
+    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
+    mdconfig -d -u ${md}
 }
 
 mk_geli_gpt_zfs_uefi() {
+    src=$1
+    img=$2
+    mntpt=$3
+    geli=$4
+    scheme=$5
+    fs=$6
+    bios=$7
+    pool=geli-gpt-zfs-uefi
+
+    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
+    md=$(mdconfig -f ${img})
+    gpart create -s gpt ${md}
+    gpart add -t efi -s 800k -a 4k ${md}
+    gpart add -t freebsd-zfs -l root $md
+    # install-boot will make this bootable
+    echo passphrase | geli init -bg -e AES-XTS -i 50000 -J - -l 256 -s 4096 ${md}p2
+    echo passphrase | geli attach -j - ${md}p2
+    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2.eli
+    zpool set bootfs=${pool} ${pool}
+    zfs create -po mountpoint=/ ${pool}/ROOT/default
+    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
+    cpsys ${src} ${mntpt}
+    # need to make a couple of tweaks
+    cat > ${mntpt}/boot/loader.conf <<EOF
+zfs_load=YES
+opensolaris_load=YES
+geom_eli_load=YES
+EOF
+    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
+    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
+    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
+    # end tweaks
+    zfs umount -f ${pool}/ROOT/default
+    zfs set mountpoint=none ${pool}/ROOT/default
+    zpool set bootfs=${pool}/ROOT/default ${pool}
+    zpool set autoexpand=on ${pool}
+    zpool export ${pool}
+    geli detach ${md}p2
+    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
+    mdconfig -d -u ${md}
 }
 
 mk_geli_gpt_zfs_both() {
+    src=$1
+    img=$2
+    mntpt=$3
+    geli=$4
+    scheme=$5
+    fs=$6
+    bios=$7
+    pool=geli-gpt-zfs-both
+
+    dd if=/dev/zero of=${img} count=1 seek=$(( 200 * 1024 * 1024 / 512 ))
+    md=$(mdconfig -f ${img})
+    gpart create -s gpt ${md}
+    gpart add -t efi -s 800k -a 4k ${md}
+    gpart add -t freebsd-boot -s 400k -a 4k	${md}	# <= ~540k
+    gpart add -t freebsd-zfs -l root $md
+    # install-boot will make this bootable
+    echo passphrase | geli init -bg -e AES-XTS -i 50000 -J - -l 256 -s 4096 ${md}p3
+    echo passphrase | geli attach -j - ${md}p3
+    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3.eli
+    zpool set bootfs=${pool} ${pool}
+    zfs create -po mountpoint=/ ${pool}/ROOT/default
+    # NB: The online guides go nuts customizing /var and other mountpoints here, no need
+    cpsys ${src} ${mntpt}
+    # need to make a couple of tweaks
+    cat > ${mntpt}/boot/loader.conf <<EOF
+zfs_load=YES
+opensolaris_load=YES
+geom_eli_load=YES
+EOF
+    cp /boot/kernel/zfs.ko ${mntpt}/boot/kernel/zfs.ko
+    cp /boot/kernel/opensolaris.ko ${mntpt}/boot/kernel/opensolaris.ko
+    cp /boot/kernel/geom_eli.ko ${mntpt}/boot/kernel/geom_eli.ko
+    # end tweaks
+    zfs umount -f ${pool}/ROOT/default
+    zfs set mountpoint=none ${pool}/ROOT/default
+    zpool set bootfs=${pool}/ROOT/default ${pool}
+    zpool set autoexpand=on ${pool}
+    zpool export ${pool}
+    geli detach ${md}p3
+    ${SRCTOP}/tools/boot/install-boot.sh -g ${geli} -s ${scheme} -f ${fs} -b ${bios} -d ${src} ${md}
+    mdconfig -d -u ${md}
 }
 
+# GELI+MBR is not a valid configuration
 mk_geli_mbr_ufs_legacy() {
 }
 


More information about the svn-src-all mailing list