svn commit: r331463 - in head: release/amd64 usr.sbin/makefs/cd9660

Dave Cottlehuber dch at skunkwerks.at
Sun Mar 25 08:54:13 UTC 2018


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 <scdbackup at 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 at freebsd.org mailing list
> https://lists.freebsd.org/mailman/listinfo/svn-src-head
> To unsubscribe, send any mail to "svn-src-head-unsubscribe at 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 at 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


More information about the svn-src-head mailing list