From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tim Deegan Subject: Re: [PATCH] Add HybridISO support for PyGrub2 Date: Tue, 25 Oct 2011 10:51:17 +0100 Message-ID: <20111025095117.GA421@ocelot.phlegethon.org> References: <201110251057.06774.hahn@univention.de> <1319534259.3385.224.camel@zakaz.uk.xensource.com> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Return-path: Content-Disposition: inline In-Reply-To: <1319534259.3385.224.camel@zakaz.uk.xensource.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Ian Campbell Cc: "xen-devel@lists.xensource.com" , Philipp Hahn List-Id: xen-devel@lists.xenproject.org At 10:17 +0100 on 25 Oct (1319537858), Ian Campbell wrote: > 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? The problem is that since the disk has a valid MBR partition table, pygrub tries all the partitions in that but _doesn't_ try the whole device (as it would if it couldn't find an MBR). > 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? Looking for "\001CD001" at offset 0x8000 is a pretty good way to identify an ISO9660 image (e.g. I think that's how magic(5) does it). This patch doesn't _quite_ do that, and in any case this is the wrong place to do it. The right fix to have get_partition_offsets() detect ISO9660 images and add '[0]' to whatever else it comes up with. Cheers, Tim.