WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

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

To: Philipp Hahn <hahn@xxxxxxxxxxxxx>
Subject: Re: [Xen-devel] [PATCH] Add HybridISO support for PyGrub2
From: Ian Campbell <Ian.Campbell@xxxxxxxxxx>
Date: Tue, 25 Oct 2011 10:17:38 +0100
Cc: "xen-devel@xxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxx>
Delivery-date: Tue, 25 Oct 2011 02:18:51 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <201110251057.06774.hahn@xxxxxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Organization: Citrix Systems, Inc.
References: <201110251057.06774.hahn@xxxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
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