Package: virtinst Version: 1:1.0.1-3 Followup-For: Bug #579138 Hello,
attached it an admittedly ugly patch[1] to make it possible to start an installation from debian-jessie-DI-rc1-amd64-DVD-1.iso. The patch applies on top of debian/1%1.0.1-4. Best regards Uwe [1] I think part of the reason that the patch is ugly is that virtinst is ugly, too :-)
>From e2d963252bcb155fb09792dcfea4d239ea2bf51c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= <u.kleine-koe...@pengutronix.de> Date: Fri, 27 Feb 2015 21:09:24 +0100 Subject: [PATCH] urlfetcher: support installing for Debian iso images The layout on Debian installer iso images is different from the layout on the web servers that provide the netinstall images. So handle move handling the netlayout into a dedicated function and add one for the isolayout. With this change applied it's possible to run: virt-install --location /path/to/mountpoint/of/installer.iso ... --- virtinst/urlfetcher.py | 81 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 54 insertions(+), 27 deletions(-) diff --git a/virtinst/urlfetcher.py b/virtinst/urlfetcher.py index 0d9a066..0cfe8c9 100644 --- a/virtinst/urlfetcher.py +++ b/virtinst/urlfetcher.py @@ -881,40 +881,56 @@ class DebianDistro(Distro): self.arch = 'i386' self._installer_name = self.name.lower() + "-" + "installer" - self._prefix = 'current/images' - self._set_media_paths() def _set_media_paths(self): - # Use self._prefix to set media paths - self._boot_iso_paths = ["%s/netboot/mini.iso" % self._prefix] - hvmroot = "%s/netboot/%s/%s/" % (self._prefix, - self._installer_name, - self._treeArch) - xenroot = "%s/netboot/xen/" % self._prefix - self._hvm_kernel_paths = [(hvmroot + "linux", hvmroot + "initrd.gz")] - self._xen_kernel_paths = [(xenroot + "vmlinuz", - xenroot + "initrd.gz")] + def set_netlayout(self, prefix): + if not self._fetchAndMatchRegex("%s/MANIFEST" % prefix, + ".*%s.*" % self._installer_name): + logging.debug("Regex didn't match, not a %s distro", self.name) + self._paths_ok = False + return + + self._boot_iso_paths = ["%s/netboot/mini.iso" % prefix] + hvmroot = "%s/netboot/%s/%s/" % (prefix, + self._installer_name, + self._treeArch) + xenroot = "%s/netboot/xen/" % prefix + self._hvm_kernel_paths = [(hvmroot + "linux", hvmroot + "initrd.gz")] + self._xen_kernel_paths = [(xenroot + "vmlinuz", + xenroot + "initrd.gz")] + self._paths_ok = True + self._prefix = prefix + + def set_isolayout(self): + if self._treeArch == "i386": + installdir = 'install.386/' + elif self._treeArch == "amd64": + installdir = 'install.amd/' + else: + self._paths_ok = False + return - def isValidStore(self): - if self.fetcher.hasFile("%s/MANIFEST" % self._prefix): - # For regular trees - pass - elif self.fetcher.hasFile("daily/MANIFEST"): - # For daily trees - self._prefix = "daily" - self._set_media_paths() - else: - return False + self._hvm_kernel_paths = [(installdir + "vmlinuz", installdir + "initrd.gz")] + self._xen_kernel_paths = [(installdir + "xen/vmlinuz", installdir + "xen/initrd.gz")] + self._paths_ok = True + self._prefix = installdir - filename = "%s/MANIFEST" % self._prefix - regex = ".*%s.*" % self._installer_name - if not self._fetchAndMatchRegex(filename, regex): - logging.debug("Regex didn't match, not a %s distro", self.name) - return False + if hasattr(self, '_paths_ok'): + return + + if self.fetcher.hasFile("current/images/MANIFEST"): + set_netlayout(self, 'current/images') + elif self.fetcher.hasFile("daily/MANIFEST"): + set_netlayout(self, 'daily') + elif self._fetchAndMatchRegex(".disk/info", "^Debian GNU"): + set_isolayout(self) self.os_variant = self._detect_osdict_from_url() - return True + def isValidStore(self): + self._set_media_paths() + + return self._paths_ok ################################ # osdict autodetection helpers # @@ -939,6 +955,17 @@ class UbuntuDistro(DebianDistro): name = "Ubuntu" urldistro = "ubuntu" + def _set_media_paths(): + # Use self._prefix to set media paths + self._boot_iso_paths = ["%s/netboot/mini.iso" % self._prefix] + hvmroot = "%s/netboot/%s/%s/" % (self._prefix, + self._installer_name, + self._treeArch) + xenroot = "%s/netboot/xen/" % self._prefix + self._hvm_kernel_paths = [(hvmroot + "linux", hvmroot + "initrd.gz")] + self._xen_kernel_paths = [(xenroot + "vmlinuz", + xenroot + "initrd.gz")] + def isValidStore(self): if self.fetcher.hasFile("%s/MANIFEST" % self._prefix): # For regular trees -- 2.1.4