Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 9 Jun 2018 17:49:44 +0000 (UTC)
From:      Allan Jude <allanjude@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r334888 - head/tools/boot
Message-ID:  <201806091749.w59HniGp015825@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: allanjude
Date: Sat Jun  9 17:49:43 2018
New Revision: 334888
URL: https://svnweb.freebsd.org/changeset/base/334888

Log:
  Add ZFS+GPT EFI and LEGACY+EFI to rootgen.sh and installboot.sh
  
  Reviewed by:	imp (maintainer)
  Sponsored by:	Klara Systems
  Differential Revision:	https://reviews.freebsd.org/D15700

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	Sat Jun  9 17:47:56 2018	(r334887)
+++ head/tools/boot/install-boot.sh	Sat Jun  9 17:49:43 2018	(r334888)
@@ -51,6 +51,37 @@ boot_nogeli_gpt_ufs_legacy() {
     exit 0
 }
 
+boot_nogeli_gpt_zfs_uefi() {
+    dev=$1
+    dst=$2
+
+    idx=$(find-part $dev "efi")
+    if [ -z "$idx" ] ; then
+	die "No efi ESP partition found"
+    fi
+    doit gpart bootcode -p ${efi2} -i $idx $dev
+    exit 0
+}
+
+boot_nogeli_gpt_zfs_both() {
+    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"
+    fi
+    doit gpart bootcode -p ${efi2} -i $idx $dev
+
+    idx=$(find-part $dev "freebsd-boot")
+    if [ -z "$idx" ] ; then
+	die "No freebsd-boot partition found"
+    fi
+    doit gpart bootcode -b ${gpt0} -p ${gptzfs2} -i $idx $dev
+    exit 0
+}
+
 boot_nogeli_mbr_zfs_legacy() {
     dev=$1
     dst=$2
@@ -133,6 +164,10 @@ dev=$1
 gpt0=${DESTDIR}/boot/pmbr
 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
+efi2=${DESTDIR}/boot/boot1.efifat
 
 # For MBR, we have lots of choices, but select boot0
 mbr0=${DESTDIR}/boot/boot0

Modified: head/tools/boot/rootgen.sh
==============================================================================
--- head/tools/boot/rootgen.sh	Sat Jun  9 17:47:56 2018	(r334887)
+++ head/tools/boot/rootgen.sh	Sat Jun  9 17:49:43 2018	(r334888)
@@ -119,9 +119,84 @@ EOF
 }
 
 mk_nogeli_gpt_zfs_uefi() {
+    src=$1
+    img=$2
+    mntpt=$3
+    geli=$4
+    scheme=$5
+    fs=$6
+    bios=$7
+    pool=nogeli-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
+    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p2
+    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}
+    df
+    # 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
+    ls -las ${mntpt}/boot
+    # 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_gpt_zfs_both() {
+    src=$1
+    img=$2
+    mntpt=$3
+    geli=$4
+    scheme=$5
+    fs=$6
+    bios=$7
+    pool=nogeli-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
+    zpool create -O mountpoint=none -R ${mntpt} ${pool} ${md}p3
+    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}
+    df
+    # 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
+    ls -las ${mntpt}/boot
+    # 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_ufs_legacy() {
@@ -257,7 +332,7 @@ qemu_amd64_both()
     sh=$2
 
     echo "qemu-system-x86_64 --drive file=${img},format=raw ${qser}" > $sh
-    echo "qemu-system-x86_64 -bios ~/bios/OVMF-X64.fd --drive file=${img},format=raw ${qser}" > $sh
+    echo "qemu-system-x86_64 -bios ~/bios/OVMF-X64.fd --drive file=${img},format=raw ${qser}" >> $sh
 }
 
 # arm
@@ -288,7 +363,7 @@ qemu_i386_both()
     sh=$2
 
     echo "qemu-system-i386 --drive file=${img},format=raw ${qser}" > $sh
-    echo "qemu-system-i386 -bios ~/bios/OVMF-X32.fd --drive file=${img},format=raw ${qser}" > $sh
+    echo "qemu-system-i386 -bios ~/bios/OVMF-X32.fd --drive file=${img},format=raw ${qser}" >> $sh
 }
 
 # mips
@@ -314,8 +389,15 @@ DESTDIR=${OBJDIR}/boot-tree
 rm -rf ${DESTDIR}
 mkdir -p ${DESTDIR}/boot/defaults
 mkdir -p ${DESTDIR}/boot/kernel
+cp /boot/boot0 ${DESTDIR}/boot
+cp /boot/boot0sio ${DESTDIR}/boot
+cp /boot/pmbr ${DESTDIR}/boot
+cp /boot/boot ${DESTDIR}/boot
 # XXX boot1 exists only on sparc64
 cp /boot/boot1 ${DESTDIR}/boot
+cp /boot/boot1.efifat ${DESTDIR}/boot
+cp /boot/gptboot ${DESTDIR}/boot
+cp /boot/gptzfsboot ${DESTDIR}/boot
 cp /boot/loader ${DESTDIR}/boot
 cp /boot/kernel/kernel ${DESTDIR}/boot/kernel
 echo -h -D -S115200 > ${DESTDIR}/boot.config



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201806091749.w59HniGp015825>