[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] Add HybridISO support for PyGrub2



On Tue, 2011-10-25 at 09:56 +0100, Philipp Hahn wrote:
> grub-mkrescue internally uses xorriso, which generates a
> so-called "hybrid ISO": The ISO images also contains a DOS partition table,
> which allows the identical ISO file to be stored on an USB stick for booting
> from it. This breaks PyGrub, since it (wrongly) detects the DOS partition 
> table and uses the first partition instead of the complete ISO file.

Is the problem here that, having detected a DOS partition, pygrub is
then unwilling to accept that the partition contains an ISO9660 file
system? Or is it that the DOS partition table covers something other
than the ISO9660 data? Where does the kernel we want to boot actually
live?

Is there some reference to the layout of an hybridiso? i.e. what is the
significance on 0x8006? What are the chances of false positives?

> Add a check to detech HybridISO files and fall back to unpartitioned 
> operation.
> 
> Signed-off-by: Philipp Hahn <hahn@xxxxxxxxxxxxx>
> --- a/tools/pygrub/src/pygrub
> +++ b/tools/pygrub/src/pygrub
> @@ -41,12 +41,16 @@ def enable_cursor(ison):
>          pass
>  
>  def is_disk_image(file):
> +    """Detect DOS partition table."""
>      fd = os.open(file, os.O_RDONLY)
> -    buf = os.read(fd, 512)
> +    buf = os.read(fd, 0x8006)
>      os.close(fd)
>  
>      if len(buf) >= 512 and \
>             struct.unpack("H", buf[0x1fe: 0x200]) == (0xaa55,):
> +        # HybridISO contains a DOS partition table for booting from USB 
> devices, but really is an ISO image
> +        if len(buf) >= 0x8006 and buf[0x8001:0x8006] == 'CD001':
> +            return False
>          return True
>      return False
>  



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.