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