diff options
| author | Allan Jude <allanjude@FreeBSD.org> | 2018-06-09 17:49:43 +0000 |
|---|---|---|
| committer | Allan Jude <allanjude@FreeBSD.org> | 2018-06-09 17:49:43 +0000 |
| commit | 712b4ca9ec38ea48eb8b7489ed66ee1772cc6bc9 (patch) | |
| tree | dd3fe32077e1c653a089e2b1b5bf1e86a7168bc5 /tools/boot | |
| parent | 2145d0ec65caacf5bafa1dd0277c76bff9969416 (diff) | |
Notes
Diffstat (limited to 'tools/boot')
| -rwxr-xr-x | tools/boot/install-boot.sh | 35 | ||||
| -rwxr-xr-x | tools/boot/rootgen.sh | 86 |
2 files changed, 119 insertions, 2 deletions
diff --git a/tools/boot/install-boot.sh b/tools/boot/install-boot.sh index e5201e050b28f..85c3a56e694bc 100755 --- a/tools/boot/install-boot.sh +++ b/tools/boot/install-boot.sh @@ -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 @@ -134,6 +165,10 @@ 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 mbr2=${DESTDIR}/boot/boot diff --git a/tools/boot/rootgen.sh b/tools/boot/rootgen.sh index 455d9dfe5313d..ca9bd28a47b82 100755 --- a/tools/boot/rootgen.sh +++ b/tools/boot/rootgen.sh @@ -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 |
