On Fri, 23 Mar 2018, at 21:56, Benno Rice wrote:
> Author: benno
> Date: Fri Mar 23 20:56:18 2018
> New Revision: 331463
> URL: https://svnweb.freebsd.org/changeset/base/331463
> 
> Log:
>   Allow makefs to properly tag UEFI El Torito boot images. Use them in 
> amd64 ISOs.
>   
>   UEFI booting requires an EFI System Partition (ESP). On most storage devices
>   this will be in a specific partition type. To allow booting from CD/ISO
>   filesystems, UEFI will look for an ESP in the form of a FAT filesystem image
>   embedded in the image. Historically FreeBSD has added one of these to its
>   amd64 ISO images but marked it as simply another i386 boot image. Luckily 
> for
>   us most UEFI implementations are rather forgiving and work this out for us.
>   
>   This change adds the ability to mark a boot image as being a UEFI image. It
>   also modifies our ISO generation to use this marking for the UEFI image we
>   embed.
>   
>   Reported by:        Thomas Schmitt <scdbac...@gmx.net>
>   Reviewed by:        emaste, imp
>   MFC after:  1 week
>   Sponsored by:       iXsystems, Inc.
>   Differential Revision:      https://reviews.freebsd.org/D14809
> 
> Modified:
>   head/release/amd64/mkisoimages.sh
>   head/usr.sbin/makefs/cd9660/cd9660_eltorito.c
>   head/usr.sbin/makefs/cd9660/cd9660_eltorito.h
> 
> Modified: head/release/amd64/mkisoimages.sh
> ==============================================================================
> --- head/release/amd64/mkisoimages.sh Fri Mar 23 20:32:54 2018        
> (r331462)
> +++ head/release/amd64/mkisoimages.sh Fri Mar 23 20:56:18 2018        
> (r331463)
> @@ -38,7 +38,7 @@ if [ "$1" = "-b" ]; then
>       umount efi
>       rmdir efi
>       mdconfig -d -u $device
> -     bootable="-o bootimage=i386;efiboot.img -o no-emul-boot $bootable"
> +     bootable="-o bootimage=efi;efiboot.img -o no-emul-boot $bootable"
>       
>       shift
>  else
> 
> Modified: head/usr.sbin/makefs/cd9660/cd9660_eltorito.c
> ==============================================================================
> --- head/usr.sbin/makefs/cd9660/cd9660_eltorito.c     Fri Mar 23 20:32:54 
> 2018  (r331462)
> +++ head/usr.sbin/makefs/cd9660/cd9660_eltorito.c     Fri Mar 23 20:56:18 
> 2018  (r331463)
> @@ -104,9 +104,12 @@ cd9660_add_boot_disk(iso9660_disk *diskStructure, 
> cons
>       else if (strcmp(sysname, "macppc") == 0 ||
>                strcmp(sysname, "mac68k") == 0)
>               new_image->system = ET_SYS_MAC;
> +     else if (strcmp(sysname, "efi") == 0 ||
> +              strcmp(sysname, "uefi") == 0)
> +             new_image->system = ET_SYS_UEFI;
>       else {
>               warnx("boot disk system must be "
> -                   "i386, powerpc, macppc, or mac68k");
> +                   "efi, i386, powerpc, macppc, mac68k");
>               free(temp);
>               free(new_image);
>               return 0;
> @@ -338,12 +341,12 @@ cd9660_setup_boot(iso9660_disk *diskStructure, int 
> fir
>       int used_sectors;
>       int num_entries = 0;
>       int catalog_sectors;
> -     struct boot_catalog_entry *x86_head, *mac_head, *ppc_head,
> +     struct boot_catalog_entry *x86_head, *mac_head, *ppc_head, *uefi_head,
>               *valid_entry, *default_entry, *temp, *head, **headp, *next;
>       struct cd9660_boot_image *tmp_disk;
>  
>       headp = NULL;
> -     x86_head = mac_head = ppc_head = NULL;
> +     x86_head = mac_head = ppc_head = uefi_head = NULL;
>  
>       /* If there are no boot disks, don't bother building boot information */
>       if (TAILQ_EMPTY(&diskStructure->boot_images))
> @@ -421,6 +424,9 @@ cd9660_setup_boot(iso9660_disk *diskStructure, int fir
>                       break;
>               case ET_SYS_MAC:
>                       headp = &mac_head;
> +                     break;
> +             case ET_SYS_UEFI:
> +                     headp = &uefi_head;
>                       break;
>               default:
>                       warnx("%s: internal error: unknown system type",
> 
> Modified: head/usr.sbin/makefs/cd9660/cd9660_eltorito.h
> ==============================================================================
> --- head/usr.sbin/makefs/cd9660/cd9660_eltorito.h     Fri Mar 23 20:32:54 
> 2018  (r331462)
> +++ head/usr.sbin/makefs/cd9660/cd9660_eltorito.h     Fri Mar 23 20:56:18 
> 2018  (r331463)
> @@ -44,6 +44,7 @@
>  #define      ET_SYS_X86      0
>  #define      ET_SYS_PPC      1
>  #define      ET_SYS_MAC      2
> +#define      ET_SYS_UEFI     0xef
>  
>  #define ET_BOOT_ENTRY_SIZE 0x20
>  
> _______________________________________________
> svn-src-head@freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/svn-src-head
> To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"


Hi Benno,

This breaks `make -DNOPORTS -s memstick ftp cdrom` for me. Rolling back to 
r331462 is the last working commit.

This is the failure I see:

819200 bytes transferred in 0.007027 secs (116577317 bytes/sec)
newfs_msdos: cannot get number of sectors per track: Operation not supported
newfs_msdos: cannot get number of heads: Operation not supported
/dev/md0: 1557 sectors in 1557 FAT12 clusters (512 bytes/cluster)
BytesPerSec=512 SecPerClust=1 ResSectors=1 FATs=2 RootDirEnts=512 Sectors=1600 
Media=0xf8 FATsecs=5 SecPerTrack=63 Heads=1 HiddenSecs=0
makefs: boot disk system must be i386, powerpc, macppc, or mac68k
Usage: makefs [-xZ] [-B endian] [-b free-blocks] [-d debug-mask]
        [-F mtree-specfile] [-f free-files] [-M minimum-size] [-m maximum-size]
        [-N userdb-dir] [-O offset] [-o fs-options] [-R roundup-size]
        [-S sector-size] [-s image-size] [-T <timestamp/file>] [-t fs-type]
        image-file directory | manifest [extra-directory ...]

cd9660 specific options:
        l,            isolevel  ISO Level
...


for completeness, this is my build script:

#!/bin/sh -ex
date -u +%Y%m%d-%H%M
sudo kldload filemon || /usr/bin/true
echo 'WITH_CCACHE_BUILD=yes'    > /etc/src.conf
echo 'WITH_META_MODE=yes'       > /etc/src-env.conf
NCPU=$(sysctl -n hw.ncpu)
cd /usr/src
sudo zfs rollback -rRf embiggen/usr/obj/release@empty
git reset --hard
git clean -fdx
sudo zfs snapshot \
  -r envy/usr/src@$(date -u +%Y%m%d-%H%M:bebuild-$(git rev-parse --verify 
--short=7 HEAD)) \
  || /usr/bin/true
time make -j${NCPU} buildworld -s
echo DONE BW
date -u +%Y%m%d-%H%M
time make -j${NCPU} buildkernel -s
echo DONE BK
date -u +%Y%m%d-%H%M
sudo time /usr/bin/env NO_PKG_UPGRADE=1 /usr/src/tools/build/beinstall.sh
sudo zfs set canmount=noauto \
    envy/ROOT/$(beadm list  -H | egrep '\bN*R\b' | cut -f 1)
echo DONE BE
date -u +%Y%m%d-%H%M
cd /usr/src/release
time make -DNOPORTS -s memstick ftp cdrom
echo DONE IMG
echo y| poudriere jail -d -j current_amd64
poudriere jail -c -j current_amd64 -v 12.0-CURRENT -a amd64 -m \
  tar=/usr/obj/usr/src/amd64.amd64/release/base.txz
echo DONE POUDRIERE
date -u +%Y%m%d-%H%M
echo DONE ALL
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to